-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathenemy.lua
82 lines (72 loc) · 2.25 KB
/
enemy.lua
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
function new_enemy(pos,box_size, offx,grid_units,num)
num = num or math.random(1,4)
local enemy = {
pos = pos,
act = pos,
dest = pos,
grid_units = grid_units,
since_moved = 0,
move_wait = 1.8,
box_size = box_size,
movetime = .8,
scale = 0.0034133 * box_size,
tweening = false,
img = love.graphics.newImage("assets/image/gator_"..num..".png")
}
local enemy_offx = (box_size - enemy.img:getWidth() * enemy.scale) / 2 + offx
local enemy_offy = (box_size - enemy.img:getHeight() * enemy.scale) - (enemy.img:getHeight() * enemy.scale) / 40
enemy.off = vector(enemy_offx, enemy_offy)
function enemy:draw()
local scaled_act = self.act * self.box_size + vector(self.off.x, self.off.y)
love.graphics.setColor(255, 255, 255)
love.graphics.draw(self.img, scaled_act.x, scaled_act.y, 0, self.scale, self.scale)
end
function enemy:update(dt)
self.since_moved = self.since_moved + dt
if self.since_moved >= self.move_wait then
self.since_moved = self.since_moved - self.move_wait
local new_pos = self.pos + self:get_random_delta()
local tween_duration = self.movetime
Timer.tween(tween_duration, self.act, new_pos, 'linear', function() self.pos = new_pos end)
end
end
function enemy:get_random_delta()
local deltas = self:get_delta_vectors()
local delta = deltas[math.random(#deltas)]
return delta
end
function enemy:get_delta_vectors()
local possibilities = {}
local x_deltas = get_deltas(self.pos.x,self.grid_units)
local y_deltas = get_deltas(self.pos.y,self.grid_units)
for k,v in pairs(x_deltas) do
for k2,v2 in pairs(y_deltas) do
local vec = vector(v,v2)
table.insert(possibilities,vec)
end
end
possibilities = remove_empty_delta(possibilities)
return possibilities
end
function get_deltas(pos,max)
local deltas = {0}
if (pos - 1) >= 0 then
table.insert(deltas,-1)
end
if (pos + 1) <= max then
table.insert(deltas,1)
end
return deltas
end
function remove_empty_delta(deltas)
local empty = vector(0,0)
for i=#deltas,1,-1 do
local v = deltas[i]
if v == empty then
table.remove(deltas,i)
end
end
return deltas
end
return enemy
end