From 59e2865a4ac8e1403204e68e442bf6ebf1186f05 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 28 Oct 2024 22:09:28 +0100 Subject: [PATCH] El game_text ara gasta PathSprites en lloc d'SmartSprites fix: la paleta dels jugadors no s'iniciava correctament --- source/game.cpp | 62 ++++++++++++++++++++--------------------------- source/game.h | 5 +--- source/player.cpp | 1 + 3 files changed, 28 insertions(+), 40 deletions(-) diff --git a/source/game.cpp b/source/game.cpp index 29b1d2f..6f172d5 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -651,25 +651,29 @@ void Game::checkPlayerItemCollision(std::shared_ptr &player) case ItemType::DISK: { player->addScore(1000); - createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_textures_[0]->getWidth() / 2), player->getPosY(), game_text_textures_[0]); + const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[0]->getWidth()) / 2; + createPathSprite(x, game_text_textures_[0]); break; } case ItemType::GAVINA: { player->addScore(2500); - createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_textures_[1]->getWidth() / 2), player->getPosY(), game_text_textures_[1]); + const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[1]->getWidth()) / 2; + createPathSprite(x, game_text_textures_[1]); break; } case ItemType::PACMAR: { player->addScore(5000); - createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_textures_[2]->getWidth() / 2), player->getPosY(), game_text_textures_[2]); + const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[2]->getWidth()) / 2; + createPathSprite(x, game_text_textures_[2]); break; } case ItemType::CLOCK: { enableTimeStopItem(); - createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_textures_[5]->getWidth() / 2), player->getPosY(), game_text_textures_[5]); + const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[5]->getWidth()) / 2; + createPathSprite(x, game_text_textures_[5]); break; } case ItemType::COFFEE: @@ -677,12 +681,14 @@ void Game::checkPlayerItemCollision(std::shared_ptr &player) if (player->getCoffees() == 2) { player->addScore(5000); - createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_textures_[2]->getWidth() / 2), player->getPosY(), game_text_textures_[2]); + const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[2]->getWidth()) / 2; + createPathSprite(x, game_text_textures_[2]); } else { player->giveExtraHit(); - createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_textures_[4]->getWidth() / 2), player->getPosY(), game_text_textures_[4]); + const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[4]->getWidth()) / 2; + createPathSprite(x, game_text_textures_[4]); } break; } @@ -690,7 +696,8 @@ void Game::checkPlayerItemCollision(std::shared_ptr &player) { player->setPowerUp(); coffee_machine_enabled_ = false; - createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (game_text_textures_[3]->getWidth() / 2), player->getPosY(), game_text_textures_[3]); + const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[3]->getWidth()) / 2; + createPathSprite(x, game_text_textures_[3]); break; } default: @@ -889,42 +896,27 @@ void Game::freeItems() items_.erase(items_.begin() + i); } -// Crea un objeto SpriteSmart para mostrar la puntuación al coger un objeto -void Game::createItemScoreSprite(int x, int y, std::shared_ptr texture) -{ - smart_sprites_.emplace_back(std::make_unique(texture)); - - const auto w = texture->getWidth(); - const auto h = texture->getHeight(); - - // Ajusta para que no se dibuje fuera de pantalla - x = std::clamp(x, 0, param.game.play_area.rect.w - w); - - // Inicializa - smart_sprites_.back()->setPos({0, 0, w, h}); - smart_sprites_.back()->setSpriteClip({0, 0, w, h}); - smart_sprites_.back()->setPosX(x); - smart_sprites_.back()->setPosY(param.game.play_area.rect.h - h); - smart_sprites_.back()->setDestX(x); - smart_sprites_.back()->setDestY(y - 35); - smart_sprites_.back()->setVelY(-0.5f); - smart_sprites_.back()->setAccelY(-0.1f); - smart_sprites_.back()->setEnabled(true); - smart_sprites_.back()->setFinishedCounter(100); -} - // Crea un objeto PathSprite -void Game::createPathSprite(std::shared_ptr texture) +void Game::createPathSprite(int x, std::shared_ptr texture) { path_sprites_.emplace_back(std::make_unique(texture)); const auto w = texture->getWidth(); const auto h = texture->getHeight(); + const int y0 = param.game.play_area.rect.h - h; + const int y1 = 160; + const int y2 = -h; + + // Ajusta para que no se dibuje fuera de pantalla + x = std::clamp(x, 2, param.game.play_area.rect.w - w - 2); + // Inicializa path_sprites_.back()->setWidth(w); path_sprites_.back()->setHeight(h); path_sprites_.back()->setSpriteClip({0, 0, w, h}); + path_sprites_.back()->addPath(y0, y1, PathType::VERTICAL, x, 100, easeOutQuint, 0); + path_sprites_.back()->addPath(y1, y2, PathType::VERTICAL, x, 80, easeInQuint, 0); path_sprites_.back()->enable(); } @@ -1572,10 +1564,8 @@ void Game::checkEvents() } case SDLK_5: // Crea un PathSprite { - const auto x = players_.at(0)->getPosX(); - createPathSprite(game_text_textures_.at(3)); - path_sprites_.back()->addPath(220, 160, PathType::VERTICAL, x, 100, easeOutQuint, 0); - path_sprites_.back()->addPath(160, -21, PathType::VERTICAL, x, 80, easeInQuint, 0); + const int x = players_.at(0)->getPosX() + (players_.at(0)->getWidth() - game_text_textures_[3]->getWidth()) / 2; + createPathSprite(x, game_text_textures_.at(3)); break; } default: diff --git a/source/game.h b/source/game.h index d0a4fa8..ae06967 100644 --- a/source/game.h +++ b/source/game.h @@ -303,11 +303,8 @@ private: // Vacia el vector de items void freeItems(); - // Crea un objeto SpriteSmart - void createItemScoreSprite(int x, int y, std::shared_ptr texture); - // Crea un objeto PathSprite - void createPathSprite(std::shared_ptr texture); + void createPathSprite(int x, std::shared_ptr texture); // Vacia el vector de smartsprites void freeSmartSprites(); diff --git a/source/player.cpp b/source/player.cpp index bb4f677..20b255d 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -23,6 +23,7 @@ Player::Player(int id, float x, int y, bool demo, SDL_Rect &play_area, std::vect demo_(demo) { // Configura objetos + player_sprite_->getTexture()->setPalette(coffees_); power_sprite_->getTexture()->setAlpha(224); power_up_desp_x_ = (power_sprite_->getWidth() - player_sprite_->getWidth()) / 2; power_sprite_->setPosY(y - (power_sprite_->getHeight() - player_sprite_->getHeight()));