72 lines
2.5 KiB
Haxe
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}));
|
|
}
|
|
}
|
|
}
|
|
}
|