From 13240677b0dd20c9c68fc1a3d6a9f1f2f46e3a95 Mon Sep 17 00:00:00 2001 From: shmyga Date: Mon, 13 May 2019 17:34:53 +0300 Subject: [PATCH] [client] refactored GameFrame --- src/client/haxe/ru/m/tankz/render/IRender.hx | 10 ++++ src/client/haxe/ru/m/tankz/render/Render.hx | 3 +- .../haxe/ru/m/tankz/view/ClientView.yaml | 8 +-- .../ru/m/tankz/view/{common => }/GameFrame.hx | 51 +++++++++---------- .../haxe/ru/m/tankz/view/GameFrame.yaml | 14 +++++ src/client/haxe/ru/m/tankz/view/LevelFrame.hx | 15 +----- .../haxe/ru/m/tankz/view/RecordFrame.hx | 14 +---- .../haxe/ru/m/tankz/view/ResultFrame.hx | 10 +--- .../m/tankz/view/classic/ClassicGameFrame.hx | 20 -------- .../tankz/view/classic/ClassicGameFrame.yaml | 10 ---- .../ru/m/tankz/view/death/DeathGameFrame.hx | 21 -------- .../ru/m/tankz/view/death/DeathGameFrame.yaml | 10 ---- .../ru/m/tankz/view/dota/DotaGameFrame.hx | 21 -------- .../ru/m/tankz/view/dota/DotaGameFrame.yaml | 10 ---- .../{classic => game}/ClassicGamePanel.hx | 3 +- .../{classic => game}/ClassicGamePanel.yaml | 0 .../view/{death => game}/DeathGamePanel.hx | 3 +- .../view/{death => game}/DeathGamePanel.yaml | 0 .../view/{dota => game}/DotaGamePanel.hx | 3 +- .../view/{dota => game}/DotaGamePanel.yaml | 0 .../haxe/ru/m/tankz/view/game/GameView.hx | 51 +++++++++++++++++++ .../haxe/ru/m/tankz/view/game/GameView.yaml | 22 ++++++++ .../tankz/view/{common => game}/IGamePanel.hx | 2 +- 23 files changed, 132 insertions(+), 169 deletions(-) create mode 100644 src/client/haxe/ru/m/tankz/render/IRender.hx rename src/client/haxe/ru/m/tankz/view/{common => }/GameFrame.hx (77%) create mode 100644 src/client/haxe/ru/m/tankz/view/GameFrame.yaml delete mode 100755 src/client/haxe/ru/m/tankz/view/classic/ClassicGameFrame.hx delete mode 100644 src/client/haxe/ru/m/tankz/view/classic/ClassicGameFrame.yaml delete mode 100755 src/client/haxe/ru/m/tankz/view/death/DeathGameFrame.hx delete mode 100644 src/client/haxe/ru/m/tankz/view/death/DeathGameFrame.yaml delete mode 100755 src/client/haxe/ru/m/tankz/view/dota/DotaGameFrame.hx delete mode 100644 src/client/haxe/ru/m/tankz/view/dota/DotaGameFrame.yaml rename src/client/haxe/ru/m/tankz/view/{classic => game}/ClassicGamePanel.hx (96%) rename src/client/haxe/ru/m/tankz/view/{classic => game}/ClassicGamePanel.yaml (100%) rename src/client/haxe/ru/m/tankz/view/{death => game}/DeathGamePanel.hx (90%) rename src/client/haxe/ru/m/tankz/view/{death => game}/DeathGamePanel.yaml (100%) rename src/client/haxe/ru/m/tankz/view/{dota => game}/DotaGamePanel.hx (94%) rename src/client/haxe/ru/m/tankz/view/{dota => game}/DotaGamePanel.yaml (100%) create mode 100644 src/client/haxe/ru/m/tankz/view/game/GameView.hx create mode 100644 src/client/haxe/ru/m/tankz/view/game/GameView.yaml rename src/client/haxe/ru/m/tankz/view/{common => game}/IGamePanel.hx (80%) diff --git a/src/client/haxe/ru/m/tankz/render/IRender.hx b/src/client/haxe/ru/m/tankz/render/IRender.hx new file mode 100644 index 0000000..4b189ad --- /dev/null +++ b/src/client/haxe/ru/m/tankz/render/IRender.hx @@ -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 extends GameListener extends EngineListener { + public function draw(game:IEngine):Void; + public function reset():Void; +} diff --git a/src/client/haxe/ru/m/tankz/render/Render.hx b/src/client/haxe/ru/m/tankz/render/Render.hx index ce42ba4..c87dfd4 100755 --- a/src/client/haxe/ru/m/tankz/render/Render.hx +++ b/src/client/haxe/ru/m/tankz/render/Render.hx @@ -13,10 +13,9 @@ import ru.m.geom.Point; import ru.m.tankz.core.EntityType; import ru.m.tankz.engine.IEngine; import ru.m.tankz.game.GameEvent; -import ru.m.tankz.game.IGame; 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 groundLayer:Sprite; diff --git a/src/client/haxe/ru/m/tankz/view/ClientView.yaml b/src/client/haxe/ru/m/tankz/view/ClientView.yaml index 823ef15..a8757ad 100755 --- a/src/client/haxe/ru/m/tankz/view/ClientView.yaml +++ b/src/client/haxe/ru/m/tankz/view/ClientView.yaml @@ -7,12 +7,8 @@ views: $type: ru.m.tankz.view.StartFrame - id: level $type: ru.m.tankz.view.LevelFrame - - id: classic - $type: ru.m.tankz.view.classic.ClassicGameFrame - - id: dota - $type: ru.m.tankz.view.dota.DotaGameFrame - - id: death - $type: ru.m.tankz.view.death.DeathGameFrame + - id: game + $type: ru.m.tankz.view.GameFrame - id: result $type: ru.m.tankz.view.ResultFrame - id: settings diff --git a/src/client/haxe/ru/m/tankz/view/common/GameFrame.hx b/src/client/haxe/ru/m/tankz/view/GameFrame.hx similarity index 77% rename from src/client/haxe/ru/m/tankz/view/common/GameFrame.hx rename to src/client/haxe/ru/m/tankz/view/GameFrame.hx index 2333522..ddd42e2 100644 --- a/src/client/haxe/ru/m/tankz/view/common/GameFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/GameFrame.hx @@ -1,9 +1,9 @@ -package ru.m.tankz.view.common; +package ru.m.tankz.view; import flash.events.Event; import haxe.ds.Option; import haxework.view.frame.FrameSwitcher; -import haxework.view.GroupView; +import haxework.view.VGroupView; import ru.m.tankz.game.Game; import ru.m.tankz.game.GameEvent; 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.GameRecorder; import ru.m.tankz.network.NetworkManager; -import ru.m.tankz.render.Render; import ru.m.tankz.sound.SoundManager; import ru.m.tankz.storage.GameStorage; 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 var render(get, null):Render; - private var panel(get, null):IGamePanel; + @:view("game") private var gameView(default, null):GameView; @:provide var network:NetworkManager; @:provide var soundManager:SoundManager; @@ -40,14 +39,6 @@ class GameFrame extends GroupView implements GameListener { private var recorder:GameRecorder; private var player:GamePlayer; - private function get_render():Render { - throw "Not implemented"; - } - - private function get_panel():IGamePanel { - return null; - } - public function onShow():Void { if (record != null) { play(record); @@ -58,13 +49,14 @@ class GameFrame extends GroupView implements GameListener { } private function start(state:GameState):Void { + gameView.type = state.type; game = new Game(state); - game.connect(render); - game.engine.connect(render); + game.connect(gameView.render); + game.engine.connect(gameView.render); game.connect(soundManager); game.connect(this); - if (panel != null) { - game.connect(panel); + if (gameView.panel != null) { + game.connect(gameView.panel); } //game.connect(new GameTracer()); recorder = new GameRecorder(); @@ -72,22 +64,23 @@ class GameFrame extends GroupView implements GameListener { runner = new GameRunner(game); runner.start(state); content.addEventListener(Event.ENTER_FRAME, _redraw); - render.draw(game.engine); + gameView.render.draw(game.engine); } private function play(record:GameRecord):Void { + gameView.type = record.type; game = new Game(record.state); - game.connect(render); - game.engine.connect(render); + game.connect(gameView.render); + game.engine.connect(gameView.render); game.connect(soundManager); //game.connect(this); - if (panel != null) { - game.connect(panel); + if (gameView.panel != null) { + game.connect(gameView.panel); } player = new GamePlayer(game, record); player.start(); content.addEventListener(Event.ENTER_FRAME, _redraw); - render.draw(game.engine); + gameView.render.draw(game.engine); } private function stop():Void { @@ -100,7 +93,7 @@ class GameFrame extends GroupView implements GameListener { game.dispose(); game = null; } - render.reset(); + gameView.render.reset(); } public function onGameEvent(event:GameEvent):Void { @@ -130,6 +123,10 @@ class GameFrame extends GroupView implements GameListener { } private function _redraw(_):Void { - render.draw(game.engine); + gameView.render.draw(game.engine); + } + + public function close():Void { + switcher.change(LevelFrame.ID); } } diff --git a/src/client/haxe/ru/m/tankz/view/GameFrame.yaml b/src/client/haxe/ru/m/tankz/view/GameFrame.yaml new file mode 100644 index 0000000..0b091b8 --- /dev/null +++ b/src/client/haxe/ru/m/tankz/view/GameFrame.yaml @@ -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() diff --git a/src/client/haxe/ru/m/tankz/view/LevelFrame.hx b/src/client/haxe/ru/m/tankz/view/LevelFrame.hx index 19acf93..6eac9f1 100644 --- a/src/client/haxe/ru/m/tankz/view/LevelFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/LevelFrame.hx @@ -8,14 +8,8 @@ import haxework.view.VGroupView; import ru.m.tankz.bundle.ILevelBundle; import ru.m.tankz.config.Config; 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.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; @:template class LevelFrame extends VGroupView { @@ -39,12 +33,7 @@ import ru.m.tankz.view.popup.LevelPopup; private function start(level:LevelConfig, preset:GamePreset):Void { state.levelId = level.id; state.presetId = preset.id; - switcher.change(switch state.type { - case ClassicGame.TYPE: ClassicGameFrame.ID; - case DotaGame.TYPE: DotaGameFrame.ID; - case DeathGame.TYPE: DeathGameFrame.ID; - case _: StartFrame.ID; - }); + switcher.change(GameFrame.ID); } private function levelViewFactory(index:Int, levelId:LevelId):ButtonView { @@ -70,6 +59,6 @@ import ru.m.tankz.view.popup.LevelPopup; state.config.presets, storage.get(state.type) ); - levelPopup.show().then(function(preset) start(level, preset)).catchError(function(_) {}); + levelPopup.show().then(function(preset) preset != null ? start(level, preset) : {}); } } diff --git a/src/client/haxe/ru/m/tankz/view/RecordFrame.hx b/src/client/haxe/ru/m/tankz/view/RecordFrame.hx index 3aabb7e..1da07c6 100644 --- a/src/client/haxe/ru/m/tankz/view/RecordFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/RecordFrame.hx @@ -5,13 +5,7 @@ import haxework.view.list.ListView.IListItemView; import haxework.view.list.VListView; import haxework.view.VGroupView; 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.view.classic.ClassicGameFrame; -import ru.m.tankz.view.death.DeathGameFrame; -import ru.m.tankz.view.dota.DotaGameFrame; @:template class RecordFrame extends VGroupView { public static var ID(default, never):String = "record"; @@ -28,13 +22,7 @@ import ru.m.tankz.view.dota.DotaGameFrame; private function onRecordSelect(item:IListItemView):Void { record = item.data; - // ToDo: copy@paste from LevelFrame - switcher.change(switch record.type { - case ClassicGame.TYPE: ClassicGameFrame.ID; - case DotaGame.TYPE: DotaGameFrame.ID; - case DeathGame.TYPE: DeathGameFrame.ID; - case _: StartFrame.ID; - }); + switcher.change(GameFrame.ID); } private function close() { diff --git a/src/client/haxe/ru/m/tankz/view/ResultFrame.hx b/src/client/haxe/ru/m/tankz/view/ResultFrame.hx index 6c32953..e8e8fd9 100644 --- a/src/client/haxe/ru/m/tankz/view/ResultFrame.hx +++ b/src/client/haxe/ru/m/tankz/view/ResultFrame.hx @@ -6,11 +6,7 @@ import haxework.view.frame.FrameSwitcher; import haxework.view.LabelView; import haxework.view.VGroupView; 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.dota.DotaGameFrame; @:template class ResultFrame extends VGroupView { public static var ID(default, never):String = "result"; @@ -42,11 +38,7 @@ import ru.m.tankz.view.dota.DotaGameFrame; } private function next() { - frames.change(switch state == null ? null : state.type { - case ClassicGame.TYPE: ClassicGameFrame.ID; - case DotaGame.TYPE: DotaGameFrame.ID; - case _: StartFrame.ID; - }); + frames.change(GameFrame.ID); } private function close() { diff --git a/src/client/haxe/ru/m/tankz/view/classic/ClassicGameFrame.hx b/src/client/haxe/ru/m/tankz/view/classic/ClassicGameFrame.hx deleted file mode 100755 index b8028bb..0000000 --- a/src/client/haxe/ru/m/tankz/view/classic/ClassicGameFrame.hx +++ /dev/null @@ -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; - } -} diff --git a/src/client/haxe/ru/m/tankz/view/classic/ClassicGameFrame.yaml b/src/client/haxe/ru/m/tankz/view/classic/ClassicGameFrame.yaml deleted file mode 100644 index 0e361b0..0000000 --- a/src/client/haxe/ru/m/tankz/view/classic/ClassicGameFrame.yaml +++ /dev/null @@ -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 diff --git a/src/client/haxe/ru/m/tankz/view/death/DeathGameFrame.hx b/src/client/haxe/ru/m/tankz/view/death/DeathGameFrame.hx deleted file mode 100755 index 8cfe1f2..0000000 --- a/src/client/haxe/ru/m/tankz/view/death/DeathGameFrame.hx +++ /dev/null @@ -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; - } -} diff --git a/src/client/haxe/ru/m/tankz/view/death/DeathGameFrame.yaml b/src/client/haxe/ru/m/tankz/view/death/DeathGameFrame.yaml deleted file mode 100644 index 4f861b2..0000000 --- a/src/client/haxe/ru/m/tankz/view/death/DeathGameFrame.yaml +++ /dev/null @@ -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 diff --git a/src/client/haxe/ru/m/tankz/view/dota/DotaGameFrame.hx b/src/client/haxe/ru/m/tankz/view/dota/DotaGameFrame.hx deleted file mode 100755 index 77c1a76..0000000 --- a/src/client/haxe/ru/m/tankz/view/dota/DotaGameFrame.hx +++ /dev/null @@ -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; - } -} diff --git a/src/client/haxe/ru/m/tankz/view/dota/DotaGameFrame.yaml b/src/client/haxe/ru/m/tankz/view/dota/DotaGameFrame.yaml deleted file mode 100644 index 3986e8b..0000000 --- a/src/client/haxe/ru/m/tankz/view/dota/DotaGameFrame.yaml +++ /dev/null @@ -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 diff --git a/src/client/haxe/ru/m/tankz/view/classic/ClassicGamePanel.hx b/src/client/haxe/ru/m/tankz/view/game/ClassicGamePanel.hx similarity index 96% rename from src/client/haxe/ru/m/tankz/view/classic/ClassicGamePanel.hx rename to src/client/haxe/ru/m/tankz/view/game/ClassicGamePanel.hx index 9274cc7..873b3b1 100644 --- a/src/client/haxe/ru/m/tankz/view/classic/ClassicGamePanel.hx +++ b/src/client/haxe/ru/m/tankz/view/game/ClassicGamePanel.hx @@ -1,4 +1,4 @@ -package ru.m.tankz.view.classic; +package ru.m.tankz.view.game; import haxework.view.LabelView; import haxework.view.VGroupView; @@ -6,7 +6,6 @@ import ru.m.tankz.game.GameEvent; import ru.m.tankz.game.GameState; import ru.m.tankz.preset.ClassicGame; import ru.m.tankz.Type.PlayerId; -import ru.m.tankz.view.common.IGamePanel; import ru.m.tankz.view.common.LifeView; @:template class ClassicGamePanel extends VGroupView implements IGamePanel { diff --git a/src/client/haxe/ru/m/tankz/view/classic/ClassicGamePanel.yaml b/src/client/haxe/ru/m/tankz/view/game/ClassicGamePanel.yaml similarity index 100% rename from src/client/haxe/ru/m/tankz/view/classic/ClassicGamePanel.yaml rename to src/client/haxe/ru/m/tankz/view/game/ClassicGamePanel.yaml diff --git a/src/client/haxe/ru/m/tankz/view/death/DeathGamePanel.hx b/src/client/haxe/ru/m/tankz/view/game/DeathGamePanel.hx similarity index 90% rename from src/client/haxe/ru/m/tankz/view/death/DeathGamePanel.hx rename to src/client/haxe/ru/m/tankz/view/game/DeathGamePanel.hx index 15a76a7..db7249a 100644 --- a/src/client/haxe/ru/m/tankz/view/death/DeathGamePanel.hx +++ b/src/client/haxe/ru/m/tankz/view/game/DeathGamePanel.hx @@ -1,11 +1,10 @@ -package ru.m.tankz.view.death; +package ru.m.tankz.view.game; import haxework.view.DataView; import haxework.view.LabelView; import haxework.view.VGroupView; import ru.m.tankz.game.GameEvent; import ru.m.tankz.game.GameState; -import ru.m.tankz.view.common.IGamePanel; import ru.m.tankz.view.common.LifeView; @:template class DeathGamePanel extends VGroupView implements IGamePanel { diff --git a/src/client/haxe/ru/m/tankz/view/death/DeathGamePanel.yaml b/src/client/haxe/ru/m/tankz/view/game/DeathGamePanel.yaml similarity index 100% rename from src/client/haxe/ru/m/tankz/view/death/DeathGamePanel.yaml rename to src/client/haxe/ru/m/tankz/view/game/DeathGamePanel.yaml diff --git a/src/client/haxe/ru/m/tankz/view/dota/DotaGamePanel.hx b/src/client/haxe/ru/m/tankz/view/game/DotaGamePanel.hx similarity index 94% rename from src/client/haxe/ru/m/tankz/view/dota/DotaGamePanel.hx rename to src/client/haxe/ru/m/tankz/view/game/DotaGamePanel.hx index eae8529..bb19586 100644 --- a/src/client/haxe/ru/m/tankz/view/dota/DotaGamePanel.hx +++ b/src/client/haxe/ru/m/tankz/view/game/DotaGamePanel.hx @@ -1,4 +1,4 @@ -package ru.m.tankz.view.dota; +package ru.m.tankz.view.game; import haxework.view.HGroupView; import haxework.view.LabelView; @@ -6,7 +6,6 @@ import ru.m.tankz.game.GameEvent; import ru.m.tankz.game.GameState; import ru.m.tankz.preset.DotaGame; import ru.m.tankz.Type.TeamId; -import ru.m.tankz.view.common.IGamePanel; import ru.m.tankz.view.common.LifeView; @:template class DotaGamePanel extends HGroupView implements IGamePanel { diff --git a/src/client/haxe/ru/m/tankz/view/dota/DotaGamePanel.yaml b/src/client/haxe/ru/m/tankz/view/game/DotaGamePanel.yaml similarity index 100% rename from src/client/haxe/ru/m/tankz/view/dota/DotaGamePanel.yaml rename to src/client/haxe/ru/m/tankz/view/game/DotaGamePanel.yaml diff --git a/src/client/haxe/ru/m/tankz/view/game/GameView.hx b/src/client/haxe/ru/m/tankz/view/game/GameView.hx new file mode 100644 index 0000000..742ae6d --- /dev/null +++ b/src/client/haxe/ru/m/tankz/view/game/GameView.hx @@ -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}'; + } + } +} diff --git a/src/client/haxe/ru/m/tankz/view/game/GameView.yaml b/src/client/haxe/ru/m/tankz/view/game/GameView.yaml new file mode 100644 index 0000000..4b5b730 --- /dev/null +++ b/src/client/haxe/ru/m/tankz/view/game/GameView.yaml @@ -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% diff --git a/src/client/haxe/ru/m/tankz/view/common/IGamePanel.hx b/src/client/haxe/ru/m/tankz/view/game/IGamePanel.hx similarity index 80% rename from src/client/haxe/ru/m/tankz/view/common/IGamePanel.hx rename to src/client/haxe/ru/m/tankz/view/game/IGamePanel.hx index d4eb4d1..c4fc486 100644 --- a/src/client/haxe/ru/m/tankz/view/common/IGamePanel.hx +++ b/src/client/haxe/ru/m/tankz/view/game/IGamePanel.hx @@ -1,4 +1,4 @@ -package ru.m.tankz.view.common; +package ru.m.tankz.view.game; import haxework.view.IView; import ru.m.tankz.game.IGame;