1 /*
2 * Weapon.cpp
3 * Copyright (C) 2007 by Bryan Duff <duff0097@gmail.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 * USA
19 */
20
21 #include "Weapon.h"
22
FindRotationGun(XYZ start,XYZ target)23 void Weapon::FindRotationGun(XYZ start, XYZ target)
24 {
25 XYZ temppoint1, temppoint2, tempforward;
26 float distance;
27
28 temppoint1 = start;
29 temppoint2 = target;
30 distance = findDistance(temppoint1, temppoint2);
31 gunrotate2 = asin((temppoint1.y - temppoint2.y) / distance) * RAD2DEG;
32 temppoint1.y = 0;
33 temppoint2.y = 0;
34 gunrotate1 =
35 acos((temppoint1.z - temppoint2.z) / findDistance(temppoint1,
36 temppoint2)) * RAD2DEG;
37 if(temppoint1.x > temppoint2.x)
38 gunrotate1 = 360 - gunrotate1;
39 tempforward = target - start;
40 tempforward = DoRotation(tempforward, -90, 0, 0);
41 tempforward = DoRotation(tempforward, 0, gunrotate1 - 90, 0);
42 tempforward = DoRotation(tempforward, 0, 0, gunrotate2 - 90);
43 tempforward.y = 0;
44 Normalise(&tempforward);
45 gunrotate3 = acos(0 - tempforward.z) * RAD2DEG;
46 if(0 > tempforward.x)
47 gunrotate3 = 360 - gunrotate3;
48 }
49
50