package space_invaders import "core:log" import rl "vendor:raylib" GameScreen :: enum { TITLE, GAMEPLAY, ENDING, } update_screen :: proc(state: ^GameState) { using state switch 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) { using state { switch state.screen { case .TITLE: { rl.DrawRectangle(0, 0, state.screen_width, state.screen_height, rl.BLACK) rl.DrawTexturePro( texture_atlas, {LOGO_TO[0].x, LOGO_TO[0].y, LOGO_TO[1].x, LOGO_TO[1].y}, {0, 0, LOGO_TO[1].x * 4, LOGO_TO[1].y * 4}, {f32(-screen_width/4), f32(-screen_height/3)}, 0, rl.GREEN, ) text: cstring = "PRESS ENTER TO START GAME" size := rl.MeasureText(text, 20) rl.DrawText( text, (screen_width / 2) - (size / 2), screen_height - 20, 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, ) }