Files
tankz/src/client/haxe/ru/m/tankz/view/game/GameView.hx

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}';
}
}
}