Merge branch 'network'
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
package ru.m.tankz.frame;
|
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.DotaGame;
|
||||||
import ru.m.tankz.preset.ClassicGame;
|
import ru.m.tankz.preset.ClassicGame;
|
||||||
import ru.m.tankz.Type.GameType;
|
import ru.m.tankz.Type.GameType;
|
||||||
@@ -28,22 +31,23 @@ class GameFrame extends VGroupView {
|
|||||||
|
|
||||||
public static inline var ID = "game";
|
public static inline var ID = "game";
|
||||||
|
|
||||||
@:view var state(default, null):LabelView;
|
|
||||||
@:view var render(default, null):Render;
|
@:view var render(default, null):Render;
|
||||||
|
|
||||||
@:view var topPanel(default, null):View;
|
@:view var dotaPanel(default, null):DotaGamePanel;
|
||||||
@:view var rightPanel(default, null):View;
|
@:view var classicPanel(default, null):ClassicGamePanel;
|
||||||
|
|
||||||
@:view var botstate(default, null):LabelView;
|
var panels:Map<GameType, IGamePanel>;
|
||||||
@:view var player1state(default, null):LabelView;
|
|
||||||
@:view var player2state(default, null):LabelView;
|
|
||||||
|
|
||||||
@:provide var network:NetworkManager;
|
@:provide var network:NetworkManager;
|
||||||
|
|
||||||
private var game:Game;
|
private var game:Game;
|
||||||
private var timer:Timer;
|
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 {
|
public function onShow():Void {
|
||||||
start(Provider.get(GameSave));
|
start(Provider.get(GameSave));
|
||||||
@@ -55,13 +59,9 @@ class GameFrame extends VGroupView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function start(save:GameSave):Void {
|
private function start(save:GameSave):Void {
|
||||||
switch (save.state.type) {
|
for (type in panels.keys()) {
|
||||||
case ClassicGame.TYPE:
|
panels.get(type).visible = type == save.state.type;
|
||||||
topPanel.visible = topPanel.inLayout = false;
|
panels.get(type).inLayout = type == save.state.type;
|
||||||
rightPanel.visible = rightPanel.inLayout = true;
|
|
||||||
case DotaGame.TYPE:
|
|
||||||
topPanel.visible = topPanel.inLayout = true;
|
|
||||||
rightPanel.visible = rightPanel.inLayout = false;
|
|
||||||
}
|
}
|
||||||
switch (save.server) {
|
switch (save.server) {
|
||||||
case GameServer.LOCAL:
|
case GameServer.LOCAL:
|
||||||
@@ -75,9 +75,9 @@ class GameFrame extends VGroupView {
|
|||||||
connectGame(game);
|
connectGame(game);
|
||||||
network.game = cast game;
|
network.game = cast game;
|
||||||
}
|
}
|
||||||
|
panels.get(save.state.type).game = game;
|
||||||
content.addEventListener(Event.ENTER_FRAME, redraw);
|
content.addEventListener(Event.ENTER_FRAME, redraw);
|
||||||
render.draw(game.engine);
|
render.draw(game.engine);
|
||||||
state.text = stateString(game);
|
|
||||||
Provider.get(SoundManager).play('start');
|
Provider.get(SoundManager).play('start');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,46 +94,15 @@ class GameFrame extends VGroupView {
|
|||||||
render.reset();
|
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 {
|
private function onGameStateChange(s:GameState):GameState {
|
||||||
state.text = stateString(game);
|
panels.get(s.type).invalidate();
|
||||||
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 = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function onGameComplete(result:Option<GameState>):Void {
|
private function onGameComplete(result:Option<GameState>):Void {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case Option.Some(s):
|
case Option.Some(s):
|
||||||
state.text = stateString(game);
|
panels.get(s.type).invalidate();
|
||||||
case Option.None:
|
case Option.None:
|
||||||
}
|
}
|
||||||
switch (game.next()) {
|
switch (game.next()) {
|
||||||
|
|||||||
@@ -2,18 +2,12 @@
|
|||||||
pWidth: 100
|
pWidth: 100
|
||||||
pHeight: 100
|
pHeight: 100
|
||||||
views:
|
views:
|
||||||
- id: topPanel
|
- id: dotaPanel
|
||||||
$type: haxework.gui.HGroupView
|
$type: ru.m.tankz.frame.game.DotaGamePanel
|
||||||
pWidth: 100
|
pWidth: 100
|
||||||
height: 20
|
height: 20
|
||||||
visible: false
|
visible: false
|
||||||
inLayout: false
|
inLayout: false
|
||||||
views:
|
|
||||||
- id: state
|
|
||||||
$type: haxework.gui.LabelView
|
|
||||||
$style: label
|
|
||||||
pWidth: 100
|
|
||||||
height: 20
|
|
||||||
- $type: haxework.gui.HGroupView
|
- $type: haxework.gui.HGroupView
|
||||||
pWidth: 100
|
pWidth: 100
|
||||||
pHeight: 100
|
pHeight: 100
|
||||||
@@ -21,25 +15,10 @@ views:
|
|||||||
- id: render
|
- id: render
|
||||||
$type: ru.m.tankz.render.Render
|
$type: ru.m.tankz.render.Render
|
||||||
contentSize: true
|
contentSize: true
|
||||||
- id: rightPanel
|
- id: classicPanel
|
||||||
$type: haxework.gui.VGroupView
|
$type: ru.m.tankz.frame.game.ClassicGamePanel
|
||||||
width: 200
|
width: 200
|
||||||
pHeight: 100
|
pHeight: 100
|
||||||
visible: false
|
visible: false
|
||||||
inLayout: 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