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:
@@ -303,8 +303,10 @@ void Ball::enableRotoBallAttraction(bool enable) {
|
||||
}
|
||||
}
|
||||
|
||||
// Aplicar fuerza de resorte hacia punto objetivo en esfera rotante
|
||||
void Ball::applyRotoBallForce(float target_x, float target_y, float sphere_radius, float deltaTime) {
|
||||
// Aplicar fuerza de resorte hacia punto objetivo en figuras 3D
|
||||
void Ball::applyRotoBallForce(float target_x, float target_y, float sphere_radius, float deltaTime,
|
||||
float spring_k_base, float damping_base_base, float damping_near_base,
|
||||
float near_threshold_base, float max_force_base) {
|
||||
if (!rotoball_attraction_active_) return;
|
||||
|
||||
// Calcular factor de escala basado en el radio (radio base = 80px)
|
||||
@@ -313,11 +315,11 @@ void Ball::applyRotoBallForce(float target_x, float target_y, float sphere_radiu
|
||||
float scale = sphere_radius / BASE_RADIUS;
|
||||
|
||||
// Escalar constantes de física proporcionalmente
|
||||
float spring_k = ROTOBALL_SPRING_K * scale;
|
||||
float damping_base = ROTOBALL_DAMPING_BASE * scale;
|
||||
float damping_near = ROTOBALL_DAMPING_NEAR * scale;
|
||||
float near_threshold = ROTOBALL_NEAR_THRESHOLD * scale;
|
||||
float max_force = ROTOBALL_MAX_FORCE * scale;
|
||||
float spring_k = spring_k_base * scale;
|
||||
float damping_base = damping_base_base * scale;
|
||||
float damping_near = damping_near_base * scale;
|
||||
float near_threshold = near_threshold_base * scale;
|
||||
float max_force = max_force_base * scale;
|
||||
|
||||
// Calcular vector diferencia (dirección hacia el target)
|
||||
float diff_x = target_x - pos_.x;
|
||||
|
||||
Reference in New Issue
Block a user