3.6 KiB
3.6 KiB
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²apixels/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
frameFactorresidual - Buscar
1000.0f / 60.0fhardcodeado - Buscar
16.67fhardcodeado - 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
# 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 enpixels/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