Files
tankz/src/client/haxe/ru/m/tankz/view/ResultFrame.hx
2019-07-29 17:57:33 +03:00

72 lines
2.5 KiB
Haxe

package ru.m.tankz.view;
import haxework.view.data.DataView;
import haxework.view.form.ButtonView;
import haxework.view.form.LabelView;
import haxework.view.frame.FrameSwitcher;
import haxework.view.frame.FrameView;
import ru.m.tankz.bundle.ILevelBundle;
import ru.m.tankz.game.GameEvent;
import ru.m.tankz.game.GameInit;
import ru.m.tankz.game.GameState;
import ru.m.tankz.storage.GameStorage;
import ru.m.tankz.view.game.PlayerView;
using ru.m.tankz.view.ViewUtil;
@:template class ResultFrame extends FrameView<Result> {
public static var ID(default, never):String = "result";
@:view("result") var resultView:DataView<PlayerState, PlayerView>;
@:view("level") var levelLabel:LabelView;
@:view("next") var nextButton:ButtonView;
@:provide var frames:FrameSwitcher;
@:provide static var levelBundle:ILevelBundle;
@:provide static var gameStorage:GameStorage;
private var result:Result;
public function new() {
super(ID);
}
private function playerViewFactory(index:Int, player:PlayerState):PlayerView {
var view = new PlayerView();
view.tank = result.state.config.getPlayerTank(player.id).skin;
view.color = result.state.getPlayerColor(player.id);
view.life = player.frags;
view.score = player.score;
return view;
}
override public function onShow(data:Result):Void {
result = data;
var players = Lambda.array(result.state.players);
players.sort(function(a, b) return a.id.compare(b.id));
resultView.data = players;
levelLabel.text = data.level.toLevelLabel();
nextButton.disabled = !gameStorage.get(result.level.packId).isPresetAvailable(result.level.id + 1, result.state.presetId);
nextButton.text = 'Next #${result.level.id + 1}';
}
private function levels():Void {
frames.change(LevelFrame.ID, result.level.packId);
}
private function restart():Void {
frames.change(GameFrame.ID, LOCAL({state: result.state.clean(), level: result.level}));
}
private function next():Void {
var pack = levelBundle.get(result.level.packId);
if (pack.data.length > result.level.id + 1) {
var level = pack.data[result.level.id + 1];
var progress = gameStorage.get(pack.id);
if (progress.isPresetAvailable(level.id, result.state.presetId)) {
frames.change(GameFrame.ID, LOCAL({state: result.state.clean(), level: level}));
}
}
}
}