• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Pointeur et entité

    Sans suite
    3
    15
    2867
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • mindany2
      mindany2 dernière édition par

      Salut (et oui j’allais pas vous laisser tranquille très longtemps)
      J’ai quelques petits problèmes dans une portion de code :

      
      EntitySonicFX fx = null;
      final IEntitySelector livingFilter = new SonicEntityFilter();
      
      List entityTagetList = player.worldObj.selectEntitiesWithinAABB(Entity.class, player.boundingBox.expand(64.0D, 64.0D, 64.0D), livingFilter);
      for(int i = 0; i < entityTagetList.size(); i++)
      {
      Entity entityTarget = (Entity)entityTagetList.get(i);
      if(entityTarget != player && entityTarget instanceof EntityLivingBase)
      {
      EntityLivingBase entityLivingTarget = (EntityLivingBase)entityTarget;
      Vec3 vec3 = player.getLook(1.0F).normalize();
      Vec3 vec31 = entityLivingTarget.worldObj.getWorldVec3Pool().getVecFromPool(entityLivingTarget.posX - player.posX, entityLivingTarget.boundingBox.minY + (double)(entityLivingTarget.height / 2.0F) - (player.posY + (double)player.getEyeHeight()), entityLivingTarget.posZ - player.posZ);
      double d0 = vec31.lengthVector();
      vec31 = vec31.normalize();
      double d1 = vec3.dotProduct(vec31);
      if(d1 > 1.0D - 0.025D / d0 && player.canEntityBeSeen(entityLivingTarget) && !player.onGround)
      {
      if(!particleSpawn){
      fx = new EntitySonicFX(Minecraft.getMinecraft().theWorld, entityLivingTarget.posX, entityLivingTarget.boundingBox.maxY / 2, entityLivingTarget.posZ);
      FMLClientHandler.instance().getClient().effectRenderer.addEffect((EntityFX) fx);
      particleSpawn = true;
      }
      if(particleSpawn && fx != null){
      fx.setPosition(entityLivingTarget.posX, (entityLivingTarget.posY + (entityLivingTarget.boundingBox.maxY - entityLivingTarget.posY) / 2), entityLivingTarget.posZ);
      }
      }
      else{
      if(fx != null){
      fx.setDead();
      fx = null;
      particleSpawn = false;
      System.out.println(particleSpawn);
      }
      }
      }
      

      En première partie j’aimerais pouvoir augmenter “l’angle de vue” du viseur (donc en faite il faut plus vraiment visé quoi), de plus j’aimerais réduire la distance d’où on peut voir l’entité (quand l’entité est à 200 blocs je ne vois plus vraiment l’intérêt 😛 ), il me semble avoir déjà vu quelque part que ça se régler ici

      d1 > 1.0D - 0.025D / d0
      

      Mais n’étant pas sur je préfère m’informer (et comprendre ^^)

      En seconde partie, je ne comprends pas pourquoi le else est déclenché lorsque l’on regarde encore l’entité, de plus je pense que je n’ai pas utilisé la meilleur méthode pour tuer l’entité (par exemple

      fx.setDead();
      fx = null;
      

      me semble pas vraiment la meilleure idée)

      Merci d’avance ^^

      ^^

      1 réponse Dernière réponse Répondre Citer 0
      • mindany2
        mindany2 dernière édition par

        Personne n’a d’idée 😮 ?
        Je pensais pourtant que c’était moins compliqué mon dernier problème ^^’

        ^^

        1 réponse Dernière réponse Répondre Citer 0
        • JustPingo
          JustPingo dernière édition par

          Est-ce que tu pourrais clarifier un peu tes noms de variables ?
          Parce que j’ai du mal à identifier à quoi elles correspondent…


          Über Networking Antennas

          1 réponse Dernière réponse Répondre Citer 0
          • mindany2
            mindany2 dernière édition par

            En soit le viseur est récupéré de là : https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/items/ItemNanomiteArrowGun.java#L127-L144
            Après je l’ai modifié “à ma sauce” pour créer une particule
            Ce que j’en comprends (je ne connais pas très bien Vec3) c’est qu’il récupère toute les entités vues par le joueur ensuite il vérifie si c’est une EntityLivingBase (ex:une vache) ensuite il doit vérifier si c’est bien au centre de l’écran, vérifie si il n’y a pas de bloc et si le joueur n’est pas au sol afin de faire spawn la particle qui est censé être tuer dès que le joueur touche le sol et si le mob bouge pendant ce temps la particule est censé se téléporter à ses coordonnées

            ^^

            1 réponse Dernière réponse Répondre Citer 0
            • JustPingo
              JustPingo dernière édition par

              Et non ! Là il récupère tous les mobs AUTOUR du joueur. Ca explique tous tes problèmes.


              Über Networking Antennas

              1 réponse Dernière réponse Répondre Citer 0
              • mindany2
                mindany2 dernière édition par

                Hum oui et non, c’est bien ce qui est fait mais au final qu’une seul entité ressort et c’est celle que l’on fixe donc je ne vois pas le rapport ^^’ sauf peut-être qu’en éditant

                ​List entityTagetList = player.worldObj.selectEntitiesWithinAABB(Entity.class, player.boundingBox.expand(64.0D, 64.0D, 64.0D), livingFilter);
                

                ça me permettera d’avoir un rayon plus petit

                ^^

                1 réponse Dernière réponse Répondre Citer 0
                • JustPingo
                  JustPingo dernière édition par

                  En fait, je me rends compte que je disais un peu n’importe quoi. C’est pas autour du joueur, mais autour de sa boundingBox, je sais pas lire. Mais ça revient au même, 64.0D c’est beaucoup trop large pour ce que tu veux faire. Et de toute façon, utiliser une méthode comme ça c’est pas adapté pour cet usage. Tu ferrais mieux de te baser sur l’axe de regard pour calculer la zone vue.


                  Über Networking Antennas

                  1 réponse Dernière réponse Répondre Citer 0
                  • mindany2
                    mindany2 dernière édition par

                    Tu ferrais mieux de te baser sur les coordonnées précises du joueur pour calculer la zone action par rapport à l’axe de regard. Mais attention, si ça se trouve y a plus simple.

                    Bah à ce niveau là je n’y connais pas grand chose en faite
                    L’axe du regarde je ne sais pas quelles sont les fonctions pour récupéré les entités vu avec

                    ^^

                    1 réponse Dernière réponse Répondre Citer 0
                    • JustPingo
                      JustPingo dernière édition par

                      Non, je veux dire tu calcules grâce à l’axe de regard une AABB.


                      Über Networking Antennas

                      1 réponse Dernière réponse Répondre Citer 0
                      • mindany2
                        mindany2 dernière édition par

                        En ligne de code ça donne quoi à peu près ^^’ ?

                        ^^

                        1 réponse Dernière réponse Répondre Citer 0
                        • JustPingo
                          JustPingo dernière édition par

                          Bah c’est à toi de voir, j’ai jamais fait concrètement. Mais en gros tu dois déterminer quelle est la largeur en bloc de ce que tu vois le plus loin entre le bord gauche et le bord droit de l’écran. Ensuite par rapport à l’axe de regard du joueur tu détermines quelle zone cela représente en AABB. Et après tu fais les calculs habituels. Mais ça c’est sans compter si il y a des murs ou non devant le joueur, etc…

                          Mais attention, c’est surement pas la chose la plus optimisée d’autant que si c’est mal fait ça peut être très très lourd. Tu ne devrais pas faire comme ça, mais au moins dit toi que ça existe.


                          Über Networking Antennas

                          1 réponse Dernière réponse Répondre Citer 0
                          • T
                            toss dernière édition par

                            Allez je suis généreux ce soir 🙂

                            Je te renvoie vers le repo de mon mod, ici (c’est ma solution, peut etre pas la meilleur mais le rendu est tres bien):

                            Ligne 74, ma fonction: public Entity getLookingEntity(double range); (range correspondant à la distance de l’entité)

                            [size=medium]https://github.com/iToss/Magic_Crusade_Mod/blob/master/main/java/fr/toss/common/player/spells/Spell.java

                            1 réponse Dernière réponse Répondre Citer 0
                            • mindany2
                              mindany2 dernière édition par

                              Merci mais le résultat est le même ^^ peut-être en un peu mieux
                              Ce que j’entends par “le même” c’est que j’aimerais que ce soit l’entité la plus proche du joueur dans (à peu près) tout le champ de vision visible à la première personne et même en mettant

                              player.boundingBox.expand(10D, 10D, 10D)
                              

                              j’arrive à viser des entités lointaines

                              ^^

                              1 réponse Dernière réponse Répondre Citer 0
                              • mindany2
                                mindany2 dernière édition par

                                Pas d’idée ?

                                ​d1 > 1.0D - 0.025000000000000001D / d
                                

                                Ce sont ces chiffres à changer qui me posent problèmes je ne sais pas quoi mettre :s je ne connais pas les vecteur

                                ^^

                                1 réponse Dernière réponse Répondre Citer 0
                                • mindany2
                                  mindany2 dernière édition par

                                  Ok donc après avoir essayé plusieurs possibilités et après avoir bien rager dessus 😛 j’ai enfin réussi à faire quelque chose qui marche
                                  Maintenant il ne reste “plus qu’à” faire en sorte que ce soit sur tout ce que peux voir le joueur et non le centre et en revanche là je ne sais pas du tout où chercher ne connaissant pas les Vec3

                                  ​
                                  Vec3 vec3d;
                                  Vec3 vec3d1;
                                  
                                  double d;
                                  
                                  double d1;
                                  
                                  double a;
                                  
                                  double b;
                                  
                                  double c;
                                  
                                  vec3d = thePlayer.getLook(1.0F).normalize();
                                  
                                  vec3d1 = Vec3.createVectorHelper(entity.posX - thePlayer.posX, (entity.boundingBox.minY + (double)(entity.height / 2.0F)) - (thePlayer.posY + (double)thePlayer.getEyeHeight()), entity.posZ - thePlayer.posZ);
                                  
                                  d = vec3d1.lengthVector();
                                  
                                  vec3d1 = vec3d1.normalize();
                                  
                                  d1 = vec3d.dotProduct(vec3d1);
                                  
                                  if (d1 > 1.0D - 0.025000000000000001D / d)
                                  
                                  {
                                  
                                  System.out.println("Looking at " + entity);
                                  
                                  return (entity);
                                  
                                  }
                                  
                                  }
                                  

                                  Si quelqu’un à une idée et/ou peux m’expliquer Vec3 ce serait vraiment parfait 😄

                                  ^^

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • 1 / 1
                                  • Premier message
                                    Dernier message
                                  Design by Woryk
                                  Contact / Mentions Légales

                                  MINECRAFT FORGE FRANCE © 2018

                                  Powered by NodeBB