- Eliminar constructores parametrizados redundantes de SpawnData y Data structs
- Agregar inicialización en declaración para collider_box_, jumping_sound_, falling_sound_
- Renombrar parámetro de transitionToState() para consistencia (value → state)
- Actualizar game.cpp para usar aggregate initialization de Player::Data
- Refactorizar sistema de estados del jugador con métodos por estado
Archivos modificados:
- source/game/entities/player.hpp: Simplificación de structs e inicialización
- source/game/entities/player.cpp: Refactoring del sistema de estados
- source/game/scenes/game.cpp: Actualización de construcción del Player
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## Cambios principales
### Nuevo componente: RoomLoader
- **room_loader.hpp/cpp**: Nueva clase estática para parseo de archivos
- Responsabilidades extraídas de Room:
- Carga de archivos .room (loadRoomFile)
- Carga de archivos .tmx de tilemap (loadRoomTileFile)
- Parseo de claves y valores (parseKeyValue)
- Asignación de valores a estructuras (setRoom, setEnemy, setItem)
- Carga de bloques [enemy] y [item] (loadEnemyFromFile, loadItemFromFile)
- Log de parámetros desconocidos (logUnknownParameter)
### Modificaciones en Room
- **room.hpp**:
- Eliminados 9 métodos estáticos privados de parseo
- Mantenidos 2 métodos públicos (loadRoomFile, loadRoomTileFile) que ahora delegan a RoomLoader
- Añadido comentario indicando delegación a RoomLoader
- **room.cpp**:
- Eliminadas ~285 líneas de código de parseo de archivos
- Añadido #include "room_loader.hpp"
- Implementaciones de loadRoomFile y loadRoomTileFile ahora son simples delegaciones:
* `return RoomLoader::loadRoomFile(file_path, verbose);`
* `return RoomLoader::loadRoomTileFile(file_path, verbose);`
- Archivo reducido de 554 líneas a 277 líneas (50% de reducción)
### Build system
- **CMakeLists.txt**: Añadido room_loader.cpp a las fuentes del proyecto
## Diseño de RoomLoader
RoomLoader es una clase utility con solo métodos estáticos (no instanciable):
- Constructor/destructor eliminados
- No tiene estado (stateless)
- Todos los métodos son estáticos
- Encapsula toda la lógica de I/O y parseo de archivos de configuración
## Métricas
- **Código eliminado de Room**: ~285 líneas de lógica de parseo
- **Nuevo RoomLoader**: 300 líneas (room_loader.cpp)
- **Reducción en room.cpp**: De 554 a 277 líneas (50% de reducción)
- **Room.hpp**: Simplificado significativamente (9 declaraciones privadas eliminadas)
## Verificación
- ✅ Compilación exitosa sin errores
- ✅ Juego inicia y carga todos los archivos correctamente
- ✅ clang-tidy: 1 warning de complejidad cognitiva (código heredado, no modificado)
- ✅ cppcheck: Sin issues
## Progreso total de refactorización
Después de 4 fases, Room ha sido drásticamente simplificado:
- **Phase 1**: Gestión de entidades → EnemyManager & ItemManager
- **Phase 2**: Sistema de colisiones → CollisionMap (~465 líneas)
- **Phase 3**: Renderizado de tilemap → TilemapRenderer (~95 líneas)
- **Phase 4**: Parseo de archivos → RoomLoader (~285 líneas)
**Total eliminado de Room**: ~845+ líneas
**Reducción tamaño archivo**: De 1097 líneas originales a 277 líneas (75% de reducción)
**Nuevas clases especializadas**: 6 (EnemyManager, ItemManager, CollisionMap, TilemapRenderer, RoomLoader)
## Próximos pasos
- Fase 5: Limpieza final y optimización de Room como coordinador ligero
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## Cambios principales
### Nuevo componente: TilemapRenderer
- **tilemap_renderer.hpp/cpp**: Nueva clase que encapsula el renderizado del mapa de tiles
- Responsabilidades extraídas de Room:
- Renderizado del tilemap estático
- Gestión de tiles animados (conveyor belts)
- Actualización de animaciones basadas en tiempo
- Debug visualization de colisiones (en modo DEBUG)
- Gestión de map_surface y time_accumulator
### Modificaciones en Room
- **room.hpp**:
- Añadido TilemapRenderer como miembro (unique_ptr)
- Removida estructura AnimatedTile (ahora privada en TilemapRenderer)
- Removidos: map_surface_, animated_tiles_, time_accumulator_, CONVEYOR_FRAME_DURATION
- Removidos 4 métodos privados de renderizado: fillMapTexture, setAnimatedTiles, updateAnimatedTiles, renderAnimatedTiles
- **room.cpp**:
- Constructor: Inicializa TilemapRenderer con tile_map, tile_set_width, surface, bg_color, conveyor_belt_direction
- Constructor: Llama a tilemap_renderer_->initialize(collision_map_)
- Delegación: renderMap() llama a tilemap_renderer_->render()
- Delegación: update() llama a tilemap_renderer_->update(delta_time)
- Delegación: setPaused() llama a tilemap_renderer_->setPaused(value)
- Removida inicialización de time_accumulator_
- Eliminados ~95 líneas de código de renderizado (incluyendo debug lines)
### Mejoras en CollisionMap
- **collision_map.hpp/cpp**:
- Marcados getTile(SDL_FPoint) y getTile(int) como const (const correctness)
- Permite uso desde TilemapRenderer con puntero const
### Build system
- **CMakeLists.txt**: Añadido tilemap_renderer.cpp a las fuentes del proyecto
## Métricas
- **Código eliminado de Room**: ~95 líneas de lógica de renderizado de tilemap
- **Nuevo TilemapRenderer**: 208 líneas (tilemap_renderer.cpp)
- **Reducción en room.cpp**: Continúa la mejora en cohesión y separación de responsabilidades
## Verificación
- ✅ Compilación exitosa sin errores
- ✅ Juego inicia y renderiza correctamente
- ✅ clang-tidy: 1 warning (naming style) corregido
- ✅ cppcheck: 1 suggestion (const correctness) aplicado
- ✅ Const correctness mejorada en CollisionMap
## Próximos pasos
- Fase 4: Extracción del parseo de archivos (RoomLoader)
- Fase 5: Limpieza final y reducción de Room a coordinador ligero
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## Cambios principales
### Nuevo componente: CollisionMap
- **collision_map.hpp/cpp**: Nueva clase que encapsula toda la lógica de detección de colisiones
- Responsabilidades extraídas de Room:
- Determinación de tipos de tile (getTile)
- Generación de geometría de colisión (superficies, rampas, conveyor belts)
- Queries de colisión para Player y entidades
- 14 métodos de detección de colisión
- Getters para visualización debug
### Modificaciones en Room
- **room.hpp**:
- Añadido CollisionMap como miembro (unique_ptr)
- Removidos 7 vectores de geometría de colisión
- Removidos 13 métodos privados de generación de geometría
- Añadido getTile(int index) para soporte de animated tiles
- Añadido destructor explícito (necesario para unique_ptr con forward declaration)
- **room.cpp**:
- Constructor: Inicializa CollisionMap con tile_map, tile_set_width, conveyor_belt_direction
- Delegación: Todos los métodos de colisión ahora llaman a collision_map_
- Restaurados métodos de animated tiles (openTheJail, setAnimatedTiles, updateAnimatedTiles, renderAnimatedTiles)
- Actualizado openTheJail() para usar enemy_manager_ en lugar de enemies_
- Debug visualization actualizada para usar getters de CollisionMap
### Build system
- **CMakeLists.txt**: Añadido collision_map.cpp a las fuentes del proyecto
## Métricas
- **Código eliminado de Room**: ~465 líneas de lógica de colisión
- **Nuevo CollisionMap**: 487 líneas (collision_map.cpp)
- **Reducción neta en room.cpp**: Significativa mejora en cohesión
## Verificación
- ✅ Compilación exitosa sin errores
- ✅ Juego inicia y carga recursos correctamente
- ✅ clang-tidy: Sin warnings en código de usuario
- ✅ cppcheck: Sin issues reales (solo false positive en utils.hpp)
## Próximos pasos
- Fase 3: Extracción del sistema de renderizado de tilemap
- Fase 4: Extracción del parseo de archivos
- Fase 5: Limpieza final y reducción de Room a coordinador ligero
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Extraída la gestión de enemigos e items de Room a managers dedicados,
reduciendo las responsabilidades de la clase Room y mejorando la
separación de concernimientos.
Cambios principales:
- Creado EnemyManager para gestionar enemigos (creación, update, render, colisión)
- Creado ItemManager para gestionar items (creación, update, render, colisión, pickup)
- Room ahora delega toda la gestión de entidades a estos managers
- Room mantiene su interfaz pública sin cambios (retrocompatibilidad total)
- Eliminados vectores enemies_ e items_ de Room (reemplazados por managers)
Archivos nuevos:
- source/game/gameplay/enemy_manager.hpp/cpp
- source/game/gameplay/item_manager.hpp/cpp
Archivos modificados:
- source/game/gameplay/room.hpp/cpp
- CMakeLists.txt
Estado:
- Compilación exitosa
- Carga de assets verificada (325 assets OK)
- Linters ejecutados (clang-tidy y cppcheck)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>