diff --git a/src/client/haxe/ru/m/tankz/frame/common/PlayerView.hx b/src/client/haxe/ru/m/tankz/frame/common/PlayerView.hx index aa00c12..1de351f 100644 --- a/src/client/haxe/ru/m/tankz/frame/common/PlayerView.hx +++ b/src/client/haxe/ru/m/tankz/frame/common/PlayerView.hx @@ -1,5 +1,6 @@ package ru.m.tankz.frame.common; +import haxework.color.ColorUtil; import ru.m.tankz.control.Control; import haxework.gui.DataView; import haxework.gui.HGroupView; @@ -88,12 +89,14 @@ class TeamSkin implements ISkin { private function onTeamSelect(team:TeamId) { if (player != null) { player.control = Control.BOT; + player.color = 0; player = null; } for (p in data) { if (p.id.team == team && p.control != Control.HUMAN) { player = p; player.control = Control.HUMAN; + player.color = ColorUtil.multiply(state.config.getTeam(team).color, 1.7); break; } } diff --git a/src/client/haxe/ru/m/tankz/render/Render.hx b/src/client/haxe/ru/m/tankz/render/Render.hx index 5ca4f63..cd372d1 100755 --- a/src/client/haxe/ru/m/tankz/render/Render.hx +++ b/src/client/haxe/ru/m/tankz/render/Render.hx @@ -1,5 +1,6 @@ package ru.m.tankz.render; +import promhx.Promise; import flash.display.DisplayObjectContainer; import flash.display.Graphics; import flash.display.Sprite; @@ -170,16 +171,17 @@ class Render extends SpriteView { } } - private function playAnimate(point:Point, animate:OnceAnimate):Void { + private function playAnimate(point:Point, animate:OnceAnimate):Promise { animate.x = point.x - animate.width / 2; animate.y = point.y - animate.height / 2; upperLayer.addChild(animate); - animate.play().then(function(animate:Animate):Void { + return animate.play().then(function(animate:Animate):Void { // ToDo: clean animates on reset if (upperLayer.contains(animate)) { upperLayer.removeChild(animate); } animate.dispose(); + return null; }); } diff --git a/src/common/haxe/ru/m/tankz/Type.hx b/src/common/haxe/ru/m/tankz/Type.hx index 19f20a2..1f0a60d 100644 --- a/src/common/haxe/ru/m/tankz/Type.hx +++ b/src/common/haxe/ru/m/tankz/Type.hx @@ -29,6 +29,10 @@ abstract PlayerId(Array) { @:to public inline function toString():String { return '${team}:${index}'; } + + @:op(X == Y) static public inline function equals(x:PlayerId, y:PlayerId):Bool { + return x.team == y.team && x.index == y.index; + } } typedef PresetId = String; diff --git a/src/common/haxe/ru/m/tankz/game/Game.hx b/src/common/haxe/ru/m/tankz/game/Game.hx index 8b46322..c93ab90 100644 --- a/src/common/haxe/ru/m/tankz/game/Game.hx +++ b/src/common/haxe/ru/m/tankz/game/Game.hx @@ -1,5 +1,6 @@ package ru.m.tankz.game; +import haxework.color.Color; import haxe.ds.Option; import haxe.Timer; import haxework.provider.Provider; @@ -55,6 +56,19 @@ class Game { return teams[playerId.team].players[playerId.index]; } + public function getPlayerColor(playerId:PlayerId):Color { + var player = getPlayer(playerId); + var team = getTeam(playerId.team); + var color = team.config.color; + if (!player.config.color.zero) { + color = player.config.color; + } + if (!player.state.color.zero) { + color = player.state.color; + } + return color; + } + private function buildTank(task:SpawnTask):Tank { var player = getPlayer(task.playerId); var tankType:TankType = if (task.tankType != null) { @@ -66,7 +80,7 @@ class Game { } var tankConfig:TankConfig = config.getTank(tankType); var tank = new Tank(task.playerId, tankConfig); - tank.color = player.config.color.zero ? teams[task.playerId.team].config.color : player.config.color; + tank.color = getPlayerColor(player.id); tank.bonus = Math.random() < player.config.bonus; applyPoint(tank, task.point); if (player.config.protect > 0) { @@ -96,7 +110,7 @@ class Game { teams[team.id] = team; for (player in team.players.iterator()) { var controlType:ControlType = Control.BOT; - var nextPlayer:PlayerState = Lambda.find(players, function(p) return p.id != null && p.id.team == team.id); + var nextPlayer:PlayerState = Lambda.find(players, function(p) return p.id == player.id); if (nextPlayer != null) { player.state = nextPlayer; players.remove(nextPlayer); diff --git a/src/common/haxe/ru/m/tankz/game/GameState.hx b/src/common/haxe/ru/m/tankz/game/GameState.hx index 4c58bb8..5b30579 100644 --- a/src/common/haxe/ru/m/tankz/game/GameState.hx +++ b/src/common/haxe/ru/m/tankz/game/GameState.hx @@ -1,5 +1,6 @@ package ru.m.tankz.game; +import haxework.color.Color; import ru.m.tankz.bundle.IConfigBundle; import ru.m.tankz.config.Config; import ru.m.tankz.control.Control; @@ -9,6 +10,7 @@ class PlayerState { public var id:PlayerId; public var tank:TankType; public var control:ControlType; + public var color:Color; public var life:Int; public var score:Int; public var frags:Int;