80 lines
2.5 KiB
C++
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
|