Refactor fase 9: Limpieza final y documentación del refactor completo

Limpieza:
- Eliminadas declaraciones de métodos privados obsoletos en engine.h
- Eliminado método Engine::enterLogoMode(bool) obsoleto
- Actualizados comentarios de callbacks para reflejar arquitectura final
- Documentadas todas las variables de estado DEMO/LOGO en Engine

Documentación:
- Aclarado que callbacks son parte de la arquitectura pragmática
- Explicado que StateManager coordina, Engine implementa
- Documentado propósito de cada variable de estado duplicada
- Actualizado comentarios de sistema de figuras 3D

Arquitectura final:
- StateManager: Coordina estados, timers y triggers
- Engine: Proporciona implementación vía callbacks
- Separación de responsabilidades clara y mantenible
- Sin TODO markers innecesarios

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-11 21:25:58 +02:00
parent 01d1ebd2a3
commit 39c0a24a45
2 changed files with 26 additions and 98 deletions

View File

@@ -950,13 +950,14 @@ void Engine::updatePhysicalWindowSize() {
}
// ============================================================================
// CALLBACKS PARA STATEMANAGER - FASE 8
// CALLBACKS PARA STATEMANAGER
// ============================================================================
// NOTA: Estos métodos son callbacks temporales para que StateManager pueda
// ejecutar acciones que requieren acceso a múltiples componentes del Engine.
// TODO FASE 9: Eliminar estos callbacks moviendo la lógica completa a StateManager
// StateManager coordina los estados y timers, Engine proporciona implementación
// Estos callbacks permiten que StateManager ejecute acciones complejas que
// requieren acceso a múltiples componentes (SceneManager, ThemeManager, etc.)
// Este enfoque es pragmático y mantiene la separación de responsabilidades
// Callback para ejecutar acciones de LOGO MODE
// Callback para ejecutar acciones de LOGO MODE (máquina de estados compleja)
void Engine::performLogoAction(bool logo_waiting_for_flip) {
// Verificar si algún modo demo está activo (DEMO, DEMO_LITE o LOGO)
if (state_manager_->getCurrentMode() == AppMode::SANDBOX) return;
@@ -1401,71 +1402,10 @@ void Engine::executeToggleGravityOnOff() {
}
// ============================================================================
// SISTEMA DE MODO LOGO (Easter Egg - "Marca de Agua")
// CALLBACKS PARA STATEMANAGER - LOGO MODE
// ============================================================================
// Método antiguo mantenido para código legacy de LOGO (será eliminado en Fase 9)
void Engine::enterLogoMode(bool from_demo) {
// Verificar mínimo de pelotas
if (static_cast<int>(scene_manager_->getBallCount()) < LOGO_MODE_MIN_BALLS) {
// Ajustar a 5000 pelotas automáticamente
scene_manager_->changeScenario(5); // Escenario 5000 pelotas (índice 5 en BALL_COUNT_SCENARIOS)
}
// Guardar estado previo (para restaurar al salir)
logo_previous_theme_ = theme_manager_->getCurrentThemeIndex();
logo_previous_texture_index_ = current_texture_index_;
logo_previous_shape_scale_ = shape_scale_factor_;
// Buscar índice de textura "small"
size_t small_index = current_texture_index_; // Por defecto mantener actual
for (size_t i = 0; i < texture_names_.size(); i++) {
if (texture_names_[i] == "small") {
small_index = i;
break;
}
}
// Aplicar configuración fija del Modo Logo
if (small_index != current_texture_index_) {
current_texture_index_ = small_index;
texture_ = textures_[current_texture_index_];
int new_size = texture_->getWidth();
current_ball_size_ = new_size;
scene_manager_->updateBallTexture(texture_, new_size);
}
// Cambiar a tema aleatorio entre: MONOCHROME, LAVENDER, CRIMSON, ESMERALDA
int logo_themes[] = {5, 6, 7, 8}; // MONOCHROME, LAVENDER, CRIMSON, ESMERALDA
int random_theme = logo_themes[rand() % 4];
theme_manager_->switchToTheme(random_theme);
// Establecer escala a 120%
shape_scale_factor_ = LOGO_MODE_SHAPE_SCALE;
clampShapeScale();
// Activar PNG_SHAPE (el logo)
activateShapeInternal(ShapeType::PNG_SHAPE);
// Configurar PNG_SHAPE en modo LOGO (flip intervals más largos)
if (active_shape_) {
PNGShape* png_shape = dynamic_cast<PNGShape*>(active_shape_.get());
if (png_shape) {
png_shape->setLogoMode(true);
png_shape->resetFlipCount(); // Resetear contador de flips
}
}
// Resetear variables de espera de flips
logo_waiting_for_flip_ = false;
logo_target_flip_number_ = 0;
logo_target_flip_percentage_ = 0.0f;
logo_current_flip_count_ = 0;
// La configuración de estado se maneja en StateManager
}
// Callbacks para StateManager - Solo configuración visual
// Callback para StateManager - Configuración visual al entrar a LOGO MODE
void Engine::executeEnterLogoMode(size_t ball_count) {
// Verificar mínimo de pelotas
if (static_cast<int>(ball_count) < LOGO_MODE_MIN_BALLS) {
@@ -1577,13 +1517,13 @@ void Engine::switchTextureInternal(bool show_notification) {
}
// ============================================================================
// Sistema de Figuras 3D - IMPLEMENTACIONES COMPLETAS TEMPORALES (hasta Fase 8)
// Sistema de Figuras 3D - IMPLEMENTACIÓN PARA CALLBACKS DEMO/LOGO
// ============================================================================
// NOTA FASE 7: Engine mantiene implementaciones completas para DEMO/LOGO
// ShapeManager tiene implementaciones paralelas que se usan para controles manuales del usuario
// TODO FASE 8: Eliminar estas implementaciones cuando migremos DEMO/LOGO a StateManager
// NOTA: Engine mantiene implementación de figuras usada por callbacks
// ShapeManager tiene implementación paralela para controles manuales del usuario
// Este enfoque permite que DEMO/LOGO manipulen figuras sin afectar el estado manual
// Sistema de Figuras 3D - Alternar entre modo física y última figura (Toggle con tecla F)
// Alternar entre modo física y última figura (usado por performLogoAction)
void Engine::toggleShapeModeInternal(bool force_gravity_on_exit) {
if (current_mode_ == SimulationMode::PHYSICS) {
// Cambiar a modo figura (usar última figura seleccionada)