Commit Graph

8 Commits

Author SHA1 Message Date
f5d6c993d3 Fix: Buscar resources.pack relativo al ejecutable, no al working directory
- Movido getExecutableDirectory() a defines.h como función inline
- Actualizado main.cpp para construir path absoluto a resources.pack
- Eliminadas definiciones duplicadas en engine.cpp y main.cpp
- Ahora funciona correctamente ejecutando desde cualquier carpeta (ej. build/)

TEST confirmado:
- Ejecutar desde raíz:  Carga resources.pack
- Ejecutar desde build/:  Carga resources.pack

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-05 09:36:37 +02:00
2d405a86d7 Sistema de carga de recursos: inicialización y tests completados
**Inicialización en main.cpp:**
- Llamada a Texture::initResourceSystem("resources.pack") antes de Engine
- Intenta cargar pack, si falla usa fallback a disco automáticamente

**Fix normalizePath:**
- Mejorado para extraer rutas relativas desde paths absolutos
- Busca "data/" en cualquier parte del path y extrae lo siguiente
- Convierte "C:/Users/.../data/balls/big.png" → "balls/big.png"

**Tests realizados (3/3 exitosos):**

 TEST 1 - Sin pack (solo disco):
   - Output: "resources.pack no encontrado - usando carpeta data/"
   - Carga: 4 texturas desde disco
   - Resultado: Funciona perfectamente en modo desarrollo

 TEST 2 - Con pack completo (5 recursos):
   - Output: "resources.pack cargado (5 recursos)"
   - Carga: 4 texturas desde pack
   - Resultado: Sistema de pack funcionando al 100%

 TEST 3 - Híbrido (pack parcial con 2 recursos):
   - Output: "resources.pack cargado (2 recursos)"
   - Carga: big.png y small.png desde pack
   - Fallback: normal.png y tiny.png desde disco
   - Resultado: Sistema de fallback perfecto

**Sistema completo y funcional:**
-  Carga desde pack cuando existe
-  Fallback automático a disco por archivo
-  Modo híbrido (mix pack + disco)
-  Desarrollo (sin pack) sin cambios

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-05 09:30:27 +02:00
723bb6d198 Añadir parámetro -z/--zoom con validación inteligente
Defaults correctos (sin CLI):
- Resolución: 320x240
- Zoom: 3
- Ventana resultante: 960x720

Nuevas funcionalidades:
- Parámetro -z/--zoom para especificar zoom de ventana
- Si se pasan -w/-h sin -z: zoom automático = 1
- Validación de resolución vs pantalla
- Validación de zoom vs max_zoom calculado

Lógica de validación:
1. Si resolución > pantalla → reset a 320x240 zoom 3
2. Calcular max_zoom = min(screen_w/width, screen_h/height)
3. Si zoom > max_zoom → ajustar a max_zoom
4. Si CLI con -w/-h pero sin -z → zoom = 1 (auto)

Ejemplos:
  ./vibe3_physics                   # 320x240 zoom 3 
  ./vibe3_physics -w 1920 -h 1080   # 1920x1080 zoom 1 
  ./vibe3_physics -w 640 -h 480 -z 2 # 640x480 zoom 2 (1280x960) 
  ./vibe3_physics -w 9999 -h 9999   # Reset a default (warning) 

Archivos:
- defines.h: Renombrar WINDOW_ZOOM → DEFAULT_WINDOW_ZOOM
- main.cpp: Añadir parsing -z/--zoom
- engine.h: initialize() acepta zoom
- engine.cpp: Validación + advertencias informativas

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-04 14:02:02 +02:00
c4ca49b006 Añadir parámetros de línea de comandos para resolución
Características:
- Parámetros CLI: -w/--width, -h/--height, -f/--fullscreen
- Help: --help muestra uso y ejemplos
- Validación: mínimo 640x480, con mensajes de error
- Defaults: 1280x720 ventana si no se especifica
- Fullscreen opcional con flag -f

Ejemplos de uso:
  ./vibe3_physics                    # Default 1280x720
  ./vibe3_physics -w 1920 -h 1080    # Personalizado
  ./vibe3_physics -w 1920 -h 1080 -f # Fullscreen
  ./vibe3_physics --help             # Ayuda

Archivos modificados:
- source/main.cpp: Parser de argumentos + printHelp()
- source/engine.h: initialize() acepta parámetros
- source/engine.cpp: Lógica de ventana configurable
- ROADMAP.md: Marcar tarea completada

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-04 13:28:44 +02:00
19e1c414c2 Refactoring completo: migrar main.cpp a Engine class
 Características principales:
- Encapsulación completa de variables globales en Engine class
- main.cpp simplificado: 580+ líneas → 15 líneas
- Eliminados problemas de orden de declaración de funciones

🔧 Correcciones aplicadas:
- Colores degradado SUNSET restaurados al original
- Inicialización pelotas: velocidad lateral y posición corregidas
- Textos en MAYÚSCULAS con singular/plural correcto ("1 PELOTA"/"X PELOTAS")
- Uso correcto de changeGravityDirection() para reset de gravedad
- Funciones dbgtxt marcadas como inline para evitar múltiples definiciones

📁 Estructura final:
- engine.h/cpp: Clase Engine con toda la lógica encapsulada
- main.cpp: Interfaz mínima con Engine
- main_old.cpp: Eliminado (ya no necesario)
- CMakeLists.txt: Actualizado para excluir archivos obsoletos

🧪 Testing: Compilación exitosa, funcionalidad restaurada completamente

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-18 17:33:53 +02:00
cada46f732 Refactorización inicial: Crear estructura de clase Engine
PROGRESO INTERMEDIO - Estructura base de Engine implementada:

Nuevos archivos:
- engine.h: Declaración completa de clase Engine con encapsulación
- engine.cpp: Esqueleto de implementación con métodos stub
- main_new.cpp: Nuevo main simplificado (15 líneas vs 580)

Cambios en archivos existentes:
- defines.h: Añadir enum ColorTheme (centralizar definiciones)
- main.cpp: Eliminar enum ColorTheme duplicado

Arquitectura Engine:
- Encapsulación completa de variables globales (SDL, estado, timing, UI)
- Métodos organizados por responsabilidad (public/private)
- Eliminación de problemas de orden de declaración
- Base sólida para futuras extensiones

Estado: Compilación exitosa 
Pendiente: Migrar funcionalidad completa de métodos stub

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-18 17:09:42 +02:00
78656cf17d Implementar sistema de variación por rebote individual
- 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>
2025-09-18 16:52:24 +02:00
dec8d431f5 Implementar sistema de gravedad direccional con controles de cursor
- Añadir enum GravityDirection (UP/DOWN/LEFT/RIGHT) en defines.h
- Modificar Ball class para soportar gravedad multi-direccional
- Reescribir Ball::update() con lógica direccional completa
- Cambiar on_floor_ por on_surface_ (más genérico)
- Implementar detección de superficie según dirección de gravedad
- Añadir controles de teclado con teclas de cursor
- Actualizar debug display para mostrar dirección actual
- Aplicar fricción correctamente según superficie activa

Controles nuevos:
- ↑/↓/←/→: Cambiar dirección de gravedad
- H: Toggle debug display (incluye nueva info de gravedad)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-17 22:37:19 +02:00