[client] add GameInit
This commit is contained in:
@@ -33,10 +33,8 @@ import ru.m.tankz.Type;
|
||||
|
||||
@:provide var configBundle:IConfigBundle;
|
||||
|
||||
public function new(state:GameState, level:LevelConfig) {
|
||||
this.type = state.type;
|
||||
this.state = state;
|
||||
this.level = level;
|
||||
public function new(type:GameType) {
|
||||
this.type = type;
|
||||
this.teams = new Map();
|
||||
this.config = configBundle.get(type);
|
||||
this.controlFactory = new NoneControlFactory();
|
||||
@@ -72,12 +70,11 @@ import ru.m.tankz.Type;
|
||||
|
||||
public function onGameEvent(event:GameEvent):Void {
|
||||
switch event {
|
||||
case START(state, level):
|
||||
this.state = state;
|
||||
this.level = level;
|
||||
case COMPLETE(state, winnerId):
|
||||
this.state = state;
|
||||
this.winner = winnerId;
|
||||
case START(start):
|
||||
onStart(start);
|
||||
case COMPLETE(result):
|
||||
this.state = result.state;
|
||||
this.winner = result.winner;
|
||||
case SPAWN(EAGLE(id, rect, teamId)):
|
||||
var team = getTeam(teamId);
|
||||
team.eagleId = id;
|
||||
@@ -99,7 +96,9 @@ import ru.m.tankz.Type;
|
||||
}
|
||||
}
|
||||
|
||||
public function start():Void {
|
||||
private function onStart(start:Start):Void {
|
||||
this.state = start.state;
|
||||
this.level = start.level;
|
||||
// ToDo: Spawner not in Team?
|
||||
var points:Array<SpawnPoint> = level != null && level.points != null ? level.points : config.points;
|
||||
for (teamConfig in state.preset.teams) {
|
||||
@@ -135,6 +134,9 @@ import ru.m.tankz.Type;
|
||||
}
|
||||
}
|
||||
|
||||
public function start():Void {
|
||||
}
|
||||
|
||||
public function dispose():Void {
|
||||
for (control in controls) {
|
||||
control.dispose();
|
||||
|
||||
@@ -1,12 +1,22 @@
|
||||
package ru.m.tankz.game;
|
||||
|
||||
import ru.m.tankz.config.Config.LevelConfig;
|
||||
import haxework.color.Color;
|
||||
import ru.m.geom.Position;
|
||||
import ru.m.geom.Rectangle;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.control.Control;
|
||||
import ru.m.tankz.Type;
|
||||
|
||||
typedef Start = {
|
||||
var state:GameState;
|
||||
var level:LevelConfig;
|
||||
}
|
||||
|
||||
typedef Result = {
|
||||
var state:GameState;
|
||||
var winner:TeamId;
|
||||
}
|
||||
|
||||
typedef TankInfo = {
|
||||
var type:TankType;
|
||||
var hits:Int;
|
||||
@@ -74,13 +84,13 @@ enum ChangeEvent {
|
||||
}
|
||||
|
||||
enum GameEvent {
|
||||
START(state:GameState, level:LevelConfig);
|
||||
START(start:Start);
|
||||
SPAWN(event:SpawnEvent);
|
||||
MOVE(event:MoveEvent);
|
||||
STOP(event:StopEvent);
|
||||
HIT(event:HitEvent);
|
||||
DESTROY(event:DestroyEvent);
|
||||
CHANGE(event:ChangeEvent);
|
||||
COMPLETE(state:GameState, winnerId:TeamId);
|
||||
COMPLETE(result:Result);
|
||||
ACTION(tankId:Int, action:TankAction);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package ru.m.tankz.game;
|
||||
|
||||
import ru.m.tankz.config.Config.LevelConfig;
|
||||
import ru.m.geom.Line;
|
||||
import ru.m.geom.Point;
|
||||
import ru.m.tankz.control.Control;
|
||||
@@ -20,8 +19,10 @@ class GameRunner extends Game implements EngineListener {
|
||||
private var timer:Timer;
|
||||
private var builder:EntityBuilder;
|
||||
|
||||
public function new(state:GameState, level:LevelConfig) {
|
||||
super(state, level);
|
||||
public function new(start:Start) {
|
||||
super(start.state.type);
|
||||
this.level = start.level;
|
||||
this.state = start.state;
|
||||
this.builder = new EntityBuilder(config);
|
||||
this.engine = new Engine(config, level.size);
|
||||
this.engine.connect(this);
|
||||
@@ -41,6 +42,11 @@ class GameRunner extends Game implements EngineListener {
|
||||
engine.update();
|
||||
}
|
||||
|
||||
override public function start():Void {
|
||||
super.start();
|
||||
gameEventSignal.emit(START({level:level, state:state}));
|
||||
}
|
||||
|
||||
override public function dispose():Void {
|
||||
super.dispose();
|
||||
if (timer != null) {
|
||||
@@ -50,8 +56,8 @@ class GameRunner extends Game implements EngineListener {
|
||||
engine.dispose();
|
||||
}
|
||||
|
||||
override public function start():Void {
|
||||
super.start();
|
||||
override private function onStart(start:Start):Void {
|
||||
super.onStart(start);
|
||||
var mapData = level.data.map(function(index:BrickIndex) return config.getBrickByIndex(index));
|
||||
engine.map.setData(mapData);
|
||||
for (team in teams.iterator()) {
|
||||
@@ -69,7 +75,6 @@ class GameRunner extends Game implements EngineListener {
|
||||
}
|
||||
}
|
||||
gameEventSignal.emit(EventUtil.buildBricksSpawn(engine.map));
|
||||
gameEventSignal.emit(START(state, level));
|
||||
//for (i in 0...10) spawnBonus();
|
||||
}
|
||||
|
||||
@@ -155,7 +160,7 @@ class GameRunner extends Game implements EngineListener {
|
||||
|
||||
private function complete(winner:TeamId):Void {
|
||||
Timer.delay(function() {
|
||||
gameEventSignal.emit(COMPLETE(state, winner));
|
||||
gameEventSignal.emit(COMPLETE({state: state, winner: winner}));
|
||||
}, 3000);
|
||||
}
|
||||
|
||||
@@ -355,7 +360,7 @@ class GameRunner extends Game implements EngineListener {
|
||||
engine.ticker.start();
|
||||
timer = new Timer(30);
|
||||
timer.run = update;
|
||||
case COMPLETE(_, _):
|
||||
case COMPLETE(_):
|
||||
engine.ticker.stop();
|
||||
if (timer != null) {
|
||||
timer.stop();
|
||||
|
||||
@@ -82,7 +82,6 @@ class GameState {
|
||||
public function new(type:GameType, presetId:PresetId = 0, state:GameState = null, controls:Array<PlayerControl> = null) {
|
||||
this.type = type;
|
||||
this.presetId = presetId;
|
||||
//this.controls = controls == null ? config.controls[0].values : controls;
|
||||
this.controls = controls == null ? [] : controls;
|
||||
if (state == null) {
|
||||
this.teams = new Map();
|
||||
|
||||
@@ -12,7 +12,7 @@ class GamePlayer extends Game {
|
||||
private var ticker:Ticker;
|
||||
|
||||
public function new(record:GameRecord) {
|
||||
super(record.state, null);
|
||||
super(record.state.type);
|
||||
this.record = record;
|
||||
this.data = null;
|
||||
this.ticker = new Ticker();
|
||||
@@ -38,7 +38,7 @@ class GamePlayer extends Game {
|
||||
events++;
|
||||
gameEventSignal.emit(event.event);
|
||||
switch event.event {
|
||||
case GameEvent.COMPLETE(_, _):
|
||||
case GameEvent.COMPLETE(_):
|
||||
stop();
|
||||
case _:
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user