# Análisis del Sistema de Coordenadas ## GridSystem - Cómo Funciona la Rotación En `GridSystem.getGlobalCells()`, las transformaciones son: ```javascript // Local coords: lx (columna), ly (fila convertida desde matriz) // ly = (numberOfRows - 1) - row // Fila 0 de matriz = Y más alto switch (rotation) { case NORTH: gx = startX + lx; gy = startY + ly; break; case SOUTH: gx = startX - lx; gy = startY - ly; break; case EAST: gx = startX + ly; gy = startY - lx; break; case WEST: gx = startX - ly; gy = startY + lx; break; } ``` ## Ejemplo: Corridor 2x6 (Ancho=2, Largo=6) Layout en matriz (fila 0 arriba, fila 5 abajo): ``` [1, 1] // Fila 0 -> ly=5 (norte) [1, 1] // Fila 1 -> ly=4 [1, 1] // Fila 2 -> ly=3 [1, 1] // Fila 3 -> ly=2 [1, 1] // Fila 4 -> ly=1 [1, 1] // Fila 5 -> ly=0 (sur) ``` ### Rotación NORTH (Sin rotar) - Anchor en (0,0) - Celdas ocupadas: (0,0) (1,0) (0,1) (1,1) ... (0,5) (1,5) - Salida SUR: celdas (0,0) y (1,0) -> exits en estas posiciones mirando SOUTH - Salida NORTE: celdas (0,5) y (1,5) -> exits en estas posiciones mirando NORTH **Definición de exits para NORTH (Config Straight):** ```javascript { x: 0, y: 0, direction: SOUTH }, { x: 1, y: 0, direction: SOUTH }, { x: 0, y: 5, direction: NORTH }, { x: 1, y: 5, direction: NORTH } ``` ### Rotación EAST - Anchor en (0,0) - Transformación: gx = 0 + ly, gy = 0 - lx - Celda local (lx=0, ly=0): Global (0, 0) - Celda local (lx=1, ly=0): Global (0, -1) - Celda local (lx=0, ly=5): Global (5, 0) - Celda local (lx=1, ly=5): Global (5, -1) El corridor ahora es horizontal, creciendo hacia la derecha (+X), con ancho en dirección -Y. **Celdas ocupadas:** - (0,0), (0,-1) - extremo oeste - (1,0), (1,-1) - (2,0), (2,-1) - (3,0), (3,-1) - (4,0), (4,-1) - (5,0), (5,-1) - extremo este **Definición de exits para EAST (Config Straight):** Salida WEST (era SUR): en el extremo oeste ```javascript { x: 0, y: 0, direction: WEST }, { x: 0, y: -1, direction: WEST } ``` Salida EAST (era NORTE): en el extremo este ```javascript { x: 5, y: 0, direction: EAST }, { x: 5, y: -1, direction: EAST } ``` ### Rotación SOUTH - Anchor en (0,0) - Transformación: gx = 0 - lx, gy = 0 - ly - Celda local (lx=0, ly=0): Global (0, 0) - Celda local (lx=1, ly=0): Global (-1, 0) - Celda local (lx=0, ly=5): Global (0, -5) - Celda local (lx=1, ly=5): Global (-1, -5) El corridor crece hacia abajo (-Y) y hacia la izquierda (-X). **Celdas ocupadas:** - (0,0), (-1,0) - extremo norte (era sur) - (0,-1), (-1,-1) - (0,-2), (-1,-2) - (0,-3), (-1,-3) - (0,-4), (-1,-4) - (0,-5), (-1,-5) - extremo sur (era norte) **Definición de exits para SOUTH (Config Straight):** Salida NORTH (era SUR original): en el extremo norte ```javascript { x: 0, y: 0, direction: NORTH }, { x: -1, y: 0, direction: NORTH } ``` Salida SOUTH (era NORTE original): en el extremo sur ```javascript { x: 0, y: -5, direction: SOUTH }, { x: -1, y: -5, direction: SOUTH } ``` ### Rotación WEST - Anchor en (0,0) - Transformación: gx = 0 - ly, gy = 0 + lx - Celda local (lx=0, ly=0): Global (0, 0) - Celda local (lx=1, ly=0): Global (0, 1) - Celda local (lx=0, ly=5): Global (-5, 0) - Celda local (lx=1, ly=5): Global (-5, 1) El corridor es horizontal, creciendo hacia la izquierda (-X), con ancho en dirección +Y. **Celdas ocupadas:** - (0,0), (0,1) - extremo este (era sur) - (-1,0), (-1,1) - (-2,0), (-2,1) - (-3,0), (-3,1) - (-4,0), (-4,1) - (-5,0), (-5,1) - extremo oeste (era norte) **Definición de exits para WEST (Config Straight):** Salida EAST (era SUR original): en el extremo este ```javascript { x: 0, y: 0, direction: EAST }, { x: 0, y: 1, direction: EAST } ``` Salida WEST (era NORTE original): en el extremo oeste ```javascript { x: -5, y: 0, direction: WEST }, { x: -5, y: 1, direction: WEST } ``` ## Conclusión Las definiciones actuales de corridors están ✅ **CORRECTAS**. El problema debe estar en el `DungeonGenerator.js`.