Hoy presentaré dos actualizaciones importantes: la primera son avances del jueguito de naves que mencioné hace unos días, la segunda es una mejora para el asset de máquina de estados que tengo en itch (esto involucra una actualización para el demo de Kings and Pigs).
Sin más preámbulo, aquí voy:
Típico juego de Naves
Mejora para el comportamiento de los enemigos
¿Recuerdan cómo construía patrones de movimiento para los enemigos? Creo que encontré una forma de cambiarlo para mejor, aunque empleo muchas corrutinas (yield) e ignoro si afecta mucho al rendimiento del juego, a largo plazo.
En las pruebas que vengo haciendo no bajo de los 58fps. Teniendo en cuenta que mi laptop tiene diez años, probablemente sea un buen rendimiento.
He adaptado el asset de máquina de estados a este proyecto. Con unas funciones adicionales que ahora permiten ejecutar una serie de estados, según el patrón de ataque que se esté cargando.
Ahora es mucho más fácil realizar cambios entre los ataques. Cada patrón sigue una serie de estados diferente, y el enemigo está programado para estar ejecutando todo el tiempo una secuencia de patrones. Cuando ocurre algo inesperado para el enemigo, como por ejemplo recibir un disparo, se carga el estado mientras guardo en una variable el estado que se estaba ejecutando anteriormente.
De esta forma, cuando finalice la ejecución del estado de «teletransporte» podemos regresar a la secuencia de ataques justo en el estado donde se había detenido. No he probado cómo sería ejecutar inmediatamente después del teletransporte, una secuencia o patrón diferente, supongo que necesito modificar alguito.
Considero esto como un avance importante en mi forma de tratar los estados de una «IA», sin embargo falta mucho por mejorar, y seguro optimizar…
Esta es la información de los patrones. Una lista contiene varios diccionarios con los datos de ese estado. Sólo los estados de esta máquina trabajan de esa forma porque necesitan una posición específica; en la máquina de estados general que distribuyo como asset, no planteé esta variante.
Efecto de Láser
Gracias al compañero Sebastián D. Mallard de la comunidad de Godot en español (facebook), descubrí el nodo WorldEnvironment. Se usa para realizar efectos de post-procesado en la escena. Con él podemos alterar el ambiente general del juego… un nodo muy grande para únicamente buscar el efecto «glow» y mejorar el láser :’D.
Para que sólo afectara el color del láser, tuve que poner todos los nodos dentro de un CanvasLayer, y ajustar ambas capas en -1.


El vídeo del que aprendí esto es:
Intenté hacer mi propio shader para el efecto de «Glow», pero no tuve éxito. Tengo que estudiar más sobre el tema.
Finite State Machine
Ya que conocen mis pobres avances con el juego anterior, pasemos con los pobres avances del asset «Finite State Machine»:
- Removí los estados «por defecto» ya que eran muy sencillos y prescindibles.
- Ahora el script de la máquina de estados y del estado general, se pueden ubicar como una clase en el creador de nodos.
- Cambié el nombre de la función «update» por «physics».
- La función enter() ahora ejecuta la animación automáticamente según el nombre del estado actual, que se pasa dentro de su primer parámetro llamado «current_state»,
- Ahora el nodo que ejerza de máquina de estados puede asignar su estado inicial desde el inspector. Indicando la ruta del nodo con una variable «export» NodePath.
- Para hacer del cambio de estado algo más rápido, ahora la función «change_state(new_state_string)» está dentro del script State y no tienes que usar el «parent».
- Se cambió la variable «parent» del State, por el nombre «state_machine» que tiene más sentido. Ahora hay que asignarle la máquina mientras se crea el estado, para evitar usar «get_parent()».
- La máquina guarda un registro de hasta tres estados por si es necesario volver directamente al estado anterior.

Dentro de poco estaré publicando la actualización en itch.io, así que pendientes ;).
¡Gracias por leer! Cualquier consejo / duda / critica se acepta en los comentarios.
No Comment! Be the first one.