diff --git a/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/VisualComponent.xtend b/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/VisualComponent.xtend index 5754a8a8ee..5361bbc571 100644 --- a/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/VisualComponent.xtend +++ b/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/VisualComponent.xtend @@ -10,6 +10,7 @@ import org.uqbar.project.wollok.game.gameboard.Window import org.uqbar.project.wollok.interpreter.core.WollokObject import static extension org.uqbar.project.wollok.game.helpers.WollokConventionExtensions.* +import static extension org.uqbar.project.wollok.interpreter.nativeobj.WollokJavaConversions.* @Accessors class VisualComponent { @@ -18,18 +19,27 @@ class VisualComponent { List balloonMessages = newArrayList boolean showAttributes = false + + boolean hasText = false + boolean hasTextColor = false + boolean hasImage = false WollokObject wObject WollokObject wPosition new(WollokObject object) { - wObject = object - wObject?.position // Force evaluate position when is added + this(object, object.position) } new(WollokObject object, WollokObject position) { wObject = object wPosition = position + hasText = wObject.understands(TEXT_CONVENTION) + hasTextColor = wObject.understands(TEXT_COLOR_CONVENTION) + hasImage = wObject.understands(IMAGE_CONVENTION) + } + + def checkText() { } def getAttributes() { @@ -58,13 +68,24 @@ class VisualComponent { def void draw(Window window) { window => [ drawMe + drawText drawAttributesIfNecesary drawBalloonIfNecesary ] } def drawMe(Window window) { - window.draw(image, position) + if(hasImage) { + window.draw(image, position) + } + } + + def drawText(Window window) { + if(hasText) { + val text = wObject.call(TEXT_CONVENTION).wollokToJava(String) as String + val color = hasTextColor ? Color.valueOf(wObject.call(TEXT_COLOR_CONVENTION).wollokToJava(String) as String) : DEFAULT_TEXT_COLOR + window.writeText(text, getPosition(), color) + } } def drawAttributesIfNecesary(Window window) { diff --git a/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/gameboard/Window.xtend b/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/gameboard/Window.xtend index 2f902e9eac..870189b5d0 100644 --- a/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/gameboard/Window.xtend +++ b/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/gameboard/Window.xtend @@ -61,6 +61,10 @@ class Window { def doDraw(Texture texture, Position it, ImageSize size) { batch.draw(texture, xinPixels, yinPixels, size.width(texture.width), size.height(texture.height)) } + + def writeText(String text, Position position, Color color) { + write(text, color, position.xinPixels - 80, position.yinPixels + TEXT_SIZE) + } def writeAttributes(String text, Position position, Color color) { val lines = text.split("[\n|\r]").length diff --git a/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/helpers/WollokConventionExtensions.xtend b/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/helpers/WollokConventionExtensions.xtend index 97797c1f1c..07a12ffbe3 100644 --- a/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/helpers/WollokConventionExtensions.xtend +++ b/org.uqbar.project.wollok.game/src/org/uqbar/project/wollok/game/helpers/WollokConventionExtensions.xtend @@ -1,16 +1,22 @@ package org.uqbar.project.wollok.game.helpers +import com.badlogic.gdx.graphics.Color import org.uqbar.project.wollok.game.VisualComponent import org.uqbar.project.wollok.interpreter.core.WollokObject import org.uqbar.project.wollok.interpreter.core.WollokProgramExceptionWrapper import static extension org.uqbar.project.wollok.interpreter.nativeobj.WollokJavaConversions.* + class WollokConventionExtensions { public static val POSITION_CONVENTION = "position" + public static val TEXT_CONVENTION = "text" + public static val TEXT_COLOR_CONVENTION = "textColor" public static val IMAGE_CONVENTION = "image" public static val DEFAULT_IMAGE = "wko.png" + public static val DEFAULT_TEXT_COLOR = Color.BLUE + def static asVisual(WollokObject it) { new VisualComponent(it) } def static asVisualIn(WollokObject it, WollokObject position) { new VisualComponent(it, position) } diff --git a/org.uqbar.project.wollok/src/org/uqbar/project/wollok/interpreter/core/WollokObject.xtend b/org.uqbar.project.wollok/src/org/uqbar/project/wollok/interpreter/core/WollokObject.xtend index 1af0d6056a..c063ecd13c 100644 --- a/org.uqbar.project.wollok/src/org/uqbar/project/wollok/interpreter/core/WollokObject.xtend +++ b/org.uqbar.project.wollok/src/org/uqbar/project/wollok/interpreter/core/WollokObject.xtend @@ -65,7 +65,7 @@ class WollokObject extends AbstractWollokCallable implements EvaluationContext arguments = ECollections.emptyEList if (other.hasNamedParameters) { - arguments = ECollections.asEList(delegatedConstructor.parameters.map [ name ].map [ - argName | other.argumentList.getArgument(argName) + arguments = ECollections.asEList(delegatedConstructor.parameters.map[name].map [ argName | + other.argumentList.getArgument(argName) ]) } else { arguments = other.arguments @@ -174,11 +186,10 @@ class WollokObject extends AbstractWollokCallable implements EvaluationContext).wrapped //TODO: Usar las conversion extensions + (string.getNativeObject(STRING) as JavaWrapper).wrapped // TODO: Usar las conversion extensions } override toString() { @@ -311,14 +322,14 @@ class WollokObject extends AbstractWollokCallable implements EvaluationContext