game config refactoring
This commit is contained in:
@@ -9,7 +9,7 @@ import protohx.Message;
|
||||
import ru.m.tankz.proto.pack.GameUpdateResponse;
|
||||
import ru.m.core.connect.IConnection;
|
||||
import haxework.gui.ViewBuilder;
|
||||
import ru.m.tankz.config.TankzConfig;
|
||||
import ru.m.tankz.config.Config;
|
||||
import flash.events.Event;
|
||||
import haxework.provider.Provider;
|
||||
import haxework.gui.VGroupView;
|
||||
@@ -31,7 +31,7 @@ class GameFrame extends VGroupView implements ViewBuilder implements IPacketHand
|
||||
|
||||
public function onShow():Void {
|
||||
var game:Game = Provider.get(Game);
|
||||
engine.init(ConfigData.get(GameType.CLASSIC));
|
||||
engine.init(ConfigBundle.get(GameType.CLASSIC));
|
||||
engine.initTanks(game.players);
|
||||
content.addEventListener(Event.ENTER_FRAME, updateGame);
|
||||
for (index in 0...game.players.length) {
|
||||
|
||||
@@ -24,20 +24,38 @@ typedef SpawnPoint = {
|
||||
var direction:Direction;
|
||||
}
|
||||
|
||||
typedef TankzConfig = {
|
||||
var map:MapConfig;
|
||||
var points:Array<SpawnPoint>;
|
||||
|
||||
class Config {
|
||||
public var map(default,null):MapConfig;
|
||||
public var points(default,null):Array<SpawnPoint>;
|
||||
|
||||
public function new(map:MapConfig, points:Array<SpawnPoint>) {
|
||||
this.map = map;
|
||||
this.points = points;
|
||||
}
|
||||
|
||||
public function getSpawnPoint(type:SpawnPointType, index:Int):SpawnPoint {
|
||||
for (point in points) {
|
||||
if (point.type == type && point.index == index) {
|
||||
return point;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class ConfigData {
|
||||
public static var CLASSIC:TankzConfig = {
|
||||
map: {
|
||||
|
||||
class ConfigBundle {
|
||||
|
||||
|
||||
public static var CLASSIC:Config = new Config(
|
||||
{
|
||||
cellWidth: 22,
|
||||
cellHeight: 22,
|
||||
gridWidth: 26,
|
||||
gridHeight: 26
|
||||
},
|
||||
points: [
|
||||
[
|
||||
{
|
||||
type: SpawnPointType.PLAYER,
|
||||
index: 0,
|
||||
@@ -53,9 +71,9 @@ class ConfigData {
|
||||
direction: Direction.TOP
|
||||
}
|
||||
]
|
||||
};
|
||||
);
|
||||
|
||||
public static function get(type:Int):TankzConfig {
|
||||
public static function get(type:Int):Config {
|
||||
switch (type) {
|
||||
case GameType.CLASSIC:
|
||||
return CLASSIC;
|
||||
@@ -63,13 +81,4 @@ class ConfigData {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static function findSpawnPoint(config:TankzConfig, type:SpawnPointType, index:Int):SpawnPoint {
|
||||
for (point in config.points) {
|
||||
if (point.type == type && point.index == index) {
|
||||
return point;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -8,15 +8,15 @@ import ru.m.tankz.proto.core.Player;
|
||||
import ru.m.tankz.core.Direction;
|
||||
import ru.m.tankz.core.IMobileEntity;
|
||||
//import flash.geom.Rectangle;
|
||||
import ru.m.tankz.config.TankzConfig;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.core.Tank;
|
||||
import ru.m.tankz.map.TankzMap;
|
||||
import ru.m.tankz.map.ITankzMap;
|
||||
import ru.m.tankz.map.LevelMap;
|
||||
import ru.m.tankz.map.ILevelMap;
|
||||
|
||||
class Engine implements IEngine {
|
||||
|
||||
public var config(default, default):TankzConfig;
|
||||
public var map(default, null):ITankzMap;
|
||||
public var config(default, default):Config;
|
||||
public var map(default, null):ILevelMap;
|
||||
|
||||
public var tanks(default, null):Map<Int, Tank>;
|
||||
public var mobileEntities(default, null):Map<Int, IMobileEntity>;
|
||||
@@ -34,9 +34,9 @@ class Engine implements IEngine {
|
||||
return new Tank(personId, id, cellX * map.cellWidth, cellY * map.cellHeight, direction);
|
||||
}
|
||||
|
||||
public function init(config:TankzConfig):Void {
|
||||
public function init(config:Config):Void {
|
||||
this.config = config;
|
||||
map = new TankzMap(config.map);
|
||||
map = new LevelMap(config.map);
|
||||
tanks = new Map<Int, Tank>();
|
||||
mobileEntities = new Map<Int, IMobileEntity>();
|
||||
x_limit = map.gridWidth * map.cellWidth;
|
||||
@@ -47,7 +47,7 @@ class Engine implements IEngine {
|
||||
var changes = new Array<GameChange>();
|
||||
for (index in 0...players.length) {
|
||||
var player:Player = players[index];
|
||||
var point:SpawnPoint = ConfigData.findSpawnPoint(config, SpawnPointType.PLAYER, index);
|
||||
var point:SpawnPoint = config.getSpawnPoint(SpawnPointType.PLAYER, index);
|
||||
var tank = buildTank(player.id, 0, point.x, point.y, point.direction);
|
||||
this.tanks.set(tank.personId, tank);
|
||||
this.mobileEntities.set(tank.id, tank);
|
||||
@@ -70,7 +70,7 @@ class Engine implements IEngine {
|
||||
case TankAction.MOVE(direction):
|
||||
tank.move(direction);
|
||||
/*Provider.get(IConnection).send(
|
||||
new GameActionRequest()
|
||||
Map GameActionRequest()
|
||||
.setType(GameActionType.MOVE)
|
||||
.setDirectionX(direction.x)
|
||||
.setDirectionY(direction.y)
|
||||
@@ -78,7 +78,7 @@ class Engine implements IEngine {
|
||||
case TankAction.STOP:
|
||||
tank.stop();
|
||||
/*Provider.get(IConnection).send(
|
||||
new GameActionRequest()
|
||||
Map GameActionRequest()
|
||||
.setType(GameActionType.STOP)
|
||||
);*/
|
||||
case TankAction.SHOT:
|
||||
@@ -87,7 +87,7 @@ class Engine implements IEngine {
|
||||
mobileEntities.set(bullet.id, bullet);
|
||||
}
|
||||
/*Provider.get(IConnection).send(
|
||||
new GameActionRequest()
|
||||
Map GameActionRequest()
|
||||
.setType(GameActionType.SHOT)
|
||||
);*/
|
||||
}
|
||||
@@ -103,7 +103,7 @@ class Engine implements IEngine {
|
||||
mobileEntities.set(tank.id, tank);
|
||||
tanks.set(tank.personId, tank);
|
||||
case GameObjectType.BULLET:
|
||||
var bullet:Bullet = new Bullet(change.personId, change.objectId, change.x, change.y, 0, Direction.from(change.directionX, change.directionY));
|
||||
var bullet:Bullet = Map Bullet(change.personId, change.objectId, change.x, change.y, 0, Direction.from(change.directionX, change.directionY));
|
||||
mobileEntities.set(bullet.id, bullet);
|
||||
}
|
||||
case GameChangeType.DESTROED:
|
||||
@@ -143,10 +143,10 @@ class Engine implements IEngine {
|
||||
entiny.x += entiny.mx;
|
||||
entiny.y += entiny.my;
|
||||
|
||||
/*var tankR = new Rectangle(tank.x, tank.y, tank.width, tank.height);
|
||||
/*var tankR = Map Rectangle(tank.x, tank.y, tank.width, tank.height);
|
||||
|
||||
for (t in tanks) if (t != tank) {
|
||||
var r = new Rectangle(t.x, t.y, t.width, t.height);
|
||||
var r = Map Rectangle(t.x, t.y, t.width, t.height);
|
||||
if (tankR.intersects(r)) {
|
||||
if (tank.direction.x > 0) {
|
||||
if (tank.x + tank.width > t.x) tank.x = t.x - tank.width;
|
||||
|
||||
@@ -4,17 +4,17 @@ import ru.m.tankz.proto.game.GameChange;
|
||||
import ru.m.tankz.core.IMobileEntity;
|
||||
import ru.m.tankz.core.Tank;
|
||||
import ru.m.tankz.proto.core.Player;
|
||||
import ru.m.tankz.config.TankzConfig;
|
||||
import ru.m.tankz.map.ITankzMap;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.map.ILevelMap;
|
||||
|
||||
interface IEngine {
|
||||
public var config(default, default):TankzConfig;
|
||||
public var map(default, null):ITankzMap;
|
||||
public var config(default, default):Config;
|
||||
public var map(default, null):ILevelMap;
|
||||
public var tanks(default, null):Map<Int, Tank>;
|
||||
public var mobileEntities(default, null):Map<Int, IMobileEntity>;
|
||||
|
||||
public function clear():Void;
|
||||
public function init(config:TankzConfig):Void;
|
||||
public function init(config:Config):Void;
|
||||
public function initTanks(players:Array<Player>):Array<GameChange>;
|
||||
public function action(tankId:Int, action:TankAction):Void;
|
||||
//public function updateFromChanges(changes:Array<GameChange>):Void;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package ru.m.tankz.map;
|
||||
|
||||
interface ITankzMap {
|
||||
interface ILevelMap {
|
||||
public var cellWidth(default, null):Float;
|
||||
public var cellHeight(default, null):Float;
|
||||
public var gridWidth(default, null):Int;
|
||||
@@ -1,8 +1,8 @@
|
||||
package ru.m.tankz.map;
|
||||
|
||||
import ru.m.tankz.config.TankzConfig.MapConfig;
|
||||
import ru.m.tankz.config.Config.MapConfig;
|
||||
|
||||
class TankzMap implements ITankzMap {
|
||||
class LevelMap implements ILevelMap {
|
||||
|
||||
public var cellWidth(default, null):Float;
|
||||
public var cellHeight(default, null):Float;
|
||||
Reference in New Issue
Block a user