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) |
| `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

View File

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

View File

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

View File

@@ -166,7 +166,7 @@ void Engine::handleEvents() {
break;
case SDLK_SPACE:
pushUpBalls();
pushBallsAwayFromGravity();
break;
case SDLK_G:
@@ -426,12 +426,32 @@ void Engine::setText() {
text_init_time_ = SDL_GetTicks();
}
void Engine::pushUpBalls() {
void Engine::pushBallsAwayFromGravity() {
for (auto &ball : balls_) {
const int SIGNO = ((rand() % 2) * 2) - 1;
const float VX = (((rand() % 20) + 10) * 0.1f) * SIGNO;
const float VY = ((rand() % 40) * 0.1f) + 5;
ball->modVel(VX, -VY); // Modifica la velocidad de la bola
const float LATERAL = (((rand() % 20) + 10) * 0.1f) * SIGNO;
const float MAIN = ((rand() % 40) * 0.1f) + 5;
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
void initBalls(int value);
void setText();
void pushUpBalls();
void pushBallsAwayFromGravity();
void switchBallsGravity();
void changeGravityDirection(GravityDirection direction);
void toggleVSync();