[core] add color to PlayerState

This commit is contained in:
2019-03-21 12:22:01 +03:00
parent e6f9aa8ba1
commit c6639e11b1
5 changed files with 29 additions and 4 deletions

View File

@@ -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<TeamButton> {
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;
}
}

View File

@@ -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<Dynamic> {
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;
});
}

View File

@@ -29,6 +29,10 @@ abstract PlayerId(Array<Dynamic>) {
@: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;

View File

@@ -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);

View File

@@ -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;