New events and consolidated event manager procs.

This commit is contained in:
2026-09-18 07:23:46 +02:00
parent 6b76ad6874
commit 3fb194c57d
2 changed files with 45 additions and 65 deletions
+45
View File
@@ -2,12 +2,19 @@ package game
// all possible game events
Event_Type :: enum {
// game state
Game_Start,
Game_Over,
Game_Quit,
Game_Pause,
Game_Resume,
Game_Main_Menu,
Game_Settings,
// ui events
UI_Select,
// gameplay
Score_Change,
Ball_Collision,
}
@@ -27,4 +34,42 @@ emit_event :: proc(event: Event) {
flush_events :: proc() {
clear(&GLOBAL_EVENTS)
}
process_events :: proc(game: ^Game) {
for event in GLOBAL_EVENTS {
#partial switch event.type {
case .Game_Start:
game.overlay_scene = nil
game.scene = make_gameplay_scene()
audio_fade_in(&game.audio, duration = 1.5)
case .Game_Pause:
game.overlay_scene = make_pause_overlay()
case .Game_Resume:
game.overlay_scene = nil
case .Game_Main_Menu:
game.overlay_scene = nil
game.scene = make_main_menu()
audio_fade_out(&game.audio, duration = 1.0)
case .Game_Settings:
game.overlay_scene = nil
game.overlay_scene = make_settings_menu(&game.audio)
case .Game_Over:
game.overlay_scene = make_game_over_overlay(event.winner_is_player)
case .Game_Quit:
game.should_close = true
case .UI_Select:
audio_play_sfx(&game.audio, .UI_Select)
case .Ball_Collision:
audio_play_sfx(&game.audio, .Ball_Collision)
}
}
}
-65
View File
@@ -267,69 +267,4 @@ make_gameplay_scene :: proc() -> Scene {
type = .Gameplay,
level = init_level(),
}
}
// ------------------------------------------------------------------------------
// Unified Scene Dispatchers
// ------------------------------------------------------------------------------
scene_render :: proc(scene: ^Scene) {
if level, ok := scene.level.?; ok {
render_level(level)
render_hud(level)
}
#partial switch scene.type {
case .Pause_Menu:
render_pause_menu(scene^)
case .Game_Over:
render_game_over(scene^)
case .Main_Menu:
render_main_menu(scene^)
}
}
scene_update :: proc(scene: ^Scene, game: ^Game, input: Input_Event, dt: f32) {
#partial switch scene.type {
case .Main_Menu:
update_main_menu(scene, input)
case .Pause_Menu:
update_pause_menu(scene, input)
case .Gameplay:
level, level_ok := &scene.level.?
assert(level_ok, "scene_update: .Gameplay scene is missing a Level component")
update_level(level, input, dt)
if input.pause_pressed {
emit_event(Event{ type = .Game_Pause })
}
case .Game_Over:
update_game_over(scene, input)
}
for event in GLOBAL_EVENTS {
#partial switch event.type {
case .Game_Start:
game.overlay_scene = nil
game.scene = make_gameplay_scene()
case .Game_Pause:
game.overlay_scene = make_pause_overlay()
case .Game_Resume:
game.overlay_scene = nil
case .Game_Main_Menu:
game.overlay_scene = nil
game.scene = make_main_menu()
case .Game_Over:
game.overlay_scene = make_game_over_overlay(event.winner_is_player)
case .Game_Quit:
game.should_close = true
}
}
}