# Plan de Limpieza Post-Migración DeltaTime ## Estado Actual ✅ Migración básica completada: bullet.cpp, item.cpp, moving_sprite.cpp, game_logo.cpp ✅ Magic numbers convertidos a constantes en game_logo.cpp ## Tareas Pendientes ### 1. Eliminar Contadores Frame-Based - [ ] Buscar todos los contadores que usen lógica frame-based - [ ] Convertir a timers basados en deltaTime - [ ] Eliminar variables como `counter_`, `frame_counter_`, etc. - [ ] Patrón: `if (counter-- <= 0)` → `if (timer >= DURATION_MS)` - [ ] **IMPORTANTE**: Todos los contadores han de ser crecientes, de cero hasta llegar a la constante que define su tope ### 2. Revisar Inicializaciones de Aceleraciones MovingSprite - [ ] Buscar todas las llamadas a `setAccelX()`, `setAccelY()` - [ ] Buscar asignaciones directas a `ax_`, `ay_` - [ ] Convertir de `pixels/frame²` a `pixels/ms²` - [ ] Factor de conversión: `valor_original / (16.67)²` ### 3. Problema Detectado: Demo - Creación Incorrecta de Globos - [ ] Investigar cómo se crean los globos en modo demo - [ ] Verificar si usan timing frame-based obsoleto - [ ] Corregir la lógica de creación para deltaTime ### 4. Búsqueda de Patrones Problemáticos - [ ] Buscar `frameFactor` residual - [ ] Buscar `1000.0f / 60.0f` hardcodeado - [ ] Buscar `16.67f` hardcodeado - [ ] Buscar comentarios con "frame" o "60fps" - [ ] Localizar magic numbers y convertirlos a constantes con nombres descriptivos - [ ] **IMPORTANTE**: Modificar speed en ficheros .ani - está en frames, hay que pasarlo a milisegundos (multiplicar speed por 1000/60 = 16.67) - [ ] **SmartSprite**: Revisar inicialización de SmartSprites en el código - cambiar setFinishedCounter() a setFinishedDelay() y convertir valores de frames a milisegundos ### 5. Cambio de Unidades de Tiempo en sections/* - [ ] Cambiar el cálculo de deltatime en source/sections/* para que devuelva segundos (float) en lugar de milisegundos - [ ] Cambiar velocidades de pixeles/ms a pixeles/segundos para evitar valores absurdamente pequeños - [ ] Cambiar aceleraciones de pixeles/ms² a pixeles/segundos² - [ ] Actualizar todas las constantes de tiempo en archivos de sections ### 6. Archivos Prioritarios a Revisar - [ ] **player.cpp** - puede tener aceleraciones - [ ] **balloon.cpp** - contadores de estado - [ ] **stage.cpp** - timers de nivel - [ ] **credits.cpp** - efectos de texto - [ ] **tabe.cpp** - movimiento del protagonista - [ ] **sections/*.cpp** - transiciones y efectos ### 7. Validación Final - [ ] Compilar sin warnings - [ ] Probar gameplay normal - [ ] Probar modo demo - [ ] Verificar que no hay saltos de velocidad - [ ] Confirmar que el timing es consistente en diferentes framerates ## Comandos Útiles de Búsqueda ```bash # Buscar contadores frame-based rg "counter.*--|\+\+.*counter|counter.*\+\+|--.*counter" # Buscar inicializaciones de aceleración rg "setAccel|\.ax.*=|\.ay.*=" # Buscar hardcoded framerates rg "60\.0|16\.67|1000\.0.*60" ``` ## DECISIÓN IMPORTANTE: TODO EL CÓDIGO USA SEGUNDOS - **CAMBIO DE PLAN**: Todo el código del juego debe usar deltaTime en segundos (float) - **NO** debe haber soporte para frames, milisegundos y segundos simultáneamente - **SOLO SEGUNDOS** en todo el codebase - Velocidades en `pixels/segundos`, aceleraciones en `pixels/segundos²` - Todos los contadores deben ser crecientes (0 → constante_tope) - Eliminar todos los métodos duales (updateS, setSpeedS, etc.) - solo una versión - Convertir completamente: path_sprite.cpp, writer.cpp, tiled_bg.cpp, etc. - Documentar las conversiones en comentarios - Crear constantes para valores repetidos - Evitar números mágicos