ja s'ha liat la cosa per no fer pull, ostia

This commit is contained in:
2025-07-24 14:00:05 +02:00
parent 55d5957ff0
commit fa6fbeb09c
8 changed files with 298 additions and 284 deletions

View File

@@ -11,7 +11,7 @@
#include <string> // Para allocator, char_traits, operator==, string, operator<=>, basic_string, stoi, getline
#include "asset.h" // Para Asset
#include "balloon.h" // Para BALLOON_SIZE, BalloonSize, BalloonType, BALLOON_VELX_NEGATIVE, BALLOON_VELX_POSITIVE
#include "balloon.h" // Para Balloon::SIZE, Balloon::Size, Balloon::Type, Balloon::VELX_NEGATIVE, Balloon::VELX_POSITIVE
#include "param.h" // Para Param, ParamGame, param
#include "utils.h" // Para Zone, BLOCK
@@ -20,18 +20,18 @@ void BalloonFormations::initFormations() {
const int DEFAULT_POS_Y = param.game.play_area.rect.h - BALLOON_SPAWN_HEIGHT;
const int X4_0 = param.game.play_area.rect.x;
const int X4_100 = param.game.play_area.rect.w - BALLOON_SIZE.at(3);
const int X4_100 = param.game.play_area.rect.w - Balloon::SIZE.at(3);
const int X3_0 = param.game.play_area.rect.x;
const int X3_100 = param.game.play_area.rect.w - BALLOON_SIZE.at(2);
const int X3_100 = param.game.play_area.rect.w - Balloon::SIZE.at(2);
const int X2_0 = param.game.play_area.rect.x;
const int X2_100 = param.game.play_area.rect.w - BALLOON_SIZE.at(1);
const int X2_100 = param.game.play_area.rect.w - Balloon::SIZE.at(1);
const int X1_0 = param.game.play_area.rect.x;
const int X1_50 = param.game.play_area.center_x - (BALLOON_SIZE.at(0) / 2);
const int X1_100 = param.game.play_area.rect.w - BALLOON_SIZE.at(0);
const int X1_50 = param.game.play_area.center_x - (Balloon::SIZE.at(0) / 2);
const int X1_100 = param.game.play_area.rect.w - Balloon::SIZE.at(0);
// Variables calculadas para posiciones especiales
const int QUARTER1_X4 = param.game.play_area.first_quarter_x - (BALLOON_SIZE.at(3) / 2);
const int QUARTER3_X4 = param.game.play_area.third_quarter_x - (BALLOON_SIZE.at(3) / 2);
const int QUARTER1_X4 = param.game.play_area.first_quarter_x - (Balloon::SIZE.at(3) / 2);
const int QUARTER3_X4 = param.game.play_area.third_quarter_x - (Balloon::SIZE.at(3) / 2);
// Mapa de variables para reemplazar en el archivo
std::map<std::string, float> variables = {
@@ -47,12 +47,12 @@ void BalloonFormations::initFormations() {
{"QUARTER1_X4", QUARTER1_X4},
{"QUARTER3_X4", QUARTER3_X4},
{"DEFAULT_POS_Y", DEFAULT_POS_Y},
{"BALLOON_SIZE_0", BALLOON_SIZE.at(0)},
{"BALLOON_SIZE_1", BALLOON_SIZE.at(1)},
{"BALLOON_SIZE_2", BALLOON_SIZE.at(2)},
{"BALLOON_SIZE_3", BALLOON_SIZE.at(3)},
{"RIGHT", BALLOON_VELX_POSITIVE},
{"LEFT", BALLOON_VELX_NEGATIVE}};
{"BALLOON_SIZE_0", Balloon::SIZE.at(0)},
{"BALLOON_SIZE_1", Balloon::SIZE.at(1)},
{"BALLOON_SIZE_2", Balloon::SIZE.at(2)},
{"BALLOON_SIZE_3", Balloon::SIZE.at(3)},
{"RIGHT", Balloon::VELX_POSITIVE},
{"LEFT", Balloon::VELX_NEGATIVE}};
balloon_formation_.reserve(NUMBER_OF_BALLOON_FORMATIONS);
@@ -111,8 +111,10 @@ auto BalloonFormations::loadFormationsFromFile(const std::string& filename, cons
// Crear variantes flotantes (formaciones 50-99)
createFloaterVariants();
#ifdef _DEBUG
// Añadir formación de prueba
addTestFormation();
#endif
file.close();
return true;
@@ -138,21 +140,21 @@ auto BalloonFormations::parseBalloonLine(const std::string& line, const std::map
int y = evaluateExpression(tokens.at(2), variables);
float vel_x = evaluateExpression(tokens.at(3), variables);
BalloonType type = (tokens.at(4) == "BALLOON") ? BalloonType::BALLOON : BalloonType::FLOATER;
Balloon::Type type = (tokens.at(4) == "BALLOON") ? Balloon::Type::BALLOON : Balloon::Type::FLOATER;
BalloonSize size;
if (tokens.at(5) == "SIZE_0") {
size = BalloonSize::SIZE_0;
desp = desp * (BALLOON_SIZE.at(0) + 1);
} else if (tokens.at(5) == "SIZE_1") {
size = BalloonSize::SIZE_1;
desp = desp * (BALLOON_SIZE.at(1) + 1);
} else if (tokens.at(5) == "SIZE_2") {
size = BalloonSize::SIZE_2;
desp = desp * (BALLOON_SIZE.at(2) + 1);
} else if (tokens.at(5) == "SIZE_3") {
size = BalloonSize::SIZE_3;
desp = desp * (BALLOON_SIZE.at(3) + 1);
Balloon::Size size;
if (tokens.at(5) == "SMALL") {
size = Balloon::Size::SMALL;
desp = desp * (Balloon::SIZE.at(0) + 1);
} else if (tokens.at(5) == "MEDIUM") {
size = Balloon::Size::MEDIUM;
desp = desp * (Balloon::SIZE.at(1) + 1);
} else if (tokens.at(5) == "LARGE") {
size = Balloon::Size::LARGE;
desp = desp * (Balloon::SIZE.at(2) + 1);
} else if (tokens.at(5) == "EXTRALARGE") {
size = Balloon::Size::EXTRALARGE;
desp = desp * (Balloon::SIZE.at(3) + 1);
} else {
return std::nullopt;
}
@@ -230,36 +232,36 @@ void BalloonFormations::createFloaterVariants() {
for (int i = 0; i < balloon_formation_.at(k).number_of_balloons; i++) {
const auto& original = balloon_formation_.at(k).init.at(i);
floater_params.emplace_back(
original.x, original.y, original.vel_x, BalloonType::FLOATER, original.size, original.creation_counter);
original.x, original.y, original.vel_x, Balloon::Type::FLOATER, original.size, original.creation_counter);
}
balloon_formation_.at(k + 50) = BalloonFormationUnit(
balloon_formation_.at(k).number_of_balloons, floater_params);
}
}
#ifdef _DEBUG
void BalloonFormations::addTestFormation() {
std::vector<BalloonFormationParams> test_params = {
{10, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE_0, 200},
{50, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE_1, 200},
{90, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE_2, 200},
{140, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE_3, 200}};
{10, -BLOCK, 0, Balloon::Type::FLOATER, Balloon::Size::SMALL, 200},
{50, -BLOCK, 0, Balloon::Type::FLOATER, Balloon::Size::MEDIUM, 200},
{90, -BLOCK, 0, Balloon::Type::FLOATER, Balloon::Size::LARGE, 200},
{140, -BLOCK, 0, Balloon::Type::FLOATER, Balloon::Size::EXTRALARGE, 200}};
balloon_formation_.at(99) = BalloonFormationUnit(4, test_params);
}
#endif
void BalloonFormations::loadDefaultFormations() {
// Código de fallback con algunas formaciones básicas hardcodeadas
// para que el juego funcione aunque falle la carga del archivo
const int DEFAULT_POS_Y = param.game.play_area.rect.h - BALLOON_SPAWN_HEIGHT;
const int X4_0 = param.game.play_area.rect.x;
const int X4_100 = param.game.play_area.rect.w - BALLOON_SIZE.at(3);
const int X4_100 = param.game.play_area.rect.w - Balloon::SIZE.at(3);
// Formación básica #00
std::vector<BalloonFormationParams> basic_formation = {
BalloonFormationParams(X4_0, DEFAULT_POS_Y, BALLOON_VELX_POSITIVE, BalloonType::BALLOON, BalloonSize::SIZE_3, CREATION_TIME),
BalloonFormationParams(X4_100, DEFAULT_POS_Y, BALLOON_VELX_NEGATIVE, BalloonType::BALLOON, BalloonSize::SIZE_3, CREATION_TIME)};
BalloonFormationParams(X4_0, DEFAULT_POS_Y, Balloon::VELX_POSITIVE, Balloon::Type::BALLOON, Balloon::Size::EXTRALARGE, CREATION_TIME),
BalloonFormationParams(X4_100, DEFAULT_POS_Y, Balloon::VELX_NEGATIVE, Balloon::Type::BALLOON, Balloon::Size::EXTRALARGE, CREATION_TIME)};
balloon_formation_.emplace_back(2, basic_formation);
}