Commit Graph

109 Commits

Author SHA1 Message Date
c0905adc62 migrada la configuracio de txt a yaml 2025-11-18 09:01:42 +01:00
6a18d880f2 eliminats comentaris i info de debug 2025-11-17 14:03:57 +01:00
6a6cc22b21 migrant .ani a .yaml 2025-11-17 13:08:38 +01:00
3c4092df5e eliminades referencies a .ani 2025-11-17 12:55:27 +01:00
21a495e40a migrat jail_audio a un .hpp (segur que ja no funciona res) 2025-11-17 12:27:58 +01:00
6827512025 migrat de yaml-cpp a fkYAML 2025-11-17 09:25:50 +01:00
23fe4a35a9 migrats els fitxers .room i .tmx a .yaml unificats 2025-11-17 08:20:02 +01:00
e4a61a7241 eliminada la clase Debug en Release 2025-11-16 20:44:15 +01:00
24a71395da afegits estils per a les notificacions (per a distinguir les de sistema de les dels logros) 2025-11-16 20:19:30 +01:00
e4c10b6b75 ACABADA LA LOGICA DE PLAYER! es pot refactoritzar i falta els casos on Player puga avançar mes de un pixel en un frame 2025-11-15 22:45:18 +01:00
710e7cc8c1 merdetes pa debugar a gust 2025-11-14 17:58:32 +01:00
8893e8f05b casi acabat el Player pero -> canvi de PC 2025-11-14 14:11:27 +01:00
7f51f02d96 treballant en Player: abans d'entrar a moveOnSlope() 2025-11-14 12:54:59 +01:00
29e0daffb0 treballant en Player 2025-11-14 10:42:30 +01:00
b8dd6e80d9 refactor(player): Simplificar structs y agregar inicialización en clase
- 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>
2025-11-13 13:36:33 +01:00
e13a8e5930 fix(gameplay): Corregir includes relativos a absolutos
## Problema
Durante la refactorización de Room (Fases 1-3), se introdujeron includes
relativos con ".." en 4 archivos, violando el estándar del proyecto que
requiere includes absolutos desde la raíz source/.

## Cambios Realizados

### collision_map.hpp (1 corrección)
- "../../utils/utils.hpp" → "utils/utils.hpp"

### collision_map.cpp (2 correcciones)
- "../../core/system/debug.hpp" → "core/system/debug.hpp"
- "../../utils/defines.hpp" → "utils/defines.hpp"

### enemy_manager.cpp (2 correcciones)
- "../../utils/utils.hpp" → "utils/utils.hpp"
- "../entities/enemy.hpp" → "game/entities/enemy.hpp"

### item_manager.cpp (4 correcciones)
- "../../core/audio/audio.hpp" → "core/audio/audio.hpp"
- "../../utils/utils.hpp" → "utils/utils.hpp"
- "../entities/item.hpp" → "game/entities/item.hpp"
- "../options.hpp" → "game/options.hpp"

## Validación
✓ Compilación exitosa
✓ 325 assets cargados correctamente
✓ Room files verificados
✓ Funcionamiento del juego confirmado

## Total
9 includes corregidos en 4 archivos, cumpliendo con el estándar de
includes absolutos del proyecto definido en CLAUDE.md.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 12:13:52 +01:00
c59812e4af refactor(room): Fase 5 - Final cleanup and optimization
## Summary
Final cleanup phase of Room class refactoring. Optimized dependencies,
fixed code quality issues, and improved maintainability.

## Changes Made

### Import Optimization
Reduced includes from 16 to 12 by removing unused dependencies:
- Removed STL: <algorithm>, <exception>, <fstream>, <iostream>, <sstream>
- Removed project headers: audio.hpp, debug.hpp, surface_sprite.hpp,
  resource_helper.hpp, options.hpp
- Retained only essential includes for Room's coordinator role

### Code Quality Fixes
- Fixed double std::move in constructor: data_(std::move(std::move(data)))
  → data_(std::move(data))
- Simplified getRoom() switch statement (removed redundant breaks)
- Improved code clarity and adherence to C++ best practices

### Style Consistency
- Standardized comment style in collision_map.hpp (=== → ---)

## Testing
✓ Compilation successful
✓ Game execution verified (asset loading, room parsing working)
✓ Linters run:
  - clang-tidy: 3 style warnings (false positives on const naming)
  - cppcheck: Clean (no warnings)

