- Corregir coeficiente base: ahora TODAS las pelotas tienen el mismo (0.75) - Añadir constantes configurables en defines.h: * BASE_BOUNCE_COEFFICIENT = 0.75f (igual para todas) * BOUNCE_VARIATION_PERCENT = 0.05f (±5% por rebote) * LATERAL_LOSS_PERCENT = 0.02f (±2% pérdida lateral) - Implementar funciones generateBounceVariation() y generateLateralLoss() - Aplicar variación aleatoria en cada rebote individual: * Superficie de gravedad: rebote con ±5% variación * Otras superficies: pérdida lateral 0-2% - Añadir pérdida lateral perpendicular en todos los rebotes - Actualizar debug display para mostrar coeficiente LOSS Efecto: Pelotas idénticas divergen gradualmente por variaciones microscópicas acumulativas, eliminando sincronización de forma natural y realista. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
56 lines
2.1 KiB
C++
56 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL_rect.h> // for SDL_FRect
|
|
|
|
#include <memory> // for shared_ptr, unique_ptr
|
|
|
|
#include "defines.h" // for Color
|
|
#include "external/sprite.h" // for Sprite
|
|
class Texture;
|
|
|
|
class Ball {
|
|
private:
|
|
std::unique_ptr<Sprite> sprite_; // Sprite para pintar la clase
|
|
SDL_FRect pos_; // Posición y tamaño de la pelota
|
|
float vx_, vy_; // Velocidad
|
|
float gravity_force_; // Gravedad
|
|
GravityDirection gravity_direction_; // Direcci\u00f3n de la gravedad
|
|
Color color_; // Color de la pelota
|
|
bool on_surface_; // Indica si la pelota est\u00e1 en la superficie (suelo/techo/pared)
|
|
bool stopped_; // Indica si la pelota ha terminado de moverse;
|
|
float loss_; // Coeficiente de rebote. Pérdida de energía en cada rebote
|
|
|
|
public:
|
|
// Constructor
|
|
Ball(float x, float vx, float vy, Color color, std::shared_ptr<Texture> texture, GravityDirection gravity_dir = GravityDirection::DOWN);
|
|
|
|
// Destructor
|
|
~Ball() = default;
|
|
|
|
// Actualiza la lógica de la clase
|
|
void update(float deltaTime);
|
|
|
|
// Pinta la clase
|
|
void render();
|
|
|
|
// Modifica la velocidad
|
|
void modVel(float vx, float vy);
|
|
|
|
// Cambia la gravedad
|
|
void switchGravity();
|
|
|
|
// Cambia la direcci\u00f3n de gravedad
|
|
void setGravityDirection(GravityDirection direction);
|
|
|
|
// Getters para debug
|
|
float getVelocityY() const { return vy_; }
|
|
float getVelocityX() const { return vx_; }
|
|
float getGravityForce() const { return gravity_force_; }
|
|
float getLossCoefficient() const { return loss_; }
|
|
GravityDirection getGravityDirection() const { return gravity_direction_; }
|
|
bool isOnSurface() const { return on_surface_; }
|
|
|
|
// Getters para batch rendering
|
|
SDL_FRect getPosition() const { return pos_; }
|
|
Color getColor() const { return color_; }
|
|
}; |