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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user