Files
coffee_crisis_arcade_edition/deltatime_cleanup_plan.md

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² 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

# 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