From 406186d8bb3383254c8f8cd068986138b2a5a7a9 Mon Sep 17 00:00:00 2001 From: zvon Date: Sun, 14 Mar 2021 17:02:41 +0100 Subject: [PATCH] TETRIS: Fix restart --- tetris/functions.cpp | 2 ++ tetris/global_vars.cpp | 1 + tetris/global_vars.hpp | 1 + tetris/tetris.cpp | 13 ++++++++----- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/tetris/functions.cpp b/tetris/functions.cpp index 274a7fe..3b55a46 100644 --- a/tetris/functions.cpp +++ b/tetris/functions.cpp @@ -118,6 +118,8 @@ void quitGame() { } void resetGame() { + std::lock_guard< std::mutex > guard( g_render_mutex ); + std::lock_guard< std::mutex > guard2( g_movement_mutex ); g_cur_object.reset(); g_checked_line = true; g_next_object.reset(); diff --git a/tetris/global_vars.cpp b/tetris/global_vars.cpp index d92065a..2e79c21 100644 --- a/tetris/global_vars.cpp +++ b/tetris/global_vars.cpp @@ -36,6 +36,7 @@ std::shared_ptr< TetrisPiece > g_cur_shadow{}; std::shared_ptr< SDLPP::RectangleRender > g_shadow_colider{}; std::mutex g_movement_mutex{}; +std::mutex g_render_mutex{}; bool g_quit = false; std::vector< std::function< void( diff --git a/tetris/global_vars.hpp b/tetris/global_vars.hpp index 7b3af25..8568584 100644 --- a/tetris/global_vars.hpp +++ b/tetris/global_vars.hpp @@ -42,6 +42,7 @@ extern std::shared_ptr< TetrisPiece > g_cur_shadow; extern std::shared_ptr< SDLPP::RectangleRender > g_shadow_colider; extern std::mutex g_movement_mutex; +extern std::mutex g_render_mutex; extern bool g_quit; extern std::vector< std::function< void( diff --git a/tetris/tetris.cpp b/tetris/tetris.cpp index 8222d53..a875a93 100644 --- a/tetris/tetris.cpp +++ b/tetris/tetris.cpp @@ -157,12 +157,15 @@ int main() { g_update_objects.pop_back(); } - renderer->clearRenderer(); - for ( size_t i = 0; i < g_active_scenes.size(); i++ ) { - g_active_scenes[i]->updateScene(); - g_active_scenes[i]->renderScene( false ); + { + std::lock_guard< std::mutex > guard( g_render_mutex ); + renderer->clearRenderer(); + for ( size_t i = 0; i < g_active_scenes.size(); i++ ) { + g_active_scenes[i]->updateScene(); + g_active_scenes[i]->renderScene( false ); + } + renderer->presentRenderer(); } - renderer->presentRenderer(); g_wait_for_anim = false; frames++; if ( SDL_GetTicks() - base >= 1000 ) {