aboutsummaryrefslogtreecommitdiff
path: root/src/games/tetris/Tetris.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/games/tetris/Tetris.cpp')
-rw-r--r--src/games/tetris/Tetris.cpp88
1 files changed, 20 insertions, 68 deletions
diff --git a/src/games/tetris/Tetris.cpp b/src/games/tetris/Tetris.cpp
index 8b3c5bd..0fee80a 100644
--- a/src/games/tetris/Tetris.cpp
+++ b/src/games/tetris/Tetris.cpp
@@ -13,8 +13,7 @@
#include <string>
-static
-std::u32string
+static std::u32string
int32_to_u32string(int32_t value)
{
std::string str = std::to_string(value);
@@ -27,12 +26,12 @@ Tetris::Tetris()
, m_active_tetromino{m_board.m_bitmap}
, m_highscore {ReadHighscore()}
{
+ Start();
}
void
Tetris::Start()
{
- m_game_status = game_resuming;
m_tlast_milliseconds = SDL_GetTicks();
m_dt_remaining_seconds = 0.0f;
@@ -47,27 +46,14 @@ Tetris::Start()
m_starting_level = 0;
m_level = 0;
m_softdrop_counter = 0;
+
+ m_game_status = game_resume;
}
-bool
-Tetris::Update(std::vector<SDL_Event>& events)
+void
+Tetris::FinishUpdate(float dt)
{
- m_frame_strings.clear();
-
- if (m_game_status == game_starting) {
- Start();
- }
-
-
- Color clear_color = {0.2f, 0.2f, 0.2f, 1.0f};
- g_renderer.SetCameraSize(4.0f, 3.0f);
- g_renderer.SetClearColor(clear_color);
-
-
- float dt = ProcessDt();
-
-
- if (m_game_status == game_resuming) {
+ if (m_game_status == game_resume) {
uint32_t softdrop_count = GetSoftdropCount(dt);
for (uint32_t i{0}; i < softdrop_count; i++) {
bool moved_down = m_active_tetromino.MaybeMoveDown();
@@ -76,37 +62,21 @@ Tetris::Update(std::vector<SDL_Event>& events)
}
}
}
-
-
- for (auto& event : events) {
- switch (m_game_status) {
- case game_resuming: UpdateResumeState(event); break;
- case game_paused: UpdatePauseState(event); break;
- default:;
- }
- }
-
-
- if (m_game_status == game_exit) {
- return false;
- }
-
-
- Draw();
-
-
- return true;
}
-void Tetris::UpdateResumeState(SDL_Event& event) {
+void
+Tetris::ProcessEvent(SDL_Event& event)
+{
switch (event.type) {
case SDL_EVENT_KEY_DOWN: {
auto key = event.key.key;
if (key == SDLK_RIGHT) {
m_active_tetromino.MaybeMoveHorizontally(Tetromino::right);
- } else if (key == SDLK_LEFT) {
+ }
+ else if (key == SDLK_LEFT) {
m_active_tetromino.MaybeMoveHorizontally(Tetromino::left);
- } else if (key == SDLK_DOWN) {
+ }
+ else if (key == SDLK_DOWN) {
bool moved_down = m_active_tetromino.MaybeMoveDown();
if (!moved_down) {
HandleTetrominoPlacement();
@@ -114,24 +84,12 @@ void Tetris::UpdateResumeState(SDL_Event& event) {
else {
m_softdrop_counter++;
}
- } else if (key == SDLK_X) {
+ }
+ else if (key == SDLK_X) {
m_active_tetromino.MaybeRotate(Tetromino::rotate_clockwise);
- } else if (key == SDLK_Z || key == SDLK_Y) {
- m_active_tetromino.MaybeRotate(Tetromino::rotate_counter_clockwise);
- } else if (key == SDLK_ESCAPE) {
- m_game_status = game_paused;
}
- }
- default:;
- }
-}
-
-void Tetris::UpdatePauseState(SDL_Event& event) {
- switch (event.type) {
- case SDL_EVENT_KEY_DOWN: {
- auto key = event.key.key;
- if (key == SDLK_ESCAPE) {
- m_game_status = game_resuming;
+ else if (key == SDLK_Z || key == SDLK_Y) {
+ m_active_tetromino.MaybeRotate(Tetromino::rotate_counter_clockwise);
}
}
default:;
@@ -244,13 +202,6 @@ Tetris::Draw()
DrawLineCounter();
DrawLevel();
DrawScore();
-
- if (m_game_status == game_paused) {
- DrawDefaultGamePausedMenu();
- }
- else if (m_game_status == game_over) {
- DrawGameOverMenu();
- }
}
void
@@ -260,7 +211,8 @@ Tetris::DrawGameOverMenu()
ImGui::Text("Score = %d", m_score);
ImGui::Text("HighScore = %d", m_highscore);
if (ImGui::Button("Restart")) {
- m_game_status = game_starting;
+ printf("restarted\n");
+ Start();
}
if (ImGui::Button("Exit")) {
m_game_status = game_exit;