X-Git-Url: https://troll.desast.re/troll.git/blobdiff_plain/424174766971a11af0e953a6d5a328d466b8f68b..68040800202e59f4bdda525f75b36b9ec3a3ca93:/src/main/java/com/codingame/game/View.java diff --git a/src/main/java/com/codingame/game/View.java b/src/main/java/com/codingame/game/View.java index 65bacea..cd67f86 100644 --- a/src/main/java/com/codingame/game/View.java +++ b/src/main/java/com/codingame/game/View.java @@ -17,15 +17,19 @@ class View { class Player { Model.Player model; + int colorToken; String nicknameToken; String avatarToken; + double frameRot; + Group avatar; Text stoneCounter; Text message; Sprite castle; Text stone; + Text stoneReminder; void init(com.codingame.game.Player p) { model = p.model; @@ -37,34 +41,29 @@ class View { int x = p0 ? 280 : 1920 - 280; int y = 220; - Rectangle border1 = graphicEntityModule - .createRectangle() - .setWidth(140) - .setHeight(140) - .setX(x - 70) - .setY(y - 70) - .setLineWidth(0) - .setFillColor(colorToken); - - Rectangle border2 = graphicEntityModule - .createRectangle() - .setWidth(120) - .setHeight(120) - .setX(x - 60) - .setY(y - 60) - .setLineWidth(0) - .setFillColor(0xffffff); + Sprite frame = graphicEntityModule.createSprite() + .setImage("frame.png") + .setAnchor(0.5) + .setRotation(frameRot) + .setZIndex(22) + .setTint(colorToken); + + Sprite frameBg = graphicEntityModule.createSprite() + .setImage("frame_bg.png") + .setAnchor(0.5) + .setRotation(frameRot) + .setZIndex(20); Sprite avatarSprite = graphicEntityModule.createSprite() - .setX(x) - .setY(y) - .setZIndex(20) - .setImage(avatarToken) - .setAnchor(0.5) - .setBaseHeight(116) - .setBaseWidth(116); + .setZIndex(21) + .setImage(avatarToken) + .setAnchor(0.5) + .setBaseHeight(116) + .setBaseWidth(116); - avatar = graphicEntityModule.createGroup(border1, border2, avatarSprite); + avatar = graphicEntityModule + .createGroup(frame, frameBg, avatarSprite) + .setX(x).setY(y); Text text = graphicEntityModule.createText(nicknameToken) .setX(x) @@ -74,20 +73,20 @@ class View { .setFillColor(0x7f3f00) .setAnchor(0.5); - stoneCounter = graphicEntityModule.createText("S") + stoneCounter = graphicEntityModule.createText() .setX(x) .setY(y+200) .setZIndex(20) .setFontSize(40) .setFillColor(0x7f3f00) .setAnchor(0.5); + updateStoneCounter(); message = graphicEntityModule.createText() .setX(p0 ? 15 : 1920-15) .setY(680) .setZIndex(1) .setFontSize(40) - .setStrokeColor(0x000000) .setFillColor(0xffbf7f) .setAnchorX(p0 ? 0 : 1) .setAnchorY(1); @@ -108,12 +107,21 @@ class View { .setFillColor(0x12322a) .setAnchor(0.5) .setAlpha(0); + + stoneReminder = graphicEntityModule.createText() + .setX(p0 ? x + 100 : x - 100) + .setY(y) + .setZIndex(20) + .setFontSize(75) + .setFillColor(0x3f3f3f) + .setAnchorX(p0 ? 0 : 1) + .setAnchorY(0.5); } - void setStone() { + void updateStoneCounter() { int stones = model.getStones(); if (stones <= 0) { - stoneCounter.setText("No stones!"); + stoneCounter.setText("Out of stones!"); stoneCounter.setFillColor(0xff7777); } else if (stones == 1) { @@ -124,10 +132,12 @@ class View { stoneCounter.setText(stones + " stones"); } } + void animateStones(int stones) { + String stonesString = new Integer(stones).toString(); stone.setX(castle.getX()); stone.setY(castle.getY() - 100); - stone.setText(new Integer(stones).toString()); + stone.setText(stonesString); stone.setAlpha(1); graphicEntityModule.commitEntityState(0, stone); @@ -143,19 +153,27 @@ class View { stone.setY(troll.getY() - 50, Curve.EASE_IN); stone.setAlpha(0, Curve.EASE_IN); graphicEntityModule.commitEntityState(0.5, stone); + + stoneReminder.setAlpha(0); + graphicEntityModule.commitEntityState(0, stoneReminder); + stoneReminder.setText(stonesString); + graphicEntityModule.commitEntityState(0.25, stoneReminder); + stoneReminder.setAlpha(1); + graphicEntityModule.commitEntityState(0.5, stoneReminder); } + void displayMessage(String msg) { message.setText(msg); graphicEntityModule.commitEntityState(0, message); } void destroy() { - avatar.setRotation(170*Math.PI/180, Curve.ELASTIC); + avatar.setRotation(170*Math.PI/180, Curve.ELASTIC); - graphicEntityModule.commitEntityState(0.5, castle); - castle.setX(castle.getX(), Curve.ELASTIC); - castle.setScaleY(-0.2, Curve.EASE_IN); - } + graphicEntityModule.commitEntityState(0.5, castle); + castle.setX(castle.getX(), Curve.ELASTIC); + castle.setScaleY(-0.2, Curve.EASE_IN); + } } Model model; @@ -166,10 +184,19 @@ class View { void init(Model m) { model = m; + drawBackground(); + + /* + * Random π/2-grained rotation of the avatar frames. Avoid + * having them π/2 apart, though, as one of them is likely + * going to end upside-down and the trick would be revealed. + * And I'd have to "draw" a new frame. Ewww. + */ + p0.frameRot = random.nextInt(4) * Math.PI / 2; p0.init(gameManager.getPlayer(0)); + p1.frameRot = p1.frameRot + (random.nextInt(2) == 1 ? 1 : -1) * Math.PI / 2; p1.init(gameManager.getPlayer(1)); - drawBackground(); drawTroll(); } @@ -194,6 +221,8 @@ class View { .setX(1980/2) .setY(980) .setFillColor(0xffffff); + + moveTroll(); } void moveTroll() {