Files
vibe3_physics/source/state/state_manager.cpp
Sergio Valor e2a60e4f87 Refactor fase 4 (parcial): Crear estructura básica de StateManager
Crea la infraestructura del StateManager para gestionar estados DEMO/LOGO
con patrón de callbacks al Engine. Estructura lista para migración de lógica.

## Archivos Nuevos

**source/state/state_manager.h:**
- Declaración de clase StateManager
- Forward declaration de Engine (patrón callback)
- Métodos públicos: initialize(), update(), setState()
- Métodos toggle: toggleDemoMode(), toggleDemoLiteMode(), toggleLogoMode()
- Getters: getCurrentMode(), getPreviousMode(), is*ModeActive()
- Métodos privados: performDemoAction(), randomizeOnDemoStart(), etc.
- Miembros para timers, convergencia, flip detection, estado previo

**source/state/state_manager.cpp:**
- Implementación de constructor/destructor
- initialize() con callback al Engine
- Stubs de todos los métodos (TODO: migrar lógica completa)
- Preparado para recibir ~600 líneas de lógica DEMO/LOGO

## Archivos Modificados

**CMakeLists.txt:**
- Agregado: source/state/*.cpp al glob de archivos fuente

**source/engine.h:**
- Agregado: #include "state/state_manager.h"
- Agregado: std::unique_ptr<StateManager> state_manager_
- NOTA: Miembros de estado aún no removidos (pendiente migración)

**source/engine.cpp:**
- initialize(): Crea state_manager_ con `this` como callback
- NOTA: Métodos DEMO/LOGO aún no migrados (pendiente)

## Estado Actual

-  Estructura del StateManager creada y compila
-  Patrón de callbacks al Engine configurado
-  CMakeLists actualizado
-  Migración de lógica DEMO/LOGO: PENDIENTE (~600 líneas)
-  Remoción de miembros duplicados en Engine: PENDIENTE

## Próximos Pasos (Fase 4b)

1. Migrar updateDemoMode() → StateManager::update()
2. Migrar performDemoAction() → StateManager (privado)
3. Migrar randomizeOnDemoStart() → StateManager (privado)
4. Migrar enterLogoMode() → StateManager (privado)
5. Migrar exitLogoMode() → StateManager (privado)
6. Migrar toggleGravityOnOff() → StateManager (privado)
7. Migrar setState() completo
8. Delegar toggle*Mode() desde Engine a StateManager
9. Remover miembros de estado duplicados en Engine
10. Commit final de Fase 4

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-10 12:21:39 +02:00

83 lines
2.4 KiB
C++

#include "state_manager.h"
#include <cstdlib> // for rand
#include "../defines.h" // for constantes DEMO/LOGO
#include "../engine.h" // for Engine (callbacks)
#include "../shapes/png_shape.h" // for PNGShape flip detection
StateManager::StateManager()
: engine_(nullptr)
, current_app_mode_(AppMode::SANDBOX)
, previous_app_mode_(AppMode::SANDBOX)
, demo_timer_(0.0f)
, demo_next_action_time_(0.0f)
, logo_convergence_threshold_(0.90f)
, logo_min_time_(3.0f)
, logo_max_time_(5.0f)
, logo_waiting_for_flip_(false)
, logo_target_flip_number_(0)
, logo_target_flip_percentage_(0.0f)
, logo_current_flip_count_(0)
, logo_entered_manually_(false)
, logo_previous_theme_(0)
, logo_previous_texture_index_(0)
, logo_previous_shape_scale_(1.0f) {
}
StateManager::~StateManager() {
}
void StateManager::initialize(Engine* engine) {
engine_ = engine;
}
void StateManager::setLogoPreviousState(int theme, size_t texture_index, float shape_scale) {
logo_previous_theme_ = theme;
logo_previous_texture_index_ = texture_index;
logo_previous_shape_scale_ = shape_scale;
}
// TODO: Implementar métodos completos
// Por ahora, stubs vacíos para que compile
void StateManager::update(float delta_time, float shape_convergence, Shape* active_shape) {
// TODO: Migrar updateDemoMode()
}
void StateManager::setState(AppMode new_mode, int current_screen_width, int current_screen_height) {
// TODO: Migrar setState()
}
void StateManager::toggleDemoMode(int current_screen_width, int current_screen_height) {
// TODO: Migrar toggleDemoMode()
}
void StateManager::toggleDemoLiteMode(int current_screen_width, int current_screen_height) {
// TODO: Migrar toggleDemoLiteMode()
}
void StateManager::toggleLogoMode(int current_screen_width, int current_screen_height, size_t ball_count) {
// TODO: Migrar toggleLogoMode()
}
void StateManager::performDemoAction(bool is_lite) {
// TODO: Migrar performDemoAction()
}
void StateManager::randomizeOnDemoStart(bool is_lite) {
// TODO: Migrar randomizeOnDemoStart()
}
void StateManager::toggleGravityOnOff() {
// TODO: Migrar toggleGravityOnOff()
}
void StateManager::enterLogoMode(bool from_demo, int current_screen_width, int current_screen_height, size_t ball_count) {
// TODO: Migrar enterLogoMode()
}
void StateManager::exitLogoMode(bool return_to_demo) {
// TODO: Migrar exitLogoMode()
}