line-em-up 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/line-em-up/game_window.rb +180 -47
- data/line-em-up/lib/config_setting.rb +60 -0
- data/line-em-up/lib/resolution_setting.rb +82 -0
- data/line-em-up/lib/setting.rb +4 -0
- data/line-em-up/media/airship1_color1.png +0 -0
- data/line-em-up/media/airship1_color1_reverse.png +0 -0
- data/line-em-up/media/bomb_original copy.png +0 -0
- data/line-em-up/media/bomb_pack_hud.png +0 -0
- data/line-em-up/media/debug_start.png +0 -0
- data/line-em-up/media/grappling_hook.png +0 -0
- data/line-em-up/media/green_health_bar_0.png +0 -0
- data/line-em-up/media/green_health_bar_1.png +0 -0
- data/line-em-up/media/green_health_bar_2.png +0 -0
- data/line-em-up/media/green_health_bar_3.png +0 -0
- data/line-em-up/media/green_health_bar_4.png +0 -0
- data/line-em-up/media/green_health_bar_5.png +0 -0
- data/line-em-up/media/green_health_bar_6.png +0 -0
- data/line-em-up/media/green_health_bar_7.png +0 -0
- data/line-em-up/media/green_health_bar_8.png +0 -0
- data/line-em-up/media/green_health_bar_9.png +0 -0
- data/line-em-up/media/health_bar_0.png +0 -0
- data/line-em-up/media/health_bar_1.png +0 -0
- data/line-em-up/media/health_bar_10.png +0 -0
- data/line-em-up/media/health_bar_2.png +0 -0
- data/line-em-up/media/health_bar_3.png +0 -0
- data/line-em-up/media/health_bar_4.png +0 -0
- data/line-em-up/media/health_bar_5.png +0 -0
- data/line-em-up/media/health_bar_6.png +0 -0
- data/line-em-up/media/health_bar_7.png +0 -0
- data/line-em-up/media/health_bar_8.png +0 -0
- data/line-em-up/media/health_bar_9.png +0 -0
- data/line-em-up/media/mini_missile_reverse.png +0 -0
- data/line-em-up/media/missile_boat.png +0 -0
- data/line-em-up/media/missile_boat_original.png +0 -0
- data/line-em-up/media/missile_boat_reverse.png +0 -0
- data/line-em-up/media/missile_pack_hud.png +0 -0
- data/line-em-up/media/missile_reverse.png +0 -0
- data/line-em-up/media/mothership.png +0 -0
- data/line-em-up/media/mothership_original.png +0 -0
- data/line-em-up/media/single_star.png +0 -0
- data/line-em-up/media/spaceship.png +0 -0
- data/line-em-up/media/spaceship_left-test.png +0 -0
- data/line-em-up/media/spaceship_left.png +0 -0
- data/line-em-up/media/spaceship_right.png +0 -0
- metadata +43 -3
- data/line-em-up/media/header@2x.psd +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3bd75a1c68de409e5b0e14a35334201f8187b71e
|
4
|
+
data.tar.gz: 67195a13f775a2269af0e02048b13e1c1fdbf109
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43e4cacd011d38d2ea9a7ffff79710a10a121aac65b97f59b9f7def75ac33baaf5ffda8450c1bf4af69d1882d8d7df559512ada935928a40de07ec69386c3a91
|
7
|
+
data.tar.gz: 68095527adc6d54439afc6e0aeb2dedb5e4cf137b9c9cbb0d46742be9839f75a0d45b469c31336c519fa9c69030c2cd7d8ecbd443a1c03e788b36ba52f973e71
|
data/line-em-up/game_window.rb
CHANGED
@@ -78,14 +78,14 @@ class GameWindow < Gosu::Window
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
def self.reset(window)
|
82
|
-
window = GameWindow.new.show
|
81
|
+
def self.reset(window, options = {})
|
82
|
+
window = GameWindow.new(window.width, window.height, window.fullscreen?, {block_controls_until_button_up: true, debug: options[:debug]}).show
|
83
83
|
end
|
84
84
|
|
85
85
|
|
86
|
-
def self.start width = nil, height = nil, options = {}
|
86
|
+
def self.start width = nil, height = nil, fullscreen = false, options = {}
|
87
87
|
# window = GameWindow.new.show
|
88
|
-
GameWindow.new(width, height, options).show
|
88
|
+
GameWindow.new(width, height, fullscreen, options).show
|
89
89
|
end
|
90
90
|
|
91
91
|
# When fullscreen, try to match window with screen resolution
|
@@ -143,9 +143,11 @@ class GameWindow < Gosu::Window
|
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
146
|
-
def initialize width = nil, height = nil, options = {}
|
146
|
+
def initialize width = nil, height = nil, fullscreen = false, options = {}
|
147
147
|
@block_all_controls = !options[:block_controls_until_button_up].nil? && options[:block_controls_until_button_up] == true ? true : false
|
148
|
-
|
148
|
+
@debug = options[:debug]
|
149
|
+
# GameWindow.fullscreen(self) if fullscreen
|
150
|
+
@start_fullscreen = fullscreen
|
149
151
|
@center_ui_y = 0
|
150
152
|
@center_ui_x = 0
|
151
153
|
|
@@ -186,25 +188,40 @@ class GameWindow < Gosu::Window
|
|
186
188
|
@buildings = Array.new
|
187
189
|
@projectiles = Array.new
|
188
190
|
@enemy_projectiles = Array.new
|
191
|
+
@enemy_destructable_projectiles = Array.new
|
189
192
|
@pickups = Array.new
|
190
193
|
|
191
194
|
@enemies = Array.new
|
192
195
|
@enemies_random_spawn_timer = 100
|
196
|
+
# @enemies_random_spawn_timer = 5
|
193
197
|
@enemies_spawner_counter = 0
|
198
|
+
# @enemies_spawner_counter = 5
|
199
|
+
|
200
|
+
@max_enemy_count = 30
|
201
|
+
@enemies_killed = 0
|
194
202
|
|
195
203
|
@font = Gosu::Font.new(20)
|
196
204
|
@max_enemies = 4
|
197
205
|
|
198
206
|
@pointer = Cursor.new(@scale)
|
199
207
|
@ui_y = 0
|
208
|
+
@footer_bar = FooterBar.new(@scale, @width, @height)
|
200
209
|
reset_font_ui_y
|
210
|
+
|
211
|
+
# @boss_active_at_enemies_killed = 500
|
212
|
+
@boss_active_at_enemies_killed = 750
|
213
|
+
@boss_active_at_level = 4
|
214
|
+
@boss_active = false
|
215
|
+
@boss = nil
|
216
|
+
@boss_killed = false
|
201
217
|
end
|
202
218
|
|
203
219
|
def button_up id
|
204
220
|
@block_all_controls = false
|
205
|
-
|
206
|
-
|
207
|
-
|
221
|
+
# Grappling hook always active
|
222
|
+
# if (id == Gosu::MS_RIGHT) && @player.is_alive
|
223
|
+
# @grappling_hook.deactivate if @grappling_hook
|
224
|
+
# end
|
208
225
|
|
209
226
|
if (id == Gosu::KB_P)
|
210
227
|
@can_pause = true
|
@@ -243,6 +260,10 @@ class GameWindow < Gosu::Window
|
|
243
260
|
end
|
244
261
|
|
245
262
|
def update
|
263
|
+
if @start_fullscreen
|
264
|
+
@start_fullscreen = false
|
265
|
+
GameWindow.fullscreen(self)
|
266
|
+
end
|
246
267
|
reset_center_font_ui_y
|
247
268
|
@menu.update if @menu
|
248
269
|
if !@block_all_controls
|
@@ -255,7 +276,7 @@ class GameWindow < Gosu::Window
|
|
255
276
|
# close!
|
256
277
|
end
|
257
278
|
if Gosu.button_down?(Gosu::KB_M)
|
258
|
-
GameWindow.reset(self)
|
279
|
+
GameWindow.reset(self, {debug: @debug})
|
259
280
|
end
|
260
281
|
|
261
282
|
if Gosu.button_down?(Gosu::KB_RIGHT_META) && Gosu.button_down?(Gosu::KB_RETURN) && @can_toggle_fullscreen_a && @can_toggle_fullscreen_b
|
@@ -298,8 +319,8 @@ class GameWindow < Gosu::Window
|
|
298
319
|
@player.brake(@height) if Gosu.button_down?(Gosu::KB_DOWN) || Gosu.button_down?(Gosu::GP_DOWN) || Gosu.button_down?(Gosu::KB_S)
|
299
320
|
|
300
321
|
if Gosu.button_down?(Gosu::MS_RIGHT)
|
301
|
-
if @grappling_hook == nil
|
302
|
-
@grappling_hook = GrapplingHook.new(@scale, @player)
|
322
|
+
if @grappling_hook == nil && @player.grapple_hook_cooldown_wait <= 0
|
323
|
+
@grappling_hook = GrapplingHook.new(@scale, @player, self.mouse_x, self.mouse_y)
|
303
324
|
end
|
304
325
|
end
|
305
326
|
|
@@ -326,6 +347,9 @@ class GameWindow < Gosu::Window
|
|
326
347
|
@enemy_projectiles.each do |projectile|
|
327
348
|
projectile.hit_object(@player)
|
328
349
|
end
|
350
|
+
@enemy_destructable_projectiles.each do |projectile|
|
351
|
+
projectile.hit_object(@player)
|
352
|
+
end
|
329
353
|
|
330
354
|
|
331
355
|
@grappling_hook.collect_pickups(@player, @pickups) if @grappling_hook && @grappling_hook.active
|
@@ -334,9 +358,11 @@ class GameWindow < Gosu::Window
|
|
334
358
|
if !@game_pause && !@menu_open
|
335
359
|
|
336
360
|
@projectiles.each do |projectile|
|
337
|
-
results = projectile.hit_objects([@enemies, @buildings])
|
361
|
+
results = projectile.hit_objects([@enemies, @buildings, @enemy_destructable_projectiles, [@boss]])
|
362
|
+
|
338
363
|
@pickups = @pickups + results[:drops]
|
339
364
|
@player.score += results[:point_value]
|
365
|
+
@enemies_killed += results[:killed]
|
340
366
|
end
|
341
367
|
|
342
368
|
|
@@ -345,7 +371,7 @@ class GameWindow < Gosu::Window
|
|
345
371
|
@buildings.reject! { |building| !building.update(@width, @height) }
|
346
372
|
|
347
373
|
if @player.is_alive && @grappling_hook
|
348
|
-
grap_result = @grappling_hook.update(@width, @height,
|
374
|
+
grap_result = @grappling_hook.update(@width, @height, @player)
|
349
375
|
@grappling_hook = nil if !grap_result
|
350
376
|
end
|
351
377
|
|
@@ -354,79 +380,186 @@ class GameWindow < Gosu::Window
|
|
354
380
|
@projectiles.reject! { |projectile| !projectile.update(@width, @height, self.mouse_x, self.mouse_y) }
|
355
381
|
|
356
382
|
@enemy_projectiles.reject! { |projectile| !projectile.update(@width, @height, self.mouse_x, self.mouse_y) }
|
383
|
+
@enemy_destructable_projectiles.reject! { |projectile| !projectile.update(@width, @height, self.mouse_x, self.mouse_y) }
|
357
384
|
@enemies.reject! { |enemy| !enemy.update(@width, @height, nil, nil, @player) }
|
358
385
|
|
386
|
+
if @boss
|
387
|
+
result = @boss.update(@width, @height, nil, nil, @player)
|
388
|
+
if !result
|
389
|
+
@boss_killed = true
|
390
|
+
@boss = nil
|
391
|
+
@enemy_projectiles = []
|
392
|
+
@enemy_destructable_projectiles = []
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
359
396
|
|
360
397
|
@gl_background.scroll
|
361
398
|
|
362
|
-
@buildings.push(Building.new(@scale)) if rand(100) == 0
|
363
399
|
|
400
|
+
if !@boss_killed && !@boss_active
|
401
|
+
@buildings.push(Building.new(@scale)) if rand(100) == 0
|
402
|
+
end
|
403
|
+
|
404
|
+
# Temp
|
405
|
+
# @enemies.push(MissileBoat.new(@scale, @width, @height)) if rand(10) == 0
|
406
|
+
if !@boss_active && !@boss && !@boss_killed
|
364
407
|
|
365
|
-
|
366
|
-
|
367
|
-
|
408
|
+
if @player.is_alive && rand(@enemies_random_spawn_timer) == 0 && @enemies.count <= @max_enemies
|
409
|
+
(0..(@enemies_spawner_counter / 2).round).each do |count|
|
410
|
+
@enemies.push(EnemyPlayer.new(@scale, @width, @height)) if @enemies.count <= @max_enemy_count
|
411
|
+
end
|
412
|
+
end
|
413
|
+
if @player.time_alive % 500 == 0
|
414
|
+
@max_enemies += 1
|
415
|
+
end
|
416
|
+
if @player.time_alive % 1000 == 0 && @enemies_random_spawn_timer > 5
|
417
|
+
@enemies_random_spawn_timer -= 5
|
418
|
+
end
|
419
|
+
# temp
|
420
|
+
if @player.time_alive % 200 == 0
|
421
|
+
(0..(@enemies_spawner_counter / 4).round).each do |count|
|
422
|
+
@enemies.push(MissileBoat.new(@scale, @width, @height)) if @enemies.count <= @max_enemy_count
|
423
|
+
end
|
424
|
+
end
|
425
|
+
if @player.time_alive % 5000 == 0
|
426
|
+
@enemies_spawner_counter += 1
|
427
|
+
end
|
428
|
+
|
429
|
+
if @player.time_alive % 1000 == 0 && @player.time_alive > 0
|
430
|
+
@player.score += 100
|
368
431
|
end
|
369
432
|
end
|
370
|
-
if @
|
371
|
-
@
|
372
|
-
|
373
|
-
if @player.time_alive % 1000 == 0 && @enemies_random_spawn_timer > 5
|
374
|
-
@enemies_random_spawn_timer -= 5
|
375
|
-
end
|
376
|
-
if @player.time_alive % 5000 == 0
|
377
|
-
@enemies_spawner_counter += 1
|
433
|
+
if @boss_active_at_enemies_killed <= @enemies_killed || @boss_active_at_level <= @enemies_spawner_counter
|
434
|
+
# puts "HEREaagL #{@boss_active_at_enemies_killed} amd #{@enemies_killed} and #{@boss_active_at_level} and #{ @enemies_spawner_counter}"
|
435
|
+
@boss_active = true
|
378
436
|
end
|
379
437
|
|
380
|
-
if @
|
381
|
-
@
|
438
|
+
if @boss_active && @boss.nil? && @enemies.count == 0 && @boss_killed == false
|
439
|
+
@boss_active = false
|
440
|
+
# Activate Boss
|
441
|
+
@boss = Mothership.new(@scale, @width, @height)
|
442
|
+
# @enemies.push(@boss)
|
382
443
|
end
|
383
444
|
|
384
|
-
|
385
445
|
# Move to enemy mehtods
|
386
446
|
@enemies.each do |enemy|
|
387
|
-
enemy.cooldown_wait -= 1 if enemy.cooldown_wait > 0
|
388
447
|
if enemy.cooldown_wait <= 0
|
389
|
-
results = enemy.attack(@width, @height)
|
448
|
+
results = enemy.attack(@width, @height, @player)
|
449
|
+
|
390
450
|
projectiles = results[:projectiles]
|
391
451
|
cooldown = results[:cooldown]
|
392
452
|
enemy.cooldown_wait = cooldown.to_f.fdiv(enemy.attack_speed)
|
393
453
|
|
394
454
|
projectiles.each do |projectile|
|
395
|
-
|
455
|
+
if projectile.destructable?
|
456
|
+
@enemy_destructable_projectiles.push(projectile)
|
457
|
+
else
|
458
|
+
@enemy_projectiles.push(projectile)
|
459
|
+
end
|
396
460
|
end
|
397
461
|
end
|
398
462
|
end
|
463
|
+
|
464
|
+
if @boss
|
465
|
+
if @boss.cooldown_wait <= 0
|
466
|
+
results = @boss.attack(@width, @height, @player)
|
467
|
+
projectiles = results[:projectiles]
|
468
|
+
cooldown = results[:cooldown]
|
469
|
+
@boss.cooldown_wait = cooldown.to_f.fdiv(@boss.attack_speed)
|
470
|
+
projectiles.each do |projectile|
|
471
|
+
if projectile.destructable?
|
472
|
+
@enemy_destructable_projectiles.push(projectile)
|
473
|
+
else
|
474
|
+
@enemy_projectiles.push(projectile)
|
475
|
+
end
|
476
|
+
end
|
477
|
+
end
|
478
|
+
if @boss.secondary_cooldown_wait <= 0
|
479
|
+
results = @boss.secondary_attack(@width, @height, @player)
|
480
|
+
|
481
|
+
projectiles = results[:projectiles]
|
482
|
+
cooldown = results[:cooldown]
|
483
|
+
@boss.secondary_cooldown_wait = cooldown.to_f.fdiv(@boss.attack_speed)
|
484
|
+
projectiles.each do |projectile|
|
485
|
+
if projectile.destructable?
|
486
|
+
@enemy_destructable_projectiles.push(projectile)
|
487
|
+
else
|
488
|
+
@enemy_projectiles.push(projectile)
|
489
|
+
end
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
if @boss.tertiary_cooldown_wait <= 0
|
494
|
+
results = @boss.tertiary_attack(@width, @height, @player)
|
495
|
+
|
496
|
+
projectiles = results[:projectiles]
|
497
|
+
cooldown = results[:cooldown]
|
498
|
+
@boss.tertiary_cooldown_wait = cooldown.to_f.fdiv(@boss.attack_speed)
|
499
|
+
projectiles.each do |projectile|
|
500
|
+
if projectile.destructable?
|
501
|
+
@enemy_destructable_projectiles.push(projectile)
|
502
|
+
else
|
503
|
+
@enemy_projectiles.push(projectile)
|
504
|
+
end
|
505
|
+
end
|
506
|
+
end
|
507
|
+
|
508
|
+
end
|
509
|
+
|
510
|
+
|
399
511
|
end
|
400
|
-
end
|
401
|
-
end
|
512
|
+
end # END if !@block_all_controls
|
513
|
+
end # END UPDATE FUNCTION
|
402
514
|
|
403
515
|
def draw
|
404
516
|
@menu.draw if @menu
|
405
|
-
@
|
517
|
+
@footer_bar.draw(@player)
|
518
|
+
@boss.draw if @boss
|
519
|
+
# @pointer.draw(self.mouse_x, self.mouse_y) if @grappling_hook.nil? || !@grappling_hook.active
|
520
|
+
@pointer.draw(self.mouse_x, self.mouse_y)# if @grappling_hook.nil? || !@grappling_hook.active
|
406
521
|
|
407
522
|
@player.draw() if @player.is_alive
|
408
523
|
@grappling_hook.draw(@player) if @player.is_alive && @grappling_hook
|
409
|
-
|
410
|
-
|
411
|
-
|
524
|
+
if !@menu && !@player.is_alive
|
525
|
+
@font.draw("You are dead!", @width / 2 - 50, @height / 2 - 55, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
526
|
+
@font.draw("Press ESC to quit", @width / 2 - 50, @height / 2 - 40, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
527
|
+
@font.draw("Press M to Restart", @width / 2 - 50, @height / 2 - 25, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
528
|
+
end
|
529
|
+
if @boss_killed
|
530
|
+
@font.draw("You won! Your score: #{@player.score}", @width / 2 - 50, @height / 2 - 55, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
531
|
+
end
|
412
532
|
@font.draw("Paused", @width / 2 - 50, @height / 2 - 25, ZOrder::UI, 1.0, 1.0, 0xff_ffff00) if @game_pause
|
413
533
|
@enemies.each { |enemy| enemy.draw() }
|
414
534
|
@projectiles.each { |projectile| projectile.draw() }
|
415
535
|
@enemy_projectiles.each { |projectile| projectile.draw() }
|
536
|
+
@enemy_destructable_projectiles.each { |projectile| projectile.draw() }
|
416
537
|
# @stars.each { |star| star.draw }
|
417
538
|
@pickups.each { |pickup| pickup.draw() }
|
418
539
|
@buildings.each { |building| building.draw() }
|
419
540
|
@font.draw("Score: #{@player.score}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
420
|
-
# @font.draw("Attack Speed: #{@player.attack_speed.round(2)}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
421
|
-
@font.draw("Health: #{@player.health}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
422
|
-
@font.draw("Armor: #{@player.armor}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
423
|
-
# @font.draw("Rockets: #{@player.rockets}", 10, 70, ZOrder::UI, 1.0, 1.0, 0xff_ffff00) if @player.secondary_weapon == 'missile'
|
424
|
-
# @font.draw("Bombs: #{@player.bombs}", 10, 70, ZOrder::UI, 1.0, 1.0, 0xff_ffff00) if @player.secondary_weapon == 'bomb'
|
425
|
-
@font.draw("Weapon: #{@player.get_secondary_name}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
426
|
-
@font.draw("Rockets: #{@player.rockets}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
427
|
-
@font.draw("Bombs: #{@player.bombs}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00) if @player.bombs > 0
|
428
|
-
@font.draw("Time Alive: #{@player.time_alive}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
429
541
|
@font.draw("Level: #{@enemies_spawner_counter + 1}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
542
|
+
@font.draw("Enemies Killed: #{@enemies_killed}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
543
|
+
@font.draw("Boss Health: #{@boss.health}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00) if @boss
|
544
|
+
if @debug
|
545
|
+
# @font.draw("Attack Speed: #{@player.attack_speed.round(2)}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
546
|
+
@font.draw("Health: #{@player.health}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
547
|
+
@font.draw("Armor: #{@player.armor}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
548
|
+
# @font.draw("Rockets: #{@player.rockets}", 10, 70, ZOrder::UI, 1.0, 1.0, 0xff_ffff00) if @player.secondary_weapon == 'missile'
|
549
|
+
# @font.draw("Bombs: #{@player.bombs}", 10, 70, ZOrder::UI, 1.0, 1.0, 0xff_ffff00) if @player.secondary_weapon == 'bomb'
|
550
|
+
@font.draw("Weapon: #{@player.get_secondary_name}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
551
|
+
@font.draw("Rockets: #{@player.rockets}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
552
|
+
@font.draw("Bombs: #{@player.bombs}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00) if @player.bombs > 0
|
553
|
+
@font.draw("Time Alive: #{@player.time_alive}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
554
|
+
@font.draw("Enemy count: #{@enemies.count}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
555
|
+
@font.draw("enemy_projectiles: #{@enemy_projectiles.count}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
556
|
+
@font.draw("projectiles count: #{@projectiles.count}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
557
|
+
@font.draw("destructable_proj: #{@enemy_destructable_projectiles.count}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
558
|
+
@font.draw("pickups count: #{@pickups.count}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
559
|
+
@font.draw("buildings count: #{@buildings.count}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
560
|
+
@font.draw("Object count: #{@enemies.count + @enemy_projectiles.count + @projectiles.count + @enemy_destructable_projectiles.count + @pickups.count + @buildings.count}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
561
|
+
@font.draw("FPS: #{Gosu.fps}", 10, get_font_ui_y, ZOrder::UI, 1.0, 1.0, 0xff_ffff00)
|
562
|
+
end
|
430
563
|
@gl_background.draw(ZOrder::Background)
|
431
564
|
reset_font_ui_y
|
432
565
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module ConfigSetting
|
4
|
+
def self.set_setting file_location, setting_name, setting_value
|
5
|
+
# puts "HERE: #{file_location} and #{setting_name} and #{setting_value}"
|
6
|
+
create_file_if_non_existent(file_location)
|
7
|
+
if setting_value
|
8
|
+
if File.readlines(file_location).grep(/#{setting_name}:/).size > 0
|
9
|
+
# puts "FOUND SETTING"
|
10
|
+
text = File.read(file_location)
|
11
|
+
# puts "FOUDN IN FILE: #{text.inspect}"
|
12
|
+
replace = text.gsub(/^#{setting_name}: ([^$]*)$/, setting_value)
|
13
|
+
# replace = replace.gsub(/bbb/, "Replace bbb with 222")
|
14
|
+
File.open(file_location, "w") {|file| file.puts "#{setting_name}: #{replace}"}
|
15
|
+
else
|
16
|
+
# puts "COULDNT FIND SETTING"
|
17
|
+
File.open(file_location, 'a') do |f|
|
18
|
+
f << "#{setting_name}: #{setting_value}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.get_setting file_location, setting_name, default_value
|
25
|
+
create_file_if_non_existent(file_location)
|
26
|
+
test = File.readlines(file_location).select { |line| line =~ /^#{setting_name}: ([^$]*)$/ }
|
27
|
+
if test && test.first
|
28
|
+
# puts "BEFORE SCAN: #{test}"
|
29
|
+
# So many firstsss
|
30
|
+
test = test.first.scan(/^#{setting_name}: ([^$]*)$/).first
|
31
|
+
if test
|
32
|
+
test = test.first
|
33
|
+
end
|
34
|
+
test = test.strip
|
35
|
+
end
|
36
|
+
# test = nil
|
37
|
+
# if File.readlines(file_location).grep(/#{setting_name}:/).size > 0
|
38
|
+
# test =
|
39
|
+
# end
|
40
|
+
# puts "GETTING TEST: #{test}"
|
41
|
+
# puts "test2: #{test.inspect}"
|
42
|
+
# puts "test2 - #{test.nil?}"
|
43
|
+
# puts "test3 - #{test.inspect}"
|
44
|
+
# if test.nil? #|| test.count == 0
|
45
|
+
# # puts "TEST NIL HERE"
|
46
|
+
# test = default_value
|
47
|
+
# end
|
48
|
+
if test == [] || test.nil? || test == ''
|
49
|
+
test = default_value
|
50
|
+
end
|
51
|
+
return test
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.create_file_if_non_existent file_location
|
55
|
+
# puts "CREATING FILE AT LOCATION: #{file_location}"
|
56
|
+
if !File.exists?(file_location)
|
57
|
+
FileUtils.touch(file_location)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require_relative 'setting.rb'
|
2
|
+
# require_relative "config_settings.rb"
|
3
|
+
|
4
|
+
class ResolutionSetting < Setting
|
5
|
+
FULLSCREEN_NAME = "fullscreen"
|
6
|
+
RESOLUTIONS = ["640x480", "800x600", "960x720", "1024x768", "1280x960", "1400x1050", "1440x1080", "1600x1200", "1856x1392", "1920x1440", "2048x1536", FULLSCREEN_NAME]
|
7
|
+
attr_accessor :x, :y, :font, :max_width, :max_height
|
8
|
+
|
9
|
+
|
10
|
+
def initialize fullscreen_height, max_width, max_height, height, config_file_path
|
11
|
+
# puts "INNITING #{config_file_path}"
|
12
|
+
@font = Gosu::Font.new(20)
|
13
|
+
# @x = width
|
14
|
+
@y = height
|
15
|
+
@max_width = max_width
|
16
|
+
@max_height = max_height
|
17
|
+
@next_x = 15
|
18
|
+
@prev_x = @max_width - 15 - @font.text_width('>')
|
19
|
+
@config_file_path = config_file_path
|
20
|
+
@name = 'resolution'
|
21
|
+
@value = ConfigSetting.get_setting(@config_file_path, @name, RESOLUTIONS[0])
|
22
|
+
@fullscreen = false
|
23
|
+
@fullscreen_height = fullscreen_height
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_resolution
|
27
|
+
if @value == FULLSCREEN_NAME
|
28
|
+
height = @fullscreen_height
|
29
|
+
width = (@fullscreen_height / 3) * 4
|
30
|
+
[width, height, true]
|
31
|
+
elsif @value
|
32
|
+
@value.split('x').collect{|s| s.to_i }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def draw
|
37
|
+
@font.draw("<", @next_x, @y, 1, 1.0, 1.0, 0xff_ffff00)
|
38
|
+
@font.draw(@value, ((@max_width / 2) - @font.text_width(@value) / 2), @y, 1, 1.0, 1.0, 0xff_ffff00)
|
39
|
+
@font.draw(">", @prev_x, @y, 1, 1.0, 1.0, 0xff_ffff00)
|
40
|
+
end
|
41
|
+
|
42
|
+
def update mouse_x, mouse_y
|
43
|
+
end
|
44
|
+
|
45
|
+
def clicked mx, my
|
46
|
+
if is_mouse_hovering_next(mx, my)
|
47
|
+
index = RESOLUTIONS.index(@value)
|
48
|
+
value = @value
|
49
|
+
if index == 0
|
50
|
+
value = RESOLUTIONS[RESOLUTIONS.count - 1]
|
51
|
+
else
|
52
|
+
value = RESOLUTIONS[index - 1]
|
53
|
+
end
|
54
|
+
ConfigSetting.set_setting(@config_file_path, @name, value)
|
55
|
+
@value = value
|
56
|
+
elsif is_mouse_hovering_prev(mx, my)
|
57
|
+
index = RESOLUTIONS.index(@value)
|
58
|
+
value = @value
|
59
|
+
if index == RESOLUTIONS.count - 1
|
60
|
+
value = RESOLUTIONS[0]
|
61
|
+
else
|
62
|
+
value = RESOLUTIONS[index + 1]
|
63
|
+
end
|
64
|
+
ConfigSetting.set_setting(@config_file_path, @name, value)
|
65
|
+
@value = value
|
66
|
+
end
|
67
|
+
end
|
68
|
+
def is_mouse_hovering_next mx, my
|
69
|
+
local_width = @font.text_width('>')
|
70
|
+
local_height = @font.height
|
71
|
+
|
72
|
+
(mx >= @next_x and my >= @y) and (mx <= @next_x + local_width) and (my <= @y + local_height)
|
73
|
+
end
|
74
|
+
def is_mouse_hovering_prev mx, my
|
75
|
+
local_width = @font.text_width('<')
|
76
|
+
local_height = @font.height
|
77
|
+
|
78
|
+
(mx >= @prev_x and my >= @y) and (mx <= @prev_x + local_width) and (my <= @y + local_height)
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: line-em-up
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Dana
|
@@ -62,6 +62,9 @@ files:
|
|
62
62
|
- bin/line-em-up.sh
|
63
63
|
- line-em-up/game_window.rb
|
64
64
|
- line-em-up/irb_requirements.rb
|
65
|
+
- line-em-up/lib/config_setting.rb
|
66
|
+
- line-em-up/lib/resolution_setting.rb
|
67
|
+
- line-em-up/lib/setting.rb
|
65
68
|
- line-em-up/lib/z_order.rb
|
66
69
|
- line-em-up/media/BrokenPNG.png
|
67
70
|
- line-em-up/media/Cursor.png
|
@@ -75,6 +78,8 @@ files:
|
|
75
78
|
- line-em-up/media/WhiteAlpha.png
|
76
79
|
- line-em-up/media/additem.png
|
77
80
|
- line-em-up/media/additem_hover.png
|
81
|
+
- line-em-up/media/airship1_color1.png
|
82
|
+
- line-em-up/media/airship1_color1_reverse.png
|
78
83
|
- line-em-up/media/audio_formats/aiff_32bit_float.aiff
|
79
84
|
- line-em-up/media/audio_formats/au_16bit_pcm.au
|
80
85
|
- line-em-up/media/audio_formats/caf_be_16bit_44khz.caf
|
@@ -91,8 +96,10 @@ files:
|
|
91
96
|
- line-em-up/media/back.png
|
92
97
|
- line-em-up/media/beep.wav
|
93
98
|
- line-em-up/media/bomb.png
|
99
|
+
- line-em-up/media/bomb_original copy.png
|
94
100
|
- line-em-up/media/bomb_original.png
|
95
101
|
- line-em-up/media/bomb_pack.png
|
102
|
+
- line-em-up/media/bomb_pack_hud.png
|
96
103
|
- line-em-up/media/building.png
|
97
104
|
- line-em-up/media/building_original.png
|
98
105
|
- line-em-up/media/bullet-mini-reverse.png
|
@@ -104,6 +111,7 @@ files:
|
|
104
111
|
- line-em-up/media/cptn_ruby_map.txt
|
105
112
|
- line-em-up/media/crosshair.png
|
106
113
|
- line-em-up/media/cursor 2.png
|
114
|
+
- line-em-up/media/debug_start.png
|
107
115
|
- line-em-up/media/earth.png
|
108
116
|
- line-em-up/media/exit.png
|
109
117
|
- line-em-up/media/exit_hover.png
|
@@ -111,7 +119,27 @@ files:
|
|
111
119
|
- line-em-up/media/gem.png
|
112
120
|
- line-em-up/media/grappling_hook.png
|
113
121
|
- line-em-up/media/grappling_hook_original.png
|
114
|
-
- line-em-up/media/
|
122
|
+
- line-em-up/media/green_health_bar_0.png
|
123
|
+
- line-em-up/media/green_health_bar_1.png
|
124
|
+
- line-em-up/media/green_health_bar_2.png
|
125
|
+
- line-em-up/media/green_health_bar_3.png
|
126
|
+
- line-em-up/media/green_health_bar_4.png
|
127
|
+
- line-em-up/media/green_health_bar_5.png
|
128
|
+
- line-em-up/media/green_health_bar_6.png
|
129
|
+
- line-em-up/media/green_health_bar_7.png
|
130
|
+
- line-em-up/media/green_health_bar_8.png
|
131
|
+
- line-em-up/media/green_health_bar_9.png
|
132
|
+
- line-em-up/media/health_bar_0.png
|
133
|
+
- line-em-up/media/health_bar_1.png
|
134
|
+
- line-em-up/media/health_bar_10.png
|
135
|
+
- line-em-up/media/health_bar_2.png
|
136
|
+
- line-em-up/media/health_bar_3.png
|
137
|
+
- line-em-up/media/health_bar_4.png
|
138
|
+
- line-em-up/media/health_bar_5.png
|
139
|
+
- line-em-up/media/health_bar_6.png
|
140
|
+
- line-em-up/media/health_bar_7.png
|
141
|
+
- line-em-up/media/health_bar_8.png
|
142
|
+
- line-em-up/media/health_bar_9.png
|
115
143
|
- line-em-up/media/health_original.png
|
116
144
|
- line-em-up/media/health_pack_0.png
|
117
145
|
- line-em-up/media/health_pack_1.png
|
@@ -132,18 +160,30 @@ files:
|
|
132
160
|
- line-em-up/media/item_hover.png
|
133
161
|
- line-em-up/media/landscape.svg
|
134
162
|
- line-em-up/media/large_star.png
|
163
|
+
- line-em-up/media/mini_missile_reverse.png
|
135
164
|
- line-em-up/media/missile.png
|
165
|
+
- line-em-up/media/missile_boat.png
|
166
|
+
- line-em-up/media/missile_boat_original.png
|
167
|
+
- line-em-up/media/missile_boat_reverse.png
|
136
168
|
- line-em-up/media/missile_original.png
|
137
169
|
- line-em-up/media/missile_pack.png
|
170
|
+
- line-em-up/media/missile_pack_hud.png
|
138
171
|
- line-em-up/media/missile_pack_original.png
|
172
|
+
- line-em-up/media/missile_reverse.png
|
173
|
+
- line-em-up/media/mothership.png
|
174
|
+
- line-em-up/media/mothership_original.png
|
139
175
|
- line-em-up/media/question.png
|
140
176
|
- line-em-up/media/question_original.png
|
141
177
|
- line-em-up/media/resume.png
|
178
|
+
- line-em-up/media/single_star.png
|
142
179
|
- line-em-up/media/smoke.png
|
143
180
|
- line-em-up/media/soldier.png
|
144
181
|
- line-em-up/media/space.png
|
145
182
|
- line-em-up/media/spaceship.png
|
183
|
+
- line-em-up/media/spaceship_left-test.png
|
184
|
+
- line-em-up/media/spaceship_left.png
|
146
185
|
- line-em-up/media/spaceship_original.png
|
186
|
+
- line-em-up/media/spaceship_right.png
|
147
187
|
- line-em-up/media/star.png
|
148
188
|
- line-em-up/media/starfighter.bmp
|
149
189
|
- line-em-up/media/starfighterv2.bmp
|
@@ -171,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
171
211
|
version: '0'
|
172
212
|
requirements: []
|
173
213
|
rubyforge_project:
|
174
|
-
rubygems_version: 2.
|
214
|
+
rubygems_version: 2.6.14.1
|
175
215
|
signing_key:
|
176
216
|
specification_version: 4
|
177
217
|
summary: Vertical Scrolling Shooter
|
Binary file
|