-
Notifications
You must be signed in to change notification settings - Fork 4
Daemons
Los daemons son rutinas que se ejecutan siempre tras cada turno. Vienen a completar las capacidades más dinámicas y flexibles del framework, junto al método doEachTurn/hazCadaTurno de cada localidad, y las alarmas.
Un daemon es una rutina que se ejecuta siempre tras cada turno. Es típico pensar que cualquier personaje de la aventura tendrá un daemon, si bien por defecto no es así. Los daemons no aceptan ningún parámetro ni retornan nada, en caso de querer visualizar algo será necesario llamar a ctrl.print().
Un ejemplo muy sencillo sería el siguiente. Un pájaro (inalcanzable para el jugador) canta desde la rama de un árbol.
var locBosque = ctrl.lugares.creaLoc(
"bosque",
[ "arboles", "arbol", "pino", "pinos" ],
"Varios pinos te rodean." );
var pnjPajaro = ctrl.personas.creaPersona(
"pájaro",
[ "pajaro", "ave" ],
"Un pequeño pájaro blanco y negro.",
locBosque );
pnjPajaro.ponAlcanzable( false );
ctrl.ponDaemon( "pajaro", pnjPajaro.daemon );
pnjPajaro.daemon = function() {
if ( pnjPajaro.owner == ctrl.lugares.devLocActual() ) {
ctrl.print( "Un pájaro canta desde una alta rama." );
pnjPajaro.di( "pío, pío, pío..." );
}
}
La adición de la funcionalidad del daemon al objeto del personaje del pájaro solo se ha hecho por una cuestión de orden, desde luego se podría haber codificado así:
var locBosque = ctrl.lugares.creaLoc(
"bosque",
[ "arboles", "arbol", "pino", "pinos" ],
"Varios pinos te rodean." );
var pnjPajaro = ctrl.personas.creaPersona(
"pájaro",
[ "pajaro", "ave" ],
"Un pequeño pájaro blanco y negro.",
locBosque );
pnjPajaro.ponAlcanzable( false );
ctrl.ponDaemon( "pajaro", function() {
if ( pnjPajaro.owner == ctrl.lugares.devLocActual() ) {
ctrl.print( "Un pájaro canta desde una alta rama." );
pnjPajaro.di( "pío, pío, pío..." );
}
});
Dado que el método daemon se va a ejecutar constantemente tras cada turno, es necesario comprobar, si se va a comunicar algo al usuario, que se esté en su misma localidad.
Los métodos disponibles en el módulo ctrl son los siguientes:
-
ponDaemon(s, fn)/addDaemon(s, fn): Crea un nuevo daemon fn, con un identificador asociado s, o bien cambia el daemon existente con dicho identificador s por fn.
-
borraDaemon(s)/removeDaemon(s): Borra el daemon con el identificador s asociado.
-
devDaemon(s)/getDaemon(s): Devuelve el daemon asociado al identificador s. El daemon se devuelve como un objeto ctrl.Daemon, compuesto por los atributos id, el identificador del daemon, y fn, la rutina a ejecutar.