init, working screens from raylib screens example and basic bullets mechanics
This commit is contained in:
commit
178cf92f44
3 changed files with 301 additions and 0 deletions
101
screens.odin
Normal file
101
screens.odin
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
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)
|
||||
}
|
||||
}
|
||||
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:
|
||||
{
|
||||
// TODO: Draw ENDING screen here!
|
||||
rl.DrawRectangle(0, 0, state.screen_width, state.screen_height, rl.BLUE)
|
||||
rl.DrawText("ENDING SCREEN", 20, 20, 40, rl.DARKBLUE)
|
||||
rl.DrawText(
|
||||
"PRESS ENTER or TAP to RETURN to TITLE SCREEN",
|
||||
120,
|
||||
220,
|
||||
20,
|
||||
rl.DARKBLUE,
|
||||
)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue