From 06a9e4280b6e6447fc5b239b7b250ab3143a3d40 Mon Sep 17 00:00:00 2001 From: Karol Baraniecki Date: Fri, 10 Mar 2023 23:54:34 +0100 Subject: [PATCH] BrickGame: Stop bricks from falling when paused Allows for pausing with either the `P` or `Escape` keys. In this commit you can still rotate pieces when paused - which makes for an interesting "stop-time" cheat mechanic, but probably isn't yet what we want. --- Userland/Games/BrickGame/BrickGame.cpp | 32 ++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/Userland/Games/BrickGame/BrickGame.cpp b/Userland/Games/BrickGame/BrickGame.cpp index 8d6fbe81ed..d84d5c8588 100644 --- a/Userland/Games/BrickGame/BrickGame.cpp +++ b/Userland/Games/BrickGame/BrickGame.cpp @@ -246,6 +246,7 @@ class Bricks final { public: enum class GameState { Active, + Paused, GameOver }; @@ -316,6 +317,20 @@ public: return RenderRequest::RequestUpdate; } + void toggle_pause() + { + switch (m_state) { + case GameState::Active: + m_state = GameState::Paused; + break; + case GameState::Paused: + m_state = GameState::Active; + break; + case GameState::GameOver: + break; + } + } + [[nodiscard]] RenderRequest update() { auto const current_level { m_level }; @@ -433,12 +448,17 @@ void BrickGame::reset() void BrickGame::timer_event(Core::TimerEvent&) { - if (m_brick_game->state() == Bricks::GameState::GameOver) { + switch (m_brick_game->state()) { + case Bricks::GameState::GameOver: game_over(); - return; + break; + case Bricks::GameState::Active: + if (m_brick_game->update() == Bricks::RenderRequest::RequestUpdate) + update(); + break; + case Bricks::GameState::Paused: + break; } - if (m_brick_game->update() == Bricks::RenderRequest::RequestUpdate) - update(); } void BrickGame::keydown_event(GUI::KeyEvent& event) @@ -470,6 +490,10 @@ void BrickGame::keydown_event(GUI::KeyEvent& event) case KeyCode::Key_Space: render_request = m_brick_game->move_down_fast(); break; + case KeyCode::Key_Escape: + case KeyCode::Key_P: + m_brick_game->toggle_pause(); + break; default: event.ignore(); break;