[common] add PlayerControl presets
This commit is contained in:
@@ -16,7 +16,7 @@ class ConfigBundle implements IConfigBundle {
|
||||
public function get(type:GameType):Config {
|
||||
if (!_cache.exists(type)) {
|
||||
var source:ConfigSource = Yaml.parse(Assets.getText('resources/${type}/config.yaml'), Parser.options().useObjects());
|
||||
_cache.set(type, new Config(type, source.game, source.map, source.bricks, source.presets, source.points, source.tanks, source.bonuses));
|
||||
_cache.set(type, Config.fromSource(type, source));
|
||||
}
|
||||
return _cache.get(type);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@ class NetworkControl extends HumanControl {
|
||||
@:provide private var network:NetworkManager;
|
||||
|
||||
override public function action(action:TankAction):Void {
|
||||
network.action(tankId, action);
|
||||
if (tankId > -1) {
|
||||
network.action(tankId, action);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,14 @@ class NetworkGame extends Game {
|
||||
gameEventSignal.emit(event);
|
||||
}
|
||||
|
||||
override public function start():Void {
|
||||
var player = Lambda.find(network.game.players, function(player) return player.user.uuid == network.user.uuid);
|
||||
if (player != null) {
|
||||
state.controls.push({playerId: [player.team, player.index], control: "human-0"});
|
||||
}
|
||||
super.start();
|
||||
}
|
||||
|
||||
override public function dispose():Void {
|
||||
super.dispose();
|
||||
network.gameEventSignal.disconnect(onGameEventProto);
|
||||
|
||||
@@ -117,7 +117,7 @@ class Render extends SpriteView implements IRender {
|
||||
case SPAWN(TANK(id, rect, playerId, info)):
|
||||
var item = new TankRenderItem(rect);
|
||||
var tankConfig = config.getTank(info.type);
|
||||
item.color = config.getColor(playerId);
|
||||
item.color = info.color;
|
||||
item.skin = tankConfig.skin;
|
||||
item.hits = info.hits;
|
||||
item.bonus = info.bonus;
|
||||
|
||||
@@ -33,9 +33,10 @@ import ru.m.tankz.view.popup.LevelPopup;
|
||||
levels.data = [for (i in 0...state.config.game.levels) i];
|
||||
}
|
||||
|
||||
private function start(level:LevelConfig, preset:GamePreset):Void {
|
||||
private function start(level:LevelConfig, preset:GamePreset, control:ControlPreset):Void {
|
||||
state.levelId = level.id;
|
||||
state.presetId = preset.id;
|
||||
state.controls = control.values;
|
||||
game = new LocalGame(state);
|
||||
switcher.change(GameFrame.ID);
|
||||
}
|
||||
@@ -61,8 +62,9 @@ import ru.m.tankz.view.popup.LevelPopup;
|
||||
levelPopup.setData(
|
||||
level,
|
||||
state.config.presets,
|
||||
state.config.controls,
|
||||
storage.get(state.type)
|
||||
);
|
||||
levelPopup.show().then(function(preset) preset != null ? start(level, preset) : {});
|
||||
levelPopup.show().then(function(result) result != null ? start(level, result.preset, result.control) : {});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import ru.m.tankz.game.NetworkGame;
|
||||
import ru.m.tankz.network.NetworkManager;
|
||||
import ru.m.tankz.proto.core.GameProto;
|
||||
import ru.m.tankz.proto.core.GameStateProto;
|
||||
import ru.m.tankz.proto.core.UserProto;
|
||||
import ru.m.tankz.proto.core.PlayerProto;
|
||||
|
||||
@:template class GameRoomFrame extends VGroupView {
|
||||
|
||||
@@ -18,7 +18,7 @@ import ru.m.tankz.proto.core.UserProto;
|
||||
|
||||
@:view var start:ButtonView;
|
||||
@:view var info:TextView;
|
||||
@:view var players:VListView<UserProto>;
|
||||
@:view var players:VListView<PlayerProto>;
|
||||
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
@:provide var network:NetworkManager;
|
||||
|
||||
@@ -3,18 +3,18 @@ package ru.m.tankz.view.network;
|
||||
import haxework.view.HGroupView;
|
||||
import haxework.view.LabelView;
|
||||
import haxework.view.list.ListView;
|
||||
import ru.m.tankz.proto.core.UserProto;
|
||||
import ru.m.tankz.proto.core.PlayerProto;
|
||||
|
||||
@:template class PlayerItemView extends HGroupView implements IListItemView<UserProto> {
|
||||
@:template class PlayerItemView extends HGroupView implements IListItemView<PlayerProto> {
|
||||
|
||||
public var item_index(default, default):Int;
|
||||
public var data(default, set):UserProto;
|
||||
public var data(default, set):PlayerProto;
|
||||
|
||||
@:view var label:LabelView;
|
||||
|
||||
private function set_data(value:UserProto):UserProto {
|
||||
private function set_data(value:PlayerProto):PlayerProto {
|
||||
data = value;
|
||||
label.text = '${value.name}';
|
||||
label.text = '${value.user.name}';
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package ru.m.tankz.view.popup;
|
||||
|
||||
import haxework.view.ToggleButtonView;
|
||||
import haxework.view.ButtonView;
|
||||
import haxework.view.DataView;
|
||||
import haxework.view.LabelView;
|
||||
@@ -7,19 +8,28 @@ import haxework.view.popup.PopupView;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.game.GameProgress;
|
||||
|
||||
@:template class LevelPopup extends PopupView<GamePreset> {
|
||||
typedef Result = {
|
||||
var control:ControlPreset;
|
||||
var preset:GamePreset;
|
||||
}
|
||||
|
||||
@:template class LevelPopup extends PopupView<Result> {
|
||||
|
||||
private var level:LevelConfig;
|
||||
private var progress:GameProgress;
|
||||
|
||||
@:view var name:LabelView;
|
||||
@:view("presets") var presetsView:DataView<GamePreset, ButtonView>;
|
||||
@:view("controls") var controlsView:DataView<ControlPreset, ToggleButtonView>;
|
||||
private var control:ControlPreset;
|
||||
|
||||
public function setData(level:LevelConfig, presets:Array<GamePreset>, progress:GameProgress):Void {
|
||||
public function setData(level:LevelConfig, presets:Array<GamePreset>, controls:Array<ControlPreset>, progress:GameProgress):Void {
|
||||
this.level = level;
|
||||
this.progress = progress;
|
||||
name.text = '${level.id}. ${level.name != null ? level.name : "#"}';
|
||||
presetsView.data = presets;
|
||||
control = controls[0];
|
||||
controlsView.data = controls;
|
||||
}
|
||||
|
||||
private function presetViewFactory(index:Int, value:GamePreset):ButtonView {
|
||||
@@ -32,7 +42,22 @@ import ru.m.tankz.game.GameProgress;
|
||||
|
||||
private function onPresetSelect(value:GamePreset):Void {
|
||||
if (progress.isPresetAvailable(level.id, value.id)) {
|
||||
close(value);
|
||||
close({control: control, preset: value});
|
||||
}
|
||||
}
|
||||
|
||||
private function controlViewFactory(index:Int, value:ControlPreset):ToggleButtonView {
|
||||
var result = new ToggleButtonView();
|
||||
result.skinId = 'button.simple.active';
|
||||
result.on = control == value;
|
||||
result.text = value.name;
|
||||
return result;
|
||||
}
|
||||
|
||||
private function onControlSelect(index:Int, value:ControlPreset, view:ToggleButtonView):Void {
|
||||
control = value;
|
||||
for (v in controlsView.dataViews) {
|
||||
v.on = v == view;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,15 @@ view:
|
||||
+onPress: $code:reject('close')
|
||||
- $type: haxework.view.SpriteView
|
||||
geometry.size.height: 100%
|
||||
- id: controls
|
||||
$type: haxework.view.DataView
|
||||
factory: $this:controlViewFactory
|
||||
+onItemSelect: $this:onControlSelect
|
||||
layout:
|
||||
$type: haxework.view.layout.HorizontalLayout
|
||||
hAlign: center
|
||||
margin: 5
|
||||
skinId: panel
|
||||
- id: presets
|
||||
$type: haxework.view.DataView
|
||||
factory: $this:presetViewFactory
|
||||
|
||||
Reference in New Issue
Block a user