aboutsummaryrefslogtreecommitdiff
path: root/src/games/tetris/Tetris.cpp
diff options
context:
space:
mode:
authorfschildt <florian.schildt@protonmail.com>2025-09-28 11:23:04 +0200
committerfschildt <florian.schildt@protonmail.com>2025-09-28 11:23:04 +0200
commit4537e9bee3d054786857fa92824e2d9e8385bb36 (patch)
tree92ee1fea597f8164d09885286b71d812f6890259 /src/games/tetris/Tetris.cpp
parent3d30e1ee9d1c9fb67cca8e3f178ba5fd05a2726e (diff)
minesweeper: now playable
Diffstat (limited to 'src/games/tetris/Tetris.cpp')
-rw-r--r--src/games/tetris/Tetris.cpp75
1 files changed, 38 insertions, 37 deletions
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<SDL_Event> &events, RenderGroup &render_group) {
+bool Tetris::Update(std::vector<SDL_Event> &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<SDL_Event> &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);