No tengo ni idea de GO, así que no sé muy bien cómo va; y la verdad es que me pierdo con eso del YIELD y las corrutinas...
Los mensajes no son GOTOs, ya que modifican el flujo del programa. Es más, es que en mi lenguaje no se definen flujos de ejecución, en el sentido estricto. Tanto las respuestas a mensajes como las descripciones de los estados se ejecutan en un
tick o, quizá mejor dicho, en una iteración del bucle principal de juego. Es decir:
Código Delphi
[-]
PROCEDURE BucleJuego;
BEGIN
REPEAT
ObtieneEntradasJugador;
ActualizaEstadosActores;
DespachaMensajesPendientes;
DibujaNuevoFotograma;
UNTIL FinJuego;
END;
ActualizaEstadosActores y
DespachaMensajesPendientes son los puntos de entrada al intérprete del lenguaje. En el primero se ejecuta la rutina del estado actual del actor y en el segundo se despachan los mensajes de la cola de pendientes.
Hay que tener en cuenta, también, que puede establecerse un retardo al envío de un mensaje. Es decir, que pueden funcionar como una especie de "alarma". Por ejemplo, cuando el minero Bob llega a casa avisa a su esposa Helen; la respuesta podría ser:
Código:
ACTOR Helen IS Wife
...
MESSAGE EnCasa
IF SENDER = Esposo
Msg "Hi hun. I'll prepare your dinna'."
SEND MESSAGE CenaLista TO SELF DELAY 100
END IF
END MESSAGE
MESSAGE CenaLista
IF SENDER = SELF
Msg "Hun, her' are your dinna'."
SEND MESSAGE CenaLista TO Esposo
END IF
END
...
END ACTOR
Como ves, las respuestas a estos mensajes no modifican el estado de la esposa, por lo que no modifican el "flujo" del programa.
No sé si esto aclara algo. Espero que sí.