rejilla

Una cuadrícula de números para mapas de tiles: crearla, leer y escribir celdas, dibujarla con una hoja de sprites y comprobar colisiones con celdas sólidas.

importar
usar std/pincel/rejilla

Tipos

rejilla.Rejilla

Una cuadrícula de enteros (por ejemplo un mapa de tiles) creada con rejilla.nueva, rejilla.desde_texto o rejilla.desde_csv; es un objeto compartido, como los demás tipos.

Rejilla.columnas() entero

La cantidad de columnas de la rejilla.

Rejilla.filas() entero

La cantidad de filas de la rejilla.

Rejilla.obtener(x entero, y entero) entero?

El valor de la celda (x, y), o .Ninguno si está fuera de la rejilla.

Rejilla.poner(x entero, y entero, valor entero) bool

Escribe `valor` en la celda (x, y); devuelve falso si está fuera de la rejilla.

Rejilla.rellenar(valor entero)

Pone `valor` en todas las celdas.

Rejilla.buscar(valor entero) [mate.Vec2]

Las celdas (columna, fila) que contienen `valor`, de arriba abajo y de izquierda a derecha. Sirve para leer de una capa de objetos dónde empieza el jugador o dónde están las llaves: repetir (objetos.buscar(llave)) |celda| ...

Rejilla.choca(area mate.Rect, tamano_celda mate.Vec2, solidos [entero]) bool

verdadero si `area` toca alguna celda cuyo valor esté en `solidos`; `tamano_celda` es el tamaño de cada celda en el mundo. Lo que queda fuera de la rejilla nunca es sólido.

Rejilla.mover(area mate.Rect, tamano_celda mate.Vec2, delta mate.Vec2, solidos [entero], plataformas [entero] = []) mate.Vec2

Desplaza `area` según `delta` (primero en x y luego en y) sin atravesar celdas sólidas y devuelve lo que realmente se movió: si el resultado en un eje es menor que `delta`, hubo un choque en ese eje. Usa pasos menores que una celda por llamada. Las celdas con un valor de `plataformas` solo frenan al caer sobre ellas desde arriba: se atraviesan al saltar desde abajo o al moverse de lado.

Rejilla.celda_en(punto mate.Vec2, tamano_celda mate.Vec2) entero?

El valor de la celda que contiene el punto del mundo dado, o Ninguno si queda fuera de la rejilla. Útil con el ratón (junto con Camara2D.a_mundo).

Rejilla.valores_en(area mate.Rect, tamano_celda mate.Vec2) [entero]

Los valores distintos de las celdas que toca `area`, sin repetir. Por ejemplo, un rectángulo de 1 píxel bajo los pies dice si el jugador pisa hielo o pinchos.

Funciones

rejilla.nueva(columnas entero, filas entero, valor entero = 0) rejilla.Rejilla

Crea una rejilla de `columnas` x `filas` con todas las celdas en `valor` (usa -1 para «vacío» si vas a dibujarla con una hoja).

rejilla.desde_texto(filas [cadena], simbolos [cadena: entero]) rejilla.Rejilla

Crea una rejilla a partir de una fila de texto por fila de celdas; `simbolos` dice qué número vale cada carácter, por ejemplo ["#": 1, ".": 0]. Un carácter desconocido o filas de distinto largo detienen el programa con un mensaje claro.

rejilla.desde_csv(texto cadena, capa cadena = "") rejilla.Rejilla

Crea una rejilla a partir de texto con una fila por línea y los valores separados por comas (el formato `.mapa.txt` de tools/mapa-editor). Una línea que empieza por `#` da nombre a la capa que sigue y `//` inicia un comentario; las líneas de marcas (`@ nombre columna,fila`) se saltan. Los valores pueden escribirse en hexadecimal (`0xFFB915`), como hace el editor con los colores. `capa` elige una capa por su nombre; sin ella se lee la primera. Un valor que no es un entero, filas de distinto largo o una capa que no existe detienen el programa con un mensaje que indica la línea.

rejilla.dibujar(mapa rejilla.Rejilla, hoja graficos.Hoja, pos mate.Vec2 = {}, escala mate.Vec2 = {x: 1, y: 1}, tinte color.Color = .Blanco, animaciones [entero: [entero]] = [:], cuadros_por_segundo decimal = 8, colores rejilla.Rejilla? = .Ninguno)al pintar

Dibuja cada celda de la rejilla como el cuadro con ese índice de la hoja, con la esquina superior izquierda en `pos`. Las celdas negativas o fuera de la hoja se omiten y las que quedan fuera de la pantalla no se dibujan. `animaciones` asocia un valor de celda con una lista de cuadros (por ejemplo `[5: [5, 6, 7]]` para agua), que se recorren a `cuadros_por_segundo`. `colores` es otra rejilla con el color de cada celda como número 0xRRGGBB (rojo * 65536 + verde * 256 + azul); las celdas negativas o fuera de ella usan `tinte`.