Mejorar interacción entre modos RotoBall y física con gestión de gravedad
Cambios principales: - Fix: Pelotas ahora caen correctamente al salir de RotoBall (resetear on_surface_/stopped_) - Fix: Al cambiar escenario en RotoBall, desactivar modo figura primero - Feature: Al entrar en RotoBall, gravedad se desactiva automáticamente - Feature: Tecla G desde RotoBall → Sale a física SIN gravedad (pelotas flotan) - Feature: Tecla C desde RotoBall → Sale a física CON gravedad (pelotas caen) - Feature: Cursores desde RotoBall → Sale a física CON gravedad + cambio dirección - Feature: Cursores desde física sin gravedad → Reactiva gravedad automáticamente Nuevos métodos: - Ball::enableGravityIfDisabled() - Reactiva solo si está desactivada - Ball::forceGravityOn() - Fuerza activación - Ball::forceGravityOff() - Fuerza desactivación - Engine::toggleRotoBallMode(bool force_gravity_on_exit) - Control de gravedad al salir Lógica de controles desde RotoBall: - C: Figura OFF → Física CON gravedad (caen) - ↑↓←→: Figura OFF → Física CON gravedad + dirección (caen hacia dirección) - G: Figura OFF → Física SIN gravedad (flotan) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -227,6 +227,23 @@ void Ball::switchGravity() {
|
||||
gravity_force_ = gravity_force_ == 0.0f ? (GRAVITY_FORCE * 60.0f * 60.0f) : 0.0f;
|
||||
}
|
||||
|
||||
// Reactiva la gravedad si está desactivada
|
||||
void Ball::enableGravityIfDisabled() {
|
||||
if (gravity_force_ == 0.0f) {
|
||||
gravity_force_ = GRAVITY_FORCE * 60.0f * 60.0f;
|
||||
}
|
||||
}
|
||||
|
||||
// Fuerza gravedad ON (siempre activa)
|
||||
void Ball::forceGravityOn() {
|
||||
gravity_force_ = GRAVITY_FORCE * 60.0f * 60.0f;
|
||||
}
|
||||
|
||||
// Fuerza gravedad OFF (siempre desactiva)
|
||||
void Ball::forceGravityOff() {
|
||||
gravity_force_ = 0.0f;
|
||||
}
|
||||
|
||||
// Cambia la dirección de gravedad
|
||||
void Ball::setGravityDirection(GravityDirection direction) {
|
||||
gravity_direction_ = direction;
|
||||
@@ -283,6 +300,12 @@ void Ball::setDepthBrightness(float brightness) {
|
||||
// Activar/desactivar atracción física hacia esfera RotoBall
|
||||
void Ball::enableRotoBallAttraction(bool enable) {
|
||||
rotoball_attraction_active_ = enable;
|
||||
|
||||
// Al activar atracción, resetear flags de superficie para permitir física completa
|
||||
if (enable) {
|
||||
on_surface_ = false;
|
||||
stopped_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Aplicar fuerza de resorte hacia punto objetivo en esfera rotante
|
||||
|
||||
Reference in New Issue
Block a user