From 4537e9bee3d054786857fa92824e2d9e8385bb36 Mon Sep 17 00:00:00 2001 From: fschildt Date: Sun, 28 Sep 2025 11:23:04 +0200 Subject: minesweeper: now playable --- src/games/tetris/Tetris.cpp | 75 +++++++++++++++++++++++---------------------- src/games/tetris/Tetris.hpp | 21 +++++++------ 2 files changed, 49 insertions(+), 47 deletions(-) (limited to 'src/games/tetris') diff --git a/src/games/tetris/Tetris.cpp b/src/games/tetris/Tetris.cpp index f2a7384..8f07df0 100644 --- a/src/games/tetris/Tetris.cpp +++ b/src/games/tetris/Tetris.cpp @@ -9,7 +9,8 @@ // Todo: change to new font scaling api in imgui first // Todo: test text with hardcoded gap + dummy to ensure it gets placed as expected -Tetris::Tetris() : +Tetris::Tetris(RenderGroup& m_RenderGroup) : + m_RenderGroup(m_RenderGroup), m_ActiveTetromino(m_Board), m_NextTetromino(m_Board) { @@ -34,10 +35,10 @@ void Tetris::Restart() { m_SoftdropCounter = 0; } -bool Tetris::Update(std::vector &events, RenderGroup &render_group) { +bool Tetris::Update(std::vector &events) { Color clear_color = {0.2f, 0.2f, 0.2f, 1.0f}; - render_group.SetCameraSize(4.0f, 3.0f); - render_group.Clear(clear_color); + m_RenderGroup.SetCameraSize(4.0f, 3.0f); + m_RenderGroup.Clear(clear_color); if (m_RunningState == TetrisRunningState::Restart) { Restart(); @@ -71,7 +72,7 @@ bool Tetris::Update(std::vector &events, RenderGroup &render_group) { } } - Draw(render_group); + Draw(); bool keep_running = m_RunningState != TetrisRunningState::Exit; @@ -210,26 +211,26 @@ void Tetris::HandleGameOver() { } } -void Tetris::Draw(RenderGroup &render_group) { - m_Board.Draw(m_Level, render_group); - m_ActiveTetromino.Draw(render_group); +void Tetris::Draw() { + m_Board.Draw(m_Level, m_RenderGroup); + m_ActiveTetromino.Draw(m_RenderGroup); - DrawNextTetromino(render_group); - DrawStatistics(render_group); - DrawLineCounter(render_group); - DrawLevel(render_group); - DrawScore(render_group); + DrawNextTetromino(); + DrawStatistics(); + DrawLineCounter(); + DrawLevel(); + DrawScore(); // Todo: Use transparency if (m_RunningState == TetrisRunningState::Pause) { - DrawPauseMenu(render_group); + DrawPauseMenu(); } else if (m_RunningState == TetrisRunningState::GameOver) { - DrawGameOverMenu(render_group); + DrawGameOverMenu(); } } -void Tetris::DrawPauseMenu(RenderGroup &render_group) { +void Tetris::DrawPauseMenu() { ImGui::Begin("TetrisPause", nullptr, s_MenuImGuiWindowFlags); if (ImGui::Button("Resume")) { m_RunningState = TetrisRunningState::Resume; @@ -243,7 +244,7 @@ void Tetris::DrawPauseMenu(RenderGroup &render_group) { ImGui::End(); } -void Tetris::DrawGameOverMenu(RenderGroup &render_group) { +void Tetris::DrawGameOverMenu() { ImGui::Begin("TetrisGameOver", nullptr, s_MenuImGuiWindowFlags); ImGui::Text("Score = %d", m_Score); ImGui::Text("HighScore = %d", m_HighScore); @@ -256,9 +257,9 @@ void Tetris::DrawGameOverMenu(RenderGroup &render_group) { ImGui::End(); } -void Tetris::DrawLineCounter(RenderGroup &render_group) { +void Tetris::DrawLineCounter() { V2F32 view_pos = {0.5f, 2.6f}; - ImVec2 screen_pos = render_group.ViewPosToScreenPosImGui(view_pos); + ImVec2 screen_pos = m_RenderGroup.ViewPosToScreenPosImGui(view_pos); ImGui::SetNextWindowPos(screen_pos); ImGui::Begin("TetrisLines", nullptr, s_DefaultImGuiWindowFlags); @@ -266,38 +267,38 @@ void Tetris::DrawLineCounter(RenderGroup &render_group) { ImGui::End(); } -void Tetris::DrawStatistics(RenderGroup &render_group) { +void Tetris::DrawStatistics() { V2F32 view_tetrominoes_pos = {0.4f, 1.8f}; V2F32 view_advance = {0.0f, 0.2f}; V2F32 view_text_title_pos = view_tetrominoes_pos + V2F32(0.02f, 0.4f); - ImVec2 screen_text_title_pos = render_group.ViewPosToScreenPosImGui(view_text_title_pos); + ImVec2 screen_text_title_pos = m_RenderGroup.ViewPosToScreenPosImGui(view_text_title_pos); V2F32 view_text_pos = view_tetrominoes_pos + V2F32(0.4f, 0.16f); V2F32 view_text_gap = {0.0f, 0.124f}; - ImVec2 screen_text_pos = render_group.ViewPosToScreenPosImGui(view_text_pos); - ImVec2 screen_text_gap = render_group.ViewSizeToScreenSizeImGui(view_text_gap); + ImVec2 screen_text_pos = m_RenderGroup.ViewPosToScreenPosImGui(view_text_pos); + ImVec2 screen_text_gap = m_RenderGroup.ViewSizeToScreenSizeImGui(view_text_gap); - Tetromino::Draw(Tetromino::t_piece, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::t_piece, 0, view_tetrominoes_pos, 0.5f, m_RenderGroup); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(Tetromino::j_piece, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::j_piece, 0, view_tetrominoes_pos, 0.5f, m_RenderGroup); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(Tetromino::z_piece, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::z_piece, 0, view_tetrominoes_pos, 0.5f, m_RenderGroup); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(Tetromino::o_piece, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::o_piece, 0, view_tetrominoes_pos, 0.5f, m_RenderGroup); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(Tetromino::s_piece, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::s_piece, 0, view_tetrominoes_pos, 0.5f, m_RenderGroup); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(Tetromino::l_piece, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::l_piece, 0, view_tetrominoes_pos, 0.5f, m_RenderGroup); view_tetrominoes_pos.y -= view_advance.y; - Tetromino::Draw(Tetromino::i_piece, 0, view_tetrominoes_pos, 0.5f, render_group); + Tetromino::Draw(Tetromino::i_piece, 0, view_tetrominoes_pos, 0.5f, m_RenderGroup); view_tetrominoes_pos.y -= view_advance.y; @@ -328,9 +329,9 @@ void Tetris::DrawStatistics(RenderGroup &render_group) { ImGui::End(); } -void Tetris::DrawScore(RenderGroup &render_group) { +void Tetris::DrawScore() { V2F32 view_pos = {3.0f, 2.2f}; - ImVec2 screen_pos = render_group.ViewPosToScreenPosImGui(view_pos); + ImVec2 screen_pos = m_RenderGroup.ViewPosToScreenPosImGui(view_pos); ImGui::SetNextWindowPos(screen_pos); ImGui::Begin("TetrisScore", nullptr, s_DefaultImGuiWindowFlags); @@ -339,9 +340,9 @@ void Tetris::DrawScore(RenderGroup &render_group) { ImGui::End(); } -void Tetris::DrawNextTetromino(RenderGroup &render_group) { +void Tetris::DrawNextTetromino() { V2F32 text_view_pos = {3.0f, 1.8f}; - ImVec2 text_screen_pos = render_group.ViewPosToScreenPosImGui(text_view_pos); + ImVec2 text_screen_pos = m_RenderGroup.ViewPosToScreenPosImGui(text_view_pos); ImGui::SetNextWindowPos(text_screen_pos); ImGui::Begin("TetrisNextTetromino", nullptr, s_DefaultImGuiWindowFlags); @@ -350,12 +351,12 @@ void Tetris::DrawNextTetromino(RenderGroup &render_group) { V2F32 tetromino_view_pos = {3.0, 1.4f}; - Tetromino::Draw(m_NextTetromino.GetId(), 0, tetromino_view_pos, 0.5f, render_group); + Tetromino::Draw(m_NextTetromino.GetId(), 0, tetromino_view_pos, 0.5f, m_RenderGroup); } -void Tetris::DrawLevel(RenderGroup &render_group) { +void Tetris::DrawLevel() { V2F32 view_pos = {3.0f, 1.2f}; - ImVec2 screen_pos = render_group.ViewPosToScreenPosImGui(view_pos); + ImVec2 screen_pos = m_RenderGroup.ViewPosToScreenPosImGui(view_pos); ImGui::SetNextWindowPos(screen_pos); ImGui::Begin("TetrisLevel", nullptr, s_DefaultImGuiWindowFlags); diff --git a/src/games/tetris/Tetris.hpp b/src/games/tetris/Tetris.hpp index 42981db..f4a8caf 100644 --- a/src/games/tetris/Tetris.hpp +++ b/src/games/tetris/Tetris.hpp @@ -17,8 +17,8 @@ enum class TetrisRunningState { class Tetris : public Game { public: - Tetris(); - bool Update(std::vector &events, RenderGroup& render_group) override; + Tetris(RenderGroup& render_group); + bool Update(std::vector &events) override; void HandleTetrominoPlacement(); private: @@ -29,15 +29,15 @@ private: uint32_t GetHarddropCount(float dt); void HandleGameOver(); - void Draw(RenderGroup &render_group); - void DrawLineCounter(RenderGroup &render_group); - void DrawStatistics(RenderGroup &render_group); - void DrawScore(RenderGroup &render_group); - void DrawNextTetromino(RenderGroup &render_group); - void DrawLevel(RenderGroup &render_group); + void Draw(); + void DrawLineCounter(); + void DrawStatistics(); + void DrawScore(); + void DrawNextTetromino(); + void DrawLevel(); - void DrawPauseMenu(RenderGroup &render_group); - void DrawGameOverMenu(RenderGroup &render_group); + void DrawPauseMenu(); + void DrawGameOverMenu(); private: static constexpr ImGuiWindowFlags s_MenuImGuiWindowFlags = ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_AlwaysAutoResize; @@ -45,6 +45,7 @@ private: private: + RenderGroup& m_RenderGroup; TetrisRunningState m_RunningState = TetrisRunningState::Resume; float m_DtInSecondsRemaining = 0.0f; -- cgit v1.2.3