[client] add GameInit

This commit is contained in:
2019-06-24 18:04:01 +03:00
parent 91dd84a437
commit d0ebf05f1c
22 changed files with 127 additions and 104 deletions

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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();

View File

@@ -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 _:
}