@@ -94,6 +94,8 @@ <h1>Player Shooting</h1>
94
94
args.state.player.bullet_size ||= 3
95
95
args.state.player.bullet_speed ||= 1.5
96
96
args.state.player.bullet_path ||= 'sprites/circle-violet.png'
97
+
98
+ args.state.enemies ||= []
97
99
end
98
100
99
101
def render args, player
@@ -120,15 +122,17 @@ <h1>Player Shooting</h1>
120
122
player.y = player.y.greater(args.grid.bottom)
121
123
player.y = player.y.lesser(args.grid.top - player.h)
122
124
123
- player.bullets = player.bullets.select do |bullet|
124
- # Remove bullets that go off screen
125
- # If you remove this line of code
126
- # The label will show you how many bullets
127
- # are still being rendered
128
- bullet.intersect_rect? args.grid
129
- end.each do |bullet|
130
- # Move the player 's bullets up the screen
125
+ player.bullets = player.bullets.find_all do |bullet|
126
+ bullet.intersect_rect? args.grid.rect
127
+ end
128
+
129
+ player.bullets.each do |bullet|
131
130
bullet.y + = player.bullet_speed
131
+ # Remove all enemies
132
+ args.state.enemies.reject! do |enemy|
133
+ # That a bullet is touching
134
+ bullet.intersect_rect? enemy[:rect]
135
+ end
132
136
end
133
137
end
134
138
@@ -197,6 +201,10 @@ <h1>Enemies</h1>
197
201
spawn_enemies args
198
202
update_enemies args
199
203
# Move each bullet
204
+ args.state.enemy_bullets.reject! do |bullet|
205
+ !bullet.intersect_rect? args.grid.rect
206
+ end
207
+
200
208
args.state.enemy_bullets.each do | bullet |
201
209
bullet.y - = args.state.enemy_bullet_speed
202
210
end
@@ -329,6 +337,10 @@ <h1>Bringing it all together</h1>
329
337
spawn_enemies args
330
338
update_enemies args
331
339
340
+ args.state.enemy_bullets.reject! do |bullet|
341
+ !bullet.intersect_rect? args.grid.rect
342
+ end
343
+
332
344
args.state.enemy_bullets.each do | bullet |
333
345
bullet.y - = args.state.enemy_bullet_speed
334
346
end
@@ -342,9 +354,11 @@ <h1>Bringing it all together</h1>
342
354
end
343
355
344
356
def update_player_bullets args, player
345
- player.bullets = player.bullets.select do |bullet|
346
- bullet.intersect_rect? args.grid
347
- end.each do |bullet|
357
+ player.bullets = player.bullets.find_all do |bullet|
358
+ bullet.intersect_rect? args.grid.rect
359
+ end
360
+
361
+ player.bullets.each do |bullet|
348
362
bullet.y + = player.bullet_speed
349
363
end
350
364
end
@@ -502,6 +516,10 @@ <h1>Adding collisions</h1>
502
516
player.h,
503
517
]
504
518
519
+ args.state.enemy_bullets.reject! do |bullet|
520
+ !bullet.intersect_rect? args.grid.rect
521
+ end
522
+
505
523
args.state.enemy_bullets.each do | bullet |
506
524
bullet.y - = args.state.enemy_bullet_speed
507
525
# Reset the game
@@ -518,9 +536,11 @@ <h1>Adding collisions</h1>
518
536
end
519
537
520
538
def update_player_bullets args, player
521
- player.bullets = player.bullets.select do |bullet|
522
- bullet.intersect_rect? args.grid
523
- end.each do |bullet|
539
+ player.bullets = player.bullets.find_all do |bullet|
540
+ bullet.intersect_rect? args.grid.rect
541
+ end
542
+
543
+ player.bullets.each do |bullet|
524
544
bullet.y + = player.bullet_speed
525
545
# Remove all enemies
526
546
args.state.enemies.reject! do |enemy|
0 commit comments