Implementar impulso direccional adaptativo para tecla ESPACIO

- Renombrar pushUpBalls() → pushBallsAwayFromGravity() con lógica direccional
- ESPACIO ahora impulsa en dirección opuesta a gravedad actual:
  * Gravedad DOWN → impulsa ARRIBA (comportamiento original)
  * Gravedad UP → impulsa ABAJO
  * Gravedad LEFT → impulsa DERECHA
  * Gravedad RIGHT → impulsa IZQUIERDA
- Corregir modVel() para aplicar impulso horizontal a todas las pelotas
- Actualizar documentación de controles en README.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-27 22:10:33 +02:00
parent 4e030e4ef9
commit 7ac29f899b
5 changed files with 35 additions and 13 deletions

View File

@@ -50,7 +50,11 @@ El nombre refleja su proposito: **ViBe** (vibe-coding experimental) + **Physics*
|-------|--------| |-------|--------|
| `1-8` | Cambiar numero de pelotas (1, 10, 100, 500, 1K, 10K, 50K, 100K) | | `1-8` | Cambiar numero de pelotas (1, 10, 100, 500, 1K, 10K, 50K, 100K) |
| `ESPACIO` | Impulsar todas las pelotas hacia arriba | | `ESPACIO` | Impulsar todas las pelotas hacia arriba |
| `G` | Alternar direccion de la gravedad (↓↑←→) | | `` | **Gravedad hacia ARRIBA** |
| `↓` | **Gravedad hacia ABAJO** |
| `←` | **Gravedad hacia IZQUIERDA** |
| `→` | **Gravedad hacia DERECHA** |
| `G` | **Alternar gravedad ON/OFF (mantiene direccion)** |
## 📊 Informacion en Pantalla ## 📊 Informacion en Pantalla

View File

@@ -207,9 +207,7 @@ void Ball::render() {
// Modifica la velocidad (convierte de frame-based a time-based) // Modifica la velocidad (convierte de frame-based a time-based)
void Ball::modVel(float vx, float vy) { void Ball::modVel(float vx, float vy) {
if (stopped_) {
vx_ = vx_ + (vx * 60.0f); // Convertir a píxeles/segundo vx_ = vx_ + (vx * 60.0f); // Convertir a píxeles/segundo
}
vy_ = vy_ + (vy * 60.0f); // Convertir a píxeles/segundo vy_ = vy_ + (vy * 60.0f); // Convertir a píxeles/segundo
on_surface_ = false; on_surface_ = false;
stopped_ = false; stopped_ = false;

View File

@@ -3,9 +3,9 @@
// Configuración de ventana y pantalla // Configuración de ventana y pantalla
constexpr char WINDOW_CAPTION[] = "vibe3_physics"; constexpr char WINDOW_CAPTION[] = "vibe3_physics";
constexpr int SCREEN_WIDTH = 640; // Ancho de la pantalla lógica (píxeles) constexpr int SCREEN_WIDTH = 320; // Ancho de la pantalla lógica (píxeles)
constexpr int SCREEN_HEIGHT = 360; // Alto de la pantalla lógica (píxeles) constexpr int SCREEN_HEIGHT = 240; // Alto de la pantalla lógica (píxeles)
constexpr int WINDOW_ZOOM = 2; // Zoom inicial de la ventana constexpr int WINDOW_ZOOM = 3; // Zoom inicial de la ventana
constexpr int BALL_SIZE = 10; // Tamaño de las pelotas (píxeles) constexpr int BALL_SIZE = 10; // Tamaño de las pelotas (píxeles)
// Configuración de zoom dinámico de ventana // Configuración de zoom dinámico de ventana

View File

@@ -166,7 +166,7 @@ void Engine::handleEvents() {
break; break;
case SDLK_SPACE: case SDLK_SPACE:
pushUpBalls(); pushBallsAwayFromGravity();
break; break;
case SDLK_G: case SDLK_G:
@@ -426,12 +426,32 @@ void Engine::setText() {
text_init_time_ = SDL_GetTicks(); text_init_time_ = SDL_GetTicks();
} }
void Engine::pushUpBalls() { void Engine::pushBallsAwayFromGravity() {
for (auto &ball : balls_) { for (auto &ball : balls_) {
const int SIGNO = ((rand() % 2) * 2) - 1; const int SIGNO = ((rand() % 2) * 2) - 1;
const float VX = (((rand() % 20) + 10) * 0.1f) * SIGNO; const float LATERAL = (((rand() % 20) + 10) * 0.1f) * SIGNO;
const float VY = ((rand() % 40) * 0.1f) + 5; const float MAIN = ((rand() % 40) * 0.1f) + 5;
ball->modVel(VX, -VY); // Modifica la velocidad de la bola
float vx = 0, vy = 0;
switch (current_gravity_) {
case GravityDirection::DOWN: // Impulsar ARRIBA
vx = LATERAL;
vy = -MAIN;
break;
case GravityDirection::UP: // Impulsar ABAJO
vx = LATERAL;
vy = MAIN;
break;
case GravityDirection::LEFT: // Impulsar DERECHA
vx = MAIN;
vy = LATERAL;
break;
case GravityDirection::RIGHT: // Impulsar IZQUIERDA
vx = -MAIN;
vy = LATERAL;
break;
}
ball->modVel(vx, vy); // Modifica la velocidad según dirección de gravedad
} }
} }

View File

@@ -88,7 +88,7 @@ private:
// Métodos auxiliares // Métodos auxiliares
void initBalls(int value); void initBalls(int value);
void setText(); void setText();
void pushUpBalls(); void pushBallsAwayFromGravity();
void switchBallsGravity(); void switchBallsGravity();
void changeGravityDirection(GravityDirection direction); void changeGravityDirection(GravityDirection direction);
void toggleVSync(); void toggleVSync();