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 { public static var ID(default, never):String = "result"; @:view("result") var resultView:DataView; @: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})); } } } }