bzr branch
http://9ix.org/bzr/traderous
65
by Josh C
enemy is back |
1 |
-- player = 300 accel, 400 velLimit |
2 |
local accelLimit = 150 |
|
3 |
local velLimit = 200 |
|
7
by Josh C
enemy |
4 |
Enemy = Tile:extend { |
5 |
image = 'data/enemy.png', |
|
6 |
maxVelocity = {x=velLimit,y=velLimit}, |
|
7 |
minVelocity = {x=-velLimit, y=-velLimit}, |
|
65
by Josh C
enemy is back |
8 |
lastFired = 0, |
9 |
onNew = function (self) |
|
10 |
self.thrust = Tile:new{image = 'data/thrust.png'} |
|
66
by Josh C
enemy thrust |
11 |
--the.app.view:add(self.thrust) |
69
by Josh C
enemy shields and death |
12 |
self.shield = Shield:new{ship = self} |
65
by Josh C
enemy is back |
13 |
end, |
14 |
onStartFrame = function (self) |
|
15 |
||
16 |
local pvec = vector.new(the.player.x - self.x, |
|
17 |
the.player.y - self.y) |
|
18 |
||
67
by Josh C
rotate enemy ship slower |
19 |
|
20 |
local pAngle = math.atan2(pvec.y, pvec.x) |
|
21 |
local aDiff = self.rotation - pAngle |
|
22 |
||
23 |
while aDiff < (-math.pi) do |
|
24 |
--print(aDiff .. ' < -π') |
|
25 |
aDiff = aDiff + 2 * math.pi |
|
26 |
end |
|
27 |
while aDiff > math.pi do |
|
28 |
--print(aDiff .. ' > π') |
|
29 |
aDiff = aDiff - 2 * math.pi |
|
30 |
end |
|
31 |
||
32 |
if math.abs(aDiff) > 0.1 then |
|
33 |
-- rotation really shouldn't be negative. I |
|
34 |
-- don't understand why that is. :\ |
|
35 |
self.velocity.rotation = -2 * util.signOf(aDiff) |
|
36 |
else |
|
37 |
--print('not rotating') |
|
38 |
self.velocity.rotation = 0 |
|
39 |
end |
|
65
by Josh C
enemy is back |
40 |
|
41 |
local pdist2 = pvec:len2() |
|
42 |
||
43 |
if pdist2 > 400^2 then -- ... if player dist > 64? |
|
44 |
self.acceleration = vector.new(300, 0) |
|
45 |
self.acceleration:rotate_inplace(self.rotation) |
|
46 |
self.thrust.visible = true |
|
47 |
else |
|
48 |
self.acceleration = {x=0, y=0} |
|
49 |
self.thrust.visible = false |
|
50 |
end |
|
51 |
||
67
by Josh C
rotate enemy ship slower |
52 |
if math.abs(aDiff) < 0.5 * math.pi and |
53 |
pdist2 < 400^2 and |
|
65
by Josh C
enemy is back |
54 |
love.timer.getTime() - self.lastFired > 0.25 then |
55 |
--print('pew') |
|
56 |
b = Bullet:new{ |
|
57 |
x = self.x + self.width / 2, |
|
58 |
y = self.y + self.height / 2, |
|
69
by Josh C
enemy shields and death |
59 |
rotation = self.rotation, |
60 |
source = self |
|
65
by Josh C
enemy is back |
61 |
} |
62 |
self.lastFired = love.timer.getTime() |
|
63 |
end |
|
64 |
||
65 |
end, |
|
7
by Josh C
enemy |
66 |
onUpdate = function(self) |
65
by Josh C
enemy is back |
67 |
self.thrust.x = self.x - self.width |
68 |
self.thrust.y = self.y |
|
69 |
self.thrust.rotation = self.rotation |
|
70 |
end, |
|
69
by Josh C
enemy shields and death |
71 |
onCollide = function (self, other) |
72 |
if other:instanceOf(Bullet) and other.source ~= self then |
|
73 |
if self.shield.strength == 0 then |
|
74 |
-- die |
|
75 |
the.app.view:add( Boom:new { |
|
76 |
x = self.x, |
|
77 |
y = self.y, |
|
78 |
velocity = { rotation = 5 } |
|
79 |
}) |
|
80 |
||
81 |
self:die() |
|
82 |
self.thrust:die() |
|
83 |
self.shield:die() |
|
84 |
the.enemies:remove(self) |
|
85 |
the.app.view:remove(self.thrust) |
|
86 |
the.app.view:remove(self.shield) |
|
87 |
else |
|
88 |
self.shield:onHit() |
|
89 |
end |
|
90 |
||
91 |
other:die() |
|
92 |
the.bullets:remove(other) |
|
93 |
end |
|
94 |
end |
|
7
by Josh C
enemy |
95 |
} |