miércoles, 28 de marzo de 2012

Semáforo programado en Second Life [Grupo 2]

Para construir el típico semáforo con tres luces (verde, ámbar y rojo) basta con construir en un sandbox cuatro objetos básicos, los cuales dependerán del diseño del semáforo. Nosotros, procedimos a construir la carcasa del semáforo como un cubo, haciéndolo más alto e incrustándole tres esferas equidistantes dejándolas sobresalir más o menos la mitad.

Antes de enlazar los objetos, creamos cuatro scripts: uno por cada luz y otro para el semáforo en sí. Los tres primeros que se describen a continuación corresponderían a cada una de las esferas de nuestro semáforo. Si os fijais, vereis que son iguales, pues sólo cambia el color de la luz en cuestión.

El funcionamiento de la luz es definir un manejador de escucha para encender o apagar la luz en cuanto el objeto reciba un mensaje en el canal 8100 (el 0 es el público, usamos el 8100 como podría ser cualquier otro) con el color que corresponda. Mientras la luz no está encendida, damos una mayor transparencia a la esfera para que, junto con la luminosidad (PRIM_FULLBRIGHT) contraste más la luz cuando esté apagada con encendida. Comentar y descomentar las líneas de código que proceda en función si el PRIM corresponde a la bombilla roja, ámbar o verde.



SCRIPT CONTENEDOR DEL SEMÁFORO

Finalmente necesitamos al contenedor del semáforo, en nuestro caso sería la carcasa donde se ubican las luces, para que coordine el encendido y apagado de las luces, para que no se de la situación, por ejemplo, de que hay dos bombillas encendidas a la vez. Tras crear el objeto, creamos un bucle infinito (While (TRUE)) para que el semáforo funcione indefinidamente.
Dentro de este bucle, encendemos la luz naranja durante 3 segundos (llSleep pausa la ejecución del script una cantidad de segundos de forma aproximada) para después la roja y luego la verde y volver a comenzar en naranja en una nueva iteración.
Mediante llWhisper emitimos un mensaje en el canal 8100, el cual será capturado por el manejador de escucha de las luz que corresponda, de forma que si el mensaje "rojo", "verde" o "ambar" es el que se espera recibir se ejecuta el código dentro del evento listen, dónde se comprueba si la luz está encendida o no para en consecuencia, apagarla o encenderla. La única desventaja de utilizar llWhisper para la comunicación entre objetos es que su alcance es de 10 metros, por lo que no podría haber dos semáforo en el mismo radio de comunicación que utilicen el mismo sistema de comunicación por el mismo canal, sino el funcionamiento no sería el correcto ya que se interferirían entre sí.


Por último unas fotillos del semáforo funcionando, y para cualquier duda no dudeis en comentar la entrada.




No hay comentarios:

Publicar un comentario