uqbar-project / wollok

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

#1984 (texto en visual objects) y #1985 (objetos invisibles) #1986

Closed lgassman closed 3 years ago

lgassman commented 3 years ago

Definiendo un método el método text() en un visual object se agrega el texto por encima de la imagen. El color por default es Azul, pero se puede definir el metodo textColor() para redefinirlo. textColor debe devolver un string con un valor RGBA en hexa: "rrggbbaa" https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/graphics/Color.html.

En el momento de la construcción se determina si el objecto entiende esos mensajes o no para saber si en cada ciclo se debe dibujar el texto o no.

Con este requirimiento la presencia del método image() pasa a ser opcional, ya que se puede querer un objeto visual que sea solo texto. Se cambió el comportamiento para que no se dibuje la imagen default en caso de que no se defina el método image()

Si no existe ni el método text, ni el método image entonces el objeto es invisible y se puede utilizar para disparar colisiones.

coveralls commented 3 years ago

Coverage Status

Coverage increased (+0.09%) to 83.932% when pulling 89b20cabc5ab6da69d3289a86689eb935bebbda8 on add#1984#1985_text_on_visual_objects into 0ac87bb4be8732199cf70890ff797c8e84864de1 on dev.

lgassman commented 3 years ago

Me parece que es una funcionalidad piola, hasta ahora vi que muchos en los juegos armaban imágenes con las letras, a futuro podríamos soportar diferentes tipos de fuente (typeface). Me suena a que es algo interesante para explorar.

La fuente es fácil también de hacerlo, pero me pareció un poco excesivo llenar el visualObject con tantos métodos. También se podría jugar con la alineación, o los márgenes (que están medio hardcoded por ahí). No se si vale la pena ahora.

Me hubiera gustado verlo en acción con un gif, no se Nahue (@PalumboN) qué te parece, si lo charlaste con Leo en UNQ.

Si me mandás un link que diga como se hacen esos gifs te hago uno muy bonito

lgassman commented 3 years ago

texto-en-visual-object

lgassman commented 3 years ago
import wollok.game.*

object colores {

    const property verde = "00FF00FF"
    const property rojo = "FF0000FF"

}

//solo imagen
object dodain {

    const property image = "dodain.png"
    var property position = game.at(3, 3)

}

//texto, imagen y color
object nahuel {

    const property image = "nahuel.png"
    var property position = game.at(7, 3)
    var visitante = null

    method visitadoPor(alguien) {
        visitante = alguien
    }

    method visitado() {
        return visitante != null
    }

    method text() {
        return if (self.visitado()) "¡Qué piola! ¡Vino " + visitante.toString() + "!" else "¡Qué bajón!"
    }

    method textColor() {
        return if (self.visitado()) colores.verde() else colores.rojo()
    }

}

object soloTexto {

    const property position = game.at(5, 9)
    const property text = "¿A dónde vas Dodain?"

}

object invisible {

    const property position = game.at(5, 3)

}

program programa {
    game.height(10)
    game.width(10)
    game.addVisualCharacter(dodain)
    game.addVisual(nahuel)
    game.addVisual(soloTexto)
    game.addVisual(invisible)
    game.onCollideDo(invisible, { alguien => game.say(alguien, "¿Qué fue eso?") })
    game.onCollideDo(nahuel, { alguien => nahuel.visitadoPor(alguien) })
    game.start()
}
lgassman commented 3 years ago

Ahi hice lo de la varProperty. Resulta que la colección de properties tenía todas las properties (const y var) y luego habia una coleccion con solo las const. Así que lo que hice fue hacer también la colección que tiene solo las var. Un poco me jode que la coleccion de properties podría ser calculada a partir de las otras dos. Pero como es algo que se invoca mucho lo dejé así. Por otro lado hice también el programa de ejemplo, con el gif, y también le metí un test case para los cambios en wollokObject.