#pragma once #include #include // Para shared_ptr #include // Para vector #include "game/entities/moving_platform.hpp" // Para MovingPlatform, MovingPlatform::Data class PlatformManager { public: PlatformManager() = default; ~PlatformManager() = default; // Prohibir copia y movimiento PlatformManager(const PlatformManager&) = delete; auto operator=(const PlatformManager&) -> PlatformManager& = delete; PlatformManager(PlatformManager&&) = delete; auto operator=(PlatformManager&&) -> PlatformManager& = delete; // Gestión de plataformas void addPlatform(std::shared_ptr platform); void clear(); [[nodiscard]] auto isEmpty() const -> bool; // Actualización y renderizado void update(float delta_time); void render(); // Detección de plataforma bajo el jugador // Devuelve puntero a la plataforma sobre la que está el jugador, o nullptr auto checkPlayerOnPlatform(const SDL_FRect& player_collider, float player_vy) -> MovingPlatform*; #ifdef _DEBUG void updateAnimations(float delta_time); void resetPositions(const std::vector& platform_data); [[nodiscard]] auto getCount() const -> int; auto getPlatform(int index) -> std::shared_ptr&; void removeLastPlatform(); #endif private: std::vector> platforms_; };