Feat: Hybrid Architecture Phase 1
- Implemented Game Server (game-server.js) with Socket.io - Added JSON Schemas for Campaigns and Missions - Updated Docker configurations for multi-service setup - Refactored main.js to allow local network connections - Removed legacy code (main_old.js) - Updated dependencies
This commit is contained in:
41
DEVLOG.md
41
DEVLOG.md
@@ -2,6 +2,47 @@
|
||||
|
||||
Este documento sirve para llevar un control diario del desarrollo, decisiones técnicas y nuevas funcionalidades implementadas en el proyecto.
|
||||
|
||||
## [2025-12-28] - Fase 1: Arquitectura Híbrida y Servidor
|
||||
|
||||
### Infraestructura
|
||||
- **Game Server (`game-server.js`):** Implementado servidor WebSocket (Socket.io) en puerto 3001 para gestionar la comunicación PC-Móvil.
|
||||
- **Docker:** Actualizado `docker-compose.yml` para ejecutar el servidor juego como servicio independiente.
|
||||
- **Networking:** Configuración dinámica de IP en el cliente para permitir conexión desde dispositivos en la red local.
|
||||
|
||||
### Datos
|
||||
- **Esquemas JSON:** Definidos contratos de datos iniciales en `src/schemas/`:
|
||||
- `CampaignSchema.js`: Estructura para campañas multijugador.
|
||||
- `MissionSchema.js`: Configuración para generación procedural y scripting.
|
||||
|
||||
## [2025-12-28] - Corrección Completa del Sistema de Puertas
|
||||
|
||||
### Funcionalidades Implementadas
|
||||
- **Refactorización de Posicionamiento de Puertas:**
|
||||
- Creada función unificada `getDoorWorldPosition()` que centraliza el cálculo de posiciones.
|
||||
- Eliminada duplicación de lógica entre generación de huecos en paredes y posicionamiento de meshes de puertas.
|
||||
- Reducción de ~45 líneas de código duplicado.
|
||||
|
||||
- **Corrección de Alineamiento E/W:**
|
||||
- Identificado problema: Las paredes Este y Oeste tienen `rotation = π/2`, lo que hace que su eje X local apunte hacia -Z.
|
||||
- Solución: Invertir el `wallOffset` para ambas paredes E/W: `wallOffset = -(doorWorldPos.z - centerZ)`.
|
||||
- **Resultado:** Puertas y huecos perfectamente alineados en todas las direcciones (N, S, E, W).
|
||||
|
||||
- **Corrección de Interacción con Puertas Abiertas:**
|
||||
- Problema detectado: Las puertas abiertas (invisibles) seguían bloqueando clics del ratón.
|
||||
- Solución: Filtrar puertas invisibles del raycast: `allDoors.push(...roomData.doors.filter(door => door.visible))`.
|
||||
- **Resultado:** Los jugadores ahora pueden hacer clic "a través" de puertas abiertas para seleccionar baldosas.
|
||||
|
||||
### Cambios Técnicos
|
||||
- Nueva función `getDoorWorldPosition(room, door, centerX, centerZ, halfSizeX, halfSizeZ)`:
|
||||
- Devuelve: `{ worldPos, meshPos, rotation, wallOffset }`
|
||||
- Garantiza coherencia entre geometría de huecos y meshes visuales.
|
||||
- Modificado raycast de puertas para excluir meshes invisibles (línea 1388).
|
||||
- Commits: `8025d66`, `5852a97`, `57f6312`.
|
||||
|
||||
### Lecciones Aprendidas
|
||||
- **Geometría Rotada:** Cuando un `PlaneGeometry` se rota (e.g., π/2), su sistema de coordenadas local cambia. Es crucial calcular offsets considerando la dirección del eje X local tras la rotación.
|
||||
- **Raycast e Invisibilidad:** `mesh.visible = false` solo oculta visualmente un objeto, pero Three.js sigue detectándolo en raycasts. Siempre filtrar objetos invisibles antes de `intersectObjects()`.
|
||||
|
||||
## [2025-12-23] - Interacción con Puertas y Navegación
|
||||
|
||||
### Funcionalidades Implementadas
|
||||
|
||||
Reference in New Issue
Block a user