* Returns the direction from this unit to a given point. * @param point given position. * @return direction. */
| 790 | * @return direction. |
| 791 | */ |
| 792 | int BattleUnit::directionTo(const Position &point) const |
| 793 | { |
| 794 | double ox = point.x - _pos.x; |
| 795 | double oy = point.y - _pos.y; |
| 796 | double angle = atan2(ox, -oy); |
| 797 | // divide the pie in 4 angles each at 1/8th before each quarter |
| 798 | double pie[4] = {(M_PI_4 * 4.0) - M_PI_4 / 2.0, (M_PI_4 * 3.0) - M_PI_4 / 2.0, (M_PI_4 * 2.0) - M_PI_4 / 2.0, (M_PI_4 * 1.0) - M_PI_4 / 2.0}; |
| 799 | int dir = 0; |
| 800 | |
| 801 | if (angle > pie[0] || angle < -pie[0]) |
| 802 | { |
| 803 | dir = 4; |
| 804 | } |
| 805 | else if (angle > pie[1]) |
| 806 | { |
| 807 | dir = 3; |
| 808 | } |
| 809 | else if (angle > pie[2]) |
| 810 | { |
| 811 | dir = 2; |
| 812 | } |
| 813 | else if (angle > pie[3]) |
| 814 | { |
| 815 | dir = 1; |
| 816 | } |
| 817 | else if (angle < -pie[1]) |
| 818 | { |
| 819 | dir = 5; |
| 820 | } |
| 821 | else if (angle < -pie[2]) |
| 822 | { |
| 823 | dir = 6; |
| 824 | } |
| 825 | else if (angle < -pie[3]) |
| 826 | { |
| 827 | dir = 7; |
| 828 | } |
| 829 | else if (angle < pie[0]) |
| 830 | { |
| 831 | dir = 0; |
| 832 | } |
| 833 | return dir; |
| 834 | } |
| 835 | |
| 836 | /** |
| 837 | * Returns the soldier's amount of time units. |