Consolidated scenes for neatness.
This commit is contained in:
+18
-13
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user