From 719c448779d27ac31fce60123414f9560f398f97 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sat, 12 Jul 2025 09:55:56 +0200 Subject: [PATCH] tornem al pc d'anit --- data/gfx/bullet/bullet.ani | 2 +- data/gfx/bullet/bullet.png | Bin 2016 -> 2006 bytes source/bullet.cpp | 12 ++++++------ source/bullet.h | 12 +++++++----- source/sections/game.cpp | 16 +++++++++++----- 5 files changed, 25 insertions(+), 17 deletions(-) diff --git a/data/gfx/bullet/bullet.ani b/data/gfx/bullet/bullet.ani index b4daa26..224920c 100644 --- a/data/gfx/bullet/bullet.ani +++ b/data/gfx/bullet/bullet.ani @@ -5,7 +5,7 @@ frame_height=12 name=normal_up speed=5 loop=0 -frames=0,1,2,2,1,0 +frames=0,1,2 [/animation] [animation] diff --git a/data/gfx/bullet/bullet.png b/data/gfx/bullet/bullet.png index 2e74a72c19076306f77dd28327b53ebe745bfe1d..d7759462414b3199bbd7baee5520cc1cd597082a 100644 GIT binary patch delta 1979 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 param.game.play_area.rect.w) + if (pos_x_ < param.game.play_area.rect.x - WIDTH || pos_x_ > param.game.play_area.rect.w) { disable(); return BulletMoveStatus::OUT; } - pos_y_ += BULLET_VEL_Y_; - if (pos_y_ < param.game.play_area.rect.y - BULLET_HEIGHT_) + pos_y_ += VEL_Y_; + if (pos_y_ < param.game.play_area.rect.y - HEIGHT) { disable(); return BulletMoveStatus::OUT; diff --git a/source/bullet.h b/source/bullet.h index d738b70..08b2506 100644 --- a/source/bullet.h +++ b/source/bullet.h @@ -26,6 +26,10 @@ enum class BulletMoveStatus : Uint8 class Bullet { public: + // Constantes + static constexpr float WIDTH = 12.0f; + static constexpr float HEIGHT = 12.0f; + // Constructor y Destructor Bullet(float x, float y, BulletType bullet_type, bool powered, int owner); ~Bullet() = default; @@ -44,11 +48,9 @@ public: private: // Constantes - static constexpr float BULLET_WIDTH_ = 12.0f; - static constexpr float BULLET_HEIGHT_ = 12.0f; - static constexpr float BULLET_VEL_Y_ = -3.0f; - static constexpr float BULLET_VEL_X_LEFT_ = -2.0f; - static constexpr float BULLET_VEL_X_RIGHT_ = 2.0f; + static constexpr float VEL_Y_ = -3.0f; + static constexpr float VEL_X_LEFT_ = -2.0f; + static constexpr float VEL_X_RIGHT_ = 2.0f; // Propiedades std::unique_ptr sprite_; // Sprite con los gráficos diff --git a/source/sections/game.cpp b/source/sections/game.cpp index e2b7f8b..cb65141 100644 --- a/source/sections/game.cpp +++ b/source/sections/game.cpp @@ -648,8 +648,7 @@ void Game::renderBullets() // Crea un objeto bala void Game::createBullet(int x, int y, BulletType kind, bool powered_up, int owner) { - bullets_.emplace_back( - std::make_unique(x, y, kind, powered_up, owner)); + bullets_.emplace_back(std::make_unique(x, y, kind, powered_up, owner)); } // Vacia el vector de balas @@ -1427,25 +1426,32 @@ void Game::DEMO_handlePlayerInput(const std::shared_ptr &player, int ind } // Maneja el disparo de un jugador, incluyendo la creación de balas y la gestión del tiempo de espera entre disparos. -void Game::handleFireInput(const std::shared_ptr &player, BulletType bulletType) +void Game::handleFireInput(const std::shared_ptr &player, BulletType bullet_type) { if (player->canFire()) { - switch (bulletType) + SDL_Point bullet = {0, 0}; + switch (bullet_type) { case BulletType::UP: player->setInput(InputAction::FIRE_CENTER); + bullet.x = 2 + player->getPosX() + (player->getWidth() - Bullet::WIDTH) / 2; + bullet.y = player->getPosY() - (Bullet::HEIGHT / 2); break; case BulletType::LEFT: player->setInput(InputAction::FIRE_LEFT); + bullet.x = player->getPosX() - (Bullet::WIDTH / 2); + bullet.y = player->getPosY(); break; case BulletType::RIGHT: player->setInput(InputAction::FIRE_RIGHT); + bullet.x = player->getPosX() + player->getWidth() - (Bullet::WIDTH / 2); + bullet.y = player->getPosY(); break; default: break; } - createBullet(player->getPosX() + (player->getWidth() / 2) - 6, player->getPosY() + (player->getHeight() / 2), bulletType, player->isPowerUp(), player->getId()); + createBullet(bullet.x, bullet.y, bullet_type, player->isPowerUp(), player->getId()); playSound("bullet.wav"); // Establece un tiempo de espera para el próximo disparo.