From f10da93a1214e9e75d086c56a0f5b3654421aafd Mon Sep 17 00:00:00 2001 From: shmyga Date: Fri, 2 Aug 2019 17:48:27 +0300 Subject: [PATCH] [client] add result styles --- src/client/haxe/ru/m/tankz/AppTheme.hx | 18 ++++++++++++++++++ src/client/haxe/ru/m/tankz/view/ResultFrame.hx | 4 +--- .../ru/m/tankz/view/result/ResultPlayerView.hx | 8 +++++--- .../m/tankz/view/result/ResultPlayerView.yaml | 3 ++- src/common/haxe/ru/m/tankz/game/GameState.hx | 9 +++++++-- 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/client/haxe/ru/m/tankz/AppTheme.hx b/src/client/haxe/ru/m/tankz/AppTheme.hx index ab3e6ae..7254c27 100644 --- a/src/client/haxe/ru/m/tankz/AppTheme.hx +++ b/src/client/haxe/ru/m/tankz/AppTheme.hx @@ -1,5 +1,6 @@ package ru.m.tankz; +import haxework.color.Color; import haxework.view.utils.DrawUtil.FillType; import flash.text.TextFormatAlign; import haxework.color.Color; @@ -112,6 +113,23 @@ class AppTheme extends Theme { "skin.fillType" => FillType.DEFAULT, ])); + var green:Color = 0x00ff00; + var red:Color = 0xff0000; + register(new Style("result.winner", [ + "skin.border.color" => green, + ], ["light"])); + register(new Style("result.loser", [ + "skin.border.color" => red, + ], ["light"])); + register(new Style("player.winner", [ + "skin.background.alpha" => 0.1, + "skin.background.color" => green, + ])); + register(new Style("player.loser", [ + "skin.background.alpha" => 0.1, + "skin.background.color" => red, + ])); + registerButton("settings", "cog-solid.svg"); registerButton("close", "times-circle-solid.svg"); registerButton("next", "arrow-alt-circle-right-solid.svg"); diff --git a/src/client/haxe/ru/m/tankz/view/ResultFrame.hx b/src/client/haxe/ru/m/tankz/view/ResultFrame.hx index 14d4bba..5f86693 100644 --- a/src/client/haxe/ru/m/tankz/view/ResultFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/ResultFrame.hx @@ -33,9 +33,7 @@ using ru.m.tankz.view.ViewUtil; override public function onShow(data:Result):Void { result = data; - var players = result.state.humans; - players.sort(function(a, b) return a.id.compare(b.id)); - resultView.data = players; + resultView.data = result.state.humans; for (view in resultView.dataViews) { view.winner = view.data.id.team == data.winner; } diff --git a/src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.hx b/src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.hx index f01b9e4..9b547a5 100644 --- a/src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.hx +++ b/src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.hx @@ -2,13 +2,14 @@ package ru.m.tankz.view.result; import haxework.view.data.DataView; import haxework.view.form.LabelView; +import haxework.view.group.HGroupView; import haxework.view.group.VGroupView; -import haxework.view.skin.SpriteSkin; import ru.m.tankz.game.GameState; import ru.m.tankz.view.common.TankView; @:template class ResultPlayerView extends VGroupView { + @:view("player") var playerView:HGroupView; @:view("tank") var tankView:TankView; @:view("title") var titleView:LabelView; @:view("score") var scoreView:LabelView; @@ -19,7 +20,7 @@ import ru.m.tankz.view.common.TankView; private function set_data(value:PlayerState):PlayerState { data = value; - titleView.text = data.name; + titleView.text = data.name != null ? '${data.id.format()} * ${data.name}' : data.id.format(); scoreView.text = '${data.score}$'; tankView.color = value.color; fragsView.data = data.frags; @@ -29,7 +30,8 @@ import ru.m.tankz.view.common.TankView; private function set_winner(value:Bool):Bool { winner = value; - cast(skin, SpriteSkin).border.color = value ? 0x00ff00 : 0xff0000; + style = winner ? "result.winner" : "result.loser"; + playerView.style = winner ? "player.winner" : "player.loser"; return winner; } diff --git a/src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.yaml b/src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.yaml index f65739a..2ec2657 100644 --- a/src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.yaml +++ b/src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.yaml @@ -6,7 +6,8 @@ geometry.width: 50% geometry.height: 100% layout.hAlign: center views: - - $type: haxework.view.group.HGroupView + - id: player + $type: haxework.view.group.HGroupView geometry.width: 100% layout.vAlign: middle views: diff --git a/src/common/haxe/ru/m/tankz/game/GameState.hx b/src/common/haxe/ru/m/tankz/game/GameState.hx index e2c6731..167106b 100644 --- a/src/common/haxe/ru/m/tankz/game/GameState.hx +++ b/src/common/haxe/ru/m/tankz/game/GameState.hx @@ -110,12 +110,17 @@ class GameState { } public function get_humans():Array { - return controls.filter(function(control:PlayerControl):Bool { + var humanControls = controls.filter(function(control:PlayerControl):Bool { return switch control.controller { case HUMAN(_): true; case _: false; } - }).map(function(control:PlayerControl):PlayerState { + }); + humanControls.sort(function(a, b) return switch [a.controller, b.controller] { + case [HUMAN(i), HUMAN(j)]: i - j; + case _: 0; + }); + return humanControls.map(function(control:PlayerControl):PlayerState { return players.get(control.playerId); }); }