[libGDX 0.9.7][2D] Obliczanie kąta obrotu/ celowanie w wskazany punkt


Czyli jeśli chcemy aby nasi wrogowie mogli celować w nas albo naszych sojuszników, albo chcemy by nasza postać patrzyła w kierunku kursora myszki, czy dla jakiś innych celów, możecie wykorzystać poniższy kod.






private float DegreesToEnemy(Solider my, Vector2 enemy)
      {
            double x,y, tg;
            x = enemy.x - my.pozycja.x;
            y = enemy.y - my.pozycja.y;
            tg = Math.atan(y / x) * math.radiansToDegrees;
            if(tg >= 0) // I albo III połowa układu kartezjańskiego
            {
                  if(x <= 0) // należy do III
                  {
                        return 90 +  Math.abs((float)tg);
                  }
                  else // należy do I
                  {
                        return (float)tg + 270;
                       
                  }
                       
            }
            else // II albo IV
            {
                  if(x <= 0) // należy do IV
                  {
                        return  (90 - Math.abs((float)tg));
                                  
                  }
                  else // należy do II
                  {
                        return 180 + (90 - Math.abs((float)tg));
                  }
            }
           
           
      }
     



Powyższy kod zwraca kąt o jaki kierunek należy obrócić Sprita/Texture aby patrzał prosto na punkt obrany jako Vector2 enemy.
UWAGA: Stopnie rosną w kierunku przeciwnym do kierunku zegara, ponieważ tak oblicza się obrót w libGDX. Jeśli chcemy zamienić to na ruch zgodny z ruchem wskazówek zegara należy zastosować taki zapis:
(360 - DegreesToEnemy)
UWAGA: Statyczna metoda Math.atan()pochodzi z klasy systemowej a nie tej z libGDX która to u mnie nazywa się math.