-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlevel.lua
More file actions
139 lines (118 loc) · 3.61 KB
/
level.lua
File metadata and controls
139 lines (118 loc) · 3.61 KB
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
local level={}
level.lanes={}
level.players={}
level.effects={}
level.activePlayer = nil
level.collider = HC.new()
function level.reset()
level.lanes = {}
level.players = {}
level.effects = {}
end
function level.buildLanes()
for i=1,LANES do
table.insert(level.lanes,lane.new(i))
end
for i,v in ipairs(level.lanes) do
table.insert(level.players,player.new(v,i))
level.selectNewPlayer(math.ceil(LANES/2))
end
end
function level.collide(dt, s1, s2, dx, dy)
if s1.isCone and not s2.parent.isPlayer then
s1.parent:look(s2)
elseif s2.isCone and not s1.parent.isPlayer then
s2.parent:look(s1)
else
local p
local b
if s1.parent.isPlayer ==s2.parent.isPlayer then
return false
end
if s1.parent.isPlayer == true then
p = s1.parent
b = s2.parent
else
p = s2.parent
b = s1.parent
end
if p.isPunching and p.color == b.color then
sfx.impact:rewind()
sfx.impact:play()
if love.system.getOS() == "Android" then
--no explosions
else
local fx = ps.systems.explosion:clone()
local c = COLORS[p.color]
fx:setColors(c[1], c[2], c[3], 255, c[1], c[2], c[3], 0)
fx:setPosition(p.ax, p.ay)
fx:start()
table.insert(level.effects, fx)
end
b:destroy()
score:incrementKills()
else
if b.isPowerup then
sfx.powerup:rewind()
sfx.powerup:play()
b:destroy()
score:collectPowerup()
else
sfx.explosion:rewind()
sfx.explosion:play()
if love.system.getOS() == "Android" then
--no explosions
else
local fx = ps.systems.explosion:clone()
local c = COLORS[p.color]
fx:setColors(c[1], c[2], c[3], 255, c[1], c[2], c[3], 0)
fx:setPosition(p.ax, p.ay)
fx:start()
table.insert(level.effects, fx)
end
if p.isControlled then
score:decrementLives()
end
p:deactivate()
tc.line = "Collision"
end
--p.isColliding = true
--b.isColliding = true
end
end
end
function level.endCollide(dt, s1, s2, dx, dy)
s1.parent.isColliding = false
s2.parent.isColliding = false
end
function level.selectNewPlayer(override)
for i,v in ipairs(level.players) do
v.isControlled=false
end
if override and level.players[override] then
level.activePlayer = level.players[override]
level.activePlayer.isControlled = true
else
local newPlayer = nil
local deathtime = 99999
for i,v in ipairs(level.players) do
if v.isActive then
newPlayer = v
end
end
if not newPlayer then
for i,v in ipairs(level.players) do
if v.timers.deactive.val < deathtime then
deathtime = v.timers.deactive.val
newPlayer = v
end
end
end
level.activePlayer = newPlayer
newPlayer.isControlled = true
newPlayer.isActive = false
newPlayer.timers.deactive.val = 2
newPlayer.lane:clearLane()
end
end
return level