[client] update ResultFrame
This commit is contained in:
@@ -10,14 +10,14 @@ import ru.m.tankz.game.GameEvent;
|
|||||||
import ru.m.tankz.game.GameInit;
|
import ru.m.tankz.game.GameInit;
|
||||||
import ru.m.tankz.game.GameState;
|
import ru.m.tankz.game.GameState;
|
||||||
import ru.m.tankz.storage.GameStorage;
|
import ru.m.tankz.storage.GameStorage;
|
||||||
import ru.m.tankz.view.game.PlayerView;
|
import ru.m.tankz.view.result.ResultPlayerView;
|
||||||
|
|
||||||
using ru.m.tankz.view.ViewUtil;
|
using ru.m.tankz.view.ViewUtil;
|
||||||
|
|
||||||
@:template class ResultFrame extends FrameView<Result> {
|
@:template class ResultFrame extends FrameView<Result> {
|
||||||
public static var ID(default, never):String = "result";
|
public static var ID(default, never):String = "result";
|
||||||
|
|
||||||
@:view("result") var resultView:DataView<PlayerState, PlayerView>;
|
@:view("result") var resultView:DataView<PlayerState, ResultPlayerView>;
|
||||||
@:view("level") var levelLabel:LabelView;
|
@:view("level") var levelLabel:LabelView;
|
||||||
@:view("next") var nextButton:ButtonView;
|
@:view("next") var nextButton:ButtonView;
|
||||||
|
|
||||||
@@ -31,20 +31,14 @@ using ru.m.tankz.view.ViewUtil;
|
|||||||
super(ID);
|
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 {
|
override public function onShow(data:Result):Void {
|
||||||
result = data;
|
result = data;
|
||||||
var players = Lambda.array(result.state.players);
|
var players = result.state.humans;
|
||||||
players.sort(function(a, b) return a.id.compare(b.id));
|
players.sort(function(a, b) return a.id.compare(b.id));
|
||||||
resultView.data = players;
|
resultView.data = players;
|
||||||
|
for (view in resultView.dataViews) {
|
||||||
|
view.tank = result.state.config.getPlayerTank(view.data.id).skin;
|
||||||
|
}
|
||||||
levelLabel.text = data.level.toLevelLabel();
|
levelLabel.text = data.level.toLevelLabel();
|
||||||
nextButton.disabled = !gameStorage.get(result.level.packId).isPresetAvailable(result.level.id + 1, result.state.presetId);
|
nextButton.disabled = !gameStorage.get(result.level.packId).isPresetAvailable(result.level.id + 1, result.state.presetId);
|
||||||
nextButton.text = 'Next #${result.level.id + 1}';
|
nextButton.text = 'Next #${result.level.id + 1}';
|
||||||
|
|||||||
@@ -9,11 +9,15 @@ views:
|
|||||||
font.align: center
|
font.align: center
|
||||||
- id: result
|
- id: result
|
||||||
$type: haxework.view.data.DataView
|
$type: haxework.view.data.DataView
|
||||||
factory: ~playerViewFactory
|
layout:
|
||||||
|
$type: haxework.view.layout.TailLayout
|
||||||
|
factory: ~ru.m.tankz.view.result.ResultPlayerView.factory
|
||||||
|
geometry.width: 100%
|
||||||
geometry.height: 100%
|
geometry.height: 100%
|
||||||
overflow.y: scroll
|
overflow.y: scroll
|
||||||
geometry.margin.top: 20
|
geometry.margin.top: 20
|
||||||
layout.margin: 5
|
layout.margin: 5
|
||||||
|
layout.hAlign: center
|
||||||
- $type: haxework.view.group.HGroupView
|
- $type: haxework.view.group.HGroupView
|
||||||
style: panel
|
style: panel
|
||||||
layout.margin: 10
|
layout.margin: 10
|
||||||
|
|||||||
37
src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.hx
Normal file
37
src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.hx
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package ru.m.tankz.view.result;
|
||||||
|
|
||||||
|
import haxework.view.form.LabelView;
|
||||||
|
import haxework.view.group.VGroupView;
|
||||||
|
import haxework.view.ImageView;
|
||||||
|
import openfl.Assets;
|
||||||
|
import ru.m.tankz.game.GameState;
|
||||||
|
|
||||||
|
@:template class ResultPlayerView extends VGroupView {
|
||||||
|
|
||||||
|
@:view("tank") var tankView:ImageView;
|
||||||
|
@:view("title") var titleView:LabelView;
|
||||||
|
@:view("score") var scoreView:LabelView;
|
||||||
|
|
||||||
|
public var data(default, set):PlayerState;
|
||||||
|
public var tank(default, set):String;
|
||||||
|
|
||||||
|
private function set_data(value:PlayerState):PlayerState {
|
||||||
|
data = value;
|
||||||
|
titleView.text = data.name;
|
||||||
|
scoreView.text = '${data.score}$';
|
||||||
|
tankView.color = value.color;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function set_tank(value:String):String {
|
||||||
|
tank = value;
|
||||||
|
tankView.image = Assets.getBitmapData('resources/image/tank/${tank}-0.png');
|
||||||
|
return tank;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function factory(index:Int, data:PlayerState):ResultPlayerView {
|
||||||
|
var result = new ResultPlayerView();
|
||||||
|
result.data = data;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
20
src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.yaml
Normal file
20
src/client/haxe/ru/m/tankz/view/result/ResultPlayerView.yaml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
style: light
|
||||||
|
geometry.margin: 10
|
||||||
|
geometry.padding: 10
|
||||||
|
geometry.width: 50%
|
||||||
|
geometry.height: 100%
|
||||||
|
layout.hAlign: center
|
||||||
|
views:
|
||||||
|
- $type: haxework.view.group.HGroupView
|
||||||
|
views:
|
||||||
|
- id: tank
|
||||||
|
$type: haxework.view.ImageView
|
||||||
|
geometry.width: 42
|
||||||
|
geometry.height: 42
|
||||||
|
- id: title
|
||||||
|
$type: haxework.view.form.LabelView
|
||||||
|
- id: score
|
||||||
|
$type: haxework.view.form.LabelView
|
||||||
|
style: text.box
|
||||||
|
geometry.width: 100
|
||||||
@@ -3,6 +3,7 @@ package ru.m.tankz.game;
|
|||||||
import haxework.color.Color;
|
import haxework.color.Color;
|
||||||
import ru.m.tankz.bundle.IConfigBundle;
|
import ru.m.tankz.bundle.IConfigBundle;
|
||||||
import ru.m.tankz.config.Config;
|
import ru.m.tankz.config.Config;
|
||||||
|
import ru.m.tankz.control.Controller;
|
||||||
import ru.m.tankz.control.PlayerControl;
|
import ru.m.tankz.control.PlayerControl;
|
||||||
import ru.m.tankz.Type;
|
import ru.m.tankz.Type;
|
||||||
|
|
||||||
@@ -74,6 +75,7 @@ class GameState {
|
|||||||
public var presetId:PresetId;
|
public var presetId:PresetId;
|
||||||
public var controls:Array<PlayerControl>;
|
public var controls:Array<PlayerControl>;
|
||||||
public var players:Map<String, PlayerState>;
|
public var players:Map<String, PlayerState>;
|
||||||
|
public var humans(get, null):Array<PlayerState>;
|
||||||
public var teams:Map<TeamId, TeamState>;
|
public var teams:Map<TeamId, TeamState>;
|
||||||
public var preset(get, null):GamePreset;
|
public var preset(get, null):GamePreset;
|
||||||
public var config(get, null):Config;
|
public var config(get, null):Config;
|
||||||
@@ -103,6 +105,17 @@ class GameState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function get_humans():Array<PlayerState> {
|
||||||
|
return controls.filter(function(control:PlayerControl):Bool {
|
||||||
|
return switch control.controller {
|
||||||
|
case HUMAN(_): true;
|
||||||
|
case _: false;
|
||||||
|
}
|
||||||
|
}).map(function(control:PlayerControl):PlayerState {
|
||||||
|
return players.get(control.playerId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private function get_preset():GamePreset {
|
private function get_preset():GamePreset {
|
||||||
var config = configBundle.get(type);
|
var config = configBundle.get(type);
|
||||||
var preset = config.getPreset(presetId);
|
var preset = config.getPreset(presetId);
|
||||||
|
|||||||
Reference in New Issue
Block a user