Implement traps system: add Trap, Landmine, and EventHorizon classes with collision detection and interaction logic; integrate trap handling in the game scene and enemy AI.

This commit is contained in:
2026-04-02 22:46:24 +01:00
parent db7c2aa7a2
commit 7c35419026
20 changed files with 294 additions and 13 deletions
+16
View File
@@ -3,6 +3,7 @@ require_relative 'hud/layer'
require_relative 'props/handler'
require_relative 'enemy/handler'
require_relative 'weapons/handler'
require_relative 'traps/handler'
require_relative 'character'
class Game < Scene
@@ -11,11 +12,14 @@ class Game < Scene
@font = Gosu::Font.new(24)
@floor_image = Gosu::Image.new("assets/images/floor.png", retro: true)
@blasted = 0
@maze = Maze.new
@character = Character.new
@enemies = EnemyHandler.new
@props = PropsHandler.new
@weapons = WeaponHandler.new
@traps = TrapHandler.new
@hud = HUDLayer.new
@@ -28,14 +32,25 @@ class Game < Scene
$bus.on(:camera_pos) do
next @camera
end
$bus.on(:blast) do |_|
@blasted = 10 # blast for 10 frames
end
end
def draw
if @blasted != 0
# this is a terrible animation for blasting but that would require me to work on artwork and I don't have time for that, so let's just flash the screen white and fade it out
Gosu.draw_rect(0, 0, *SCREEN_SIZE, Gosu::Color.new(@blasted * 255 / 10, 255, 255, 255), Float::INFINITY)
@blasted -= 1
return
end
draw_floor
@maze.draw
@character.draw
@enemies.draw
@props.draw
@traps.draw
$bus.emit(:shade) if $bus.get(:settings, :fog)
@hud.draw
@weapons.draw
@@ -71,6 +86,7 @@ class Game < Scene
@character.update(dt)
@enemies.update(dt)
@props.update(dt)
@traps.update(dt)
@weapons.update(dt)
end