Files
coffee_crisis_arcade_edition/deltatime_cleanup_plan.md

79 lines
3.6 KiB
Markdown

# 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