Implementar PNG_SHAPE y sistema de física mejorado
Nuevas Características:
- PNG_SHAPE (tecla O): Logo JAILGAMES desde PNG 1-bit
- Extrusión 2D con detección de bordes/relleno configurable
- Rotación "legible": 90% frente, 10% volteretas aleatorias
- 15 capas de extrusión con relleno completo (22K+ puntos 3D)
- Fix: Z forzado a máximo cuando está de frente (brillante)
- Excluido de DEMO/DEMO_LITE (logo especial)
- Sistema de texturas dinámicas
- Carga automática desde data/balls/*.png
- normal.png siempre primero, resto alfabético
- Tecla N cicla entre todas las texturas encontradas
- Display dinámico del nombre (uppercase)
- Física mejorada para figuras 3D
- Constantes SHAPE separadas de ROTOBALL
- SHAPE_SPRING_K=800 (+167% rigidez vs ROTOBALL)
- SHAPE_DAMPING_NEAR=150 (+88% absorción)
- Pelotas mucho más "pegadas" durante rotaciones
- applyRotoBallForce() acepta parámetros personalizados
Archivos:
- NEW: source/shapes/png_shape.{h,cpp}
- NEW: data/shapes/jailgames.png
- NEW: data/balls/{normal,small,tiny}.png
- MOD: defines.h (constantes PNG + SHAPE physics)
- MOD: engine.cpp (carga dinámica texturas + física SHAPE)
- MOD: ball.{h,cpp} (parámetros física configurables)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -66,12 +66,13 @@ enum class ShapeType {
|
||||
NONE, // Sin figura (modo física pura)
|
||||
SPHERE, // Esfera Fibonacci (antiguo RotoBall)
|
||||
CUBE, // Cubo rotante
|
||||
HELIX, // Espiral 3D (futuro)
|
||||
TORUS, // Toroide/donut (futuro)
|
||||
WAVE_GRID, // Malla ondeante (futuro)
|
||||
CYLINDER, // Cilindro rotante (futuro)
|
||||
ICOSAHEDRON, // Icosaedro D20 (futuro)
|
||||
ATOM // Átomo con órbitas (futuro)
|
||||
HELIX, // Espiral 3D
|
||||
TORUS, // Toroide/donut
|
||||
WAVE_GRID, // Malla ondeante
|
||||
CYLINDER, // Cilindro rotante
|
||||
ICOSAHEDRON, // Icosaedro D20
|
||||
ATOM, // Átomo con órbitas
|
||||
PNG_SHAPE // Forma cargada desde PNG 1-bit
|
||||
};
|
||||
|
||||
// Enum para modo de simulación
|
||||
@@ -95,13 +96,21 @@ constexpr float ROTOBALL_TRANSITION_TIME = 1.5f; // Tiempo de transición (seg
|
||||
constexpr int ROTOBALL_MIN_BRIGHTNESS = 50; // Brillo mínimo (fondo, 0-255)
|
||||
constexpr int ROTOBALL_MAX_BRIGHTNESS = 255; // Brillo máximo (frente, 0-255)
|
||||
|
||||
// Física de atracción para figuras 3D (sistema de resorte compartido)
|
||||
// Física de atracción para figuras 3D (sistema de resorte)
|
||||
// ROTOBALL: Figura esfera rotante especial (modo C)
|
||||
constexpr float ROTOBALL_SPRING_K = 300.0f; // Constante de rigidez del resorte (N/m)
|
||||
constexpr float ROTOBALL_DAMPING_BASE = 35.0f; // Amortiguación base (amortiguamiento crítico ≈ 2*√k*m)
|
||||
constexpr float ROTOBALL_DAMPING_NEAR = 80.0f; // Amortiguación cerca del punto (absorción rápida)
|
||||
constexpr float ROTOBALL_NEAR_THRESHOLD = 5.0f; // Distancia "cerca" en píxeles
|
||||
constexpr float ROTOBALL_MAX_FORCE = 1000.0f; // Fuerza máxima aplicable (evita explosiones)
|
||||
|
||||
// SHAPE: Figuras 3D normales (Q/W/E/R/T/Y/U/I/O) - Mayor pegajosidad
|
||||
constexpr float SHAPE_SPRING_K = 800.0f; // Rigidez alta (pelotas más "pegadas")
|
||||
constexpr float SHAPE_DAMPING_BASE = 60.0f; // Amortiguación alta (menos rebote)
|
||||
constexpr float SHAPE_DAMPING_NEAR = 150.0f; // Absorción muy rápida al llegar
|
||||
constexpr float SHAPE_NEAR_THRESHOLD = 8.0f; // Umbral "cerca" más amplio
|
||||
constexpr float SHAPE_MAX_FORCE = 2000.0f; // Permite fuerzas más fuertes
|
||||
|
||||
// Configuración del Cubo (cubo 3D rotante)
|
||||
constexpr float CUBE_SIZE_FACTOR = 0.25f; // Tamaño como proporción de altura (60/240 = 0.25)
|
||||
constexpr float CUBE_ROTATION_SPEED_X = 0.5f; // Velocidad rotación eje X (rad/s)
|
||||
@@ -147,6 +156,17 @@ constexpr float ATOM_NUM_ORBITS = 3; // Número de órbitas
|
||||
constexpr float ATOM_ORBIT_ROTATION_SPEED = 2.0f; // Velocidad de electrones (rad/s)
|
||||
constexpr float ATOM_ROTATION_SPEED_Y = 0.5f; // Velocidad rotación global (rad/s)
|
||||
|
||||
// Configuración de PNG Shape (forma desde imagen PNG 1-bit)
|
||||
constexpr float PNG_SIZE_FACTOR = 0.8f; // Tamaño como proporción de altura (80% pantalla)
|
||||
constexpr float PNG_EXTRUSION_DEPTH_FACTOR = 0.12f; // Profundidad de extrusión (compacta)
|
||||
constexpr int PNG_NUM_EXTRUSION_LAYERS = 15; // Capas de extrusión (más capas = más pegajosidad)
|
||||
constexpr bool PNG_USE_EDGES_ONLY = false; // true = solo bordes, false = relleno completo
|
||||
// Rotación "legible" (texto de frente con volteretas ocasionales)
|
||||
constexpr float PNG_IDLE_TIME_MIN = 3.0f; // Tiempo mínimo de frente (segundos)
|
||||
constexpr float PNG_IDLE_TIME_MAX = 8.0f; // Tiempo máximo de frente (segundos)
|
||||
constexpr float PNG_FLIP_SPEED = 3.0f; // Velocidad voltereta (rad/s)
|
||||
constexpr float PNG_FLIP_DURATION = 1.5f; // Duración voltereta (segundos)
|
||||
|
||||
// Control manual de escala de figuras 3D (Numpad +/-)
|
||||
constexpr float SHAPE_SCALE_MIN = 0.3f; // Escala mínima (30%)
|
||||
constexpr float SHAPE_SCALE_MAX = 3.0f; // Escala máxima (300%)
|
||||
|
||||
Reference in New Issue
Block a user