uqbar-project / wollok-ts-cli

Wollok Command Line Interface
GNU General Public License v3.0
9 stars 6 forks source link

Los domain exception no se están capturando en el movimiento del character #156

Closed fdodino closed 5 months ago

fdodino commented 5 months ago

Ver ejemplo del Sokoban, sí funciona para el evento del teclado en el Tamagotchi

errorSokoban

PalumboN commented 5 months ago

@fdodino esto no se soluciona con lo que hablamos el otro día?

fdodino commented 5 months ago

@fdodino esto no se soluciona con lo que hablamos el otro día?

Entiendo que no, porque yo le puse como source el personaje. Me parece que debe estar ocurriendo en otro evento.

PalumboN commented 5 months ago

En ese juego al final el problema era el try catch https://github.com/wollok/sokobanGame/blob/23a69379dde279b894d74bb22846b284682a3e6e/sokoban.wlk#L8-L15

@fdodino confirmás?

fdodino commented 5 months ago

En ese juego al final el problema era el try catch https://github.com/wollok/sokobanGame/blob/23a69379dde279b894d74bb22846b284682a3e6e/sokoban.wlk#L8-L15

@fdodino confirmás?

no, el problema es que el personaje no dice nada en los dos lugares donde se tira la excepción:

    method validarLugarLibre(direccion) {
        const posAlLado = direccion.siguiente(position)
        const lugarLibre = game.getObjectsIn(posAlLado).all(
            { obj => obj.puedePisarte(self) }
        )
        if (!lugarLibre) {
            throw new DomainException(message = "Algo traba la caja.", source = sokoban)
        }
    }

        method movete(direccion) {
        throw new DomainException(message = "No puedes mover las paredes.")
    }

Lo que recibimos es un catch. Lo peor es que si sacás el try/catch la excepción se pierde, ni se informa:

        game.whenCollideDo(sokoban, { elemento => sokoban.empuja(elemento) })

yo miraría la implementación de todos los métodos que nos permitan definir comportamiento en un juego, sospecho que hay un temilla ahí de no atrapar la excepción antes de que salte (al igual que pasaba en el LSP).

PalumboN commented 5 months ago

Mmmm pero yo probé ese día relanzando la excepción y me funcionó (la línea que digo evita que la excepción llegue a game) No parecía ser un error de game sino de cómo está hecho el juego.

Miremoslo juntos!

fdodino commented 5 months ago

Mmmm pero yo probé ese día relanzando la excepción y me funcionó (la línea que digo evita que la excepción llegue a game) No parecía ser un error de game sino de cómo está hecho el juego.

Miremoslo juntos!

Dale!

PalumboN commented 5 months ago

Ahí pudimos solucionar el issue y abrimos otros 💪