Mercurial > projects > openmelee
comparison ai.d @ 13:e1004697cae1
tracking
author | zzzzrrr <mason.green@gmail.com> |
---|---|
date | Mon, 23 Mar 2009 08:02:23 -0400 |
parents | 2ecd16840900 |
children | af1e8620f027 |
comparison
equal
deleted
inserted
replaced
12:2ecd16840900 | 13:e1004697cae1 |
---|---|
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 */ | 30 */ |
31 module openmelee.ai; | 31 module openmelee.ai; |
32 | 32 |
33 import tango.io.Stdout : Stdout; | 33 import tango.io.Stdout : Stdout; |
34 import tango.math.Math : atan2; | 34 import tango.math.Math : atan2, abs, PI; |
35 | 35 |
36 import blaze.common.bzMath: bzVec2; | 36 import blaze.common.bzMath: bzVec2; |
37 import openmelee.steer : Steer; | 37 import openmelee.steer : Steer; |
38 import openmelee.ship : Ship; | 38 import openmelee.ship : Ship; |
39 | 39 |
52 void move(Ship enemy) { | 52 void move(Ship enemy) { |
53 | 53 |
54 steer.update(); | 54 steer.update(); |
55 bzVec2 st; | 55 bzVec2 st; |
56 st = steer.steerForPursuit(enemy.state, maxPredictionTime); | 56 st = steer.steerForPursuit(enemy.state, maxPredictionTime); |
57 //ship.thrust(); | 57 |
58 ship.state.target = st; | 58 ship.state.target = st; |
59 float angle = atan2(st.x, st.y); | 59 float angle = atan2(st.x, st.y); |
60 | |
61 Stdout("Target angle: ")(angle).newline; | |
62 | |
63 float x = ship.state.forward.x; | |
64 float y = ship.state.forward.y; | |
65 float angle2 = atan2(x,y); | |
66 | |
60 | 67 |
61 if(angle < 0) { | 68 float rel = angle2 - angle; |
62 ship.turnLeft(); | 69 |
63 } else { | 70 if(abs(rel) > PI/8) { |
64 ship.turnRight(); | 71 if(angle < angle2) { |
65 } | 72 ship.turnLeft(); |
73 ship.state.turn = true; | |
74 } else { | |
75 ship.state.turn = true; | |
76 ship.turnRight(); | |
77 } | |
78 } else { | |
79 ship.rBody.angularVelocity = 0.0f; | |
80 ship.state.turn = false; | |
81 } | |
82 | |
83 ship.state.enemyAngle = rel; | |
84 | |
85 float range = (ship.state.position - enemy.state.position).length; | |
86 if(range > 20 && !ship.state.turn) { | |
87 //ship.thrust(); | |
88 } | |
66 } | 89 } |
67 | 90 |
68 } | 91 } |