Refactoring semántico: - Renombrar rotoball_* → shape_* (variables y métodos) - Mejora legibilidad: aplica a todas las figuras 3D, no solo esfera Fixes críticos: - Fix convergencia: setShapeTarget2D() actualiza targets cada frame - Fix getDistanceToTarget(): siempre calcula distancia (sin guarda) - Fix lógica flip: destruir DURANTE flip N (no después de N flips) - Añadir display CONV en debug HUD (monitoreo convergencia) Mejoras timing: - Reducir PNG_IDLE_TIME_LOGO: 3-5s → 2-4s (flips más dinámicos) - Bajar CONVERGENCE_THRESHOLD: 0.8 → 0.4 (40% permite flips) Sistema flip-waiting (LOGO mode): - CAMINO A: Convergencia + tiempo (inmediato) - CAMINO B: Esperar 1-3 flips y destruir durante flip (20-80% progreso) - Tracking de flips con getFlipCount() y getFlipProgress() 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
36 lines
1.6 KiB
C++
36 lines
1.6 KiB
C++
#pragma once
|
|
|
|
// Interfaz abstracta para todas las figuras 3D
|
|
class Shape {
|
|
public:
|
|
virtual ~Shape() = default;
|
|
|
|
// Generar distribución inicial de puntos en la figura
|
|
// num_points: cantidad de pelotas a distribuir
|
|
// screen_width/height: dimensiones del área de juego (para escalar)
|
|
virtual void generatePoints(int num_points, float screen_width, float screen_height) = 0;
|
|
|
|
// Actualizar animación de la figura (rotación, deformación, etc.)
|
|
// delta_time: tiempo transcurrido desde último frame
|
|
// screen_width/height: dimensiones actuales (puede cambiar con F4)
|
|
virtual void update(float delta_time, float screen_width, float screen_height) = 0;
|
|
|
|
// Obtener posición 3D del punto i después de transformaciones (rotación, etc.)
|
|
// index: índice del punto (0 a num_points-1)
|
|
// x, y, z: coordenadas 3D en espacio mundo (centradas en 0,0,0)
|
|
virtual void getPoint3D(int index, float& x, float& y, float& z) const = 0;
|
|
|
|
// Obtener nombre de la figura para debug display
|
|
virtual const char* getName() const = 0;
|
|
|
|
// Obtener factor de escala para ajustar física según tamaño de figura
|
|
// screen_height: altura actual de pantalla
|
|
// Retorna: factor multiplicador para constantes de física (spring_k, damping, etc.)
|
|
virtual float getScaleFactor(float screen_height) const = 0;
|
|
|
|
// Notificar a la figura sobre el porcentaje de convergencia (pelotas cerca del objetivo)
|
|
// convergence: valor de 0.0 (0%) a 1.0 (100%) indicando cuántas pelotas están en posición
|
|
// Default: no-op (la mayoría de figuras no necesitan esta información)
|
|
virtual void setConvergence(float convergence) {}
|
|
};
|