From fd0e2382d039247f919ae4c9795b43425599d98d Mon Sep 17 00:00:00 2001 From: shmyga Date: Tue, 26 Mar 2019 17:37:33 +0300 Subject: [PATCH] [client] add death game panel --- gulpfile.js | 1 + .../haxe/ru/m/tankz/view/ResultFrame.hx | 4 +- .../haxe/ru/m/tankz/view/common/LevelFrame.hx | 10 +-- .../ru/m/tankz/view/death/DeathGamePanel.hx | 2 +- .../ru/m/tankz/view/death/DeathLevelFrame.hx | 3 +- .../ru/m/tankz/view/dota/DotaLevelFrame.hx | 3 +- src/common/haxe/ru/m/tankz/game/Game.hx | 16 ++--- src/common/haxe/ru/m/tankz/game/GameState.hx | 61 ++++++++++--------- src/common/resources/death/config.yaml | 2 +- src/editor/haxe/ru/m/tankz/editor/Editor.hx | 3 +- .../ru/m/tankz/editor/level/MapEditView.hx | 4 +- 11 files changed, 51 insertions(+), 58 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index fd855e1..477471c 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -137,4 +137,5 @@ module.exports.default = gulp.series( //module.exports['server:neko:build'], module.exports['client:flash:html'], module.exports['client:linux:deb'], + module.exports['editor:flash:html'], ); diff --git a/src/client/haxe/ru/m/tankz/view/ResultFrame.hx b/src/client/haxe/ru/m/tankz/view/ResultFrame.hx index 461d0ea..798fba8 100644 --- a/src/client/haxe/ru/m/tankz/view/ResultFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/ResultFrame.hx @@ -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; } diff --git a/src/client/haxe/ru/m/tankz/view/common/LevelFrame.hx b/src/client/haxe/ru/m/tankz/view/common/LevelFrame.hx index 99b33b5..5e3758e 100644 --- a/src/client/haxe/ru/m/tankz/view/common/LevelFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/common/LevelFrame.hx @@ -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; } diff --git a/src/client/haxe/ru/m/tankz/view/death/DeathGamePanel.hx b/src/client/haxe/ru/m/tankz/view/death/DeathGamePanel.hx index 6b983e0..2422ff2 100644 --- a/src/client/haxe/ru/m/tankz/view/death/DeathGamePanel.hx +++ b/src/client/haxe/ru/m/tankz/view/death/DeathGamePanel.hx @@ -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 { diff --git a/src/client/haxe/ru/m/tankz/view/death/DeathLevelFrame.hx b/src/client/haxe/ru/m/tankz/view/death/DeathLevelFrame.hx index 5c949c3..e9ed3c2 100644 --- a/src/client/haxe/ru/m/tankz/view/death/DeathLevelFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/death/DeathLevelFrame.hx @@ -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):PlayerView { diff --git a/src/client/haxe/ru/m/tankz/view/dota/DotaLevelFrame.hx b/src/client/haxe/ru/m/tankz/view/dota/DotaLevelFrame.hx index c5122b5..1c38396 100644 --- a/src/client/haxe/ru/m/tankz/view/dota/DotaLevelFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/dota/DotaLevelFrame.hx @@ -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):PlayerView { diff --git a/src/common/haxe/ru/m/tankz/game/Game.hx b/src/common/haxe/ru/m/tankz/game/Game.hx index 09da1c8..20eef9b 100644 --- a/src/common/haxe/ru/m/tankz/game/Game.hx +++ b/src/common/haxe/ru/m/tankz/game/Game.hx @@ -128,20 +128,18 @@ class Game extends GameDispatcher { engine.map.setData(level.data); teams = new Map(); 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()) { diff --git a/src/common/haxe/ru/m/tankz/game/GameState.hx b/src/common/haxe/ru/m/tankz/game/GameState.hx index b1ba00c..a88c9e9 100644 --- a/src/common/haxe/ru/m/tankz/game/GameState.hx +++ b/src/common/haxe/ru/m/tankz/game/GameState.hx @@ -31,11 +31,13 @@ class PlayerState { class TeamState { public var id:TeamId; + public var players:Array; 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; - public var teams:Array; + public var players:Map; + public var teams:Map; 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; } diff --git a/src/common/resources/death/config.yaml b/src/common/resources/death/config.yaml index 42323c7..23abf1a 100644 --- a/src/common/resources/death/config.yaml +++ b/src/common/resources/death/config.yaml @@ -21,7 +21,7 @@ bricks: player: default: &player life: 10 - protect: 2 + protect: 1.5 tanks: - {type: default, rate: 1} diff --git a/src/editor/haxe/ru/m/tankz/editor/Editor.hx b/src/editor/haxe/ru/m/tankz/editor/Editor.hx index be63a6f..b3cda5a 100644 --- a/src/editor/haxe/ru/m/tankz/editor/Editor.hx +++ b/src/editor/haxe/ru/m/tankz/editor/Editor.hx @@ -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); diff --git a/src/editor/haxe/ru/m/tankz/editor/level/MapEditView.hx b/src/editor/haxe/ru/m/tankz/editor/level/MapEditView.hx index 20b6360..5f417df 100644 --- a/src/editor/haxe/ru/m/tankz/editor/level/MapEditView.hx +++ b/src/editor/haxe/ru/m/tankz/editor/level/MapEditView.hx @@ -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); }