Files
tankz/src/client/haxe/ru/m/tankz/view/ResultFrame.hx
2019-03-26 21:34:59 +03:00

60 lines
2.0 KiB
Haxe

package ru.m.tankz.view;
import haxework.view.LabelView;
import haxework.view.ButtonView;
import haxework.view.DataView;
import haxework.view.frame.FrameSwitcher;
import haxework.view.VGroupView;
import ru.m.tankz.control.Control;
import ru.m.tankz.view.classic.ClassicGameFrame;
import ru.m.tankz.view.common.LifeView;
import ru.m.tankz.view.dota.DotaGameFrame;
import ru.m.tankz.game.GameState;
import ru.m.tankz.preset.ClassicGame;
import ru.m.tankz.preset.DotaGame;
@:template class ResultFrame extends VGroupView {
public static var ID(default, never):String = "result";
@:view("result") var resultView:DataView<PlayerState, LifeView>;
@:view("next") var nextButton:ButtonView;
@:view("level") var levelLabel:LabelView;
@:provide var frames:FrameSwitcher;
@:provide var state:GameState;
@:provide("result") var resultState:GameState;
private function playerViewFactory(index:Int, player:PlayerState) {
var view = new LifeView();
var playerConfig = resultState.config.getPlayer(player.id);
var tankType = playerConfig.tanks[0].type;
var tankConfig = resultState.config.getTank(tankType);
view.tank = tankConfig == null ? 'ba' : tankConfig.skin;
view.color = resultState.getPlayerColor(player.id);
view.life = player.frags;
view.score = player.score;
return view;
}
public function onShow() {
resultView.data = Lambda.array(Lambda.filter(resultState.players, function(player:PlayerState):Bool return switch player.controller {
case HUMAN(_): true;
case _: false;
}));
levelLabel.text = 'Level ${resultState.level}';
nextButton.visible = state != null;
}
private function next() {
frames.change(switch state == null ? null : state.type {
case ClassicGame.TYPE: ClassicGameFrame.ID;
case DotaGame.TYPE: DotaGameFrame.ID;
case _: StartFrame.ID;
});
}
private function close() {
frames.change(StartFrame.ID);
}
}