package space_invaders import "core:log" import rl "vendor:raylib" GameScreen :: enum { LOGO, TITLE, GAMEPLAY, ENDING, } update_screen :: proc(state: ^GameState) { using state switch screen { case .LOGO: { // Wait for 2 seconds (120 frames) before jumping to TITLE screen if (frame_counter > int(target_fps * 2)) { previous_screen = screen screen = .TITLE log.info("Updated screen enum", screen) } } case .TITLE: { // Press enter to change to GAMEPLAY screen if (rl.IsKeyPressed(rl.KeyboardKey.ENTER)) { previous_screen = screen screen = .GAMEPLAY log.info("Updated screen enum", screen) } reset_game = true } case .GAMEPLAY: { update_game(state) } case .ENDING: { // Press enter to return to TITLE screen if (rl.IsKeyPressed(rl.KeyboardKey.ENTER)) { previous_screen = screen screen = .TITLE log.info("Updated screen enum", screen) } } } if last_frame_screen != screen { log.infof("Current screen: %v, previous screen: %v", screen, previous_screen) } last_frame_screen = screen } draw_screen :: proc(state: ^GameState) { { switch state.screen { case .LOGO: { // TODO: Draw LOGO screen here! rl.DrawText("SPACE INVADERS", 220, 220, 40, rl.GREEN) rl.DrawText("WAIT for 2 SECONDS...", 290, 400, 20, rl.GRAY) } case .TITLE: { // TODO: Draw TITLE screen here! rl.DrawRectangle(0, 0, state.screen_width, state.screen_height, rl.GREEN) rl.DrawText("TITLE SCREEN", 20, 20, 40, rl.DARKGREEN) rl.DrawText( "PRESS ENTER or TAP to JUMP to GAMEPLAY SCREEN", 120, 220, 20, rl.DARKGREEN, ) } case .GAMEPLAY: { draw_game(state) } case .ENDING: { draw_ending_screen(state) } } } } draw_ending_screen :: proc(state: ^GameState) { using state // TODO: Draw ENDING screen here! rl.DrawRectangle(0, 0, state.screen_width, state.screen_height, rl.BLACK) rl.DrawText("Game End", 20, 20, 40, rl.WHITE) rl.DrawText(rl.TextFormat("Player score: %d\nHighscore: %d", player_score, player_high_score), 120, 220, 20, rl.WHITE) }