#include "platform_manager.hpp" #include "game/entities/moving_platform.hpp" // Para MovingPlatform #include "game/gameplay/solid_actor_manager.hpp" // Para SolidActorManager // Constructor: recibe el SolidActorManager para registrar las plataformas // como SolidActors (flags CARRY_ON_TOP | ONEWAY_TOP) y que los sweeps del // Player las detecten en moveVertical/checkFalling. PlatformManager::PlatformManager(SolidActorManager* solid_actors) : solid_actors_(solid_actors) { } // Añade una plataforma a la colección y la registra en el SolidActorManager void PlatformManager::addPlatform(std::shared_ptr platform) { solid_actors_->registerActor(platform.get()); platforms_.push_back(std::move(platform)); } // Elimina todas las plataformas y las desregistra del SolidActorManager void PlatformManager::clear() { for (const auto& platform : platforms_) { solid_actors_->unregisterActor(platform.get()); } platforms_.clear(); } // Comprueba si no hay plataformas auto PlatformManager::isEmpty() const -> bool { return platforms_.empty(); } // Actualiza todas las plataformas void PlatformManager::update(float delta_time) { for (const auto& platform : platforms_) { platform->update(delta_time); } } // Renderiza todas las plataformas void PlatformManager::render() { for (const auto& platform : platforms_) { platform->render(); } } #ifdef _DEBUG // Solo actualiza animaciones sin mover plataformas void PlatformManager::updateAnimations(float delta_time) { for (const auto& platform : platforms_) { platform->updateAnimation(delta_time); } } // Resetea todas las plataformas a su posición inicial void PlatformManager::resetPositions(const std::vector& platform_data) { const int COUNT = std::min(static_cast(platforms_.size()), static_cast(platform_data.size())); for (int i = 0; i < COUNT; ++i) { platforms_[i]->resetToInitialPosition(platform_data[i]); } } // Número de plataformas auto PlatformManager::getCount() const -> int { return static_cast(platforms_.size()); } // Acceso a una plataforma por índice auto PlatformManager::getPlatform(int index) -> std::shared_ptr& { return platforms_.at(index); } // Elimina la última plataforma (y la desregistra del SolidActorManager) void PlatformManager::removeLastPlatform() { if (!platforms_.empty()) { solid_actors_->unregisterActor(platforms_.back().get()); platforms_.pop_back(); } } #endif