#include "shape_manager.h" #include // for std::min, std::max #include // for rand #include "../defines.h" // for constantes #include "../engine.h" // for Engine (callbacks) ShapeManager::ShapeManager() : engine_(nullptr) , current_mode_(SimulationMode::PHYSICS) , current_shape_type_(ShapeType::SPHERE) , last_shape_type_(ShapeType::SPHERE) , active_shape_(nullptr) , shape_scale_factor_(1.0f) , depth_zoom_enabled_(true) { } ShapeManager::~ShapeManager() { } void ShapeManager::initialize(Engine* engine) { engine_ = engine; } // ============================================================================ // IMPLEMENTACIONES FACADE - Engine mantiene lógica compleja temporalmente // ============================================================================ // Nota: Los métodos delegables sin dependencias complejas están implementados. // Los métodos con dependencias fuertes (SceneManager, tema, notificaciones) // se mantienen como stubs - Engine los llama directamente. // ============================================================================ void ShapeManager::toggleShapeMode(bool force_gravity_on_exit) { // STUB: Engine mantiene implementación completa en toggleShapeModeInternal() // Razón: Requiere acceso a SceneManager, UIManager, StateManager } void ShapeManager::activateShape(ShapeType type) { // STUB: Engine mantiene implementación completa en activateShapeInternal() // Razón: Requiere acceso a SceneManager (desactivar gravedad, atracción) } void ShapeManager::handleShapeScaleChange(bool increase) { // STUB: Engine gestiona esto directamente // Razón: Requiere mostrar notificación (UIManager) } void ShapeManager::resetShapeScale() { // STUB: Engine gestiona esto directamente // Razón: Requiere mostrar notificación (UIManager) } void ShapeManager::toggleDepthZoom() { depth_zoom_enabled_ = !depth_zoom_enabled_; } void ShapeManager::update(float delta_time) { // STUB: Engine mantiene implementación completa en updateShape() // Razón: Requiere acceso a SceneManager (bolas), aplicar física de atracción } void ShapeManager::generateShape() { // Implementación delegable: Solo llama a Shape::generatePoints() if (!active_shape_) return; // NOTA: Requiere parámetros de Engine (num_points, screen_width, screen_height) // Por ahora es stub - Engine lo llama directamente con parámetros } void ShapeManager::activateShapeInternal(ShapeType type) { // STUB: Engine mantiene implementación completa // Razón: Crea instancias polimórficas de Shape (requiere includes de todas las shapes) } void ShapeManager::clampShapeScale() { // Implementación simple: Limitar scale_factor_ entre MIN y MAX // NOTA: Cálculo completo requiere current_screen_width/height de Engine // Por ahora simplemente limita al rango base shape_scale_factor_ = std::max(SHAPE_SCALE_MIN, std::min(SHAPE_SCALE_MAX, shape_scale_factor_)); }