Afegida la opció de crear els globos sense temps de creació en el balloon_manager

Modificat el mode demo per a que la primera oleada estiga ja creada
This commit is contained in:
2025-01-04 00:42:57 +01:00
parent f573bd02ac
commit e887c2a2ab
3 changed files with 41 additions and 13 deletions

View File

@@ -107,11 +107,18 @@ void BalloonManager::deployBalloonFormation(int stage)
last_balloon_deploy_ = formation; last_balloon_deploy_ = formation;
const auto set = balloon_formations_->getSet(stage, formation); const auto set = balloon_formations_->getSet(stage, formation);
const auto numEnemies = set.number_of_balloons; const auto num_enemies = set.number_of_balloons;
for (int i = 0; i < numEnemies; ++i) for (int i = 0; i < num_enemies; ++i)
{ {
auto p = set.init[i]; auto p = set.init[i];
createBalloon(p.x, p.y, p.type, p.size, p.vel_x, balloon_speed_, p.creation_counter); createBalloon(
p.x,
p.y,
p.type,
p.size,
p.vel_x,
balloon_speed_,
(creation_time_enabled_) ? p.creation_counter : 0);
} }
balloon_deploy_counter_ = 300; balloon_deploy_counter_ = 300;
@@ -123,8 +130,8 @@ void BalloonManager::deployBalloonFormation(int stage)
void BalloonManager::deploySet(int set_number) void BalloonManager::deploySet(int set_number)
{ {
const auto set = balloon_formations_->getSet(set_number); const auto set = balloon_formations_->getSet(set_number);
const auto numEnemies = set.number_of_balloons; const auto num_enemies = set.number_of_balloons;
for (int i = 0; i < numEnemies; ++i) for (int i = 0; i < num_enemies; ++i)
{ {
auto p = set.init[i]; auto p = set.init[i];
createBalloon(p.x, p.y, p.type, p.size, p.vel_x, balloon_speed_, p.creation_counter); createBalloon(p.x, p.y, p.type, p.size, p.vel_x, balloon_speed_, p.creation_counter);
@@ -135,8 +142,8 @@ void BalloonManager::deploySet(int set_number)
void BalloonManager::deploySet(int set_number, int y) void BalloonManager::deploySet(int set_number, int y)
{ {
const auto set = balloon_formations_->getSet(set_number); const auto set = balloon_formations_->getSet(set_number);
const auto numEnemies = set.number_of_balloons; const auto num_enemies = set.number_of_balloons;
for (int i = 0; i < numEnemies; ++i) for (int i = 0; i < num_enemies; ++i)
{ {
auto p = set.init[i]; auto p = set.init[i];
createBalloon(p.x, y, p.type, p.size, p.vel_x, balloon_speed_, p.creation_counter); createBalloon(p.x, y, p.type, p.size, p.vel_x, balloon_speed_, p.creation_counter);
@@ -366,6 +373,21 @@ void BalloonManager::createTwoBigBalloons()
deploySet(1); deploySet(1);
} }
// Crea una disposición de globos aleatoria
void BalloonManager::createRandomBalloons()
{
const int num_balloons = 2 + rand() % 4;
for (int i = 0; i < num_balloons; ++i)
{
const float x = param.game.game_area.rect.x + (rand() % param.game.game_area.rect.w) - BALLOON_SIZE[3];
const int y = param.game.game_area.rect.y + (rand() % 50);
const BalloonSize size = static_cast<BalloonSize>(rand() % 4);
const float vel_x = (rand() % 2 == 0) ? BALLOON_VELX_POSITIVE : BALLOON_VELX_NEGATIVE;
const int creation_counter = 0;
createBalloon(x, y, BalloonType::BALLOON, size, vel_x, balloon_speed_, creation_counter);
}
}
// Obtiene el nivel de ameza actual generado por los globos // Obtiene el nivel de ameza actual generado por los globos
int BalloonManager::getMenace() int BalloonManager::getMenace()
{ {

View File

@@ -33,6 +33,7 @@ private:
int power_ball_counter_ = 0; // Contador de formaciones enemigas entre la aparicion de una PowerBall y otra int power_ball_counter_ = 0; // Contador de formaciones enemigas entre la aparicion de una PowerBall y otra
int last_balloon_deploy_ = 0; // Guarda cual ha sido la última formación desplegada para no repetir; int last_balloon_deploy_ = 0; // Guarda cual ha sido la última formación desplegada para no repetir;
SDL_Rect play_area_ = param.game.play_area.rect; // Zona por donde se moveran los globos SDL_Rect play_area_ = param.game.play_area.rect; // Zona por donde se moveran los globos
bool creation_time_enabled_ = true; // Indica si los globos se crean con tiempo
// Inicializa // Inicializa
void init(); void init();
@@ -108,6 +109,9 @@ public:
// Crea dos globos gordos // Crea dos globos gordos
void createTwoBigBalloons(); void createTwoBigBalloons();
// Crea una disposición de globos aleatoria
void createRandomBalloons();
// Obtiene el nivel de ameza actual generado por los globos // Obtiene el nivel de ameza actual generado por los globos
int getMenace(); int getMenace();
@@ -117,9 +121,11 @@ public:
// Getters // Getters
float getBalloonSpeed() const { return balloon_speed_; } float getBalloonSpeed() const { return balloon_speed_; }
Balloons &getBalloons() { return balloons_; } Balloons &getBalloons() { return balloons_; }
int getNumBalloons() const { return balloons_.size(); }
// Setters // Setters
void setDefaultBalloonSpeed(float speed) { default_balloon_speed_ = speed; } void setDefaultBalloonSpeed(float speed) { default_balloon_speed_ = speed; }
void resetBalloonSpeed() { setBalloonSpeed(default_balloon_speed_); } void resetBalloonSpeed() { setBalloonSpeed(default_balloon_speed_); }
void setPlayArea(SDL_Rect play_area) { play_area_ = play_area; } void setPlayArea(SDL_Rect play_area) { play_area_ = play_area; }
void setCreationTimeEnabled(bool value) { creation_time_enabled_ = value; }
}; };

View File

@@ -1652,11 +1652,6 @@ void Game::initDemo(int player_id)
Stage::total_power += Stage::get(i).power_to_complete; Stage::total_power += Stage::get(i).power_to_complete;
} }
// Pone al jugador en estado jugar
{
getPlayer(player_id)->setPlayingState(PlayerState::PLAYING);
}
// Activa o no al otro jugador // Activa o no al otro jugador
if (rand() % 3 != 0) if (rand() % 3 != 0)
{ {
@@ -1680,6 +1675,9 @@ void Game::initDemo(int player_id)
// Configura los marcadores // Configura los marcadores
scoreboard_->setMode(SCOREBOARD_LEFT_PANEL, ScoreboardMode::DEMO); scoreboard_->setMode(SCOREBOARD_LEFT_PANEL, ScoreboardMode::DEMO);
scoreboard_->setMode(SCOREBOARD_RIGHT_PANEL, ScoreboardMode::DEMO); scoreboard_->setMode(SCOREBOARD_RIGHT_PANEL, ScoreboardMode::DEMO);
// Añade unos cuantos globos
// balloon_manager_->createRandomBalloons();
} }
// Modo grabar demo // Modo grabar demo
@@ -1770,7 +1768,7 @@ void Game::initPlayers(int player_id)
// Activa el jugador que coincide con el "player_id" // Activa el jugador que coincide con el "player_id"
auto player = getPlayer(player_id); auto player = getPlayer(player_id);
player->setPlayingState(PlayerState::ENTERING_SCREEN); player->setPlayingState((demo_.enabled) ? PlayerState::PLAYING : PlayerState::ENTERING_SCREEN);
player->setInvulnerable(false); player->setInvulnerable(false);
} }
@@ -1816,6 +1814,8 @@ void Game::updateDemo()
{ {
if (demo_.enabled) if (demo_.enabled)
{ {
balloon_manager_->setCreationTimeEnabled((balloon_manager_->getNumBalloons() == 0) ? false : true);
// Actualiza ambos fades // Actualiza ambos fades
fade_in_->update(); fade_in_->update();
fade_out_->update(); fade_out_->update();