[common] PlayerControl update
This commit is contained in:
@@ -26,6 +26,16 @@ abstract PlayerId(Array<Dynamic>) {
|
||||
|
||||
private inline function get_index():Int return this[1];
|
||||
|
||||
public function compare(other:PlayerId):Int {
|
||||
if (other == null) {
|
||||
return 1;
|
||||
}
|
||||
if (other.team != team) {
|
||||
return team > other.team ? 1 : -1;
|
||||
}
|
||||
return index - other.index;
|
||||
}
|
||||
|
||||
@:from static public inline function fromArray(value:Array<Dynamic>):PlayerId {
|
||||
return new PlayerId(value[0], value[1]);
|
||||
}
|
||||
|
||||
@@ -120,25 +120,11 @@ typedef LevelPack = {
|
||||
var data:Array<LevelConfig>;
|
||||
}
|
||||
|
||||
typedef PlayerControl = {
|
||||
var playerId:PlayerId;
|
||||
var control:String;
|
||||
@:optional var color:Null<Int>;
|
||||
@:optional var name:String;
|
||||
}
|
||||
|
||||
typedef ControlPreset = {
|
||||
var id:Int;
|
||||
var name:String;
|
||||
var values:Array<PlayerControl>;
|
||||
};
|
||||
|
||||
typedef ConfigSource = {
|
||||
var game:GameConfig;
|
||||
var map: MapConfig;
|
||||
var bricks: Array<BrickConfig>;
|
||||
var presets: Array<GamePreset>;
|
||||
var controls: Array<ControlPreset>;
|
||||
var points: Array<SpawnPoint>;
|
||||
var tanks: Array<TankConfig>;
|
||||
var bonuses: Array<BonusConfig>;
|
||||
@@ -151,7 +137,6 @@ class Config {
|
||||
public var bricks(default, null):Array<BrickConfig>;
|
||||
public var tanks(default, null):Array<TankConfig>;
|
||||
public var presets(default, null):Array<GamePreset>;
|
||||
public var controls(default, null):Array<ControlPreset>;
|
||||
public var points(default, null):Array<SpawnPoint>;
|
||||
public var bonuses(default, null):Array<BonusConfig>;
|
||||
|
||||
@@ -164,7 +149,7 @@ class Config {
|
||||
private var playersMap:Map<String, PlayerConfig>;
|
||||
|
||||
public static function fromSource(type:GameType, source:ConfigSource):Config {
|
||||
return new Config(type, source.game, source.map, source.bricks, source.presets, source.controls, source.points, source.tanks, source.bonuses);
|
||||
return new Config(type, source.game, source.map, source.bricks, source.presets, source.points, source.tanks, source.bonuses);
|
||||
}
|
||||
|
||||
public function new(
|
||||
@@ -173,7 +158,6 @@ class Config {
|
||||
map:MapConfig,
|
||||
bricks:Array<BrickConfig>,
|
||||
presets:Array<GamePreset>,
|
||||
controls:Array<ControlPreset>,
|
||||
points:Array<SpawnPoint>,
|
||||
tanks:Array<TankConfig>,
|
||||
bonuses:Array<BonusConfig>
|
||||
@@ -183,7 +167,6 @@ class Config {
|
||||
this.map = map;
|
||||
this.bricks = bricks;
|
||||
this.presets = presets;
|
||||
this.controls = controls;
|
||||
this.points = points;
|
||||
this.tanks = tanks;
|
||||
this.bonuses = bonuses;
|
||||
@@ -271,10 +254,6 @@ class Config {
|
||||
}
|
||||
|
||||
public function isHuman(playerId:PlayerId) {
|
||||
var controller:Controller = AController.fromString(getPlayer(playerId).control);
|
||||
return switch controller {
|
||||
case HUMAN(_): true;
|
||||
case _: false;
|
||||
}
|
||||
return ControllerParser.fromString(getPlayer(playerId).control).match(HUMAN(_));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,21 +6,23 @@ enum Controller {
|
||||
BOT(type:String);
|
||||
}
|
||||
|
||||
abstract AController(Controller) {
|
||||
class ControllerParser {
|
||||
|
||||
public inline function new(value:Controller) {
|
||||
this = value;
|
||||
public static function fromString(value:String):Controller {
|
||||
return switch value {
|
||||
case null: NONE;
|
||||
case x: switch x.split("-") {
|
||||
case ["human", index]: HUMAN(Std.parseInt(index));
|
||||
case ["bot", type]: BOT(type);
|
||||
case _: NONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@:from public static function fromString(value:String):AController {
|
||||
return new AController(switch value.split("-") {
|
||||
case ["human", index]: HUMAN(Std.parseInt(index));
|
||||
case ["bot", type]: BOT(type);
|
||||
case _: NONE;
|
||||
});
|
||||
}
|
||||
|
||||
@:to public inline function toController():Controller {
|
||||
return this;
|
||||
public static function defaultName(controller:Controller):String {
|
||||
return switch controller {
|
||||
case HUMAN(index): 'Player $index';
|
||||
case BOT(_) | NONE: null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
11
src/common/haxe/ru/m/tankz/control/PlayerControl.hx
Normal file
11
src/common/haxe/ru/m/tankz/control/PlayerControl.hx
Normal file
@@ -0,0 +1,11 @@
|
||||
package ru.m.tankz.control;
|
||||
|
||||
import haxework.color.Color;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
typedef PlayerControl = {
|
||||
var playerId:PlayerId;
|
||||
var controller:Controller;
|
||||
@:optional var color:Color;
|
||||
@:optional var name:String;
|
||||
}
|
||||
@@ -1,14 +1,12 @@
|
||||
package ru.m.tankz.game;
|
||||
|
||||
import ru.m.geom.Point;
|
||||
import ru.m.geom.Position;
|
||||
import ru.m.tankz.bundle.IConfigBundle;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.control.Control;
|
||||
import ru.m.tankz.control.Controller;
|
||||
import ru.m.tankz.control.IControlFactory;
|
||||
import ru.m.tankz.control.NoneControlFactory;
|
||||
import ru.m.tankz.core.Entity;
|
||||
import ru.m.tankz.control.PlayerControl;
|
||||
import ru.m.tankz.core.EntityType;
|
||||
import ru.m.tankz.engine.IEngine;
|
||||
import ru.m.tankz.game.GameEvent;
|
||||
@@ -102,6 +100,7 @@ import ru.m.tankz.Type;
|
||||
}
|
||||
for (team in teams.iterator()) {
|
||||
for (player in team.players.iterator()) {
|
||||
var controller = ControllerParser.fromString(player.config.control);
|
||||
var playerControl = controlsById.get(player.id);
|
||||
if (playerControl != null) {
|
||||
if (playerControl.color != null) {
|
||||
@@ -110,9 +109,11 @@ import ru.m.tankz.Type;
|
||||
if (playerControl.name != null) {
|
||||
player.state.name = playerControl.name;
|
||||
}
|
||||
if (playerControl.controller != null && !playerControl.controller.match(NONE)) {
|
||||
controller = playerControl.controller;
|
||||
}
|
||||
}
|
||||
var controlType:Controller = AController.fromString(playerControl != null ? playerControl.control : player.config.control);
|
||||
var control = controlFactory.build(player.id, controlType);
|
||||
var control = controlFactory.build(player.id, controller);
|
||||
if (control != null) {
|
||||
controls[player.id] = control;
|
||||
control.bind(this, engine);
|
||||
|
||||
@@ -3,6 +3,7 @@ package ru.m.tankz.game;
|
||||
import haxework.color.Color;
|
||||
import ru.m.tankz.bundle.IConfigBundle;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.control.PlayerControl;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
class State {
|
||||
|
||||
@@ -196,20 +196,3 @@ presets:
|
||||
- {<<: *bot, index: 3, control: bot-hard}
|
||||
- {<<: *bot, index: 4, control: bot-hard}
|
||||
- {<<: *bot, index: 5, control: bot-hard}
|
||||
|
||||
controls:
|
||||
- id: 0
|
||||
name: 1 Player
|
||||
values:
|
||||
- playerId: [human, 0]
|
||||
control: human-0
|
||||
name: Player 1
|
||||
- id: 1
|
||||
name: 2 Player
|
||||
values:
|
||||
- playerId: [human, 0]
|
||||
control: human-0
|
||||
name: Player 1
|
||||
- playerId: [human, 1]
|
||||
control: human-1
|
||||
name: Player 2
|
||||
|
||||
@@ -91,20 +91,3 @@ tanks:
|
||||
skin: pc
|
||||
|
||||
bonuses: []
|
||||
|
||||
controls:
|
||||
- id: 0
|
||||
name: 1 Player
|
||||
values:
|
||||
- playerId: [alpha, 0]
|
||||
control: human-0
|
||||
name: Player 1
|
||||
- id: 1
|
||||
name: 2 Player
|
||||
values:
|
||||
- playerId: [alpha, 0]
|
||||
control: human-0
|
||||
name: Player 1
|
||||
- playerId: [beta, 0]
|
||||
control: human-1
|
||||
name: Player 2
|
||||
|
||||
@@ -115,34 +115,3 @@ bonuses:
|
||||
- {type: life}
|
||||
- {type: shovel, duration: 10}
|
||||
- {type: star}
|
||||
|
||||
controls:
|
||||
- id: 0
|
||||
name: 1 Player
|
||||
values:
|
||||
- playerId: [radiant, 0]
|
||||
control: human-0
|
||||
color: 0xff8866
|
||||
name: Player 1
|
||||
- id: 1
|
||||
name: 2 Player Coop
|
||||
values:
|
||||
- playerId: [radiant, 0]
|
||||
control: human-0
|
||||
color: 0xff8866
|
||||
name: Player 1
|
||||
- playerId: [radiant, 1]
|
||||
control: human-1
|
||||
color: 0xff8866
|
||||
name: Player 2
|
||||
- id: 2
|
||||
name: 2 Player VS
|
||||
values:
|
||||
- playerId: [radiant, 0]
|
||||
control: human-0
|
||||
color: 0xff8866
|
||||
name: Player 1
|
||||
- playerId: [dire, 0]
|
||||
control: human-1
|
||||
color: 0x4294ff
|
||||
name: Player 2
|
||||
|
||||
Reference in New Issue
Block a user