corregits bugs de toquetechar vectors i merdes i passats a lists

This commit is contained in:
2025-10-20 12:29:37 +02:00
parent 2b4523d644
commit c8bf9640cf
5 changed files with 62 additions and 63 deletions

View File

@@ -357,7 +357,7 @@ void Game::updateGameStateGameOver(float delta_time) {
updatePathSprites(delta_time);
updateTimeStopped(delta_time);
bullet_manager_->checkCollisions();
cleanVectors();
cleanLists();
if (game_over_timer_ < GAME_OVER_DURATION_S) {
game_over_timer_ += delta_time; // Incremento time-based primero
@@ -391,7 +391,7 @@ void Game::updateGameStateCompleted(float delta_time) {
updateItems(delta_time);
updateSmartSprites(delta_time);
updatePathSprites(delta_time);
cleanVectors();
cleanLists();
// Maneja eventos del juego completado
handleGameCompletedEvents();
@@ -684,16 +684,18 @@ void Game::createItem(ItemType type, float x, float y) {
// Vacia el vector de items
void Game::freeItems() {
if (!items_.empty()) {
for (int i = items_.size() - 1; i >= 0; --i) {
if (!items_[i]->isEnabled()) {
if (items_[i]->getType() == ItemType::COFFEE_MACHINE) {
coffee_machine_enabled_ = false;
}
items_.erase(items_.begin() + i);
std::erase_if(items_, [&](const auto& item) {
if (!item->isEnabled()) {
// Comprobamos si hay que realizar una acción extra
if (item->getType() == ItemType::COFFEE_MACHINE) {
coffee_machine_enabled_ = false;
}
// Devolvemos 'true' para indicar que este elemento debe ser borrado.
return true;
}
}
// Devolvemos 'false' para conservarlo.
return false;
});
}
// Crea un objeto PathSprite
@@ -730,26 +732,18 @@ void Game::createMessage(const std::vector<Path>& paths, const std::shared_ptr<T
path_sprites_.back()->enable();
}
// Vacia el vector de smartsprites
// Vacia la lista de smartsprites
void Game::freeSmartSprites() {
if (!smart_sprites_.empty()) {
for (int i = smart_sprites_.size() - 1; i >= 0; --i) {
if (smart_sprites_[i]->hasFinished()) {
smart_sprites_.erase(smart_sprites_.begin() + i);
}
}
}
std::erase_if(smart_sprites_, [](const auto& sprite) {
return sprite->hasFinished();
});
}
// Vacia el vector de pathsprites
// Vacia la lista de pathsprites
void Game::freePathSprites() {
if (!path_sprites_.empty()) {
for (int i = path_sprites_.size() - 1; i >= 0; --i) {
if (path_sprites_[i]->hasFinished()) {
path_sprites_.erase(path_sprites_.begin() + i);
}
}
}
std::erase_if(path_sprites_, [](const auto& sprite) {
return sprite->hasFinished();
});
}
// Crea un SpriteSmart para arrojar el item café al recibir un impacto
@@ -1822,11 +1816,11 @@ void Game::updateGameStatePlaying(float delta_time) {
updateMenace();
checkAndUpdateBalloonSpeed();
checkState();
cleanVectors();
cleanLists();
}
// Vacía los vectores de elementos deshabilitados
void Game::cleanVectors() {
void Game::cleanLists() {
bullet_manager_->freeBullets();
balloon_manager_->freeBalloons();
freeItems();

View File

@@ -5,6 +5,7 @@
#include <memory> // Para shared_ptr, unique_ptr
#include <string> // Para string
#include <vector> // Para vector
#include <list> // Para list
#include "bullet.hpp" // for Bullet
#include "demo.hpp" // for Demo
@@ -121,9 +122,9 @@ class Game {
SDL_Texture* canvas_; // Textura para dibujar la zona de juego
std::vector<std::shared_ptr<Player>> players_; // Vector con los jugadores
std::vector<std::unique_ptr<Item>> items_; // Vector con los items
std::vector<std::unique_ptr<SmartSprite>> smart_sprites_; // Vector con los smartsprites
std::vector<std::unique_ptr<PathSprite>> path_sprites_; // Vector con los pathsprites
std::list<std::unique_ptr<Item>> items_; // Vector con los items
std::list<std::unique_ptr<SmartSprite>> smart_sprites_; // Vector con los smartsprites
std::list<std::unique_ptr<PathSprite>> path_sprites_; // Vector con los pathsprites
std::vector<std::shared_ptr<Texture>> item_textures_; // Vector con las texturas de los items
std::vector<std::vector<std::shared_ptr<Texture>>> player_textures_; // Vector con todas las texturas de los jugadores
@@ -210,7 +211,7 @@ class Game {
void handleEvents(); // Procesa los eventos del sistema en cola
void checkState(); // Verifica y actualiza el estado actual del juego
void setState(State state); // Cambia el estado del juego
void cleanVectors(); // Limpia vectores de elementos deshabilitados
void cleanLists(); // Limpia vectores de elementos deshabilitados
// --- Gestión de estados del juego ---
void updateGameStates(float delta_time); // Actualiza todos los estados del juego