54 lines
1.6 KiB
Haxe
54 lines
1.6 KiB
Haxe
package ru.m.tankz.view.game;
|
|
|
|
import haxework.view.IGroupView;
|
|
import haxework.view.VGroupView;
|
|
import ru.m.geom.Direction;
|
|
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);
|
|
getContainer(panel.position).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 getContainer(position:Direction):IGroupView {
|
|
return switch position.toString() {
|
|
case "RIGHT": right;
|
|
case "LEFT": left;
|
|
case "TOP": top;
|
|
case "BOTTOM": bottom;
|
|
case _: throw 'Unsupported position: ${position}';
|
|
}
|
|
}
|
|
}
|