[common] PlayerState update
This commit is contained in:
@@ -2,7 +2,6 @@ package ru.m.tankz.game;
|
|||||||
|
|
||||||
import haxe.ds.Option;
|
import haxe.ds.Option;
|
||||||
import haxe.Timer;
|
import haxe.Timer;
|
||||||
import haxework.color.Color;
|
|
||||||
import haxework.provider.Provider;
|
import haxework.provider.Provider;
|
||||||
import haxework.signal.Signal;
|
import haxework.signal.Signal;
|
||||||
import ru.m.geom.Point;
|
import ru.m.geom.Point;
|
||||||
@@ -120,17 +119,10 @@ class Game extends GameDispatcher {
|
|||||||
var team:Team = new Team(teamConfig, teamPoints, state.teams[teamConfig.id]);
|
var team:Team = new Team(teamConfig, teamPoints, state.teams[teamConfig.id]);
|
||||||
teams[team.id] = team;
|
teams[team.id] = team;
|
||||||
for (player in team.players.iterator()) {
|
for (player in team.players.iterator()) {
|
||||||
var controller:Controller = Controller.BOT("hard");
|
if (player.state.controller == NONE) {
|
||||||
var playerState = state.players[player.id];
|
player.state.controller = BOT("hard");
|
||||||
if (playerState != null) {
|
|
||||||
player.state = playerState;
|
|
||||||
switch (playerState.controller) {
|
|
||||||
case HUMAN(_):
|
|
||||||
controller = playerState.controller;
|
|
||||||
case _:
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
var control = controlFactory.build(player.id, controller);
|
var control = controlFactory.build(player.id, player.state.controller);
|
||||||
L.d(TAG, 'control(${player.id} - ${control})');
|
L.d(TAG, 'control(${player.id} - ${control})');
|
||||||
if (control != null) {
|
if (control != null) {
|
||||||
player.control = control;
|
player.control = control;
|
||||||
|
|||||||
@@ -6,38 +6,63 @@ import ru.m.tankz.config.Config;
|
|||||||
import ru.m.tankz.control.Control;
|
import ru.m.tankz.control.Control;
|
||||||
import ru.m.tankz.Type;
|
import ru.m.tankz.Type;
|
||||||
|
|
||||||
class PlayerState {
|
class State {
|
||||||
public var id:PlayerId;
|
|
||||||
public var tank:TankType;
|
|
||||||
public var controller:Controller;
|
|
||||||
public var color:Color;
|
|
||||||
public var life:Int;
|
|
||||||
public var score:Int;
|
public var score:Int;
|
||||||
public var frags:Int;
|
public var frags:Int;
|
||||||
public var shots:Int;
|
public var shots:Int;
|
||||||
public var hits:Int;
|
public var hits:Int;
|
||||||
|
|
||||||
public function new(id:PlayerId, controller:Controller = null, life:Int = 0) {
|
public function new() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add(state:State) {
|
||||||
|
score += state.score;
|
||||||
|
frags += state.frags;
|
||||||
|
shots += state.shots;
|
||||||
|
hits += state.hits;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function reset() {
|
||||||
|
score = 0;
|
||||||
|
frags = 0;
|
||||||
|
shots = 0;
|
||||||
|
hits = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PlayerState extends State {
|
||||||
|
public var id:PlayerId;
|
||||||
|
public var tank:TankType;
|
||||||
|
public var controller:Controller;
|
||||||
|
public var color:Color;
|
||||||
|
public var life:Int;
|
||||||
|
public var total:State;
|
||||||
|
|
||||||
|
public function new(id:PlayerId, controller:Controller = null) {
|
||||||
|
super();
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.tank = null;
|
this.tank = null;
|
||||||
this.controller = controller == null ? Controller.NONE : controller;
|
this.controller = controller == null ? Controller.NONE : controller;
|
||||||
this.life = life;
|
this.life = 0;
|
||||||
this.score = 0;
|
this.total = new State();
|
||||||
this.frags = 0;
|
}
|
||||||
this.shots = 0;
|
|
||||||
this.hits = 0;
|
override public function reset() {
|
||||||
|
total.add(this);
|
||||||
|
super.reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TeamState {
|
class TeamState {
|
||||||
public var id:TeamId;
|
public var id:TeamId;
|
||||||
public var players:Array<PlayerState>;
|
public var players:Map<Int, PlayerState>;
|
||||||
public var life:Int;
|
public var life:Int;
|
||||||
|
|
||||||
public function new(id:TeamId, life:Int = 0) {
|
public function new(id:TeamId) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.life = life;
|
this.life = 0;
|
||||||
this.players = [];
|
this.players = new Map();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,13 +86,13 @@ class GameState {
|
|||||||
this.teams = new Map();
|
this.teams = new Map();
|
||||||
this.players = new Map();
|
this.players = new Map();
|
||||||
for (team in preset.teams) {
|
for (team in preset.teams) {
|
||||||
var teamState = new TeamState(team.id, team.life);
|
var teamState = new TeamState(team.id);
|
||||||
for (player in team.players) {
|
for (player in team.players) {
|
||||||
var playerId = new PlayerId(team.id, player.index);
|
var playerId = new PlayerId(team.id, player.index);
|
||||||
var controller = player.human ? HUMAN(player.index) : NONE;
|
var controller = player.human ? HUMAN(player.index) : NONE;
|
||||||
var playerState = new PlayerState(playerId, controller, player.life);
|
var playerState = new PlayerState(playerId, controller);
|
||||||
players[playerId] = playerState;
|
players[playerId] = playerState;
|
||||||
teamState.players.push(playerState);
|
teamState.players[player.index] = playerState;
|
||||||
}
|
}
|
||||||
teams[team.id] = teamState;
|
teams[team.id] = teamState;
|
||||||
}
|
}
|
||||||
@@ -117,6 +142,6 @@ class GameState {
|
|||||||
|
|
||||||
public function getPlayerColor(id:PlayerId):Color {
|
public function getPlayerColor(id:PlayerId):Color {
|
||||||
var playerState = players[id];
|
var playerState = players[id];
|
||||||
return playerState == null || playerState.color.zero ? config.getColor(id) : playerState.color;
|
return (playerState == null || playerState.color.zero) ? config.getColor(id) : playerState.color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ class Player {
|
|||||||
this.id = new PlayerId(teamId, config.index);
|
this.id = new PlayerId(teamId, config.index);
|
||||||
this.control = null;
|
this.control = null;
|
||||||
this.state = state == null ? new PlayerState(id) : state;
|
this.state = state == null ? new PlayerState(id) : state;
|
||||||
|
this.state.reset();
|
||||||
|
this.state.life = config.life;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function set_tankId(value:Int):Int {
|
private function set_tankId(value:Int):Int {
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ class Team {
|
|||||||
this.config = config;
|
this.config = config;
|
||||||
this.players = new Map();
|
this.players = new Map();
|
||||||
for (playerConfig in config.players) {
|
for (playerConfig in config.players) {
|
||||||
var player:Player = new Player(id, playerConfig);
|
var playerState = state == null ? null : state.players[playerConfig.index];
|
||||||
|
var player:Player = new Player(id, playerConfig, playerState);
|
||||||
this.players[playerConfig.index] = player;
|
this.players[playerConfig.index] = player;
|
||||||
}
|
}
|
||||||
this.spawner = new Spawner(config, points);
|
this.spawner = new Spawner(config, points);
|
||||||
|
|||||||
Reference in New Issue
Block a user