New events and consolidated event manager procs.
This commit is contained in:
@@ -2,12 +2,19 @@ package game
|
|||||||
|
|
||||||
// all possible game events
|
// all possible game events
|
||||||
Event_Type :: enum {
|
Event_Type :: enum {
|
||||||
|
// game state
|
||||||
Game_Start,
|
Game_Start,
|
||||||
Game_Over,
|
Game_Over,
|
||||||
Game_Quit,
|
Game_Quit,
|
||||||
Game_Pause,
|
Game_Pause,
|
||||||
Game_Resume,
|
Game_Resume,
|
||||||
Game_Main_Menu,
|
Game_Main_Menu,
|
||||||
|
Game_Settings,
|
||||||
|
|
||||||
|
// ui events
|
||||||
|
UI_Select,
|
||||||
|
|
||||||
|
// gameplay
|
||||||
Score_Change,
|
Score_Change,
|
||||||
Ball_Collision,
|
Ball_Collision,
|
||||||
}
|
}
|
||||||
@@ -28,3 +35,41 @@ emit_event :: proc(event: Event) {
|
|||||||
flush_events :: proc() {
|
flush_events :: proc() {
|
||||||
clear(&GLOBAL_EVENTS)
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -268,68 +268,3 @@ make_gameplay_scene :: proc() -> Scene {
|
|||||||
level = init_level(),
|
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user