/
command.py
104 lines (76 loc) · 2.95 KB
/
command.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import utils
from vector import Vector3
import math
class Target(object):
def __init__(self, ent, location):
self.ent = ent
self.location = location
class Command(object):
MOVEDISTANCETHRESHOLD = 10000
def __init__(self, ent, target):
self.ent = ent
self.target = target
self.name = None
threshold = self.ent.length * 5
self.MOVEDISTANCETHRESHOLD = threshold*threshold
def done(self):
return False
def init(self):
pass
def tick(self, dt):
pass
import math
class Move(Command):
def __init__(self, ent, target):
Command.__init__(self, ent, target)
self.name = "Move"
self.name = " will move ", self.target
def init(self):
diff = self.target.location - self.ent.pos
self.ent.desiredHeading = utils.fixAngle(- math.atan2(diff.z, diff.x))
self.ent.desiredSpeed = self.ent.maxSpeed
def done(self):
return self.ent.pos.squaredDistance(self.target.location) < self.MOVEDISTANCETHRESHOLD
def tick(self, dt):
squaredDistance = self.target.location.squaredDistance(self.ent.pos)
if squaredDistance < self.MOVEDISTANCETHRESHOLD:
self.ent.desiredSpeed = 0
self.name = " will move ", self.target
#Droping Box
class Move2(Command):
def __init__(self, ent, target):
Command.__init__(self, ent, target)
self.name = "Move"
self.name = " will move ", self.target
def init(self):
diff = self.target.location - self.ent.pos
#self.ent.desiredHeading = utils.fixAngle(- math.atan2(diff.y, diff.x))
#self.ent.desiredSpeed = self.ent.maxSpeed
self.ent.vel.y -= self.ent.deltaSpeed
def done(self):
return self.ent.pos.squaredDistance(self.target.location) < self.MOVEDISTANCETHRESHOLD
def tick(self, dt):
squaredDistance = self.target.location.squaredDistance(self.ent.pos)
if squaredDistance < self.MOVEDISTANCETHRESHOLD:
self.ent.desiredSpeed = 0
class Ram(Command):
def __init__(self, ent, target):
Command.__init__(self, ent, target)
self.name = "Ram"
print self.ent.uiname, " will ram ", self.target.ent.uiname
pass
def init(self):
self.ent.desiredSpeed = self.ent.maxSpeed
def done(self):
return self.ent.pos.squaredDistance(self.target.ent.pos) < self.ent.length
def tick(self, dt):
diff = self.target.ent.pos - self.ent.pos
relativeVel = self.target.ent.vel - self.ent.vel
timeToClose = diff.length()/(relativeVel.length() + 1)
aimLocation = self.target.ent.pos + self.target.ent.vel * timeToClose
diff = aimLocation - self.ent.pos
self.ent.desiredHeading = utils.fixAngle(- math.atan2(diff.z, diff.x))
if self.done():
self.ent.desiredSpeed = 0
else:
self.ent.desiredSpeed = self.ent.maxSpeed