[client] add death game panel
This commit is contained in:
@@ -37,10 +37,10 @@ import ru.m.tankz.preset.DotaGame;
|
||||
}
|
||||
|
||||
public function onShow() {
|
||||
resultView.data = resultState.players.filter(function(player) return switch player.controller {
|
||||
resultView.data = Lambda.array(Lambda.filter(resultState.players, function(player:PlayerState):Bool return switch player.controller {
|
||||
case HUMAN(_): true;
|
||||
case _: false;
|
||||
});
|
||||
}));
|
||||
levelLabel.text = 'Level ${resultState.level}';
|
||||
nextButton.visible = state != null;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package ru.m.tankz.view.common;
|
||||
|
||||
import haxework.resources.IResources;
|
||||
import haxework.view.ButtonView;
|
||||
import haxework.view.GroupView;
|
||||
import haxework.resources.IResources;
|
||||
import ru.m.tankz.bundle.IConfigBundle;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.control.Control.Controller;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
@@ -33,13 +32,6 @@ class LevelFrame extends GroupView {
|
||||
if (preset != value || true) { // ToDo:
|
||||
preset = value;
|
||||
state = new GameState(gameType, preset.id);
|
||||
for (team in value.teams) {
|
||||
for (player in team.players) {
|
||||
var playerId = new PlayerId(team.id, player.index);
|
||||
var controller = player.human ? HUMAN(player.index) : NONE;
|
||||
state.players.push(new PlayerState(playerId, controller, player.life));
|
||||
}
|
||||
}
|
||||
}
|
||||
return preset;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import ru.m.tankz.view.common.LifeView;
|
||||
|
||||
public function onGameStart(state:GameState):Void {
|
||||
level.text = 'Level ${state.level}';
|
||||
players.data = state.players;
|
||||
players.data = Lambda.array(state.players);
|
||||
}
|
||||
|
||||
public function onGameChange(state:GameState):Void {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package ru.m.tankz.view.death;
|
||||
|
||||
import Lambda;
|
||||
import haxework.view.ButtonView;
|
||||
import haxework.view.DataView;
|
||||
import haxework.view.frame.FrameSwitcher;
|
||||
@@ -19,7 +20,7 @@ import ru.m.tankz.view.common.PlayerView;
|
||||
private function onShow():Void {
|
||||
gameType = DeathGame.TYPE;
|
||||
levels.data = [for (i in 0...config.game.levels) i];
|
||||
players.data = [for (i in 0...2) state.players];
|
||||
players.data = [for (i in 0...2) Lambda.array(state.players)];
|
||||
}
|
||||
|
||||
private function playerViewFactory(index:Int, data:Array<PlayerState>):PlayerView {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package ru.m.tankz.view.dota;
|
||||
|
||||
import Lambda;
|
||||
import haxework.view.ButtonView;
|
||||
import haxework.view.DataView;
|
||||
import haxework.view.frame.FrameSwitcher;
|
||||
@@ -19,7 +20,7 @@ import ru.m.tankz.preset.DotaGame;
|
||||
private function onShow():Void {
|
||||
gameType = DotaGame.TYPE;
|
||||
levels.data = [for (i in 0...config.game.levels) i];
|
||||
players.data = [for (i in 0...2) state.players];
|
||||
players.data = [for (i in 0...2) Lambda.array(state.players)];
|
||||
}
|
||||
|
||||
private function playerViewFactory(index:Int, data:Array<PlayerState>):PlayerView {
|
||||
|
||||
@@ -128,20 +128,18 @@ class Game extends GameDispatcher {
|
||||
engine.map.setData(level.data);
|
||||
teams = new Map<TeamId, Team>();
|
||||
var controlFactory:IControlFactory = Provider.build(IControlFactory);
|
||||
var players = state.players.slice(0);
|
||||
for (teamConfig in state.preset.teams) {
|
||||
var teamPoints = points.filter(function(p:SpawnPoint) return p.team == teamConfig.id);
|
||||
var team:Team = new Team(teamConfig, teamPoints);
|
||||
var team:Team = new Team(teamConfig, teamPoints, state.teams[teamConfig.id]);
|
||||
teams[team.id] = team;
|
||||
for (player in team.players.iterator()) {
|
||||
var controller:Controller = Controller.BOT("hard");
|
||||
var nextPlayer:PlayerState = Lambda.find(players, function(p) return p.id == player.id);
|
||||
if (nextPlayer != null) {
|
||||
player.state = nextPlayer;
|
||||
players.remove(nextPlayer);
|
||||
switch (nextPlayer.controller) {
|
||||
var playerState = state.players[player.id];
|
||||
if (playerState != null) {
|
||||
player.state = playerState;
|
||||
switch (playerState.controller) {
|
||||
case HUMAN(_):
|
||||
controller = nextPlayer.controller;
|
||||
controller = playerState.controller;
|
||||
case _:
|
||||
}
|
||||
}
|
||||
@@ -154,8 +152,6 @@ class Game extends GameDispatcher {
|
||||
}
|
||||
team.spawner.runner = spawn;
|
||||
}
|
||||
// ToDo:
|
||||
state.teams = [for (team in teams.iterator()) team.state];
|
||||
|
||||
for (team in teams.iterator()) {
|
||||
for (player in team.players.iterator()) {
|
||||
|
||||
@@ -31,11 +31,13 @@ class PlayerState {
|
||||
|
||||
class TeamState {
|
||||
public var id:TeamId;
|
||||
public var players:Array<PlayerState>;
|
||||
public var life:Int;
|
||||
|
||||
public function new(id:TeamId, life:Int = 0) {
|
||||
this.id = id;
|
||||
this.life = life;
|
||||
this.players = [];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,8 +46,8 @@ class GameState {
|
||||
public var type:GameType;
|
||||
public var presetId:PresetId;
|
||||
public var level:Int;
|
||||
public var players:Array<PlayerState>;
|
||||
public var teams:Array<TeamState>;
|
||||
public var players:Map<String, PlayerState>;
|
||||
public var teams:Map<TeamId, TeamState>;
|
||||
public var preset(get, null):GamePreset;
|
||||
public var config(get, null):Config;
|
||||
|
||||
@@ -55,8 +57,24 @@ class GameState {
|
||||
this.type = type;
|
||||
this.presetId = presetId;
|
||||
this.level = level;
|
||||
this.players = state == null ? [] : state.players;
|
||||
this.teams = state == null ? [] : state.teams;
|
||||
if (state == null) {
|
||||
this.teams = new Map();
|
||||
this.players = new Map();
|
||||
for (team in preset.teams) {
|
||||
var teamState = new TeamState(team.id, team.life);
|
||||
for (player in team.players) {
|
||||
var playerId = new PlayerId(team.id, player.index);
|
||||
var controller = player.human ? HUMAN(player.index) : NONE;
|
||||
var playerState = new PlayerState(playerId, controller, player.life);
|
||||
players[playerId] = playerState;
|
||||
teamState.players.push(playerState);
|
||||
}
|
||||
teams[team.id] = teamState;
|
||||
}
|
||||
} else {
|
||||
this.teams = state.teams;
|
||||
this.players = state.players;
|
||||
}
|
||||
}
|
||||
|
||||
private function get_preset():GamePreset {
|
||||
@@ -70,44 +88,29 @@ class GameState {
|
||||
}
|
||||
|
||||
public function getTeamLife(id:TeamId):Int {
|
||||
var result = 0;
|
||||
for (team in teams) {
|
||||
if (team.id == id) {
|
||||
result += team.life;
|
||||
}
|
||||
if (teams.exists(id)) {
|
||||
return teams[id].life + Lambda.fold(teams[id].players, function(p, c) return c + p.life, 0);
|
||||
}
|
||||
for (player in players) {
|
||||
if (player.id.team == id) {
|
||||
result += player.life;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function getTeamScore(id:TeamId):Int {
|
||||
var result = 0;
|
||||
for (player in players) {
|
||||
if (player.id.team == id) {
|
||||
result += player.score;
|
||||
}
|
||||
if (teams.exists(id)) {
|
||||
return Lambda.fold(teams[id].players, function(p, c) return c + p.score, 0);
|
||||
}
|
||||
return result;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function getPlayerLife(id:PlayerId):Int {
|
||||
for (player in players) {
|
||||
if (player.id == id) {
|
||||
return player.life;
|
||||
}
|
||||
if (players.exists(id)) {
|
||||
return players[id].life;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function getPlayerScore(id:PlayerId):Int {
|
||||
for (player in players) {
|
||||
if (player.id == id) {
|
||||
return player.score;
|
||||
}
|
||||
if (players.exists(id)) {
|
||||
return players[id].score;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ bricks:
|
||||
player:
|
||||
default: &player
|
||||
life: 10
|
||||
protect: 2
|
||||
protect: 1.5
|
||||
tanks:
|
||||
- {type: default, rate: 1}
|
||||
|
||||
|
||||
@@ -52,7 +52,6 @@ class Editor {
|
||||
new Editor();
|
||||
}
|
||||
|
||||
private var view:EditorView;
|
||||
@:provide private var resources:IResources;
|
||||
|
||||
public function new() {
|
||||
@@ -64,7 +63,7 @@ class Editor {
|
||||
Provider.setFactory(IConfigBundle, ConfigBundle);
|
||||
Provider.setFactory(ILevelBundle, LevelBundle);
|
||||
|
||||
view = new EditorView();
|
||||
var view = new EditorView();
|
||||
Root.bind(view);
|
||||
|
||||
view.switcher.change(LevelFrame.ID);
|
||||
|
||||
@@ -122,13 +122,13 @@ class MapEditView extends SpriteView {
|
||||
}
|
||||
|
||||
private function onMouseDown(event:MouseEvent):Void {
|
||||
content.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
|
||||
content.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
|
||||
content.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
|
||||
onMouseMove(event);
|
||||
}
|
||||
|
||||
private function onMouseUp(event:MouseEvent):Void {
|
||||
content.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
|
||||
content.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
|
||||
content.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user