Buenas de nuevo, el juego ya va tomando forma. He añadido objetivos al juego y he hecho que los niveles se puedan superar completando objetivos, consiguiendo X monedas, obteniendo una llave para bajar la jaula o cumpliendo ambas metas.
Como parece que ya se está volviendo costumbre, he vuelto a reorganizar el código. Se me estaba haciendo doloroso trabajar con él.
BlockManager a
CellManager. Creo que es un
nombre más correcto.
CellManager es como el jefe
de las InfoCasilla: se
encarga de buscar información entre las casillas.
Ahora InfoCasilla (antes
InfoCasillaMatriz) solo se
va a encargar de guardar información. Fuera queda eso de mandar a dibujar
los bloques y los items que contiene esa casilla (los assets).
Los assets, como las monedas y las llaves, podría lanzarlos tal cual al mapa sin guardarlos, pero me he dado cuenta de que así pierdo el control, sobre todo si necesito buscar un asset en concreto.
Con este código podemos reservar la casilla; es decir, el buscador de
casillas de CellManager las
filtrará cuando busquemos casillas libres. También hay un límite de
cuántos items puede haber en una casilla.
Como cabría esperar, tiene varias funciones para buscar assets concretos según su subclase.
GameManager. Este se
encarga de establecer el objetivo del nivel actual y gestionar los
coleccionables. Para esta entrada, tenemos las monedas y las llaves.
El jefe de los assets es el autoloader
AssetManager, que de momento
solo colecciona los tipos de objeto. Está un poco pensado a futuro, para
poder agrupar los tipos de items.
De este grupo, los relevantes son
GamePlay, que son cosas como
la meta o el inicio que modifican las reglas de juego;
Entorno, mera decoración que
no hace nada; y
Coleccionable, que es todo lo
que el jugador pueda recoger y acumular en un contador.
Asset, y la subclase: Moneda,
Llave, Meta o Inicio. Como se puede intuir, es una forma de identificar qué
tipo de asset es.
StaticBody3D, para que el
RayCast3D del jugador lo
detecte. Lo suyo sería que estuviera en el nodo padre, pero bueno, ya veré
qué hacer. De momento me he conformado con que funcione.
StaticBody3D lo he
metido en una capa más, la capa
Interactuable, para evitar
que el RayCast3D del
jugador salte con cualquier cosa.
MundoLaberinto se ha vuelto
el hub principal, de interconectar todas las piezas. Lee la matriz, ordena
dibujar y conecta señales con la UI.
RayCast3D: efectos de
sonido y un sistema de carrera que de tanto en tanto falla y es como si la
pulsación del SHIFT se quedase pulsada. Podría ser mi teclado, que se
queda el Shift pegado.
dibujarAsset me meta items
en la misma ranura. Consiste en hacer un
shuffle al array e ir
metiendo items al array usando un índice.
Menos mal que estas entradas no esta pensadas como tutorial, mas como mi diario de como estoy haciendo las cosas.
La idea es que si alguien random con conocimientos de Godot lea esto y reaccione de esta forma.
Hasta otra o hasta nunca.
No hay comentarios:
Publicar un comentario