uqbar-project / wollok

Wollok Programming Language
GNU General Public License v3.0
60 stars 16 forks source link

Que el onCollideDo no se ejecute muchas veces ante un error #2016

Open PalumboN opened 2 years ago

PalumboN commented 2 years ago

Actualmente el mensaje game.onCollideDo fue pensado para ejecutar el bloque una única vez por colisión.

Pero esto no pasa cuando el programa tiene un error (bastante común cuando estudiantes están intentado crear sus primero juegos) y el bloque lanza una excepción.

Dejo este ejemplo:

import wollok.game.*

class Text {
    const property image = "wko.png"
    const property text
    var property position
}

program abc {
    const principal = new Text(text = "P", position = game.origin())
    game.addVisualCharacter(principal)
    game.addVisual(new Text(text = "X", position = game.center()))
    game.onCollideDo(principal, { algo => throw new Exception(message="ERROR") })
    game.start()
}

Si se hace colisionar los objetos y se observa la consola queda en evidencia que sigue intentando ejecutar el bloque hasta que deje de colisionar.

Esto además genera un problema de usabilidad porque la excepción muchas veces crea un globo de diálogo que se muestra en el juego por unos segundos, el problema es que estos carteles se "acumulan en serie", por lo que el globo de diálogo no desaparece por mucho tiempo.

PalumboN commented 2 years ago

@ezequielPereyra @AngeliMatias hay que chequear si esto no pasa también en la versión web... y cargar le issue en TS si es necesario también (se puede linkear este directamente).