## Metrics
- room.cpp: 259 lines (down from 277 after Phase 4)
- Dependencies minimized to essential coordinator responsibilities
- Zero functional issues introduced

## Related
Part of Room class refactoring (God Object → Coordinator pattern)
- Phase 1: Entity management (EnemyManager, ItemManager)
- Phase 2: Collision system (CollisionMap)
- Phase 3: Tilemap rendering (TilemapRenderer)
- Phase 4: File parsing (RoomLoader)
- Phase 5: Final cleanup (this commit)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 12:05:36 +01:00
e97c951d0d Fase 4: Refactorización de Room - Extracción del sistema de parseo de archivos
## 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>
2025-11-13 09:26:03 +01:00
5365d62abc Fase 3: Refactorización de Room - Extracción del sistema de renderizado de tilemap
## 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>
2025-11-13 09:09:51 +01:00
c5ad8041e8 Fase 2: Refactorización de Room - Extracción del sistema de colisiones
## 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>
2025-11-13 08:51:01 +01:00
2f90338214 Fase 1: Refactorización de Room - Extracción de gestión de entidades
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>
2025-11-13 08:19:59 +01:00
477ab34057 reestructurat utils 2025-11-12 14:02:17 +01:00
9cf45062a3 netejant capçaleres 2025-11-12 13:47:19 +01:00
d6ced94316 netejant capçaleres 2025-11-11 12:35:21 +01:00
54fc6d2902 unificats els resources en un namespace 2025-11-11 10:04:57 +01:00
1821b84e73 fix: la pantalla de carrega carregava mal a 60FPS. es saltava bolcs per pintar.
style: adjustat el timing de loading_screen
2025-11-10 17:14:15 +01:00
6ea0acd3f3 Pos estava ci fent arreglos varios i m'han obligat a fer commit 2025-11-10 14:27:10 +01:00
b70b728b75 style: deixant guapetes les capçaleres de les classes 2025-11-10 13:53:29 +01:00
5dd463ad5a posss.. mes merdes que no van a cap lloc 2025-11-09 21:51:55 +01:00
1f01268dcf merdes varies 2025-11-08 13:21:59 +01:00
85d34fb907 style: afegides varies animacions amb easing per al Logo 2025-11-08 00:10:16 +01:00
e9fed353ff style: modificat el desplaçament de la llista de logros 2025-11-07 23:39:42 +01:00
b4f6b919d7 fix: coreció de rutes en resource_helper.cpp 2025-11-07 23:26:00 +01:00
667ab73fc6 implementada la logica de so (time based) en Player per a imitar la anterior frame based (amb els seus fallos) 2025-11-07 23:04:02 +01:00
7d0e0e0d18 fix: Player atravessava rampes al saltar recte si el framerate era molt alt 2025-11-07 20:01:07 +01:00
2c92fe8372 cppcheck 2025-11-07 17:58:47 +01:00
6e3cd05cd2 cppcheck 2025-11-07 17:01:29 +01:00
cf6831206e style: elements de menu centrats verticalment en Title 2025-11-07 09:53:07 +01:00
9e3d3a7ce3 style: en Title, eliminat el submenu de controls 2025-11-07 09:35:44 +01:00
85844645ac fix: corregida la animació de Logo 2025-11-07 08:53:15 +01:00
d875a2706b refinant la classe Player 2025-11-06 14:14:22 +01:00
288e01e47f treballant en la nova clase Player 2025-11-05 14:15:00 +01:00
a20ea5299d afegit player.md 2025-11-04 14:02:23 +01:00
66a580aff6 4 merdes fetes en la feina pr avorriment 2025-11-03 14:12:17 +01:00
3f1c737247 linter 2025-11-03 09:52:54 +01:00
1409ab5bff corregida la velocitat del Logo 2025-11-02 22:50:57 +01:00
87527d01a8 ja redefinix els botons i axis, pero el axis sempre te un comportament default. corregir 2025-11-02 19:02:29 +01:00
b79f30a57b treballant en redefinir els botons i axis del joystick 2025-11-02 18:57:24 +01:00
6c766be023 el joc es pot controlar amb el primer mando que hi haja conectat 2025-11-02 18:18:12 +01:00
eb550ab95b ja es poden redefinir les tecles
renombrat achievements a projects
2025-11-02 17:58:34 +01:00