Files
projecte_2026/source/game/gameplay/platform_manager.cpp

80 lines
2.5 KiB
C++

#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<MovingPlatform> 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<MovingPlatform::Data>& platform_data) {
const int COUNT = std::min(static_cast<int>(platforms_.size()), static_cast<int>(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<int>(platforms_.size());
}
// Acceso a una plataforma por índice
auto PlatformManager::getPlatform(int index) -> std::shared_ptr<MovingPlatform>& {
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