diff --git a/game/state/handlers/gameover.go b/game/state/handlers/gameover.go index 9c557ee..c7a5b36 100644 --- a/game/state/handlers/gameover.go +++ b/game/state/handlers/gameover.go @@ -1,25 +1,45 @@ package handlers import ( + "image/color" + "tetris/assets" "tetris/engine/audio" + "tetris/engine/core" "tetris/engine/render" "tetris/game/state" rl "github.com/gen2brain/raylib-go/raylib" ) -type GameOver struct{} +type GameOver struct { + blinkTimer core.IntervalTimer + textColor color.RGBA +} -func (GameOver) Enter() { +func (GameOver *GameOver) Enter() { audio.Play(assets.SFX_GAME_OVER) + GameOver.blinkTimer = core.NewIntervalTimer(0.2) + GameOver.textColor = rl.White } func (GameOver) Exit() { } -func (GameOver GameOver) Update(fsm state.Transitioner, delta float32) { - if !audio.IsPlaying(assets.SFX_GAME_OVER) { +func (GameOver) soundDone() bool { + return !audio.IsPlaying(assets.SFX_GAME_OVER) +} + +func (GameOver *GameOver) Update(fsm state.Transitioner, delta float32) { + if GameOver.blinkTimer.UpdateReset(delta) { + if GameOver.textColor == rl.Red { + GameOver.textColor = rl.White + } else { + GameOver.textColor = rl.Red + } + } + + if GameOver.soundDone() { if rl.IsKeyPressed(rl.KeyEnter) { fsm.Switch("gameplay") } else if rl.IsKeyPressed(rl.KeyQ) { @@ -28,8 +48,12 @@ func (GameOver GameOver) Update(fsm state.Transitioner, delta float32) { } } -func (GameOver *GameOver) Render() { +func (GameOver GameOver) Render() { render.Begin(rl.Black) - render.DrawTextCenter(340, 200, 32, "Game Over", rl.White) + render.DrawTextCenter(340, 200, 32, "Game Over", GameOver.textColor) + if GameOver.soundDone() { + render.DrawTextCenter(340, 290, 16, "Press ENTER to restart", rl.White) + render.DrawTextCenter(340, 316, 16, "Press Q to return to menu", rl.White) + } render.End() }