[client] refactored GameFrame
This commit is contained in:
10
src/client/haxe/ru/m/tankz/render/IRender.hx
Normal file
10
src/client/haxe/ru/m/tankz/render/IRender.hx
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package ru.m.tankz.render;
|
||||||
|
|
||||||
|
import haxework.view.IView;
|
||||||
|
import ru.m.tankz.engine.IEngine;
|
||||||
|
import ru.m.tankz.game.IGame;
|
||||||
|
|
||||||
|
interface IRender extends IView<Dynamic> extends GameListener extends EngineListener {
|
||||||
|
public function draw(game:IEngine):Void;
|
||||||
|
public function reset():Void;
|
||||||
|
}
|
||||||
@@ -13,10 +13,9 @@ import ru.m.geom.Point;
|
|||||||
import ru.m.tankz.core.EntityType;
|
import ru.m.tankz.core.EntityType;
|
||||||
import ru.m.tankz.engine.IEngine;
|
import ru.m.tankz.engine.IEngine;
|
||||||
import ru.m.tankz.game.GameEvent;
|
import ru.m.tankz.game.GameEvent;
|
||||||
import ru.m.tankz.game.IGame;
|
|
||||||
import ru.m.tankz.render.RenderItem;
|
import ru.m.tankz.render.RenderItem;
|
||||||
|
|
||||||
class Render extends SpriteView implements GameListener implements EngineListener {
|
class Render extends SpriteView implements IRender {
|
||||||
|
|
||||||
private var backgroundLayer:Sprite;
|
private var backgroundLayer:Sprite;
|
||||||
private var groundLayer:Sprite;
|
private var groundLayer:Sprite;
|
||||||
|
|||||||
@@ -7,12 +7,8 @@ views:
|
|||||||
$type: ru.m.tankz.view.StartFrame
|
$type: ru.m.tankz.view.StartFrame
|
||||||
- id: level
|
- id: level
|
||||||
$type: ru.m.tankz.view.LevelFrame
|
$type: ru.m.tankz.view.LevelFrame
|
||||||
- id: classic
|
- id: game
|
||||||
$type: ru.m.tankz.view.classic.ClassicGameFrame
|
$type: ru.m.tankz.view.GameFrame
|
||||||
- id: dota
|
|
||||||
$type: ru.m.tankz.view.dota.DotaGameFrame
|
|
||||||
- id: death
|
|
||||||
$type: ru.m.tankz.view.death.DeathGameFrame
|
|
||||||
- id: result
|
- id: result
|
||||||
$type: ru.m.tankz.view.ResultFrame
|
$type: ru.m.tankz.view.ResultFrame
|
||||||
- id: settings
|
- id: settings
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package ru.m.tankz.view.common;
|
package ru.m.tankz.view;
|
||||||
|
|
||||||
import flash.events.Event;
|
import flash.events.Event;
|
||||||
import haxe.ds.Option;
|
import haxe.ds.Option;
|
||||||
import haxework.view.frame.FrameSwitcher;
|
import haxework.view.frame.FrameSwitcher;
|
||||||
import haxework.view.GroupView;
|
import haxework.view.VGroupView;
|
||||||
import ru.m.tankz.game.Game;
|
import ru.m.tankz.game.Game;
|
||||||
import ru.m.tankz.game.GameEvent;
|
import ru.m.tankz.game.GameEvent;
|
||||||
import ru.m.tankz.game.GameRunner;
|
import ru.m.tankz.game.GameRunner;
|
||||||
@@ -13,18 +13,17 @@ import ru.m.tankz.game.record.GamePlayer;
|
|||||||
import ru.m.tankz.game.record.GameRecord;
|
import ru.m.tankz.game.record.GameRecord;
|
||||||
import ru.m.tankz.game.record.GameRecorder;
|
import ru.m.tankz.game.record.GameRecorder;
|
||||||
import ru.m.tankz.network.NetworkManager;
|
import ru.m.tankz.network.NetworkManager;
|
||||||
import ru.m.tankz.render.Render;
|
|
||||||
import ru.m.tankz.sound.SoundManager;
|
import ru.m.tankz.sound.SoundManager;
|
||||||
import ru.m.tankz.storage.GameStorage;
|
import ru.m.tankz.storage.GameStorage;
|
||||||
import ru.m.tankz.storage.RecordStorage;
|
import ru.m.tankz.storage.RecordStorage;
|
||||||
import ru.m.tankz.view.common.IGamePanel;
|
import ru.m.tankz.view.game.GameView;
|
||||||
|
|
||||||
class GameFrame extends GroupView implements GameListener {
|
@:template class GameFrame extends VGroupView implements GameListener {
|
||||||
|
public static inline var ID = "game";
|
||||||
|
|
||||||
private static inline var TAG = "GameFrame";
|
private static inline var TAG = "GameFrame";
|
||||||
|
|
||||||
private var render(get, null):Render;
|
@:view("game") private var gameView(default, null):GameView;
|
||||||
private var panel(get, null):IGamePanel;
|
|
||||||
|
|
||||||
@:provide var network:NetworkManager;
|
@:provide var network:NetworkManager;
|
||||||
@:provide var soundManager:SoundManager;
|
@:provide var soundManager:SoundManager;
|
||||||
@@ -40,14 +39,6 @@ class GameFrame extends GroupView implements GameListener {
|
|||||||
private var recorder:GameRecorder;
|
private var recorder:GameRecorder;
|
||||||
private var player:GamePlayer;
|
private var player:GamePlayer;
|
||||||
|
|
||||||
private function get_render():Render {
|
|
||||||
throw "Not implemented";
|
|
||||||
}
|
|
||||||
|
|
||||||
private function get_panel():IGamePanel {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function onShow():Void {
|
public function onShow():Void {
|
||||||
if (record != null) {
|
if (record != null) {
|
||||||
play(record);
|
play(record);
|
||||||
@@ -58,13 +49,14 @@ class GameFrame extends GroupView implements GameListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function start(state:GameState):Void {
|
private function start(state:GameState):Void {
|
||||||
|
gameView.type = state.type;
|
||||||
game = new Game(state);
|
game = new Game(state);
|
||||||
game.connect(render);
|
game.connect(gameView.render);
|
||||||
game.engine.connect(render);
|
game.engine.connect(gameView.render);
|
||||||
game.connect(soundManager);
|
game.connect(soundManager);
|
||||||
game.connect(this);
|
game.connect(this);
|
||||||
if (panel != null) {
|
if (gameView.panel != null) {
|
||||||
game.connect(panel);
|
game.connect(gameView.panel);
|
||||||
}
|
}
|
||||||
//game.connect(new GameTracer());
|
//game.connect(new GameTracer());
|
||||||
recorder = new GameRecorder();
|
recorder = new GameRecorder();
|
||||||
@@ -72,22 +64,23 @@ class GameFrame extends GroupView implements GameListener {
|
|||||||
runner = new GameRunner(game);
|
runner = new GameRunner(game);
|
||||||
runner.start(state);
|
runner.start(state);
|
||||||
content.addEventListener(Event.ENTER_FRAME, _redraw);
|
content.addEventListener(Event.ENTER_FRAME, _redraw);
|
||||||
render.draw(game.engine);
|
gameView.render.draw(game.engine);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function play(record:GameRecord):Void {
|
private function play(record:GameRecord):Void {
|
||||||
|
gameView.type = record.type;
|
||||||
game = new Game(record.state);
|
game = new Game(record.state);
|
||||||
game.connect(render);
|
game.connect(gameView.render);
|
||||||
game.engine.connect(render);
|
game.engine.connect(gameView.render);
|
||||||
game.connect(soundManager);
|
game.connect(soundManager);
|
||||||
//game.connect(this);
|
//game.connect(this);
|
||||||
if (panel != null) {
|
if (gameView.panel != null) {
|
||||||
game.connect(panel);
|
game.connect(gameView.panel);
|
||||||
}
|
}
|
||||||
player = new GamePlayer(game, record);
|
player = new GamePlayer(game, record);
|
||||||
player.start();
|
player.start();
|
||||||
content.addEventListener(Event.ENTER_FRAME, _redraw);
|
content.addEventListener(Event.ENTER_FRAME, _redraw);
|
||||||
render.draw(game.engine);
|
gameView.render.draw(game.engine);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function stop():Void {
|
private function stop():Void {
|
||||||
@@ -100,7 +93,7 @@ class GameFrame extends GroupView implements GameListener {
|
|||||||
game.dispose();
|
game.dispose();
|
||||||
game = null;
|
game = null;
|
||||||
}
|
}
|
||||||
render.reset();
|
gameView.render.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onGameEvent(event:GameEvent):Void {
|
public function onGameEvent(event:GameEvent):Void {
|
||||||
@@ -130,6 +123,10 @@ class GameFrame extends GroupView implements GameListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function _redraw(_):Void {
|
private function _redraw(_):Void {
|
||||||
render.draw(game.engine);
|
gameView.render.draw(game.engine);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function close():Void {
|
||||||
|
switcher.change(LevelFrame.ID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
14
src/client/haxe/ru/m/tankz/view/GameFrame.yaml
Normal file
14
src/client/haxe/ru/m/tankz/view/GameFrame.yaml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
views:
|
||||||
|
- $type: haxework.view.VGroupView
|
||||||
|
skinId: container
|
||||||
|
views:
|
||||||
|
- id: game
|
||||||
|
$type: ru.m.tankz.view.game.GameView
|
||||||
|
# - $type: haxework.view.HGroupView
|
||||||
|
# skinId: panel
|
||||||
|
# views:
|
||||||
|
# - id: close
|
||||||
|
# $type: haxework.view.ButtonView
|
||||||
|
# skinId: button.close
|
||||||
|
# +onPress: $code:close()
|
||||||
@@ -8,14 +8,8 @@ import haxework.view.VGroupView;
|
|||||||
import ru.m.tankz.bundle.ILevelBundle;
|
import ru.m.tankz.bundle.ILevelBundle;
|
||||||
import ru.m.tankz.config.Config;
|
import ru.m.tankz.config.Config;
|
||||||
import ru.m.tankz.game.GameState;
|
import ru.m.tankz.game.GameState;
|
||||||
import ru.m.tankz.preset.ClassicGame;
|
|
||||||
import ru.m.tankz.preset.DeathGame;
|
|
||||||
import ru.m.tankz.preset.DotaGame;
|
|
||||||
import ru.m.tankz.storage.GameStorage;
|
import ru.m.tankz.storage.GameStorage;
|
||||||
import ru.m.tankz.Type;
|
import ru.m.tankz.Type;
|
||||||
import ru.m.tankz.view.classic.ClassicGameFrame;
|
|
||||||
import ru.m.tankz.view.death.DeathGameFrame;
|
|
||||||
import ru.m.tankz.view.dota.DotaGameFrame;
|
|
||||||
import ru.m.tankz.view.popup.LevelPopup;
|
import ru.m.tankz.view.popup.LevelPopup;
|
||||||
|
|
||||||
@:template class LevelFrame extends VGroupView {
|
@:template class LevelFrame extends VGroupView {
|
||||||
@@ -39,12 +33,7 @@ import ru.m.tankz.view.popup.LevelPopup;
|
|||||||
private function start(level:LevelConfig, preset:GamePreset):Void {
|
private function start(level:LevelConfig, preset:GamePreset):Void {
|
||||||
state.levelId = level.id;
|
state.levelId = level.id;
|
||||||
state.presetId = preset.id;
|
state.presetId = preset.id;
|
||||||
switcher.change(switch state.type {
|
switcher.change(GameFrame.ID);
|
||||||
case ClassicGame.TYPE: ClassicGameFrame.ID;
|
|
||||||
case DotaGame.TYPE: DotaGameFrame.ID;
|
|
||||||
case DeathGame.TYPE: DeathGameFrame.ID;
|
|
||||||
case _: StartFrame.ID;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function levelViewFactory(index:Int, levelId:LevelId):ButtonView {
|
private function levelViewFactory(index:Int, levelId:LevelId):ButtonView {
|
||||||
@@ -70,6 +59,6 @@ import ru.m.tankz.view.popup.LevelPopup;
|
|||||||
state.config.presets,
|
state.config.presets,
|
||||||
storage.get(state.type)
|
storage.get(state.type)
|
||||||
);
|
);
|
||||||
levelPopup.show().then(function(preset) start(level, preset)).catchError(function(_) {});
|
levelPopup.show().then(function(preset) preset != null ? start(level, preset) : {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,13 +5,7 @@ import haxework.view.list.ListView.IListItemView;
|
|||||||
import haxework.view.list.VListView;
|
import haxework.view.list.VListView;
|
||||||
import haxework.view.VGroupView;
|
import haxework.view.VGroupView;
|
||||||
import ru.m.tankz.game.record.GameRecord;
|
import ru.m.tankz.game.record.GameRecord;
|
||||||
import ru.m.tankz.preset.ClassicGame;
|
|
||||||
import ru.m.tankz.preset.DeathGame;
|
|
||||||
import ru.m.tankz.preset.DotaGame;
|
|
||||||
import ru.m.tankz.storage.RecordStorage;
|
import ru.m.tankz.storage.RecordStorage;
|
||||||
import ru.m.tankz.view.classic.ClassicGameFrame;
|
|
||||||
import ru.m.tankz.view.death.DeathGameFrame;
|
|
||||||
import ru.m.tankz.view.dota.DotaGameFrame;
|
|
||||||
|
|
||||||
@:template class RecordFrame extends VGroupView {
|
@:template class RecordFrame extends VGroupView {
|
||||||
public static var ID(default, never):String = "record";
|
public static var ID(default, never):String = "record";
|
||||||
@@ -28,13 +22,7 @@ import ru.m.tankz.view.dota.DotaGameFrame;
|
|||||||
|
|
||||||
private function onRecordSelect(item:IListItemView<GameRecord>):Void {
|
private function onRecordSelect(item:IListItemView<GameRecord>):Void {
|
||||||
record = item.data;
|
record = item.data;
|
||||||
// ToDo: copy@paste from LevelFrame
|
switcher.change(GameFrame.ID);
|
||||||
switcher.change(switch record.type {
|
|
||||||
case ClassicGame.TYPE: ClassicGameFrame.ID;
|
|
||||||
case DotaGame.TYPE: DotaGameFrame.ID;
|
|
||||||
case DeathGame.TYPE: DeathGameFrame.ID;
|
|
||||||
case _: StartFrame.ID;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function close() {
|
private function close() {
|
||||||
|
|||||||
@@ -6,11 +6,7 @@ import haxework.view.frame.FrameSwitcher;
|
|||||||
import haxework.view.LabelView;
|
import haxework.view.LabelView;
|
||||||
import haxework.view.VGroupView;
|
import haxework.view.VGroupView;
|
||||||
import ru.m.tankz.game.GameState;
|
import ru.m.tankz.game.GameState;
|
||||||
import ru.m.tankz.preset.ClassicGame;
|
|
||||||
import ru.m.tankz.preset.DotaGame;
|
|
||||||
import ru.m.tankz.view.classic.ClassicGameFrame;
|
|
||||||
import ru.m.tankz.view.common.LifeView;
|
import ru.m.tankz.view.common.LifeView;
|
||||||
import ru.m.tankz.view.dota.DotaGameFrame;
|
|
||||||
|
|
||||||
@:template class ResultFrame extends VGroupView {
|
@:template class ResultFrame extends VGroupView {
|
||||||
public static var ID(default, never):String = "result";
|
public static var ID(default, never):String = "result";
|
||||||
@@ -42,11 +38,7 @@ import ru.m.tankz.view.dota.DotaGameFrame;
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function next() {
|
private function next() {
|
||||||
frames.change(switch state == null ? null : state.type {
|
frames.change(GameFrame.ID);
|
||||||
case ClassicGame.TYPE: ClassicGameFrame.ID;
|
|
||||||
case DotaGame.TYPE: DotaGameFrame.ID;
|
|
||||||
case _: StartFrame.ID;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function close() {
|
private function close() {
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
package ru.m.tankz.view.classic;
|
|
||||||
|
|
||||||
import ru.m.tankz.view.common.IGamePanel;
|
|
||||||
import ru.m.tankz.render.Render;
|
|
||||||
import ru.m.tankz.view.common.GameFrame;
|
|
||||||
|
|
||||||
@:template class ClassicGameFrame extends GameFrame {
|
|
||||||
public static inline var ID = "classic";
|
|
||||||
|
|
||||||
@:view("render") private var renderView(default, null):Render;
|
|
||||||
@:view("panel") private var panelView(default, null):IGamePanel;
|
|
||||||
|
|
||||||
override private function get_render():Render {
|
|
||||||
return renderView;
|
|
||||||
}
|
|
||||||
|
|
||||||
override private function get_panel():IGamePanel {
|
|
||||||
return panelView;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
skinId: container
|
|
||||||
views:
|
|
||||||
- $type: haxework.view.HGroupView
|
|
||||||
layout.margin: 5
|
|
||||||
views:
|
|
||||||
- id: render
|
|
||||||
$type: ru.m.tankz.render.Render
|
|
||||||
- id: panel
|
|
||||||
$type: ru.m.tankz.view.classic.ClassicGamePanel
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
package ru.m.tankz.view.death;
|
|
||||||
|
|
||||||
import ru.m.tankz.render.Render;
|
|
||||||
import ru.m.tankz.view.common.GameFrame;
|
|
||||||
import ru.m.tankz.view.common.IGamePanel;
|
|
||||||
|
|
||||||
@:template class DeathGameFrame extends GameFrame {
|
|
||||||
|
|
||||||
public static inline var ID = "death";
|
|
||||||
|
|
||||||
@:view("render") private var renderView(default, null):Render;
|
|
||||||
@:view("panel") private var panelView(default, null):IGamePanel;
|
|
||||||
|
|
||||||
override private function get_render():Render {
|
|
||||||
return renderView;
|
|
||||||
}
|
|
||||||
|
|
||||||
override private function get_panel():IGamePanel {
|
|
||||||
return panelView;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
skinId: container
|
|
||||||
views:
|
|
||||||
- $type: haxework.view.HGroupView
|
|
||||||
layout.margin: 5
|
|
||||||
views:
|
|
||||||
- id: render
|
|
||||||
$type: ru.m.tankz.render.Render
|
|
||||||
- id: panel
|
|
||||||
$type: ru.m.tankz.view.death.DeathGamePanel
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
package ru.m.tankz.view.dota;
|
|
||||||
|
|
||||||
import ru.m.tankz.view.common.GameFrame;
|
|
||||||
import ru.m.tankz.view.common.IGamePanel;
|
|
||||||
import ru.m.tankz.render.Render;
|
|
||||||
|
|
||||||
@:template class DotaGameFrame extends GameFrame {
|
|
||||||
|
|
||||||
public static inline var ID = "dota";
|
|
||||||
|
|
||||||
@:view("render") private var renderView(default, null):Render;
|
|
||||||
@:view("panel") private var panelView(default, null):IGamePanel;
|
|
||||||
|
|
||||||
override private function get_render():Render {
|
|
||||||
return renderView;
|
|
||||||
}
|
|
||||||
|
|
||||||
override private function get_panel():IGamePanel {
|
|
||||||
return panelView;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
skinId: container
|
|
||||||
views:
|
|
||||||
- $type: haxework.view.VGroupView
|
|
||||||
layout.margin: 5
|
|
||||||
views:
|
|
||||||
- id: panel
|
|
||||||
$type: ru.m.tankz.view.dota.DotaGamePanel
|
|
||||||
- id: render
|
|
||||||
$type: ru.m.tankz.render.Render
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package ru.m.tankz.view.classic;
|
package ru.m.tankz.view.game;
|
||||||
|
|
||||||
import haxework.view.LabelView;
|
import haxework.view.LabelView;
|
||||||
import haxework.view.VGroupView;
|
import haxework.view.VGroupView;
|
||||||
@@ -6,7 +6,6 @@ import ru.m.tankz.game.GameEvent;
|
|||||||
import ru.m.tankz.game.GameState;
|
import ru.m.tankz.game.GameState;
|
||||||
import ru.m.tankz.preset.ClassicGame;
|
import ru.m.tankz.preset.ClassicGame;
|
||||||
import ru.m.tankz.Type.PlayerId;
|
import ru.m.tankz.Type.PlayerId;
|
||||||
import ru.m.tankz.view.common.IGamePanel;
|
|
||||||
import ru.m.tankz.view.common.LifeView;
|
import ru.m.tankz.view.common.LifeView;
|
||||||
|
|
||||||
@:template class ClassicGamePanel extends VGroupView implements IGamePanel {
|
@:template class ClassicGamePanel extends VGroupView implements IGamePanel {
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
package ru.m.tankz.view.death;
|
package ru.m.tankz.view.game;
|
||||||
|
|
||||||
import haxework.view.DataView;
|
import haxework.view.DataView;
|
||||||
import haxework.view.LabelView;
|
import haxework.view.LabelView;
|
||||||
import haxework.view.VGroupView;
|
import haxework.view.VGroupView;
|
||||||
import ru.m.tankz.game.GameEvent;
|
import ru.m.tankz.game.GameEvent;
|
||||||
import ru.m.tankz.game.GameState;
|
import ru.m.tankz.game.GameState;
|
||||||
import ru.m.tankz.view.common.IGamePanel;
|
|
||||||
import ru.m.tankz.view.common.LifeView;
|
import ru.m.tankz.view.common.LifeView;
|
||||||
|
|
||||||
@:template class DeathGamePanel extends VGroupView implements IGamePanel {
|
@:template class DeathGamePanel extends VGroupView implements IGamePanel {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package ru.m.tankz.view.dota;
|
package ru.m.tankz.view.game;
|
||||||
|
|
||||||
import haxework.view.HGroupView;
|
import haxework.view.HGroupView;
|
||||||
import haxework.view.LabelView;
|
import haxework.view.LabelView;
|
||||||
@@ -6,7 +6,6 @@ import ru.m.tankz.game.GameEvent;
|
|||||||
import ru.m.tankz.game.GameState;
|
import ru.m.tankz.game.GameState;
|
||||||
import ru.m.tankz.preset.DotaGame;
|
import ru.m.tankz.preset.DotaGame;
|
||||||
import ru.m.tankz.Type.TeamId;
|
import ru.m.tankz.Type.TeamId;
|
||||||
import ru.m.tankz.view.common.IGamePanel;
|
|
||||||
import ru.m.tankz.view.common.LifeView;
|
import ru.m.tankz.view.common.LifeView;
|
||||||
|
|
||||||
@:template class DotaGamePanel extends HGroupView implements IGamePanel {
|
@:template class DotaGamePanel extends HGroupView implements IGamePanel {
|
||||||
51
src/client/haxe/ru/m/tankz/view/game/GameView.hx
Normal file
51
src/client/haxe/ru/m/tankz/view/game/GameView.hx
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
package ru.m.tankz.view.game;
|
||||||
|
|
||||||
|
import haxework.view.IGroupView;
|
||||||
|
import haxework.view.VGroupView;
|
||||||
|
import ru.m.tankz.preset.ClassicGame;
|
||||||
|
import ru.m.tankz.preset.DeathGame;
|
||||||
|
import ru.m.tankz.preset.DotaGame;
|
||||||
|
import ru.m.tankz.render.IRender;
|
||||||
|
import ru.m.tankz.Type;
|
||||||
|
|
||||||
|
@:template class GameView extends VGroupView {
|
||||||
|
|
||||||
|
@:view public var render(default, null):IRender;
|
||||||
|
public var panel(default, null):IGamePanel;
|
||||||
|
public var type(default, set):GameType;
|
||||||
|
|
||||||
|
@:view public var top(default, null):IGroupView;
|
||||||
|
@:view public var bottom(default, null):IGroupView;
|
||||||
|
@:view public var left(default, null):IGroupView;
|
||||||
|
@:view public var right(default, null):IGroupView;
|
||||||
|
|
||||||
|
private function set_type(value:GameType):GameType {
|
||||||
|
if (type != value) {
|
||||||
|
type = value;
|
||||||
|
if (panel != null) {
|
||||||
|
panel.remove();
|
||||||
|
}
|
||||||
|
panel = buildPanel(type);
|
||||||
|
panelContainer(type).addView(panel);
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildPanel(type:GameType):IGamePanel {
|
||||||
|
return switch type {
|
||||||
|
case ClassicGame.TYPE: new ClassicGamePanel();
|
||||||
|
case DotaGame.TYPE: new DotaGamePanel();
|
||||||
|
case DeathGame.TYPE: new DeathGamePanel();
|
||||||
|
case _: throw 'Unsupported type: ${type}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function panelContainer(type:GameType):IGroupView {
|
||||||
|
return switch type {
|
||||||
|
case ClassicGame.TYPE: right;
|
||||||
|
case DotaGame.TYPE: top;
|
||||||
|
case DeathGame.TYPE: right;
|
||||||
|
case _: throw 'Unsupported type: ${type}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
22
src/client/haxe/ru/m/tankz/view/game/GameView.yaml
Normal file
22
src/client/haxe/ru/m/tankz/view/game/GameView.yaml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
views:
|
||||||
|
- id: top
|
||||||
|
$type: haxework.view.GroupView
|
||||||
|
layout.hAlign: center
|
||||||
|
geometry.size.width: 100%
|
||||||
|
- $type: haxework.view.HGroupView
|
||||||
|
views:
|
||||||
|
- id: left
|
||||||
|
$type: haxework.view.GroupView
|
||||||
|
layout.vAlign: middle
|
||||||
|
geometry.size.height: 100%
|
||||||
|
- id: render
|
||||||
|
$type: ru.m.tankz.render.Render
|
||||||
|
- id: right
|
||||||
|
$type: haxework.view.GroupView
|
||||||
|
layout.vAlign: middle
|
||||||
|
geometry.size.height: 100%
|
||||||
|
- id: bottom
|
||||||
|
$type: haxework.view.GroupView
|
||||||
|
layout.hAlign: center
|
||||||
|
geometry.size.width: 100%
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package ru.m.tankz.view.common;
|
package ru.m.tankz.view.game;
|
||||||
|
|
||||||
import haxework.view.IView;
|
import haxework.view.IView;
|
||||||
import ru.m.tankz.game.IGame;
|
import ru.m.tankz.game.IGame;
|
||||||
Reference in New Issue
Block a user