-
Notifications
You must be signed in to change notification settings - Fork 2
/
powerup.lua
98 lines (79 loc) · 2.3 KB
/
powerup.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
-------------------------------------------------------------------------
-- [powerup.lua]
-- powerup
-------------------------------------------------------------------------
local entity = require "entity"
local turret = require "hull.turret"
local _M = {_NAME = "powerup", _TYPE = 'module'}
local _MT = {__index = _M}
local _MMT = {__index = entity}
setmetatable(_M, _MMT)
-------------------------------------------------------------------------
local Image = love.graphics.newImage
icons = {
generic = Image "gfx/RepairPack.png";
heal10 = Image "gfx/RepairPack.png";
heal30 = Image "gfx/RepairPack2.png";
heal60 = Image "gfx/RepairPack3.png";
heal100 = Image "gfx/RepairPack4.png";
turret = Image "gfx/AutoTurret.png";
}
-------------------------------------------------------------------------
function _M.getRandomPowerup(t)
local p = _M.new(t)
local set = {'heal10', 'heal30', 'heal60', 'heal100', 'turret'}
p.effect = set[math.random(#set)]
return _M.new(p)
end
-------------------------------------------------------------------------
function _M.new(t)
t = t or {}
p = entity.new(t)
p.kind = 'powerup'
p.faction = t.faction or 'player'
p.effect = t.effect or 'heal10'
p.dir_x = -1
p.dir_y = 0
p.speed = 64
_M.set_texture(p, icons[p.effect])
return setmetatable(p, _MT)
end
function _M:think(dt)
self.facing = self.facing +dt
end
function _M:testcollision(e)
if e.npc and not self.faction == 'npc' then
return false
else
return entity.testcollision(self, e)
end
end
function _M:doeffect(e)
assert(e, "Can't effect nothing")
local impact = self.shield / self.shieldmax
if self.effect == 'heal10' then
e:heal(e.shieldmax*.1*impact)
elseif self.effect == 'heal30' then
e:heal(e.shieldmax*.3*impact)
elseif self.effect == 'heal60' then
e:heal(e.shieldmax*.6*impact)
elseif self.effect == 'heal100' then
e:heal(e.shieldmax*impact)
elseif self.effect == 'turret' then
e:addentity(turret.new{owner = e})
else
print("Unknown powerup effect", self.effect)
end
end
function _M:collidewith(e, dt)
assert(e, "Can't collide with nothing")
if e.kind == 'ship' then
self:doeffect(e)
self:die()
else
entity.collidewith(e, dt)
end
end
-------------------------------------------------------------------------
if _VERSION == "Lua 5.1" then _G[_M._NAME] = _M end
return _M