Hola,
Joé, vaya metedura de pata, efectivamente, no tiene sentido preAction() = function()..., tiene que ser sin el primer par de paréntesis. Ainnnsss... Desgraciadamente, estos días estoy sin internet en casa.
edblopez escribió:
mmm y ahora que me doy cuenta, creo que no he previsto el caso de entrar en el desvan, soltar la linterna y salir fuera....
Efectivamente, por eso yo te diría que movieras el código del preGo() de locSalaSuperior al preExamine() de locDesvan. Otra mejora es no utilizar jugador.tiene(), sino ctrl.isPresent(), que controla si el jugador lleva la linterna, o si esta está en la localidad actual (un atajo conveniente de objLintera.owner === ctrl.lugares.devLocActual() || objLinterna.owner === ctrl.personas.devJugador()).
Por otra parte, todo eso ya lo haces en el preAction() del jugador. Y la alternativa es repetir el código. Podemos invocar dicha función, y ver si devuelve algo. En ese caso, se ha llegado con la linterna o algo así.
Código:
locDesvan.preExamine = function() {
var toret = ctrl.personas.devJugador().preAction();
if ( toret === "" ) {
toret = locDesvan.desc;
}
return toret;
}
Por otra parte, tendríamos un problema en el caso de que el jugador apagase la linterna estando en el desván, porque en ese caso se le llevaría a locSalaSuperior y no podría volver para encenderla.
Código:
objLinterna.preApaga = function() {
var toret = "La has apagado.";
if ( ctrl.lugares.devLocActual() === locDesvan ) {
toret = "¿Con lo oscuro que está?¡Ni de broma!";
} else {
objLinterna.encendida = false;
}
return toret;
}
Bueno, enciende y apaga no son acciones que "traiga" la librería, supongo que las habrás creado tú.