From f94cc83ed97a996e70f659a423b8e632d4ee8fb1 Mon Sep 17 00:00:00 2001 From: Eltrac Date: Sun, 16 Mar 2025 23:28:26 +0800 Subject: feat(ui): game over screen --- main.lua | 57 +++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 18 deletions(-) (limited to 'main.lua') diff --git a/main.lua b/main.lua index 5ac09d0..7a7ecef 100644 --- a/main.lua +++ b/main.lua @@ -7,6 +7,8 @@ local map = require "logic.map" local controller = require "logic.controller" local translator = require "i18n.translator" +local gameState = "playing" -- 初始状态为playing + function love.load() G = {} -- load font @@ -28,33 +30,52 @@ function love.load() end function love.draw() - RenderManager:draw() + if gameState == "playing" then + RenderManager:draw() + elseif gameState == "gameOver" then + -- show game over screen + love.graphics.setColor(1, 0, 0, 1) + love.graphics.printf(translator.T("gameOver"), 0, love.graphics.getHeight() / 2 - 20, love.graphics.getWidth(), "center") + love.graphics.setColor(1, 1, 1, 1) + love.graphics.printf(translator.T("pressSpaceToRestart"), 0, love.graphics.getHeight() / 2 + 20, love.graphics.getWidth(), "center") + -- play game over sound + audio.play("gameover") + end end function love.update(dt) - -- game state updates - local gameStates = { G.BodyLifeCycleManager, G.world, G.currentRoom, G.player } - for _, state in ipairs(gameStates) do - state:update(dt) - end + if gameState == "playing" then + -- game state updates + local gameStates = { G.BodyLifeCycleManager, G.world, G.currentRoom, G.player } + for _, state in ipairs(gameStates) do + state:update(dt) + end - -- game logic updates - local updates = { map, controller, speaker } - for _, entity in ipairs(updates) do - entity.update(dt) - end + -- game logic updates + local updates = { map, controller, speaker } + for _, entity in ipairs(updates) do + entity.update(dt) + end - -- check if game has ended - if not G.player:isAlive() then - initGame() - end + -- check if game has ended + if not G.player:isAlive() then + gameState = "gameOver" + audio.stopAll() + end - -- time update - G.time = G.time + dt + -- time update + G.time = G.time + dt + end end function love.keypressed(key) - controller.keypressed(key) + -- press space to restart gane + if gameState == "gameOver" and key == "space" then + initGame() + gameState = "playing" + else + controller.keypressed(key) + end end function love.mousereleased(x, y, button) -- cgit v1.2.3