Implementar modo real fullscreen y resolver conflictos
MODO REAL FULLSCREEN (F4): - F4: Cambia resolución interna a resolución nativa del escritorio - Pelotas usan dimensiones dinámicas del terreno de juego - Interfaz se adapta automáticamente (texto, debug, gradiente) - Reinicio automático de escena con nuevas dimensiones RESOLUCIÓN DINÁMICA: - Ball constructor acepta screen_width/height como parámetros - Colisiones usan dimensiones dinámicas en lugar de constantes - Spawn de pelotas usa margen configurable (BALL_SPAWN_MARGIN) - Toda la interfaz se adapta a resolución actual MODOS FULLSCREEN MUTUAMENTE EXCLUYENTES: - F3 (fullscreen normal) y F4 (real fullscreen) se desactivan mutuamente - F1/F2 (zoom) bloqueados durante cualquier modo fullscreen - Sin estados mixtos que rompan el renderizado - Transiciones seguras entre todos los modos MEJORAS DE CONFIGURACIÓN: - BALL_SPAWN_MARGIN: margen lateral configurable para spawn de pelotas - Resolución base actualizada a 640x360 (16:9) - Spawn margin reducido a 15% para mayor dispersión 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -3,36 +3,39 @@
|
||||
// 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 = 480; // Alto de la pantalla lógica (píxeles)
|
||||
constexpr int WINDOW_ZOOM = 2; // Zoom inicial de la ventana
|
||||
constexpr int BALL_SIZE = 10; // Tamaño de las pelotas (píxeles)
|
||||
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 BALL_SIZE = 10; // Tamaño de las pelotas (píxeles)
|
||||
|
||||
// Configuración de zoom dinámico de ventana
|
||||
constexpr int WINDOW_ZOOM_MIN = 1; // Zoom mínimo (320x240)
|
||||
constexpr int WINDOW_ZOOM_MAX = 10; // Zoom máximo teórico (3200x2400)
|
||||
constexpr int WINDOW_DESKTOP_MARGIN = 10; // Margen mínimo con bordes del escritorio
|
||||
constexpr int WINDOW_DECORATION_HEIGHT = 30; // Altura estimada de decoraciones del SO
|
||||
constexpr int WINDOW_ZOOM_MIN = 1; // Zoom mínimo (320x240)
|
||||
constexpr int WINDOW_ZOOM_MAX = 10; // Zoom máximo teórico (3200x2400)
|
||||
constexpr int WINDOW_DESKTOP_MARGIN = 10; // Margen mínimo con bordes del escritorio
|
||||
constexpr int WINDOW_DECORATION_HEIGHT = 30; // Altura estimada de decoraciones del SO
|
||||
|
||||
// Configuración de física
|
||||
constexpr float GRAVITY_FORCE = 0.2f; // Fuerza de gravedad (píxeles/frame²)
|
||||
constexpr float GRAVITY_FORCE = 0.2f; // Fuerza de gravedad (píxeles/frame²)
|
||||
|
||||
// Configuración de interfaz
|
||||
constexpr Uint64 TEXT_DURATION = 2000; // Duración del texto informativo (ms)
|
||||
constexpr Uint64 TEXT_DURATION = 2000; // Duración del texto informativo (ms)
|
||||
|
||||
// Configuración de pérdida aleatoria en rebotes
|
||||
constexpr float BASE_BOUNCE_COEFFICIENT = 0.75f; // Coeficiente base IGUAL para todas las pelotas
|
||||
constexpr float BOUNCE_RANDOM_LOSS_PERCENT = 0.1f; // 0-10% pérdida adicional aleatoria en cada rebote
|
||||
constexpr float LATERAL_LOSS_PERCENT = 0.02f; // ±2% pérdida lateral en rebotes
|
||||
constexpr float BASE_BOUNCE_COEFFICIENT = 0.75f; // Coeficiente base IGUAL para todas las pelotas
|
||||
constexpr float BOUNCE_RANDOM_LOSS_PERCENT = 0.1f; // 0-10% pérdida adicional aleatoria en cada rebote
|
||||
constexpr float LATERAL_LOSS_PERCENT = 0.02f; // ±2% pérdida lateral en rebotes
|
||||
|
||||
// Configuración de masa/peso individual por pelota
|
||||
constexpr float GRAVITY_MASS_MIN = 0.7f; // Factor mínimo de masa (pelota ligera - 70% gravedad)
|
||||
constexpr float GRAVITY_MASS_MAX = 1.3f; // Factor máximo de masa (pelota pesada - 130% gravedad)
|
||||
constexpr float GRAVITY_MASS_MIN = 0.7f; // Factor mínimo de masa (pelota ligera - 70% gravedad)
|
||||
constexpr float GRAVITY_MASS_MAX = 1.3f; // Factor máximo de masa (pelota pesada - 130% gravedad)
|
||||
|
||||
// Configuración de velocidad lateral al cambiar gravedad (muy sutil)
|
||||
constexpr float GRAVITY_CHANGE_LATERAL_MIN = 0.04f; // Velocidad lateral mínima (2.4 px/s)
|
||||
constexpr float GRAVITY_CHANGE_LATERAL_MAX = 0.08f; // Velocidad lateral máxima (4.8 px/s)
|
||||
|
||||
// Configuración de spawn inicial de pelotas
|
||||
constexpr float BALL_SPAWN_MARGIN = 0.15f; // Margen lateral para spawn (0.25 = 25% a cada lado)
|
||||
|
||||
// Estructura para representar colores RGB
|
||||
struct Color {
|
||||
int r, g, b; // Componentes rojo, verde, azul (0-255)
|
||||
@@ -40,10 +43,10 @@ struct Color {
|
||||
|
||||
// Enum para dirección de gravedad
|
||||
enum class GravityDirection {
|
||||
DOWN, // ↓ Gravedad hacia abajo (por defecto)
|
||||
UP, // ↑ Gravedad hacia arriba
|
||||
LEFT, // ← Gravedad hacia la izquierda
|
||||
RIGHT // → Gravedad hacia la derecha
|
||||
DOWN, // ↓ Gravedad hacia abajo (por defecto)
|
||||
UP, // ↑ Gravedad hacia arriba
|
||||
LEFT, // ← Gravedad hacia la izquierda
|
||||
RIGHT // → Gravedad hacia la derecha
|
||||
};
|
||||
|
||||
// Enum para temas de colores (seleccionables con teclado numérico)
|
||||
|
||||
Reference in New Issue
Block a user