creat bullet_manager.cpp
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
#include "balloon.h" // Para Balloon
|
||||
#include "balloon_manager.h" // Para BalloonManager
|
||||
#include "bullet.h" // Para Bullet, Bullet::Type, BulletMoveStatus
|
||||
#include "bullet_manager.h" // Para BulletManager
|
||||
#include "color.h" // Para Color, Colors::FLASH
|
||||
#include "difficulty.h" // Para Code
|
||||
#include "fade.h" // Para Fade, FadeType, FadeMode
|
||||
@@ -57,6 +58,7 @@ Game::Game(Player::Id player_id, int current_stage, bool demo_enabled)
|
||||
pause_manager_(std::make_unique<PauseManager>([this](bool is_paused) { onPauseStateChanged(is_paused); })),
|
||||
stage_manager_(std::make_unique<StageManager>()),
|
||||
balloon_manager_(std::make_unique<BalloonManager>(stage_manager_.get())),
|
||||
bullet_manager_(std::make_unique<BulletManager>()),
|
||||
background_(std::make_unique<Background>(stage_manager_->getPowerNeededToReachStage(stage_manager_->getTotalStages() - 1))),
|
||||
fade_in_(std::make_unique<Fade>()),
|
||||
fade_out_(std::make_unique<Fade>()),
|
||||
@@ -112,6 +114,19 @@ Game::Game(Player::Id player_id, int current_stage, bool demo_enabled)
|
||||
pause_manager_->setServiceMenuPause(is_active);
|
||||
}
|
||||
});
|
||||
|
||||
// Configura callbacks del BulletManager
|
||||
bullet_manager_->setTabeCollisionCallback([this](const std::shared_ptr<Bullet>& bullet) {
|
||||
return checkBulletTabeCollision(bullet);
|
||||
});
|
||||
|
||||
bullet_manager_->setBalloonCollisionCallback([this](const std::shared_ptr<Bullet>& bullet) {
|
||||
return checkBulletBalloonCollision(bullet);
|
||||
});
|
||||
|
||||
bullet_manager_->setOutOfBoundsCallback([this](const std::shared_ptr<Bullet>& bullet) {
|
||||
getPlayer(static_cast<Player::Id>(bullet->getOwner()))->decScoreMultiplier();
|
||||
});
|
||||
#ifdef RECORDING
|
||||
setState(State::PLAYING);
|
||||
#endif
|
||||
@@ -333,12 +348,12 @@ void Game::updateGameStateGameOver(float deltaTime) {
|
||||
updateBackground(deltaTime);
|
||||
balloon_manager_->update(deltaTime);
|
||||
tabe_->update(deltaTime);
|
||||
updateBullets(deltaTime);
|
||||
bullet_manager_->update(deltaTime);
|
||||
updateItems(deltaTime);
|
||||
updateSmartSprites(deltaTime);
|
||||
updatePathSprites(deltaTime);
|
||||
updateTimeStopped(deltaTime);
|
||||
checkBulletCollision();
|
||||
bullet_manager_->checkCollisions();
|
||||
cleanVectors();
|
||||
|
||||
if (game_over_timer_ < GAME_OVER_DURATION_S) {
|
||||
@@ -369,7 +384,7 @@ void Game::updateGameStateCompleted(float deltaTime) {
|
||||
updateBackground(deltaTime);
|
||||
balloon_manager_->update(deltaTime);
|
||||
tabe_->update(deltaTime);
|
||||
updateBullets(deltaTime);
|
||||
bullet_manager_->update(deltaTime);
|
||||
updateItems(deltaTime);
|
||||
updateSmartSprites(deltaTime);
|
||||
updatePathSprites(deltaTime);
|
||||
@@ -498,22 +513,6 @@ void Game::checkPlayerItemCollision(std::shared_ptr<Player>& player) {
|
||||
}
|
||||
}
|
||||
|
||||
// Comprueba y procesa la colisión de las balas
|
||||
void Game::checkBulletCollision() {
|
||||
for (auto& bullet : bullets_) {
|
||||
if (!bullet->isEnabled()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (checkBulletTabeCollision(bullet)) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (checkBulletBalloonCollision(bullet)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Maneja la colisión entre bala y Tabe
|
||||
auto Game::checkBulletTabeCollision(const std::shared_ptr<Bullet>& bullet) -> bool {
|
||||
@@ -601,37 +600,6 @@ void Game::handleBalloonDestruction(std::shared_ptr<Balloon> balloon, const std:
|
||||
updateHiScore();
|
||||
}
|
||||
|
||||
// Mueve las balas activas
|
||||
void Game::updateBullets(float deltaTime) {
|
||||
for (auto& bullet : bullets_) {
|
||||
if (bullet->update(deltaTime) == Bullet::MoveStatus::OUT) {
|
||||
getPlayer(static_cast<Player::Id>(bullet->getOwner()))->decScoreMultiplier();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Pinta las balas activas
|
||||
void Game::renderBullets() {
|
||||
for (auto& bullet : bullets_) {
|
||||
bullet->render();
|
||||
}
|
||||
}
|
||||
|
||||
// Crea un objeto bala
|
||||
void Game::createBullet(int x, int y, Bullet::Type type, Bullet::Color color, int owner) {
|
||||
bullets_.emplace_back(std::make_shared<Bullet>(x, y, type, color, owner));
|
||||
}
|
||||
|
||||
// Vacia el vector de balas
|
||||
void Game::freeBullets() {
|
||||
if (!bullets_.empty()) {
|
||||
for (int i = bullets_.size() - 1; i >= 0; --i) {
|
||||
if (!bullets_[i]->isEnabled()) {
|
||||
bullets_.erase(bullets_.begin() + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Actualiza los items
|
||||
void Game::updateItems(float deltaTime) {
|
||||
@@ -982,7 +950,7 @@ void Game::fillCanvas() {
|
||||
renderSmartSprites(); // El cafe que sale cuando te golpean
|
||||
renderItems();
|
||||
tabe_->render();
|
||||
renderBullets();
|
||||
bullet_manager_->render();
|
||||
renderPlayers();
|
||||
|
||||
renderPathSprites();
|
||||
@@ -1343,7 +1311,7 @@ void Game::handleFireInput(const std::shared_ptr<Player>& player, Bullet::Type t
|
||||
default:
|
||||
break;
|
||||
}
|
||||
createBullet(bullet.x, bullet.y, type, player->getNextBulletColor(), static_cast<int>(player->getId()));
|
||||
bullet_manager_->createBullet(bullet.x, bullet.y, type, player->getNextBulletColor(), static_cast<int>(player->getId()));
|
||||
playSound(player->getBulletSoundFile());
|
||||
|
||||
// Establece un tiempo de espera para el próximo disparo.
|
||||
@@ -1833,14 +1801,14 @@ void Game::updateGameStatePlaying(float deltaTime) {
|
||||
updateBackground(deltaTime);
|
||||
balloon_manager_->update(deltaTime);
|
||||
tabe_->update(deltaTime);
|
||||
updateBullets(deltaTime);
|
||||
bullet_manager_->update(deltaTime);
|
||||
updateItems(deltaTime);
|
||||
updateStage();
|
||||
updateSmartSprites(deltaTime);
|
||||
updatePathSprites(deltaTime);
|
||||
updateTimeStopped(deltaTime);
|
||||
updateHelper();
|
||||
checkBulletCollision();
|
||||
bullet_manager_->checkCollisions();
|
||||
updateMenace();
|
||||
checkAndUpdateBalloonSpeed();
|
||||
checkState();
|
||||
@@ -1849,7 +1817,7 @@ void Game::updateGameStatePlaying(float deltaTime) {
|
||||
|
||||
// Vacía los vectores de elementos deshabilitados
|
||||
void Game::cleanVectors() {
|
||||
freeBullets();
|
||||
bullet_manager_->freeBullets();
|
||||
balloon_manager_->freeBalloons();
|
||||
freeItems();
|
||||
freeSmartSprites();
|
||||
|
||||
Reference in New Issue
Block a user