This project is read-only.

Autor

Tyler Gasve

Última Actualización

30/01/2010

Efecto snake 3D

Experimento buscando efecto snake en 3D y un poco de IA.

Class cuc_Genesis.cs: Creación del gusano y eliminación, selector de IA.
Class cuc_IA.cs: Gestión de IA.
Class cuc.cs: Draw, Animaciones, actualización de la posición de sensores, cálculo de posición e interpolaciones.

Aparecen tres tipos de gusanos, neutro, cazador y food.
Al neutro, su IA le permite no salirse del grid, no chocar con los demás i no quedarse atrapado, en caso de quedar atrapado, intentará liberarse moviendo sus sensores para intentar encontrar un hueco.
El cazador, comparte la misma IA que el anterior pero sabe que puede crecer comiendo, (alargándose tipo snake pero en 3D) le encantan los gusanos del tipo “food”, para ello va a acosarles mientras no se cumpla otra regla IA (IA neutro)
El “food” tiene la misma IA que el neutro solo que sabe que puede morir.

IA
La IA es muy básica, su funcionamiento se limita al recorrido de unas reglas jerárquicas.

1-No colisiona con los demás ni con él mismo.
2-No ha salido del grid.
3-No se han cumplido las anteriores, entonces permitirse ser errante.

Para el cazador se añade otra regla.
3-No aparece ningún gusano “food” en su espacio de detección de comida.
4-No se han cumplido las anteriores, entonces permitirse ser errante.

Siguiendo esta jerarquía de reglas se ve como el gusano prefiere salirse del grid antes que chocar, o el cazador pasar del “food” si conlleva una colisión con otros gusanos.

Las reglas se aplican en función del estado de los dos sensores Ray (antenas) i un sensor periférico sphere para el espacio de detección de comida para el cazador.

Cuando no se cumple la regla 1.
En caso de activarse un sensor rota hacia el lado inverso.
En caso de activarse los dos sensores rotará hacia el menos cercano.
En caso de activarse los dos sensores y determinar que uno de ellos está demasiado próximo entra en estado Stop.

En estado stop se activará lentamente el movimiento de los sensores para intentar salir de ese estado.

Cuando no se cumple la regla 2.
Rotará hacia el dado del sensor menos alejado del grid.

Cuando no se cumple la regla 3.
Dirige el gusano cazador hacia el “food” detectado más próximo. Si lo atrapa crece por la cola (tipo juego snake).

Cuando no se cumple ninguna otra regla pasa a estado errante.

Tanto para determinar el estado de los sensores de antena como la detección de “food” del cazador requiere comprobar el más cercano que activa la situación.
Puede ocurrir que haya más de un “food” en el sensor, entonces debe seguir al más cercano.

Animación.
Efecto snake
Es realmente simple, consiste en la interpolación lineal (Lerp) entre parte 0 (cabeza) después de la nueva posición de desplazamiento, con la parte 1 (pieza cuerpo), el resultado es la nueva posición la de la parte 1, y así sucesivamente la 1 con la 2…hasta llegar a la cola.
Lerp no es mas que: valor1 + (valor2 - valor1) * “mas fuerza para valor1 o valor2 (entre 0 y 1)”
Jugando con ese último valor nos permitirá una animación de contraer y dilatar al gusano, ese efecto no se realiza en estado Stop.

Dependiendo de la forma de las partes de cuerpo también se debe realizar la interpolación para las rotaciones (Gusano Tipo B partes con cubos) siguiendo el mismo proceso Lerp que el anterior manteniendo el valor de “fuerza entre valores” fijo.

Efecto “respiración”
Consiste en el escalado de partes pares e impares sin seguir las mismas pautas.

Acompaña al proyecto una pequeña IDE para poder trastear con el tipo, cantidad, tamaño y partes del los gusanos a fin de ver diferentes resultados, así como ver parte del tinglado, la cámara se controla con el ratón.

Las colisiones se realizan por Ray para los sensores de antena y BoudinSphere para el sensor periférico del cazador.

Espero que os guste!

Descarga

Efecto snake_XNA.rar - ( XNA GS 3.1)

Capturas

snake3dxna.jpg

Video

Last edited Jan 30, 2010 at 10:58 PM by tyler10, version 10

Comments

jbosch Feb 13, 2010 at 8:18 AM 
está guapísimo este ejemplo Tyler