[common] add GameState
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package ru.m.tankz.frame.common;
|
||||
|
||||
import ru.m.tankz.game.GameState;
|
||||
import flash.events.Event;
|
||||
import haxe.ds.Option;
|
||||
import haxe.Timer;
|
||||
@@ -7,7 +8,6 @@ import haxework.gui.frame.FrameSwitcher;
|
||||
import haxework.gui.GroupView;
|
||||
import ru.m.tankz.frame.common.IGamePanel;
|
||||
import ru.m.tankz.game.Game;
|
||||
import ru.m.tankz.game.GameStart;
|
||||
import ru.m.tankz.network.NetworkManager;
|
||||
import ru.m.tankz.render.Render;
|
||||
import ru.m.tankz.sound.SoundManager;
|
||||
@@ -21,7 +21,7 @@ class GameFrame extends GroupView {
|
||||
|
||||
@:provide var network:NetworkManager;
|
||||
@:provide var sound:SoundManager;
|
||||
@:provide var gameStart:GameStart;
|
||||
@:provide var state:GameState;
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
|
||||
private var game:Game;
|
||||
@@ -36,14 +36,14 @@ class GameFrame extends GroupView {
|
||||
}
|
||||
|
||||
public function onShow():Void {
|
||||
start(gameStart);
|
||||
start(state);
|
||||
}
|
||||
|
||||
private function start(start:GameStart):Void {
|
||||
game = new Game(start.type);
|
||||
private function start(state:GameState):Void {
|
||||
game = new Game(state.type);
|
||||
game.engine.connect(render);
|
||||
game.engine.connect(sound);
|
||||
game.start(start).then(onGameStateChange).endThen(onGameComplete);
|
||||
game.start(state).then(onGameStateChange).endThen(onGameComplete);
|
||||
timer = new Timer(10);
|
||||
timer.run = updateEngine;
|
||||
panel.game = game;
|
||||
|
||||
@@ -5,8 +5,7 @@ import haxework.gui.GroupView;
|
||||
import haxework.resources.IResources;
|
||||
import ru.m.tankz.bundle.IConfigBundle;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.control.Control;
|
||||
import ru.m.tankz.game.GameStart;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
class LevelFrame extends GroupView {
|
||||
@@ -17,7 +16,7 @@ class LevelFrame extends GroupView {
|
||||
private var config(default, null):Config;
|
||||
|
||||
@:provide var configBundle:IConfigBundle;
|
||||
@:provide var start:GameStart;
|
||||
@:provide var state:GameState;
|
||||
@:provide var resources:IResources;
|
||||
|
||||
private function set_gameType(value:GameType):GameType {
|
||||
@@ -32,11 +31,11 @@ class LevelFrame extends GroupView {
|
||||
private function set_preset(value:GamePreset):GamePreset {
|
||||
if (preset != value || true) { // ToDo:
|
||||
preset = value;
|
||||
start = new GameStart(gameType, preset.id);
|
||||
state = new GameState(gameType, preset.id);
|
||||
for (team in value.teams) {
|
||||
for (player in team.players) {
|
||||
var playerId = new PlayerId(team.id, player.index);
|
||||
start.players.push({playerId: playerId, control: player.control != null ? player.control : Control.BOT});
|
||||
state.players.push(new PlayerState(playerId, player.control, player.life));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -44,8 +43,8 @@ class LevelFrame extends GroupView {
|
||||
}
|
||||
|
||||
private function set_level(value:Int):Int {
|
||||
start.level = value;
|
||||
return start.level;
|
||||
state.level = value;
|
||||
return state.level;
|
||||
}
|
||||
|
||||
private function levelViewFactory(index:Int, level:Int):ButtonView {
|
||||
|
||||
@@ -5,7 +5,7 @@ import haxework.gui.HGroupView;
|
||||
import haxework.gui.LabelView;
|
||||
import haxework.gui.skin.ISkin;
|
||||
import haxework.gui.ToggleButtonView;
|
||||
import ru.m.tankz.game.GameStart;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.Type.PlayerId;
|
||||
import ru.m.tankz.Type.TeamId;
|
||||
|
||||
@@ -44,12 +44,12 @@ class TeamSkin implements ISkin<TeamButton> {
|
||||
private static inline var NONE:TeamId = "none";
|
||||
|
||||
public var item_index(default, set):Int;
|
||||
public var data(default, set):PlayerType;
|
||||
public var data(default, set):PlayerState;
|
||||
|
||||
@:view var label(default, null):LabelView;
|
||||
@:view var teams(default, null):DataView<TeamId, ToggleButtonView>;
|
||||
|
||||
@:provide var start:GameStart;
|
||||
@:provide var state:GameState;
|
||||
|
||||
private function teamViewFactory(index:Int, team:TeamId) {
|
||||
var view = new TeamButton();
|
||||
@@ -60,15 +60,15 @@ class TeamSkin implements ISkin<TeamButton> {
|
||||
return view;
|
||||
}
|
||||
|
||||
private function set_data(value:PlayerType):PlayerType {
|
||||
private function set_data(value:PlayerState):PlayerState {
|
||||
data = value;
|
||||
teams.data = [NONE].concat([for (team in start.preset.teams) team.id]);
|
||||
teams.data = [NONE].concat([for (team in state.preset.teams) team.id]);
|
||||
return data;
|
||||
}
|
||||
|
||||
private function getTeamColor(teamId:TeamId):Int {
|
||||
var color = 0xcccccc;
|
||||
for (team in start.preset.teams) {
|
||||
for (team in state.preset.teams) {
|
||||
if (team.id == teamId) {
|
||||
if (!team.color.zero) color = team.color;
|
||||
break;
|
||||
@@ -84,7 +84,7 @@ class TeamSkin implements ISkin<TeamButton> {
|
||||
}
|
||||
|
||||
private function onTeamSelect(team:TeamId) {
|
||||
data.playerId = new PlayerId(team, item_index);
|
||||
data.id = new PlayerId(team, item_index);
|
||||
for (view in teams.views) {
|
||||
var button = cast(view, TeamButton);
|
||||
button.on = team == button.team;
|
||||
|
||||
@@ -15,9 +15,9 @@ import ru.m.tankz.preset.DotaGame;
|
||||
|
||||
private function updateViews():Void {
|
||||
radiant.live.text = '${game.teams[DotaGame.RADIANT].life}';
|
||||
radiant.score.text = '0'; // ToDO
|
||||
radiant.score.text = '${game.teams[DotaGame.RADIANT].score}';
|
||||
dire.live.text = '${game.teams[DotaGame.DIRE].life}';
|
||||
dire.score.text = '0'; // ToDO
|
||||
dire.score.text = '${game.teams[DotaGame.DIRE].score}';
|
||||
}
|
||||
|
||||
override public function update():Void {
|
||||
|
||||
@@ -6,14 +6,14 @@ import haxework.gui.frame.FrameSwitcher;
|
||||
import ru.m.tankz.control.Control;
|
||||
import ru.m.tankz.frame.common.LevelFrame;
|
||||
import ru.m.tankz.frame.common.PlayerView;
|
||||
import ru.m.tankz.game.GameStart.PlayerType;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.preset.DotaGame;
|
||||
|
||||
@:template class DotaLevelFrame extends LevelFrame {
|
||||
public static inline var ID = "dota.level";
|
||||
|
||||
@:view var levels(default, null):DataView<Int, ButtonView>;
|
||||
@:view var players(default, null):DataView<PlayerType, PlayerView>;
|
||||
@:view var players(default, null):DataView<PlayerState, PlayerView>;
|
||||
|
||||
@:provide var frames:FrameSwitcher;
|
||||
|
||||
@@ -22,16 +22,13 @@ import ru.m.tankz.preset.DotaGame;
|
||||
levels.data = [for (i in 0...config.game.levels) i];
|
||||
var data = [];
|
||||
for (i in 0...2) {
|
||||
data.push({
|
||||
playerId: null,
|
||||
control: Control.HUMAN,
|
||||
});
|
||||
data.push(new PlayerState(null, Control.HUMAN));
|
||||
}
|
||||
start.players = data;
|
||||
state.players = data;
|
||||
players.data = data;
|
||||
}
|
||||
|
||||
private function playerViewFactory(index:Int, player:PlayerType):PlayerView {
|
||||
private function playerViewFactory(index:Int, player:PlayerState):PlayerView {
|
||||
var view = new PlayerView();
|
||||
view.item_index = index;
|
||||
view.data = player;
|
||||
|
||||
Reference in New Issue
Block a user