98 lines
1.9 KiB
Odin
98 lines
1.9 KiB
Odin
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,
|
|
)
|
|
}
|