From 04a80392d8e462d156b56bcaf7781e5308e4d1e4 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Tue, 15 Jul 2025 09:26:31 +0200 Subject: [PATCH] fix: els globos fills estaven alineats cap a dalt en lloc de al centre fix: les explosions eren de un tamany inferior (i per tant desalineades ademes) --- data/gfx/balloon/explosion4.ani | 4 ++-- data/gfx/balloon/explosion4.png | Bin 4227 -> 4222 bytes source/balloon_manager.cpp | 36 ++++++++++++++++++++------------ source/explosions.cpp | 4 ++-- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/data/gfx/balloon/explosion4.ani b/data/gfx/balloon/explosion4.ani index dc06f55..872dfc4 100644 --- a/data/gfx/balloon/explosion4.ani +++ b/data/gfx/balloon/explosion4.ani @@ -1,5 +1,5 @@ -frame_width=46 -frame_height=46 +frame_width=48 +frame_height=48 [animation] name=default diff --git a/data/gfx/balloon/explosion4.png b/data/gfx/balloon/explosion4.png index 7fa64fef933df20c5e5fd8937a8ce174b8056af1..06d1653efc903fb6c658bf27cbf6264d2a631a70 100644 GIT binary patch literal 4222 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 literal 4227 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 zrV{&M2getAnimation("explosion4.ani")); // Añade texturas - explosions_->addTexture(1, explosions_textures_[0], explosions_animations_[0]); - explosions_->addTexture(2, explosions_textures_[1], explosions_animations_[1]); - explosions_->addTexture(3, explosions_textures_[2], explosions_animations_[2]); - explosions_->addTexture(4, explosions_textures_[3], explosions_animations_[3]); + explosions_->addTexture(0, explosions_textures_[0], explosions_animations_[0]); + explosions_->addTexture(1, explosions_textures_[1], explosions_animations_[1]); + explosions_->addTexture(2, explosions_textures_[2], explosions_animations_[2]); + explosions_->addTexture(3, explosions_textures_[3], explosions_animations_[3]); } // Actualiza @@ -196,12 +196,22 @@ void BalloonManager::createChildBalloon(const std::shared_ptr &balloon, { if (can_deploy_balloons_) { - const float vx = direction == "LEFT" ? BALLOON_VELX_NEGATIVE : BALLOON_VELX_POSITIVE; - const auto lower_size = static_cast(static_cast(balloon->getSize()) - 1); - auto b = createBalloon(0, balloon->getPosY(), balloon->getType(), lower_size, vx, balloon_speed_, 0); - const int x = direction == "LEFT" ? balloon->getPosX() + (balloon->getWidth() / 3) : balloon->getPosX() + 2 * (balloon->getWidth() / 3); - b->alignTo(x); + // Calcula parametros + const float VX = direction == "LEFT" ? BALLOON_VELX_NEGATIVE : BALLOON_VELX_POSITIVE; + const auto SIZE = static_cast(static_cast(balloon->getSize()) - 1); + const int PARENT_HEIGHT = balloon->getHeight(); + const int CHILD_HEIGHT = BALLOON_SIZE[static_cast(balloon->getSize()) - 1]; + const int Y = balloon->getPosY() + (PARENT_HEIGHT - CHILD_HEIGHT) / 2; + const int X = direction == "LEFT" ? balloon->getPosX() + (balloon->getWidth() / 3) : balloon->getPosX() + 2 * (balloon->getWidth() / 3); + + // Crea el globo + auto b = createBalloon(0, Y, balloon->getType(), SIZE, VX, balloon_speed_, 0); + + // Establece parametros + b->alignTo(X); b->setVelY(b->getType() == BalloonType::BALLOON ? -2.50f : BALLOON_VELX_NEGATIVE * 2.0f); + + // Herencia de estados if (balloon->isStopped()) { b->stop(); @@ -409,7 +419,7 @@ void BalloonManager::setSounds(bool value) } } - // Activa o desactiva los sonidos de rebote los globos +// Activa o desactiva los sonidos de rebote los globos void BalloonManager::setBouncingSounds(bool value) { bouncing_sound_enabled_ = value; @@ -418,12 +428,12 @@ void BalloonManager::setBouncingSounds(bool value) balloon->setBouncingSound(value); } } - // Activa o desactiva los sonidos de los globos al explotar +// Activa o desactiva los sonidos de los globos al explotar void BalloonManager::setPoppingSounds(bool value) { - poping_sound_enabled_ = value; + poping_sound_enabled_ = value; for (auto &balloon : balloons_) { - balloon->setPoppingSound(value); + balloon->setPoppingSound(value); } } \ No newline at end of file diff --git a/source/explosions.cpp b/source/explosions.cpp index 2c0a74d..5d54a4a 100644 --- a/source/explosions.cpp +++ b/source/explosions.cpp @@ -32,8 +32,8 @@ void Explosions::addTexture(int size, std::shared_ptr texture, const st // Añade una explosión void Explosions::add(int x, int y, int size) { - const auto index = getIndexBySize(size); - explosions_.emplace_back(std::make_unique(textures_[index].texture, textures_[index].animation)); + const auto INDEX = getIndexBySize(size); + explosions_.emplace_back(std::make_unique(textures_[INDEX].texture, textures_[INDEX].animation)); explosions_.back()->setPos(x, y); }