-
Notifications
You must be signed in to change notification settings - Fork 1
/
spike.lua
66 lines (54 loc) · 1.91 KB
/
spike.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
local Player = require("player")
local Spike = {img = love.graphics.newImage("assets/Items/spikes.png")}
Spike.__index = Spike
Spike.width = Spike.img:getWidth()
Spike.height = Spike.img:getHeight()
local ActiveSpikes = {}
function Spike.new(x, y)
local instance = setmetatable({}, Spike)
instance.x = x
instance.y = y
instance.physics = {}
instance.physics.body = love.physics.newBody(World, instance.x + instance.width / 2, instance.y + instance.height / 2, "static")
instance.physics.shape = love.physics.newRectangleShape(instance.width, instance.height)
instance.physics.fixture = love.physics.newFixture(instance.physics.body, instance.physics.shape)
instance.physics.fixture:setSensor(true)
table.insert(ActiveSpikes, instance)
end
function Spike:update(dt)
end
function Spike:draw()
love.graphics.draw(self.img, self.x, self.y, 0, 1, 1, 0, self.height / 2)
end
function Spike.addAllSpikesAndRemovePrevious()
ActiveSpikes = {}
if layerInMap("spikes", Map) then
for i, spikeData in ipairs(Map.layers.spikes.objects) do
Spike.new(spikeData.x, spikeData.y)
end
end
end
function Spike.updateAll(dt)
for i, instance in ipairs(ActiveSpikes) do
instance:update(dt)
end
end
function Spike.drawAll()
for i, instance in ipairs(ActiveSpikes) do
instance:draw()
end
end
function Spike.beginContact(firstBody, secondBody, collision)
for i, instance in ipairs(ActiveSpikes) do
-- if one of the bodies are a spike
if firstBody == instance.physics.fixture or secondBody == instance.physics.fixture then
-- and the other body is the player
if firstBody == Player.physics.fixture or secondBody == Player.physics.fixture then
-- play hurtsound and damage Player
Player:takeDamage(0.5)
return true
end
end
end
end
return Spike