Merge branch 'network'
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
package ru.m.tankz.frame;
|
||||
|
||||
import ru.m.tankz.frame.game.DotaGamePanel;
|
||||
import ru.m.tankz.frame.game.IGamePanel;
|
||||
import ru.m.tankz.frame.game.ClassicGamePanel;
|
||||
import ru.m.tankz.preset.DotaGame;
|
||||
import ru.m.tankz.preset.ClassicGame;
|
||||
import ru.m.tankz.Type.GameType;
|
||||
@@ -28,22 +31,23 @@ class GameFrame extends VGroupView {
|
||||
|
||||
public static inline var ID = "game";
|
||||
|
||||
@:view var state(default, null):LabelView;
|
||||
@:view var render(default, null):Render;
|
||||
|
||||
@:view var topPanel(default, null):View;
|
||||
@:view var rightPanel(default, null):View;
|
||||
@:view var dotaPanel(default, null):DotaGamePanel;
|
||||
@:view var classicPanel(default, null):ClassicGamePanel;
|
||||
|
||||
@:view var botstate(default, null):LabelView;
|
||||
@:view var player1state(default, null):LabelView;
|
||||
@:view var player2state(default, null):LabelView;
|
||||
var panels:Map<GameType, IGamePanel>;
|
||||
|
||||
@:provide var network:NetworkManager;
|
||||
|
||||
private var game:Game;
|
||||
private var timer:Timer;
|
||||
|
||||
public function init():Void {}
|
||||
public function init():Void {
|
||||
panels = new Map();
|
||||
panels.set(ClassicGame.TYPE, classicPanel);
|
||||
panels.set(DotaGame.TYPE, dotaPanel);
|
||||
}
|
||||
|
||||
public function onShow():Void {
|
||||
start(Provider.get(GameSave));
|
||||
@@ -55,13 +59,9 @@ class GameFrame extends VGroupView {
|
||||
}
|
||||
|
||||
private function start(save:GameSave):Void {
|
||||
switch (save.state.type) {
|
||||
case ClassicGame.TYPE:
|
||||
topPanel.visible = topPanel.inLayout = false;
|
||||
rightPanel.visible = rightPanel.inLayout = true;
|
||||
case DotaGame.TYPE:
|
||||
topPanel.visible = topPanel.inLayout = true;
|
||||
rightPanel.visible = rightPanel.inLayout = false;
|
||||
for (type in panels.keys()) {
|
||||
panels.get(type).visible = type == save.state.type;
|
||||
panels.get(type).inLayout = type == save.state.type;
|
||||
}
|
||||
switch (save.server) {
|
||||
case GameServer.LOCAL:
|
||||
@@ -75,9 +75,9 @@ class GameFrame extends VGroupView {
|
||||
connectGame(game);
|
||||
network.game = cast game;
|
||||
}
|
||||
panels.get(save.state.type).game = game;
|
||||
content.addEventListener(Event.ENTER_FRAME, redraw);
|
||||
render.draw(game.engine);
|
||||
state.text = stateString(game);
|
||||
Provider.get(SoundManager).play('start');
|
||||
}
|
||||
|
||||
@@ -94,46 +94,15 @@ class GameFrame extends VGroupView {
|
||||
render.reset();
|
||||
}
|
||||
|
||||
private function stateString(game:Game):String {
|
||||
if (game == null) {
|
||||
return '';
|
||||
}
|
||||
var result:Array<String> = [];
|
||||
result.push('Level: ${game.state.level}');
|
||||
for (team in game.teams) {
|
||||
if (game.state.loser == team.id) {
|
||||
result.push('${team.id}: LOSE');
|
||||
} else if (team.life > 0) {
|
||||
result.push('${team.id}: ${team.life}');
|
||||
} else {
|
||||
for (player in team.players) {
|
||||
if (player.state.life > 0) {
|
||||
result.push('${player.id.team}${player.id.index}: ${player.state.life}');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return '[ ${result.join(' | ')} ]';
|
||||
}
|
||||
|
||||
private function onGameStateChange(s:GameState):GameState {
|
||||
state.text = stateString(game);
|
||||
if (game.type == ClassicGame.TYPE) {
|
||||
botstate.text = 'Bot: ${game.teams[ClassicGame.BOT].life} life';
|
||||
player1state.text = 'Player1: ${game.teams[ClassicGame.HUMAN].players[0].state.life} life';
|
||||
if (game.teams[ClassicGame.HUMAN].players[1] != null) {
|
||||
player2state.text = 'Player2: ${game.teams[ClassicGame.HUMAN].players[1].state.life} life';
|
||||
} else {
|
||||
player2state.text = "";
|
||||
}
|
||||
}
|
||||
panels.get(s.type).invalidate();
|
||||
return s;
|
||||
}
|
||||
|
||||
private function onGameComplete(result:Option<GameState>):Void {
|
||||
switch (result) {
|
||||
case Option.Some(s):
|
||||
state.text = stateString(game);
|
||||
panels.get(s.type).invalidate();
|
||||
case Option.None:
|
||||
}
|
||||
switch (game.next()) {
|
||||
|
||||
@@ -2,18 +2,12 @@
|
||||
pWidth: 100
|
||||
pHeight: 100
|
||||
views:
|
||||
- id: topPanel
|
||||
$type: haxework.gui.HGroupView
|
||||
- id: dotaPanel
|
||||
$type: ru.m.tankz.frame.game.DotaGamePanel
|
||||
pWidth: 100
|
||||
height: 20
|
||||
visible: false
|
||||
inLayout: false
|
||||
views:
|
||||
- id: state
|
||||
$type: haxework.gui.LabelView
|
||||
$style: label
|
||||
pWidth: 100
|
||||
height: 20
|
||||
- $type: haxework.gui.HGroupView
|
||||
pWidth: 100
|
||||
pHeight: 100
|
||||
@@ -21,25 +15,10 @@ views:
|
||||
- id: render
|
||||
$type: ru.m.tankz.render.Render
|
||||
contentSize: true
|
||||
- id: rightPanel
|
||||
$type: haxework.gui.VGroupView
|
||||
- id: classicPanel
|
||||
$type: ru.m.tankz.frame.game.ClassicGamePanel
|
||||
width: 200
|
||||
pHeight: 100
|
||||
visible: false
|
||||
inLayout: false
|
||||
views:
|
||||
- id: botstate
|
||||
$type: haxework.gui.LabelView
|
||||
$style: label
|
||||
pWidth: 100
|
||||
height: 20
|
||||
- id: player1state
|
||||
$type: haxework.gui.LabelView
|
||||
$style: label
|
||||
pWidth: 100
|
||||
height: 20
|
||||
- id: player2state
|
||||
$type: haxework.gui.LabelView
|
||||
$style: label
|
||||
pWidth: 100
|
||||
height: 20
|
||||
|
||||
|
||||
33
src/client/haxe/ru/m/tankz/frame/game/ClassicGamePanel.hx
Normal file
33
src/client/haxe/ru/m/tankz/frame/game/ClassicGamePanel.hx
Normal file
@@ -0,0 +1,33 @@
|
||||
package ru.m.tankz.frame.game;
|
||||
|
||||
import haxework.gui.LabelView;
|
||||
import haxework.gui.VGroupView;
|
||||
import ru.m.tankz.game.Game;
|
||||
import ru.m.tankz.preset.ClassicGame;
|
||||
|
||||
@:template("ru/m/tankz/frame/game/ClassicGamePanel.yaml", "ru/m/tankz/Style.yaml")
|
||||
class ClassicGamePanel extends VGroupView implements IGamePanel {
|
||||
|
||||
@:view var botstate(default, null):LabelView;
|
||||
@:view var player1state(default, null):LabelView;
|
||||
@:view var player2state(default, null):LabelView;
|
||||
|
||||
public var game:Game;
|
||||
|
||||
private function updateViews():Void {
|
||||
botstate.text = 'Bot: ${game.teams[ClassicGame.BOT].life} life';
|
||||
player1state.text = 'Player1: ${game.teams[ClassicGame.HUMAN].players[0].state.life} life';
|
||||
if (game.teams[ClassicGame.HUMAN].players[1] != null) {
|
||||
player2state.text = 'Player2: ${game.teams[ClassicGame.HUMAN].players[1].state.life} life';
|
||||
} else {
|
||||
player2state.text = "";
|
||||
}
|
||||
}
|
||||
|
||||
override public function update():Void {
|
||||
if (game != null) {
|
||||
updateViews();
|
||||
}
|
||||
super.update();
|
||||
}
|
||||
}
|
||||
16
src/client/haxe/ru/m/tankz/frame/game/ClassicGamePanel.yaml
Normal file
16
src/client/haxe/ru/m/tankz/frame/game/ClassicGamePanel.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
views:
|
||||
- id: botstate
|
||||
$type: haxework.gui.LabelView
|
||||
$style: label
|
||||
pWidth: 100
|
||||
height: 20
|
||||
- id: player1state
|
||||
$type: haxework.gui.LabelView
|
||||
$style: label
|
||||
pWidth: 100
|
||||
height: 20
|
||||
- id: player2state
|
||||
$type: haxework.gui.LabelView
|
||||
$style: label
|
||||
pWidth: 100
|
||||
height: 20
|
||||
46
src/client/haxe/ru/m/tankz/frame/game/DotaGamePanel.hx
Normal file
46
src/client/haxe/ru/m/tankz/frame/game/DotaGamePanel.hx
Normal file
@@ -0,0 +1,46 @@
|
||||
package ru.m.tankz.frame.game;
|
||||
|
||||
import haxework.gui.LabelView;
|
||||
import haxework.gui.HGroupView;
|
||||
import ru.m.tankz.game.Game;
|
||||
|
||||
@:template("ru/m/tankz/frame/game/DotaGamePanel.yaml", "ru/m/tankz/Style.yaml")
|
||||
class DotaGamePanel extends HGroupView implements IGamePanel {
|
||||
|
||||
@:view var state(default, null):LabelView;
|
||||
|
||||
public var game:Game;
|
||||
|
||||
private function stateString(game:Game):String {
|
||||
if (game == null) {
|
||||
return '';
|
||||
}
|
||||
var result:Array<String> = [];
|
||||
result.push('Level: ${game.state.level}');
|
||||
for (team in game.teams) {
|
||||
if (game.state.loser == team.id) {
|
||||
result.push('${team.id}: LOSE');
|
||||
} else if (team.life > 0) {
|
||||
result.push('${team.id}: ${team.life}');
|
||||
} else {
|
||||
for (player in team.players) {
|
||||
if (player.state.life > 0) {
|
||||
result.push('${player.id.team}${player.id.index}: ${player.state.life}');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return '[ ${result.join(' | ')} ]';
|
||||
}
|
||||
|
||||
private function updateViews():Void {
|
||||
state.text = stateString(game);
|
||||
}
|
||||
|
||||
override public function update():Void {
|
||||
if (game != null) {
|
||||
updateViews();
|
||||
}
|
||||
super.update();
|
||||
}
|
||||
}
|
||||
6
src/client/haxe/ru/m/tankz/frame/game/DotaGamePanel.yaml
Normal file
6
src/client/haxe/ru/m/tankz/frame/game/DotaGamePanel.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
views:
|
||||
- id: state
|
||||
$type: haxework.gui.LabelView
|
||||
$style: label
|
||||
pWidth: 100
|
||||
height: 20
|
||||
8
src/client/haxe/ru/m/tankz/frame/game/IGamePanel.hx
Normal file
8
src/client/haxe/ru/m/tankz/frame/game/IGamePanel.hx
Normal file
@@ -0,0 +1,8 @@
|
||||
package ru.m.tankz.frame.game;
|
||||
|
||||
import ru.m.tankz.game.Game;
|
||||
import haxework.gui.IView;
|
||||
|
||||
interface IGamePanel extends IView {
|
||||
public var game:Game;
|
||||
}
|
||||
Reference in New Issue
Block a user