aboutsummaryrefslogtreecommitdiff
path: root/src/games/tetris/Tetris.hpp
diff options
context:
space:
mode:
authorfschildt <florian.schildt@protonmail.com>2025-07-21 16:07:28 +0200
committerfschildt <florian.schildt@protonmail.com>2025-07-21 16:07:28 +0200
commitb46a0d9369fbaa1938f0968ab216bc2d564a9c37 (patch)
treec28b75187d01be9642af56a54a6101f51b25e4a7 /src/games/tetris/Tetris.hpp
first commitHEADmaster
Diffstat (limited to 'src/games/tetris/Tetris.hpp')
-rw-r--r--src/games/tetris/Tetris.hpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/games/tetris/Tetris.hpp b/src/games/tetris/Tetris.hpp
new file mode 100644
index 0000000..30167d8
--- /dev/null
+++ b/src/games/tetris/Tetris.hpp
@@ -0,0 +1,67 @@
+#pragma once
+
+#include <imgui.h>
+#include <games/Game.hpp>
+#include <games/tetris/Tetromino.hpp>
+#include <games/tetris/Board.hpp>
+#include <renderer/RenderGroup.hpp>
+
+enum class TetrisRunningState {
+ Resume,
+ Pause,
+ GameOver,
+ Restart,
+ Exit
+};
+
+
+class Tetris : public Game {
+public:
+ Tetris();
+ bool Update(std::vector<SDL_Event> &events, RenderGroup& render_group) override;
+ void HandleTetrominoPlacement();
+
+private:
+ void Restart();
+ void UpdateResumeState(SDL_Event &event);
+ void UpdatePauseState(SDL_Event &event);
+
+ 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 DrawPauseMenu(RenderGroup &render_group);
+ void DrawGameOverMenu(RenderGroup &render_group);
+
+private:
+ static constexpr ImGuiWindowFlags s_MenuImGuiWindowFlags = ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_AlwaysAutoResize;
+ static constexpr ImGuiWindowFlags s_DefaultImGuiWindowFlags = ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoScrollbar;
+
+
+private:
+ TetrisRunningState m_RunningState = TetrisRunningState::Resume;
+
+ float m_DtInSecondsRemaining = 0.0f;
+ uint64_t m_MillisecondsSinceT0Last = SDL_GetTicks();
+
+ Board m_Board;
+ Tetromino m_ActiveTetromino;
+ Tetromino m_NextTetromino;
+
+ int32_t m_TetrominoCounters[(size_t)TetrominoId::TETROMINO_ID_COUNT] {};
+ int32_t m_Score = 0;
+ int32_t m_LineCounter = 0;
+ int32_t m_StartingLevel = 0;
+ int32_t m_Level = 0;
+ int32_t m_SoftdropCounter = 0;
+
+ int32_t m_HighScore = 0;
+};
+
+