@@ -72,7 +72,7 @@ function setup()
72
72
candle1 .placement :set (60 , 100 )
73
73
candle1 .action :set (" default" )
74
74
75
- candle2 = entitymanager :clone ( candle1 )
75
+ candle2 = entitymanager :spawn ( " candle " )
76
76
candle2 .placement :set (1800 , 100 )
77
77
candle2 .action :set (" default" )
78
78
@@ -96,11 +96,14 @@ function setup()
96
96
if not timer then
97
97
timemanager :singleshot (3000 , function ()
98
98
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
102
104
end
103
105
end
106
+
104
107
destroy_pool (bullet_pool )
105
108
destroy_pool (explosion_pool )
106
109
destroy_pool (jet_pool )
@@ -153,56 +156,79 @@ function setup()
153
156
healthbar .action :set (" default" )
154
157
healthbar .placement :set (1798 , 300 )
155
158
156
- local segment_template = entitymanager :spawn (" segment" )
157
- segment_template .action :set (" default" )
158
- segment_template .placement :set (1814 , 306 )
159
159
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" )
161
162
segment .placement :set (1814 , (i * 12 ) + 306 )
162
163
table.insert (segment_pool , segment )
163
164
end
164
165
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 )
173
166
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 )
175
203
table.insert (bullet_pool , bullet )
176
204
end
177
205
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 )
185
206
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 )
187
214
table.insert (explosion_pool , explosion )
188
215
end
189
216
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 )
199
221
self .action :unset ()
200
222
self .placement :set (3000 , 3000 )
201
223
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 )
206
232
table.insert (jet_pool , jet )
207
233
end
208
234
0 commit comments