From 3b9885ab0363a21862197da3c93a27441ecc7b0e Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 14 Oct 2024 22:33:45 +0200 Subject: [PATCH] Commit de Boromir --- data/gfx/game/game_text.png | Bin 935 -> 0 bytes data/gfx/game_text/game_text_1000_points.png | Bin 0 -> 337 bytes data/gfx/game_text/game_text_2500_points.png | Bin 0 -> 376 bytes data/gfx/game_text/game_text_5000_points.png | Bin 0 -> 364 bytes data/gfx/game_text/game_text_one_hit.png | Bin 0 -> 487 bytes data/gfx/game_text/game_text_powerup.png | Bin 0 -> 580 bytes source/director.cpp | 7 +- source/game.cpp | 96 +++++++------------ source/game.h | 7 +- source/sprite.cpp | 4 +- 10 files changed, 48 insertions(+), 66 deletions(-) delete mode 100644 data/gfx/game/game_text.png create mode 100644 data/gfx/game_text/game_text_1000_points.png create mode 100644 data/gfx/game_text/game_text_2500_points.png create mode 100644 data/gfx/game_text/game_text_5000_points.png create mode 100644 data/gfx/game_text/game_text_one_hit.png create mode 100644 data/gfx/game_text/game_text_powerup.png diff --git a/data/gfx/game/game_text.png b/data/gfx/game/game_text.png deleted file mode 100644 index 44ae8a20b819c3b048fbd1d44b888fab2cd499ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmV;Y16cftP)Px&VM#;ODs;UeE5lkf1 z>58w@jjh>4=P`Ko`Rr}D!CK4n`JCtTIm<$3Ucq8IUGQ~0QfoHR>5JERbht4uX2$8k zF-{MTcWN{7%Zkxvv)TPCH2d4CeR})S|z40244x{!7^@)hZf$Q|; z*UTZy#htdWo zq9tS1b!~_UM6|-MC<>Hi8RhGoLs1mb=g0QbgtPg?i^;PAvMgig+zOwfDB!)1mNL=T8QR2qlYLG76^t<^&+}+$ z*BPzX$1*6~PZu0e8JOB!Y*B2!D=zZ$7q2)^XP%VQSee!Ol8JrsN|ko4A9G@peY@ZQ zur>pwnXc<4sSIm_AHCUwwU%`clX3|BKP(UtvMl4eu8lE9<~S8>sr_w&1HgoiFxlS+ z0K9(s(g47htFJgeJKa-a!MWBLHG3tk^Tf5PEjmMA!xwA~7CKJtd6PUGa+T zUytE^Qt#DbeD6JC``i@Q+@c>(tix2O)Esj7^-$^%-$KVy( z=pk%2y}rTZ)pM+nlrpAEnrtR~*$y|^6jjXVag&_)ksvpbS>fT3!7qSycc002ov JPDHLkV1i$N#zO!A diff --git a/data/gfx/game_text/game_text_1000_points.png b/data/gfx/game_text/game_text_1000_points.png new file mode 100644 index 0000000000000000000000000000000000000000..6967f5f4d42483bd31d29caef21ced8f8f1ef890 GIT binary patch literal 337 zcmV-X0j~auP)Px$3rR#lR9J=Wm(dY}FbIah>msb;3>niIT!m5Wi}WxD32He#+yBkv`$LeJM1)o2 zI4+e(nPU|-+BKx;KZM{AH%99@8K^57Zh`gcb$(+Fo!_1$yQx$0it%GH; zqRrK$_d}z_%-x+#2g_pDXWUf8x^vYg-DdT9zSe#249m<2P*p^<=gQ8^*yANwWbC7? j`Hg5G(q{E}zAW|)eZ=LcW6{Z|00000NkvXXu0mjfa(19x literal 0 HcmV?d00001 diff --git a/data/gfx/game_text/game_text_2500_points.png b/data/gfx/game_text/game_text_2500_points.png new file mode 100644 index 0000000000000000000000000000000000000000..99ad813cf91c77837991c132e23d101bedef2d30 GIT binary patch literal 376 zcmV-;0f+vHP)Px$GD$>1R9J=8SKASUAPfwQjieQ8uuN;P6-x1b%nieYumSYE{kwCsn+F00y0EV6 zNd}JN2-fpfyrxr&(Y!odBBIcn6k=-WcpBN$^sm9b?`AUFwy7d$e5qr_WI70! zna@bn-pc(MNcg24yib#3K1lBvj z%rO7yB`9#8V_H#fM0H|Xr?oSr=Qe?OjdHth9&g7_3hTL*Ae?+-d#te1+)8+aD{y^i zjv_a2Z9=`=>vwS96}58=IonE(yDAjBr24 WZs#Ur=1PA60000Px$CP_p=R9J=GSJ4rJFbE|*7hx4=a7<@#6-KciibpLZqzS#8?@#l9Jjex-;KV%7 zJ2}nvQVgR=HWV|;Q5%=nfc|?r>vtsv* zXcZ))BrlPX;I0@8MMMBNM8#~W52}vhUEIj%(#J-`#NFMx1+Ci$5r-D{xIV_1Y9~s;zLc90J@ca+$D+7jnP>^**@QM@MsVM66$A|6ttEE=0000< KMNUMnLSTZ~D4hua literal 0 HcmV?d00001 diff --git a/data/gfx/game_text/game_text_one_hit.png b/data/gfx/game_text/game_text_one_hit.png new file mode 100644 index 0000000000000000000000000000000000000000..18cf73e81e85380104017b489e1653e67a7e100b GIT binary patch literal 487 zcmVPx$p-DtRR9J=OSTT}=FbtG4yn>dYrOl+`0aUyp|DfO>d4nq+K$W@n+8bKF!4-FA zjAPld5fJWnhMB~%WC>{{#R3jOS$C8Ey_c16t#e}&r9PO>`LKoayF0F&mXF(Fy}m!e zwa)GQg;UvLSFow*UL(*rAu_gZ3l-M!+Cb7OjN{OJT2>P z;)=YD_gF2U=+bRNBVN|sq(2np%9y<(9|Kh@td6fq3TAD={tQNa#)j{BoS5Jsbhk z8ElWaZyZ{YV4OBVNu@JD(Qeh`#);VeOodrzPBW`>wW*!J1>o0-Hh_38Ta z;_BT)?&FH{*vO~va~+83w#nG!C~Gk`csXre@?muVy9{*I4UP*$U4MuTti_D_k|;8^ db&7tf4d0jzC$l-ypRoV{002ovPDHLkV1kcA>*D|b literal 0 HcmV?d00001 diff --git a/data/gfx/game_text/game_text_powerup.png b/data/gfx/game_text/game_text_powerup.png new file mode 100644 index 0000000000000000000000000000000000000000..45227a5e2b585e6c870c5c47e28d891a1b3eb127 GIT binary patch literal 580 zcmV-K0=xZ*P)Px${z*hZRA_{$e`&*lnynTK&zW%=mS~J!twa0)BDB+$+*4B)Ot-ZlS%j4cV zaM-p+#_W4X{+gk&2Ol8uN8)&!RNQ03g1kk4`L8WC8D$PLLtpHc$G z^p(grM;u>lcej}c)~X~IZk;bDcB{n%kf7j4$FOaKcC%Y8CevGlFB!n?m2DY2*Dm;1 zaAAlFuG#mvwUv51NJSQlctmIgc=rU)y%W_QT<9@RK$bTntKX*N;t*U^AU7!J9v9~-#3`B{kzcg-4cEp(jZxfJ5>7)=1pgRzqA%Nz4hH3Ug()Ew}1 zjTApR@D9@wK$_#u4UO^5wdRY>qp5?-@8br55F8VLo5Rhu5|jI(Y6yxESO{Maw1g9+ S#v3&N0000add(prefix + "/data/gfx/game/game_grass.png", AssetType::BITMAP); Asset::get()->add(prefix + "/data/gfx/game/game_power_meter.png", AssetType::BITMAP); Asset::get()->add(prefix + "/data/gfx/game/game_sky_colors.png", AssetType::BITMAP); - Asset::get()->add(prefix + "/data/gfx/game/game_text.png", AssetType::BITMAP); + + Asset::get()->add(prefix + "/data/gfx/game_text/game_text_1000_points.png", AssetType::BITMAP); + Asset::get()->add(prefix + "/data/gfx/game_text/game_text_2500_points.png", AssetType::BITMAP); + Asset::get()->add(prefix + "/data/gfx/game_text/game_text_5000_points.png", AssetType::BITMAP); + Asset::get()->add(prefix + "/data/gfx/game_text/game_text_powerup.png", AssetType::BITMAP); + Asset::get()->add(prefix + "/data/gfx/game_text/game_text_one_hit.png", AssetType::BITMAP); Asset::get()->add(prefix + "/data/gfx/intro/intro.png", AssetType::BITMAP); diff --git a/source/game.cpp b/source/game.cpp index 4b9d64e..6fcd1c5 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -75,9 +75,11 @@ Game::Game(int player_id, int current_stage, bool demo, JA_Music_t *music) background_->setPos(param.game.play_area.rect); - p1000_sprite_ = std::make_shared(game_text_texture_); - p2500_sprite_ = std::make_shared(game_text_texture_); - p5000_sprite_ = std::make_shared(game_text_texture_); + game_text_sprites_.emplace_back(std::make_shared(game_text_textures_.at(0))); + game_text_sprites_.emplace_back(std::make_shared(game_text_textures_.at(1))); + game_text_sprites_.emplace_back(std::make_shared(game_text_textures_.at(2))); + game_text_sprites_.emplace_back(std::make_shared(game_text_textures_.at(3))); + game_text_sprites_.emplace_back(std::make_shared(game_text_textures_.at(4))); explosions_->addTexture(1, explosions_textures_[0], explosions_animations_[0]); explosions_->addTexture(2, explosions_textures_[1], explosions_animations_[1]); @@ -295,54 +297,12 @@ void Game::init(int player_id) // Con los globos creados, calcula el nivel de amenaza evaluateAndSetMenace(); - // Inicializa el bitmap de 1000 puntos - constexpr auto height = 15; - constexpr auto sprite1_width = 35; - constexpr auto sprite2_width = 38; - constexpr auto sprite3_width = 39; - p1000_sprite_->setPosX(0); - p1000_sprite_->setPosY(0); - p1000_sprite_->setWidth(sprite1_width); - p1000_sprite_->setHeight(height); - p1000_sprite_->setVelX(0.0f); - p1000_sprite_->setVelY(-0.5f); - p1000_sprite_->setAccelX(0.0f); - p1000_sprite_->setAccelY(-0.1f); - p1000_sprite_->setSpriteClip(0, 0, sprite1_width, height); - p1000_sprite_->setEnabled(false); - p1000_sprite_->setFinishedCounter(0); - p1000_sprite_->setDestX(0); - p1000_sprite_->setDestY(0); - - // Inicializa el bitmap de 2500 puntos - p2500_sprite_->setPosX(0); - p2500_sprite_->setPosY(0); - p2500_sprite_->setWidth(sprite2_width); - p2500_sprite_->setHeight(height); - p2500_sprite_->setVelX(0.0f); - p2500_sprite_->setVelY(-0.5f); - p2500_sprite_->setAccelX(0.0f); - p2500_sprite_->setAccelY(-0.1f); - p2500_sprite_->setSpriteClip(sprite1_width, 0, sprite2_width, height); - p2500_sprite_->setEnabled(false); - p2500_sprite_->setFinishedCounter(0); - p2500_sprite_->setDestX(0); - p2500_sprite_->setDestY(0); - - // Inicializa el bitmap de 5000 puntos - p5000_sprite_->setPosX(0); - p5000_sprite_->setPosY(0); - p5000_sprite_->setWidth(sprite3_width); - p5000_sprite_->setHeight(height); - p5000_sprite_->setVelX(0.0f); - p5000_sprite_->setVelY(-0.5f); - p5000_sprite_->setAccelX(0.0f); - p5000_sprite_->setAccelY(-0.1f); - p5000_sprite_->setSpriteClip(sprite1_width + sprite2_width, 0, sprite3_width, height); - p5000_sprite_->setEnabled(false); - p5000_sprite_->setFinishedCounter(0); - p5000_sprite_->setDestX(0); - p5000_sprite_->setDestY(0); + // Inicializa los sprites con los textos que aparecen al coger items + for (auto &sprite : game_text_sprites_) + { + sprite->setVelY(-0.5f); + sprite->setAccelY(-0.1f); + } } // Carga los recursos necesarios para la sección 'Game' @@ -362,12 +322,21 @@ void Game::loadMedia() item_textures_.clear(); balloon_textures_.clear(); explosions_textures_.clear(); + game_text_textures_.clear(); } // Texturas { bullet_texture_ = std::make_shared(renderer_, asset_->get("bullet.png")); - game_text_texture_ = std::make_shared(renderer_, asset_->get("game_text.png")); + } + + // Texturas - Game_text + { + game_text_textures_.emplace_back(std::make_shared(renderer_, asset_->get("game_text_1000_points.png"))); + game_text_textures_.emplace_back(std::make_shared(renderer_, asset_->get("game_text_2500_points.png"))); + game_text_textures_.emplace_back(std::make_shared(renderer_, asset_->get("game_text_5000_points.png"))); + game_text_textures_.emplace_back(std::make_shared(renderer_, asset_->get("game_text_powerup.png"))); + game_text_textures_.emplace_back(std::make_shared(renderer_, asset_->get("game_text_one_hit.png"))); } // Texturas - Globos @@ -1197,21 +1166,21 @@ void Game::checkPlayerItemCollision(std::shared_ptr &player) case ITEM_POINTS_1_DISK: { player->addScore(1000); - createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (p1000_sprite_->getWidth() / 2), player->getPosY(), p1000_sprite_); + createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_sprites_[0]->getWidth() / 2), player->getPosY(), game_text_sprites_[0]); break; } case ITEM_POINTS_2_GAVINA: { player->addScore(2500); - createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (p2500_sprite_->getWidth() / 2), player->getPosY(), p2500_sprite_); + createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_sprites_[1]->getWidth() / 2), player->getPosY(), game_text_sprites_[1]); break; } case ITEM_POINTS_3_PACMAR: { player->addScore(5000); - createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (p5000_sprite_->getWidth() / 2), player->getPosY(), p5000_sprite_); + createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_sprites_[2]->getWidth() / 2), player->getPosY(), game_text_sprites_[2]); break; } @@ -1226,9 +1195,13 @@ void Game::checkPlayerItemCollision(std::shared_ptr &player) if (player->getCoffees() == 2) { player->addScore(5000); - createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (p5000_sprite_->getWidth() / 2), player->getPosY(), p5000_sprite_); + createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_sprites_[2]->getWidth() / 2), player->getPosY(), game_text_sprites_[2]); + } + else + { + player->giveExtraHit(); + createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_sprites_[4]->getWidth() / 2), player->getPosY(), game_text_sprites_[4]); } - player->giveExtraHit(); break; } @@ -1236,6 +1209,7 @@ void Game::checkPlayerItemCollision(std::shared_ptr &player) { player->setPowerUp(); coffee_machine_enabled_ = false; + createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_sprites_[3]->getWidth() / 2), player->getPosY(), game_text_sprites_[3]); break; } @@ -1480,7 +1454,7 @@ void Game::freeItems() // Crea un objeto SmartSprite para mostrar la puntuación al coger un objeto void Game::createItemScoreSprite(int x, int y, std::shared_ptr sprite) { - auto ss = new SmartSprite(nullptr); + auto ss = sprite.get(); smart_sprites_.push_back(ss); // Crea una copia del objeto @@ -2541,8 +2515,12 @@ void Game::reloadTextures() texture->reLoad(); } + for (auto &texture : game_text_textures_) + { + texture->reLoad(); + } + bullet_texture_->reLoad(); - game_text_texture_->reLoad(); background_->reloadTextures(); } diff --git a/source/game.h b/source/game.h index 3d18e1e..ba9083b 100644 --- a/source/game.h +++ b/source/game.h @@ -132,7 +132,8 @@ private: std::vector> player2_textures_; // Vector con las texturas del jugador std::vector>> player_textures_; // Vector con todas las texturas de los jugadores; - std::shared_ptr game_text_texture_; // Textura para los sprites con textos + std::vector> game_text_textures_; // Vector con las texturas para los sprites con textos + std::vector> game_text_sprites_; // Sprite con el textos que aparecen al coger items std::vector *> item_animations_; // Vector con las animaciones de los items std::vector *> player_animations_; // Vector con las animaciones del jugador @@ -146,10 +147,6 @@ private: std::unique_ptr fade_; // Objeto para renderizar fades - std::shared_ptr p1000_sprite_; // Sprite con el texto 1.000 - std::shared_ptr p2500_sprite_; // Sprite con el texto 2.500 - std::shared_ptr p5000_sprite_; // Sprite con el texto 5.000 - JA_Sound_t *balloon_sound_; // Sonido para la explosión del globo JA_Sound_t *bullet_sound_; // Sonido para los disparos JA_Sound_t *player_collision_sound_; // Sonido para la colisión del jugador con un enemigo diff --git a/source/sprite.cpp b/source/sprite.cpp index 92cb7e5..d7ba738 100644 --- a/source/sprite.cpp +++ b/source/sprite.cpp @@ -12,7 +12,9 @@ Sprite::Sprite(SDL_Rect rect, std::shared_ptr texture) sprite_clip_((SDL_Rect){0, 0, pos_.w, pos_.h}) {} Sprite::Sprite(std::shared_ptr texture) - : texture_(texture) {} + : texture_(texture), + pos_({0, 0, texture_->getWidth(), texture_->getHeight()}), + sprite_clip_(pos_) {} // Muestra el sprite por pantalla void Sprite::render()