Consolidated scenes for neatness.

This commit is contained in:
2026-09-15 05:41:25 +02:00
parent fb1702190d
commit 0000ca4f12
2 changed files with 131 additions and 89 deletions
+18 -13
View File
@@ -10,10 +10,8 @@ WINDOW_TITLE :: "Pong"
Game :: struct {
viewport: rl.RenderTexture2D,
// base scene (gameplay, mainmenu)
scene: Scene,
// active overlay (pause, settings, or nil)
overlay_scene: Maybe(Overlay_Scene),
scene: Scene,
overlay_scene: Maybe(Scene),
}
// ------------------------------------------------------------------------------
@@ -24,18 +22,21 @@ game_init :: proc(game: ^Game) {
rl.SetTargetFPS(60)
game.viewport = rl.LoadRenderTexture(VIEWPORT_W, VIEWPORT_H)
game.scene = init_gameplay_scene()
game.scene = make_gameplay_scene()
// game.scene = make_main_menu()
debug_init()
}
game_update :: proc(game: ^Game) {
dt := rl.GetFrameTime()
input := poll_input()
// update the overlay if active, otherwise update base scene
if game.overlay_scene != nil {
overlay_update(game, input, dt)
// Pass direct pointers (^Scene) so modifications persist
if overlay, ok := &game.overlay_scene.?; ok {
scene_update(overlay, game, input, dt)
} else {
scene_update(game, input, dt)
scene_update(&game.scene, game, input, dt)
}
}
@@ -43,14 +44,18 @@ game_render :: proc(game: ^Game) {
rl.BeginDrawing()
rl.ClearBackground(rl.BLACK)
// offscreen pass render everything into virtual 1280x720 target
rl.BeginTextureMode(game.viewport)
rl.ClearBackground(rl.BLACK)
scene_render(game) // Renders base scene (Level field or Main Menu)
overlay_render(game) // Renders active overlay on top if present
// Render base scene
scene_render(&game.scene)
// Render active overlay on top if present
if overlay, ok := &game.overlay_scene.?; ok {
scene_render(overlay)
}
rl.EndTextureMode()
// upscale pass stretch virtual buffer onto physical window display
render_game_to_window(game.viewport.texture)
rl.EndDrawing()