From 4a1df958e4477838c00259844a97cece68a8c6c7 Mon Sep 17 00:00:00 2001 From: Jason Hilder Date: Tue, 29 Sep 2026 07:48:20 +0200 Subject: [PATCH] Updated collision event for screenshake. --- src/event_manager.odin | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/event_manager.odin b/src/event_manager.odin index 1544931..7ca4c74 100644 --- a/src/event_manager.odin +++ b/src/event_manager.odin @@ -1,7 +1,8 @@ package game Change_Resolution_Data :: struct { res_dir: int } -Game_Over_Data :: struct { winner_is_player: bool } +Ball_Collision_Data :: struct { speed: f32, } +Game_Over_Data :: struct { winner_is_player: bool } Simple_Event :: enum { Game_Start, @@ -14,13 +15,13 @@ Simple_Event :: enum { Game_Quit, UI_Select, Score_Change, - Ball_Collision, } Event :: union { Simple_Event, Change_Resolution_Data, Game_Over_Data, + Ball_Collision_Data, } // global event storage @@ -56,6 +57,18 @@ process_events :: proc(game: ^Game) { case Game_Over_Data: push_scene(game, make_game_over_overlay(e.winner_is_player)) + case Ball_Collision_Data: + // normalize the speed between 0.0 -> 1.0 + // map that value to the camera displacement + min_speed: f32 = 200.0 + max_speed: f32 = 550.0 + speed_factor := clamp((e.speed - min_speed) / (max_speed - min_speed), 0, 1.0) + + intensity := 0.5 + (speed_factor * 4.5) + game_trigger_shake(game, intensity, duration = 0.15) + + audio_play_sfx(&game.audio, .Ball_Collision) + case Simple_Event: #partial switch e { case .Game_Start: @@ -81,8 +94,6 @@ process_events :: proc(game: ^Game) { case .UI_Select: audio_play_sfx(&game.audio, .UI_Select) - case .Ball_Collision: - audio_play_sfx(&game.audio, .Ball_Collision) } } }