From 67a56d31de58f8317ec4c017a12021f710f2dc50 Mon Sep 17 00:00:00 2001 From: zv0n Date: Fri, 18 Dec 2020 15:14:08 +0100 Subject: [PATCH] TETRIS: use updated TextRenderer --- tetris/Makefile | 3 +++ tetris/config.hpp | 6 +++--- tetris/functions.cpp | 37 ++++++++++++++++++++++++++++----- tetris/functions.hpp | 1 + tetris/global_vars.cpp | 1 + tetris/global_vars.hpp | 1 + tetris/scenes.cpp | 46 +++++++++++++++++++++++------------------- tetris/tetris.cpp | 6 +++++- 8 files changed, 71 insertions(+), 30 deletions(-) diff --git a/tetris/Makefile b/tetris/Makefile index 8852a2a..4814ca5 100644 --- a/tetris/Makefile +++ b/tetris/Makefile @@ -52,13 +52,16 @@ functions.${OBJEXT}: functions.cpp config.hpp functions.hpp global_vars.hpp scen global_vars.${OBJEXT}: global_vars.cpp config.hpp global_vars.hpp functions.hpp $(CXX) $(CXXFLAGS) -c ${OUTPUTFLAG}$@ $< libsdlpp.so: ../sdlpp + $(MAKE) clean -C ../sdlpp $(MAKE) -C ../sdlpp cp ../sdlpp/libsdlpp.so . ln -sf libsdlpp.so libsdlpp.so.1 libsdlpp.dylib: ../sdlpp + $(MAKE) clean -C ../sdlpp $(MAKE) -C ../sdlpp cp ../sdlpp/libsdlpp.dylib . libsdlpp.dll: ../sdlpp + $(MAKE) clean -C ../sdlpp $(MAKE) -C ../sdlpp cp ../sdlpp/libsdlpp.dll . cp ../sdlpp/libsdlpp.lib . diff --git a/tetris/config.hpp b/tetris/config.hpp index 0ef2170..beb5ffc 100644 --- a/tetris/config.hpp +++ b/tetris/config.hpp @@ -17,9 +17,9 @@ #define BARRIER_ID 0x0000000B #define TEXT_ID 0x0000000C -#define MENU_ITEM_ID 0x00000001 -#define MENU_BACKGROUND_ID 0x00000002 -#define MENU_TEXT_ID 0x00000003 +#define MENU_ITEM_ID 0x10000001 +#define MENU_BACKGROUND_ID 0x10000002 +#define MENU_TEXT_ID 0x10000003 #define LEFT_BORDER 0.3 #define RIGHT_BORDER 0.7 diff --git a/tetris/functions.cpp b/tetris/functions.cpp index 00246ea..71a452e 100644 --- a/tetris/functions.cpp +++ b/tetris/functions.cpp @@ -390,6 +390,36 @@ tetrisZLeft( std::shared_ptr< SDLPP::Renderer > renderer, return retPiece; } +void updateTextSizeInternal(std::shared_ptr input) { + if(input->getKilled()) + return; + std::dynamic_pointer_cast< SDLPP::TextRenderer >( input )->setTextColor( + *g_font, colors["text"], colors["text_out"], 0.1 ); +} + +void updateSize() { + // have to resize rectangles for the text to be resized correctly + g_main_scene->updateSizeAndPosition(); + g_menu_scene->updateSizeAndPosition(); + g_game_over_scene->updateSizeAndPosition(); + g_options_scene->updateSizeAndPosition(); + + std::unordered_set textObjects = { TEXT_ID, MENU_TEXT_ID, MENU_ITEM_ID }; + for( auto &x : g_main_scene->getObjects( textObjects ) ) { + updateTextSizeInternal(x); + } + updateTextSizeInternal(g_score_texture); + for( auto &x : g_menu_scene->getObjects( textObjects ) ) { + updateTextSizeInternal(x); + } + for( auto &x : g_game_over_scene->getObjects( textObjects ) ) { + updateTextSizeInternal(x); + } + for( auto &x : g_options_scene->getObjects( textObjects ) ) { + updateTextSizeInternal(x); + } +} + void updateColors() { for ( auto &x : g_main_scene->getObjects( { BRICK_ID, SHADOW_ID } ) ) { x->specialAction( PIECE_ACTION_UPDATE_COLOR ); @@ -408,7 +438,7 @@ void updateColors() { } for ( auto &x : g_main_scene->getObjects( { TEXT_ID } ) ) { std::dynamic_pointer_cast< SDLPP::TextRenderer >( x )->setTextColor( - *g_font, colors["text"], colors["text_out"], 5 ); + *g_font, colors["text"], colors["text_out"], 0.1 ); } g_menu_options[g_menu_select]->setColor( colors["menu_item_background"] ); g_game_over_options[g_game_over_select]->setColor( @@ -424,8 +454,5 @@ void updateColors() { for ( auto &x : g_options_scene->getObjects( { MENU_BACKGROUND_ID } ) ) { x->setColor( colors["menu_background"] ); } - for ( auto &x : g_options_scene->getObjects( { MENU_ITEM_ID } ) ) { - std::dynamic_pointer_cast< SDLPP::TextRenderer >( x )->setTextColor( - *g_font, colors["text"], colors["text_out"] ); - } + updateSize(); } diff --git a/tetris/functions.hpp b/tetris/functions.hpp index 9e99860..91caad5 100644 --- a/tetris/functions.hpp +++ b/tetris/functions.hpp @@ -33,5 +33,6 @@ std::shared_ptr< TetrisPiece > tetrisZLeft( std::shared_ptr< SDLPP::Renderer > renderer, std::shared_ptr< SDLPP::Scene > scene ); void updateColors(); +void updateSize(); #endif diff --git a/tetris/global_vars.cpp b/tetris/global_vars.cpp index 3032510..adf8018 100644 --- a/tetris/global_vars.cpp +++ b/tetris/global_vars.cpp @@ -19,6 +19,7 @@ bool g_update_score = false; bool g_update_colors = false; bool g_checked_line = false; bool g_wait_for_anim = false; +bool g_update_size = false; std::vector< int > g_bag = { 28, 28, 28, 28, 28, 28, 28 }; diff --git a/tetris/global_vars.hpp b/tetris/global_vars.hpp index da42d7c..63d6279 100644 --- a/tetris/global_vars.hpp +++ b/tetris/global_vars.hpp @@ -25,6 +25,7 @@ extern bool g_update_score; extern bool g_update_colors; extern bool g_checked_line; extern bool g_wait_for_anim; +extern bool g_update_size; extern std::vector< int > g_bag; diff --git a/tetris/scenes.cpp b/tetris/scenes.cpp index 94f4504..c5bf035 100644 --- a/tetris/scenes.cpp +++ b/tetris/scenes.cpp @@ -91,7 +91,7 @@ void addMainSceneItems( SDLPP::Scene &scene, auto tetris = std::make_shared< SDLPP::TextRenderer >( 0.4, 0, 0.2, 0.1, r, *font, "TETRIS", colors["text"], - colors["text_out"], 5 ); + colors["text_out"], 0.1 ); tetris->centerX(); tetris->setStatic(); tetris->setId( TEXT_ID ); @@ -99,7 +99,7 @@ void addMainSceneItems( SDLPP::Scene &scene, auto next = std::make_shared< SDLPP::TextRenderer >( RIGHT_BORDER + 0.1, 0.35, 0.2, 0.1, r, *font, "NEXT", colors["text"], - colors["text_out"], 5, SDLPP_TEXT_CENTER ); + colors["text_out"], 0.1, SDLPP_TEXT_CENTER ); next->centerX(); next->setStatic(); next->setId( TEXT_ID ); @@ -118,7 +118,7 @@ void addMainSceneItems( SDLPP::Scene &scene, auto score_text = std::make_shared< SDLPP::TextRenderer >( RIGHT_BORDER + 0.1, 0.1, 0.2, 0.1, r, *font, "SCORE", colors["text"], - colors["text_out"], 5, SDLPP_TEXT_CENTER ); + colors["text_out"], 0.1, SDLPP_TEXT_CENTER ); score_text->centerX(); score_text->setStatic(); score_text->setId( TEXT_ID ); @@ -126,7 +126,7 @@ void addMainSceneItems( SDLPP::Scene &scene, auto score_texture = std::make_shared< SDLPP::TextRenderer >( RIGHT_BORDER + 0.1, 0.2, 0.2, 0.1, r, *font, "0", colors["text"], - colors["text_out"], 5, SDLPP_TEXT_TOP ); + colors["text_out"], 0.1, SDLPP_TEXT_TOP ); score_texture->centerX(); score_texture->setStatic(); score_texture->setId( SCORE_TEXTURE_ID ); @@ -169,13 +169,13 @@ void addMenuSceneItems( SDLPP::Scene &scene, bg->setPermanent( true ); scene.addObject( bg ); auto y = std::make_shared< SDLPP::TextRenderer >( 0.25, 0.1, 0.5, 0.3, r ); - y->setText( *font, "PAUSED", colors["text"], colors["text_out"], 5 ); + y->setText( *font, "PAUSED", colors["text"], colors["text_out"], 0.1 ); y->setId( MENU_TEXT_ID ); y->centerX(); scene.addObject( y ); auto resume = std::make_shared< SDLPP::TextRenderer >( 0.4, 0.46, 0.2, 0.08, r ); - resume->setText( *font, "Resume", colors["text"], colors["text_out"], 5 ); + resume->setText( *font, "Resume", colors["text"], colors["text_out"], 0.1 ); resume->setColor( colors["menu_item_background"] ); resume->centerX(); resume->setId( MENU_ITEM_ID ); @@ -183,21 +183,21 @@ void addMenuSceneItems( SDLPP::Scene &scene, scene.addObject( resume ); auto options = std::make_shared< SDLPP::TextRenderer >( 0.4, 0.56, 0.2, 0.08, r ); - options->setText( *font, "Options", colors["text"], colors["text_out"], 5 ); + options->setText( *font, "Options", colors["text"], colors["text_out"], 0.1 ); options->centerX(); options->setId( MENU_ITEM_ID ); g_menu_options.push_back( options ); scene.addObject( options ); auto restart = std::make_shared< SDLPP::TextRenderer >( 0.4, 0.66, 0.2, 0.08, r ); - restart->setText( *font, "Restart", colors["text"], colors["text_out"], 5 ); + restart->setText( *font, "Restart", colors["text"], colors["text_out"], 0.1 ); restart->centerX(); restart->setId( MENU_ITEM_ID ); g_menu_options.push_back( restart ); scene.addObject( restart ); auto quit = std::make_shared< SDLPP::TextRenderer >( 0.4, 0.76, 0.2, 0.08, r ); - quit->setText( *font, "Quit Game", colors["text"], colors["text_out"], 5 ); + quit->setText( *font, "Quit Game", colors["text"], colors["text_out"], 0.1 ); quit->centerX(); quit->setId( MENU_ITEM_ID ); g_menu_options.push_back( quit ); @@ -213,13 +213,13 @@ void addGameOverSceneItems( SDLPP::Scene &scene, bg->setPermanent( true ); scene.addObject( bg ); auto y = std::make_shared< SDLPP::TextRenderer >( 0.25, 0.1, 0.5, 0.3, r ); - y->setText( *font, "GAME OVER", colors["text"], colors["text_out"], 5 ); + y->setText( *font, "GAME OVER", colors["text"], colors["text_out"], 0.1 ); y->setId( 0 ); y->centerX(); scene.addObject( y ); auto restart = std::make_shared< SDLPP::TextRenderer >( 0.4, 0.5, 0.2, 0.1, r ); - restart->setText( *font, "Restart", colors["text"], colors["text_out"], 5 ); + restart->setText( *font, "Restart", colors["text"], colors["text_out"], 0.1 ); restart->centerX(); restart->setColor( colors["menu_item_background"] ); restart->setId( MENU_ITEM_ID ); @@ -227,7 +227,7 @@ void addGameOverSceneItems( SDLPP::Scene &scene, scene.addObject( restart ); auto quit = std::make_shared< SDLPP::TextRenderer >( 0.4, 0.7, 0.2, 0.1, r ); - quit->setText( *font, "Quit Game", colors["text"], colors["text_out"], 5 ); + quit->setText( *font, "Quit Game", colors["text"], colors["text_out"], 0.1 ); quit->centerX(); quit->setId( MENU_ITEM_ID ); g_game_over_options.push_back( quit ); @@ -243,39 +243,39 @@ void addOptionsSceneItems( SDLPP::Scene &scene, bg->setPermanent( true ); scene.addObject( bg ); auto y = std::make_shared< SDLPP::TextRenderer >( 0.25, 0.1, 0.5, 0.3, r ); - y->setText( *font, "OPTIONS", colors["text"], colors["text_out"], 5 ); + y->setText( *font, "OPTIONS", colors["text"], colors["text_out"], 0.1 ); y->setId( 0 ); y->centerX(); scene.addObject( y ); auto color_scheme = - std::make_shared< SDLPP::TextRenderer >( 0.35, 0.3, 0.3, 0.09, r ); + std::make_shared< SDLPP::TextRenderer >( 0.18, 0.35, 0.64, 0.09, r ); color_scheme->setText( *font, "Color scheme: " + color_schemes_names[selected_color_scheme], - colors["text"], colors["text_out"], 5 ); + colors["text"], colors["text_out"], 0.1 ); color_scheme->centerX(); color_scheme->setColor( colors["menu_item_background"] ); color_scheme->setId( MENU_ITEM_ID ); g_options_options.push_back( color_scheme ); scene.addObject( color_scheme ); auto shadow = - std::make_shared< SDLPP::TextRenderer >( 0.4, 0.4, 0.2, 0.09, r ); + std::make_shared< SDLPP::TextRenderer >( 0.26, 0.45, 0.48, 0.09, r ); shadow->setText( *font, "Show shadow: YES", colors["text"], - colors["text_out"], 5 ); + colors["text_out"], 0.1 ); shadow->centerX(); shadow->setId( MENU_ITEM_ID ); g_options_options.push_back( shadow ); scene.addObject( shadow ); auto show3d = - std::make_shared< SDLPP::TextRenderer >( 0.4, 0.5, 0.2, 0.09, r ); + std::make_shared< SDLPP::TextRenderer >( 0.2, 0.55, 0.6, 0.09, r ); show3d->setText( *font, "Show block texture: NO", colors["text"], - colors["text_out"], 5 ); + colors["text_out"], 0.1 ); show3d->centerX(); show3d->setId( MENU_ITEM_ID ); g_options_options.push_back( show3d ); scene.addObject( show3d ); auto save = - std::make_shared< SDLPP::TextRenderer >( 0.45, 0.6, 0.1, 0.09, r ); - save->setText( *font, "SAVE", colors["text"], colors["text_out"], 5 ); + std::make_shared< SDLPP::TextRenderer >( 0.42, 0.65, 0.16, 0.09, r ); + save->setText( *font, "SAVE", colors["text"], colors["text_out"], 0.1 ); save->centerX(); save->setId( MENU_ITEM_ID ); g_options_options.push_back( save ); @@ -434,6 +434,7 @@ void pollEventsMain( SDLPP::Scene &scene ) { if ( event.window.event == SDL_WINDOWEVENT_RESIZED ) { for ( auto &x : g_active_scenes ) x->updateSizeAndPosition(); + g_update_size = true; } default: break; @@ -565,6 +566,7 @@ void pollEventsMenu() { if ( event.window.event == SDL_WINDOWEVENT_RESIZED ) { for ( auto &x : g_active_scenes ) x->updateSizeAndPosition(); + g_update_size = true; } default: break; @@ -635,6 +637,7 @@ void pollEventsGameOver() { if ( event.window.event == SDL_WINDOWEVENT_RESIZED ) { for ( auto &x : g_active_scenes ) x->updateSizeAndPosition(); + g_update_size = true; } default: break; @@ -782,6 +785,7 @@ void pollEventsOptions() { if ( event.window.event == SDL_WINDOWEVENT_RESIZED ) { for ( auto &x : g_active_scenes ) x->updateSizeAndPosition(); + g_update_size = true; } default: break; diff --git a/tetris/tetris.cpp b/tetris/tetris.cpp index c1c1c27..a184466 100644 --- a/tetris/tetris.cpp +++ b/tetris/tetris.cpp @@ -20,7 +20,7 @@ std::vector< std::shared_ptr< SDLPP::RenderObject > > line_coliders{}; void updateScore( std::shared_ptr< SDLPP::Font > font ) { g_score_texture->setText( *font, std::to_string( g_score ), colors["text"], - colors["text_out"], 5 ); + colors["text_out"], 0.1 ); } void doInput() { @@ -138,6 +138,10 @@ int main() { updateColors(); g_update_colors = false; } + if ( g_update_size ) { + updateSize(); + g_update_size = false; + } renderer->clearRenderer(); for ( auto &x : g_active_scenes ) {