Skip to content

Commit 3c3c59a

Browse files
committed
Work in progress
1 parent 85c2ea6 commit 3c3c59a

File tree

1 file changed

+64
-38
lines changed

1 file changed

+64
-38
lines changed

scripts/main.lua

Lines changed: 64 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ function setup()
7272
candle1.placement:set(60, 100)
7373
candle1.action:set("default")
7474

75-
candle2 = entitymanager:clone(candle1)
75+
candle2 = entitymanager:spawn("candle")
7676
candle2.placement:set(1800, 100)
7777
candle2.action:set("default")
7878

@@ -96,11 +96,14 @@ function setup()
9696
if not timer then
9797
timemanager:singleshot(3000, function()
9898
local function destroy_pool(pool)
99-
for i = #pool, 1, -1 do
100-
entitymanager:destroy(pool[i])
101-
table.remove(pool, i)
99+
while #pool > 0 do
100+
local o = table.remove(pool)
101+
if o then
102+
entitymanager:destroy(o)
103+
end
102104
end
103105
end
106+
104107
destroy_pool(bullet_pool)
105108
destroy_pool(explosion_pool)
106109
destroy_pool(jet_pool)
@@ -153,56 +156,79 @@ function setup()
153156
healthbar.action:set("default")
154157
healthbar.placement:set(1798, 300)
155158

156-
local segment_template = entitymanager:spawn("segment")
157-
segment_template.action:set("default")
158-
segment_template.placement:set(1814, 306)
159159
for i = 1, 16 do
160-
local segment = (i == 1) and segment_template or entitymanager:clone(segment_template)
160+
local segment = entitymanager:spawn("segment")
161+
segment.action:set("default")
161162
segment.placement:set(1814, (i * 12) + 306)
162163
table.insert(segment_pool, segment)
163164
end
164165

165-
local bullet_template = entitymanager:spawn("bullet")
166-
bullet_template.placement:set(-128, -128)
167-
bullet_template:on_collision("octopus", function(self, other)
168-
self.action:unset()
169-
self.placement:set(-128, -128)
170-
postalservice:post(Mail.new(octopus, "bullet", "hit"))
171-
table.insert(bullet_pool, self)
172-
end)
173166
for i = 1, 3 do
174-
local bullet = (i == 1) and bullet_template or entitymanager:clone(bullet_template)
167+
local bullet = entitymanager:spawn("bullet")
168+
bullet.placement:set(-128, -128)
169+
170+
bullet:on_update(function(self)
171+
if self.x > octopus.x + 256 then
172+
self.action:unset()
173+
self.placement:set(-128, -128)
174+
local inpool = false
175+
for j = 1, #bullet_pool do
176+
if bullet_pool[j] == self then
177+
inpool = true
178+
break
179+
end
180+
end
181+
if not inpool then
182+
table.insert(bullet_pool, self)
183+
end
184+
end
185+
end)
186+
187+
bullet:on_collision("octopus", function(self, other)
188+
self.action:unset()
189+
self.placement:set(-128, -128)
190+
postalservice:post(Mail.new(octopus, "bullet", "hit"))
191+
192+
local inpool = false
193+
for j = 1, #bullet_pool do
194+
if bullet_pool[j] == self then
195+
inpool = true
196+
break
197+
end
198+
end
199+
if not inpool then
200+
table.insert(bullet_pool, self)
201+
end
202+
end)
175203
table.insert(bullet_pool, bullet)
176204
end
177205

178-
local explosion_template = entitymanager:spawn("explosion")
179-
explosion_template.placement:set(-128, -128)
180-
explosion_template:on_animationfinished(function(self)
181-
self.action:unset()
182-
self.placement:set(-128, -128)
183-
table.insert(explosion_pool, self)
184-
end)
185206
for i = 1, 9 do
186-
local explosion = (i == 1) and explosion_template or entitymanager:clone(explosion_template)
207+
local explosion = entitymanager:spawn("explosion")
208+
explosion.placement:set(-128, -128)
209+
explosion:on_animationfinished(function(self)
210+
self.action:unset()
211+
self.placement:set(-128, -128)
212+
table.insert(explosion_pool, self)
213+
end)
187214
table.insert(explosion_pool, explosion)
188215
end
189216

190-
local jet_template = entitymanager:spawn("jet")
191-
jet_template.placement:set(3000, 3000)
192-
jet_template:on_collision("player", function(self)
193-
self.action:unset()
194-
self.placement:set(3000, 3000)
195-
table.insert(jet_pool, self)
196-
end)
197-
jet_template:on_update(function(self)
198-
if self.x <= -300 then
217+
for i = 1, 9 do
218+
local jet = entitymanager:spawn("jet")
219+
jet.placement:set(3000, 3000)
220+
jet:on_collision("player", function(self)
199221
self.action:unset()
200222
self.placement:set(3000, 3000)
201223
table.insert(jet_pool, self)
202-
end
203-
end)
204-
for i = 1, 9 do
205-
local jet = (i == 1) and jet_template or entitymanager:clone(jet_template)
224+
end)
225+
jet:on_update(function(self)
226+
if self.x <= -300 then
227+
self.action:unset()
228+
self.placement:set(3000, 3000)
229+
table.insert(jet_pool, self)
230+
end
231+
end)
206232
table.insert(jet_pool, jet)
207233
end
208234

0 commit comments

Comments
 (0)