Refactor fase 1: Extraer InputHandler de Engine

Aplicación del Principio de Responsabilidad Única (SRP) - Fase 1/6

## Cambios realizados

### Nuevos archivos
- source/input/input_handler.h - Declaración clase InputHandler
- source/input/input_handler.cpp - Procesamiento eventos SDL (~180 líneas)
- REFACTOR_PLAN.md - Documento de seguimiento del refactor

### Modificaciones en Engine
- **engine.h**: Agregados 24 métodos públicos para InputHandler
- **engine.cpp**:
  - Eliminado handleEvents() (420 líneas)
  - Implementados métodos públicos wrapper (~180 líneas)
  - Renombrados métodos internos con sufijo `Internal`:
    * toggleShapeMode → toggleShapeModeInternal
    * activateShape → activateShapeInternal
    * switchTexture → switchTextureInternal
  - Bucle run() simplificado (5 → 12 líneas)

### Actualización build
- CMakeLists.txt: Agregado source/input/*.cpp a archivos fuente

## Impacto
- **Líneas extraídas**: ~430 del switch gigante de handleEvents()
- **Compilación**:  Exitosa sin errores
- **Funcionalidad**:  100% preservada

## Beneficios
-  Engine desacoplado de eventos SDL
-  InputHandler stateless (fácilmente testeable)
-  Clara separación detección input vs ejecución lógica
-  Preparado para testing unitario de inputs

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-10 11:39:59 +02:00
parent 5f89299444
commit b8d3c60e58
6 changed files with 778 additions and 464 deletions

View File

@@ -0,0 +1,32 @@
#pragma once
#include <SDL3/SDL_events.h> // for SDL_Event
// Forward declaration para evitar dependencia circular
class Engine;
/**
* @class InputHandler
* @brief Procesa eventos de entrada (teclado, ratón, ventana) y los traduce a acciones del Engine
*
* Responsabilidad única: Manejo de input SDL y traducción a comandos de alto nivel
*
* Características:
* - Procesa todos los eventos SDL (teclado, ratón, quit)
* - Traduce inputs a llamadas de métodos del Engine
* - Mantiene el Engine desacoplado de la lógica de input SDL
* - Soporta todos los controles del proyecto (gravedad, figuras, temas, zoom, fullscreen)
*/
class InputHandler {
public:
/**
* @brief Procesa todos los eventos SDL pendientes
* @param engine Referencia al engine para ejecutar acciones
* @return true si se debe salir de la aplicación (ESC o cerrar ventana), false en caso contrario
*/
bool processEvents(Engine& engine);
private:
// Sin estado interno por ahora - el InputHandler es stateless
// Todos los estados se delegan al Engine
};