> For the complete documentation index, see [llms.txt](https://docs.allout.game/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.allout.game/all-out-docs/docs-es/uso-del-editor/tilemap.md).

# Mapas de mosaicos

El sistema de tilemap te permite pintar mundos basados en tiles usando máscaras de auto-tilado, múltiples capas y extrusión de paredes con generación de colisiones integrada.

## Añadir un tilemap

Añade un `Tilemap_Component` a cualquier entidad. El tilemap se centra en la posición de la entidad y abarca una cuadrícula de chunks (cada uno de 32×32 tiles). El tamaño total en tiles es `width_in_chunks × 32` por `height_in_chunks × 32`.

## Propiedades del tilemap

| Propiedad                  | Descripción                                                                                           |
| -------------------------- | ----------------------------------------------------------------------------------------------------- |
| **Ancho / Alto en chunks** | Tamaño de la cuadrícula de tiles. Cada chunk es de 32×32 tiles. Un tilemap de 10×10 da 320×320 tiles. |

Las capas se configuran individualmente una vez que entras en modo de edición (ver abajo).

## Scripting en tiempo de ejecución

`Tilemap_Component` expone los mismos datos persistentes de capa que usa el editor. Las capas se direccionan mediante un índice basado en cero. Al eliminar una capa, cada índice posterior se desplaza una posición hacia abajo, así que no conserves un índice tras eliminar una capa a menos que lo actualices.

### CSL

```csl
tilemap := entity.get_component(Tilemap_Component);
ground := tilemap.add_layer(.GROUND);
tilemap.set_layer_tile_size(ground, 1.5);
tilemap.set_layer_tint(ground, v4{0.8, 0.9, 1, 1});
tilemap.add_layer_texture(ground, get_asset(Texture_Asset, "tiles/grass.png"), 1);
tilemap.set_layer_mask(ground, get_asset(Texture_Asset, "$AO/tile_mask.png"));
tilemap.set_tile(ground, 10, 12);

world_position := tilemap.tile_to_world(ground, 10, 12);
tile_x, tile_y := tilemap.world_to_tile(ground, world_position);
```

Las mutaciones del tilemap en CSL son estado de escena normal. Participan en la predicción, el rollback y la reconciliación del servidor igual que otros estados de juego de CSL.

### C\#

```csharp
Tilemap_Component tilemap = Entity.GetComponent<Tilemap_Component>();
int ground = tilemap.AddLayer(TilemapLayerKind.Ground);
tilemap.SetLayerTileSize(ground, 1.5f);
tilemap.SetLayerTint(ground, new Vector4(0.8f, 0.9f, 1.0f, 1.0f));
tilemap.AddLayerTexture(ground, Assets.GetAsset<Texture>("tiles/grass.png"));
tilemap.SetLayerMask(ground, Assets.GetAsset<Texture>("$AO/tile_mask.png"));
tilemap.SetTile(ground, 10, 12);

Vector2 worldPosition = tilemap.TileToWorld(ground, 10, 12);
tilemap.WorldToTile(ground, worldPosition, out int tileX, out int tileY);
```

Las llamadas de C# solo mutan la simulación actual. Para un cambio en tiempo de ejecución multijugador, usa el flujo RPC existente del juego para invocar la misma mutación en cada par; la API del tilemap no crea un nuevo canal de replicación.

La API en tiempo de ejecución incluye:

* `Redimensionado`, dimensiones de chunk/tile y conversión de coordenadas locales/globales con conocimiento de la capa.
* Adición, eliminación, vaciado, tipo, modo/orden de renderizado, tamaño del tile, tinte, máscaras, contornos, ajustes de pared y ajustes de colisión.
* Adición, reemplazo, reajuste de peso, eliminación y búsqueda de texturas ponderadas.
* Operaciones individuales de consulta, establecimiento y borrado de tiles.

Los tilemaps tienen al menos 2×2 chunks. Al redimensionarlos se conserva el centro del mapa, se desplazan las coordenadas de tile existentes según la mitad de la diferencia de tamaño y se recortan los tiles que quedan fuera de los nuevos límites. Las escrituras de tiles fuera de los límites no hacen nada y las consultas devuelven false. Los pesos de textura deben ser no negativos y cada capa admite como máximo 256 texturas.

Los índices de capa o textura inválidos y los ajustes de capa inválidos se rechazan en el límite del scripting. C# lanza una `ArgumentOutOfRangeException` (o `ArgumentException` para el límite de cantidad de texturas), mientras que CSL informa de un error de script que contiene el valor inválido y el rango válido.

El tinte de capa multiplica la capa completa, incluyendo contornos y partes superiores de las paredes. Los cambios de tinte se aplican como un uniforme de renderizado y no vuelven a hornear los tiles ni reconstruyen la colisión. Los múltiples cambios de tiles y colisión realizados antes de la siguiente actualización del tilemap se consolidan en una sola reconstrucción de geometría/colisión.

## Modo de edición

Selecciona la entidad del tilemap y haz clic en el **Editar** botón del inspector para entrar en el modo de edición del tilemap. Haz clic en **Cancelar** para salir. El modo de edición se desactiva automáticamente si deseleccionas la entidad.

Mientras editas, un borde rojo delimita los límites del tilemap y se dibuja una cuadrícula superpuesta en la vista de escena.

## Herramientas

El editor del tilemap tiene tres modos de herramienta, que se cambian mediante atajos de teclado:

| Herramienta  | Tecla rápida | Descripción                                                       |
| ------------ | ------------ | ----------------------------------------------------------------- |
| **Pincel**   | `B/W`        | Pinta tiles haciendo clic y arrastrando.                          |
| **Borrador** | `E`          | Elimina tiles haciendo clic y arrastrando.                        |
| **Sello**    | `S/R`        | Selecciona una región para copiarla y luego pégala en otro lugar. |

También puedes **mantener pulsado Shift** mientras estás en modo Pincel para borrar temporalmente.

## Pintado con pincel

Haz clic y arrastra para pintar tiles en la capa seleccionada. El pincel usa interpolación de línea de Bresenham entre fotogramas, así que nunca te saltas tiles aunque te muevas rápido.

**El tamaño del pincel** se ajusta con `[` y `]` (rango 1–32). El pincel es circular: los tiles dentro del radio se ven afectados.

**Alt+clic** dibuja una línea recta desde tu última posición de clic hasta el tile actual, útil para bordes largos y rectos.

**Ctrl+arrastrar** cambia al modo de relleno rectangular: arrastra para definir un rectángulo y todos los tiles de la región se rellenan (o se borran si también se mantiene pulsado Shift) al soltar.

## Capas

Cada tilemap admite múltiples capas. Haz clic en una capa en el inspector para seleccionarla para pintar. La capa seleccionada se resalta en azul.

### Añadir y eliminar capas

* Haz clic en **Añadir capa** en la parte inferior para crear una nueva capa.
* Haz clic en **Eliminar capa** dentro del panel de una capa para borrarla.

### Propiedades de la capa

| Propiedad           | Descripción                                                                                                                                                                                                          |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Tipo**            | `Suelo` o `Pared`. Los tiles de suelo son planos; los tiles de pared se extruyen verticalmente.                                                                                                                      |
| **Modo de capa**    | `Predeterminado` usa capas automáticas (suelo detrás del jugador, paredes ordenadas por Y). `Manual` te permite establecer un valor fijo de capa de renderizado.                                                     |
| **Capa manual**     | Solo se muestra en modo Manual. El valor explícito de capa de renderizado.                                                                                                                                           |
| **Tamaño del tile** | Tamaño visual de cada tile en unidades del mundo.                                                                                                                                                                    |
| **Tinte**           | Multiplicador de color para la capa completa, incluidas las partes superiores de las paredes y los contornos.                                                                                                        |
| **Texturas**        | Una o más texturas con pesos para variedad aleatoria. El motor calcula un hash de las coordenadas del tile para elegir determinísticamente una variante de textura por tile según los pesos.                         |
| **Máscara**         | Una textura de cuadrícula 8×8 usada para el auto-tilado. Cada celda corresponde a una configuración diferente de adyacencia (bordes, esquinas, aislado, etc.). Se incluye un mapa predeterminado `$AO/tile_mask.png` |
| **Contorno**        | Color para los contornos de los tiles (alfa 0 = sin contorno).                                                                                                                                                       |

### Variedad de múltiples texturas

Cada capa puede tener varias texturas con pesos. Los tiles seleccionan de forma determinista una variante de textura basada en un hash de sus coordenadas de cuadrícula, de modo que el patrón es estable entre guardados y no cambia cuando añades o eliminas tiles.

Ajusta el valor de **peso** junto a cada textura para controlar con qué frecuencia aparece en relación con las demás.

## Auto-tilado

Los tiles seleccionan automáticamente la celda de máscara correcta según su configuración de vecinos en 8 direcciones. El sistema:

1. Comprueba los 8 vecinos (N, NE, E, SE, S, SW, W, NW).
2. Los vecinos diagonales solo cuentan si ambos vecinos cardinales adyacentes están presentes (evita artefactos visuales en las esquinas).
3. Mapea la máscara de adyacencia de 8 bits resultante a una de 64 celdas de la textura de máscara 8×8.

Esto significa que solo necesitas pintar la presencia de tiles: los visuales correctos de borde, esquina e interior se calculan automáticamente.

## Capas de pared

Establecer el tipo de una capa en **Pared** habilita la extrusión vertical. Los tiles de pared se colocan en la cuadrícula igual que los tiles de suelo, pero cada tile colocado genera una columna de tiles de cuerpo que se extiende hacia arriba por la **Altura de pared**.

### Propiedades de pared

| Propiedad             | Descripción                                                                                                 |
| --------------------- | ----------------------------------------------------------------------------------------------------------- |
| **Altura de pared**   | Número de tiles de alto que tiene cada columna de pared (mínimo 2).                                         |
| **Textura superior**  | Textura separada para la fila superior de la pared (la «tapa»).                                             |
| **Máscara superior**  | Textura de máscara para la parte superior de la pared (usa el mismo auto-tilado de 8 vecinos que el suelo). |
| **Contorno superior** | Color del contorno para los tiles superiores de la pared.                                                   |

Los cuerpos de las paredes usan la textura principal de la capa. Las partes superiores de las paredes usan los vecinos de la fila base, lo que mantiene limpios los bordes de la tapa.

Las paredes se ordenan por Y según su fila base, así que los jugadores caminan detrás de las paredes que están por encima de ellos y delante de las que están por debajo.

### Colisión de pared

| Propiedad                | Descripción                                                                                           |
| ------------------------ | ----------------------------------------------------------------------------------------------------- |
| **Colisión**             | Genera bordes de obstáculos para la reconstrucción de la malla de navegación.                         |
| **Inset**                | Reduce hacia dentro los bordes de colisión desde los límites del tile para una colisión más ajustada. |
| **Desplazamiento**       | Desplaza todos los bordes de colisión por una cantidad fija.                                          |
| **Dibujo de depuración** | Dibuja bordes de colisión verdes en la vista de escena para depuración.                               |

Cuando la colisión está activada, el motor construye bordes de obstáculo a partir de los límites expuestos de los tiles. Las mallas de navegación con reconstrucción automática activada incorporan esos bordes.

## Herramienta Sello (copiar y pegar)

Pulsa `S` para cambiar al modo Sello. Esto habilita un flujo de trabajo de selección de región:

1. **Seleccionar**: Haz clic y arrastra para resaltar una región rectangular. Los tiles seleccionados se copian al portapapeles. Un mensaje emergente «Copiado» confirma la acción.
2. **Pegar**: Pulsa `Ctrl+V` para entrar en modo fantasma. Una vista previa translúcida del portapapeles sigue el cursor.
3. **Girar**: Usa la rueda del ratón para girar la vista previa fantasma en incrementos de 90 grados.
4. **Colocar**: Haz clic para estampar los tiles. Mantén pulsado Shift mientras haces clic para colocar varias copias sin salir del modo fantasma.
5. **Cancelar**: Pulsa `Escape` para salir del modo fantasma sin colocar nada.

Mantén **Ctrl** mientras inicias una selección de sello para copiar tiles de **todas las capas** a la vez, conservando las estructuras de múltiples capas.

## Resumen de atajos de teclado

| Atajo               | Acción                                                          |
| ------------------- | --------------------------------------------------------------- |
| `B` o `W`           | Cambiar a la herramienta Pincel                                 |
| `E`                 | Cambiar a la herramienta Borrador                               |
| `S` o `R`           | Cambiar a la herramienta Sello                                  |
| `Shift` (mantenida) | Borrar temporalmente mientras estás en modo Pincel              |
| `[` / `]`           | Disminuir / aumentar el tamaño del pincel                       |
| `Ctrl+arrastrar`    | Relleno rectangular con la herramienta Pincel o Borrador activa |
| `Alt+clic`          | Dibujar una línea recta desde el último clic                    |
| `Ctrl+V`            | Entrar en modo pegar/fantasma                                   |
| `Rueda del ratón`   | Girar la vista previa fantasma (en modo fantasma)               |
| `Shift+clic`        | Colocar varias copias (en modo fantasma)                        |
| `Escape`            | Cancelar el modo fantasma                                       |
