TETRIS: use new sdlpp library
This commit is contained in:
+34
-27
@@ -1,4 +1,4 @@
|
||||
#include "../sdlpp.hpp"
|
||||
#include "../sdlpp/sdlpp.hpp"
|
||||
#include "config.hpp"
|
||||
#include "custom_classes.hpp"
|
||||
#include "scenes.hpp"
|
||||
@@ -18,8 +18,9 @@
|
||||
|
||||
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 );
|
||||
void updateScore( std::shared_ptr< SDLPP::Font > font ) {
|
||||
g_score_texture->setText( *font, std::to_string( g_score ), colors["text"],
|
||||
colors["text_out"], 5 );
|
||||
}
|
||||
|
||||
void doInput() {
|
||||
@@ -30,43 +31,47 @@ void doInput() {
|
||||
while ( !g_quit ) {
|
||||
base = SDL_GetTicks();
|
||||
SDL_framerateDelay( &gFPS );
|
||||
g_input_functions.back()(g_main_scene, base, line_coliders);
|
||||
g_input_functions.back()( g_main_scene, base, line_coliders );
|
||||
}
|
||||
}
|
||||
|
||||
void prepareShadowColider(std::shared_ptr<SDLPP::Renderer> r) {
|
||||
g_shadow_colider = std::make_shared< SDLPP::RectangleRender >( 0, TOP_BORDER, BLOCK_SIZE, BOTTOM_BORDER - TOP_BORDER, r );
|
||||
g_shadow_colider->addCollision(SDLPP::Rect( 0.1, 0.01, 0.8, 0.98 ));
|
||||
void prepareShadowColider( std::shared_ptr< SDLPP::Renderer > r ) {
|
||||
g_shadow_colider = std::make_shared< SDLPP::RectangleRender >(
|
||||
0, TOP_BORDER, BLOCK_SIZE, BOTTOM_BORDER - TOP_BORDER, r );
|
||||
g_shadow_colider->addCollision(
|
||||
SDLPP::RectColider( 0.1, 0.01, 0.8, 0.98 ) );
|
||||
g_shadow_colider->setId( COLIDER_ID );
|
||||
g_shadow_colider->setStatic();
|
||||
g_shadow_colider->centerX();
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR szCmdLine, int nCmdShow) {
|
||||
int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
||||
PWSTR szCmdLine, int nCmdShow ) {
|
||||
#else
|
||||
int main() {
|
||||
#endif
|
||||
SDLPP::init();
|
||||
SDLPP::Window w( "Tetris clone!" );
|
||||
w.setResizable(true);
|
||||
w.setResizable( true );
|
||||
|
||||
auto renderer = std::make_shared< SDLPP::Renderer >( w );
|
||||
g_active_renderer = renderer;
|
||||
renderer->setBlendMode( SDL_BLENDMODE_BLEND );
|
||||
prepareShadowColider(renderer);
|
||||
prepareShadowColider( renderer );
|
||||
|
||||
g_font = std::make_shared< SDLPP::Font >( "testfont.ttf", 36 );
|
||||
|
||||
g_main_scene = prepareMainScene(renderer, g_font);
|
||||
line_coliders = g_main_scene->getObjects( {COLIDER_ID} );
|
||||
g_score_texture = std::dynamic_pointer_cast<SDLPP::TextRenderer>(g_main_scene->getObjects( {SCORE_TEXTURE_ID} )[0]);
|
||||
g_main_scene = prepareMainScene( renderer, g_font );
|
||||
line_coliders = g_main_scene->getObjects( { COLIDER_ID } );
|
||||
g_score_texture = std::dynamic_pointer_cast< SDLPP::TextRenderer >(
|
||||
g_main_scene->getObjects( { SCORE_TEXTURE_ID } )[0] );
|
||||
g_active_scenes.push_back( g_main_scene );
|
||||
g_main_scene->saveScene();
|
||||
|
||||
g_menu_scene = prepareMenuScene(renderer, g_font);
|
||||
g_game_over_scene = prepareGameOverScene(renderer, g_font);
|
||||
g_options_scene = prepareOptionsScene(renderer, g_font);
|
||||
g_menu_scene = prepareMenuScene( renderer, g_font );
|
||||
g_game_over_scene = prepareGameOverScene( renderer, g_font );
|
||||
g_options_scene = prepareOptionsScene( renderer, g_font );
|
||||
|
||||
auto base = SDL_GetTicks();
|
||||
int frames = 0;
|
||||
@@ -82,7 +87,7 @@ int main() {
|
||||
g_next_object = g_tetrisFunctions[std::rand() / ( ( RAND_MAX + 1u ) / 7 )](
|
||||
renderer, g_main_scene );
|
||||
g_next_object->setPos( 0.9, 0.5 );
|
||||
g_input_functions.push_back(mainSceneInput);
|
||||
g_input_functions.push_back( mainSceneInput );
|
||||
|
||||
while ( !g_quit ) {
|
||||
SDL_PumpEvents();
|
||||
@@ -90,8 +95,9 @@ int main() {
|
||||
if ( !g_cur_object && g_checked_line ) {
|
||||
std::lock_guard< std::mutex > guard( g_movement_mutex );
|
||||
if ( !g_next_object ) {
|
||||
g_next_object = g_tetrisFunctions[std::rand() / ( ( RAND_MAX + 1u ) / 7 )](
|
||||
g_main_scene->getRendererShared(), g_main_scene );
|
||||
g_next_object =
|
||||
g_tetrisFunctions[std::rand() / ( ( RAND_MAX + 1u ) / 7 )](
|
||||
g_main_scene->getRendererShared(), g_main_scene );
|
||||
g_next_object->setPos( 0.9, 0.5 );
|
||||
}
|
||||
|
||||
@@ -99,11 +105,11 @@ int main() {
|
||||
g_cur_object->setPos( 0.5, TOP_BORDER - BLOCK_SIZE );
|
||||
g_cur_shadow = g_cur_object->copySelf();
|
||||
g_cur_shadow->turnIntoShadow();
|
||||
for(auto &piece : g_cur_shadow->getObjects()) {
|
||||
for ( auto &piece : g_cur_shadow->getObjects() ) {
|
||||
// make it so shadow gets covered by g_cur_object
|
||||
g_main_scene->moveZ(piece, -4);
|
||||
g_main_scene->moveZ( piece, -4 );
|
||||
}
|
||||
updateShadow(*g_main_scene);
|
||||
updateShadow( *g_main_scene );
|
||||
|
||||
auto rand_index = std::rand() / ( ( RAND_MAX + 1u ) / 7 );
|
||||
int retries = 0;
|
||||
@@ -114,17 +120,18 @@ int main() {
|
||||
if ( retries == 7 ) {
|
||||
g_game_over_scene->updateSizeAndPosition();
|
||||
g_active_scenes.push_back( g_game_over_scene );
|
||||
g_input_functions.push_back(gameOverSceneInput);
|
||||
g_input_functions.push_back( gameOverSceneInput );
|
||||
break;
|
||||
}
|
||||
}
|
||||
g_next_object.reset();
|
||||
g_next_object = g_tetrisFunctions[rand_index]( renderer, g_main_scene );
|
||||
g_next_object =
|
||||
g_tetrisFunctions[rand_index]( renderer, g_main_scene );
|
||||
g_next_object->setPos( 0.9, 0.5 );
|
||||
g_checked_line = false;
|
||||
}
|
||||
if ( g_update_score ) {
|
||||
updateScore(g_font);
|
||||
updateScore( g_font );
|
||||
g_update_score = false;
|
||||
}
|
||||
if ( g_update_colors ) {
|
||||
@@ -133,8 +140,8 @@ int main() {
|
||||
}
|
||||
|
||||
renderer->clearRenderer();
|
||||
for(auto &x : g_active_scenes) {
|
||||
x->renderScene(false);
|
||||
for ( auto &x : g_active_scenes ) {
|
||||
x->renderScene( false );
|
||||
}
|
||||
renderer->presentRenderer();
|
||||
g_wait_for_anim = false;
|
||||
|
||||
Reference in New Issue
Block a user