[client] add GameInit
This commit is contained in:
11
src/client/haxe/ru/m/tankz/game/GameInit.hx
Normal file
11
src/client/haxe/ru/m/tankz/game/GameInit.hx
Normal file
@@ -0,0 +1,11 @@
|
||||
package ru.m.tankz.game;
|
||||
|
||||
import ru.m.tankz.game.GameEvent;
|
||||
import ru.m.tankz.game.record.GameRecord;
|
||||
import ru.m.tankz.network.NetworkManager;
|
||||
|
||||
enum GameInit {
|
||||
LOCAL(start:Start);
|
||||
NETWORK(network:NetworkManager);
|
||||
RECORD(record:GameRecord);
|
||||
}
|
||||
@@ -1,32 +1,13 @@
|
||||
package ru.m.tankz.local;
|
||||
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.game.GameEvent;
|
||||
import ru.m.tankz.game.GameRunner;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.game.record.GameRecorder;
|
||||
import ru.m.tankz.local.LocalControlFactory;
|
||||
import ru.m.tankz.storage.RecordStorage;
|
||||
|
||||
class LocalGame extends GameRunner {
|
||||
@:provide var recordStorage:RecordStorage;
|
||||
private var recorder:GameRecorder;
|
||||
|
||||
public function new(state:GameState, level:LevelConfig) {
|
||||
super(state, level);
|
||||
public function new(start:Start) {
|
||||
super(start);
|
||||
controlFactory = new LocalControlFactory();
|
||||
recorder = new GameRecorder();
|
||||
connect(recorder);
|
||||
}
|
||||
|
||||
override public function onGameEvent(event:GameEvent):Void {
|
||||
super.onGameEvent(event);
|
||||
switch event {
|
||||
case GameEvent.COMPLETE(_, _):
|
||||
disconnect(recorder);
|
||||
recorder.onGameEvent(event); //ToDo:
|
||||
recordStorage.save(recorder.record);
|
||||
case _:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package ru.m.tankz.network;
|
||||
import haxe.Unserializer;
|
||||
import ru.m.tankz.game.Game;
|
||||
import ru.m.tankz.game.GameEvent;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.network.NetworkControlFactory;
|
||||
import ru.m.tankz.network.NetworkManager;
|
||||
import ru.m.tankz.proto.pack.GameEventResponse;
|
||||
@@ -14,7 +13,7 @@ class NetworkGame extends Game {
|
||||
private var network:NetworkManager;
|
||||
|
||||
public function new(network:NetworkManager) {
|
||||
super(new GameState(network.room.game.type, 0), null);
|
||||
super(network.room.game.type);
|
||||
this.network = network;
|
||||
this.controlFactory = new NetworkControlFactory();
|
||||
network.gameEventSignal.connect(onGameEventProto);
|
||||
@@ -38,12 +37,12 @@ class NetworkGame extends Game {
|
||||
}
|
||||
}
|
||||
|
||||
override public function start():Void {
|
||||
override private function onStart(start:Start):Void {
|
||||
var slot:RoomSlotProto = Lambda.find(network.room.slots, function(slot:RoomSlotProto) return slot.hasUser() && slot.user.uuid == network.user.uuid);
|
||||
if (slot != null) {
|
||||
state.controls.push({playerId: [slot.slot.team, slot.slot.index], control: "human-0"});
|
||||
start.state.controls.push({playerId: [slot.slot.team, slot.slot.index], control: "human-0"});
|
||||
}
|
||||
super.start();
|
||||
super.onStart(start);
|
||||
}
|
||||
|
||||
override public function dispose():Void {
|
||||
|
||||
@@ -115,10 +115,10 @@ class Render extends SpriteView implements IRender {
|
||||
|
||||
public function onGameEvent(event:GameEvent):Void {
|
||||
switch event {
|
||||
case START(_, level):
|
||||
gridSize = level.size;
|
||||
case START(start):
|
||||
gridSize = start.level.size;
|
||||
content.addEventListener(Event.ENTER_FRAME, onEnterFrame);
|
||||
case COMPLETE(_, _):
|
||||
case COMPLETE(_):
|
||||
content.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
|
||||
case SPAWN(BRICK(bricks)):
|
||||
drawBackground();
|
||||
|
||||
@@ -5,10 +5,12 @@ import haxework.view.VGroupView;
|
||||
import ru.m.control.DeviceType;
|
||||
import ru.m.control.IControlBus;
|
||||
import ru.m.tankz.game.GameEvent;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.game.GameInit;
|
||||
import ru.m.tankz.game.IGame;
|
||||
import ru.m.tankz.game.record.GamePlayer;
|
||||
import ru.m.tankz.game.record.GameRecord;
|
||||
import ru.m.tankz.network.NetworkManager;
|
||||
import ru.m.tankz.local.LocalGame;
|
||||
import ru.m.tankz.network.NetworkGame;
|
||||
import ru.m.tankz.sound.SoundManager;
|
||||
import ru.m.tankz.storage.GameStorage;
|
||||
import ru.m.tankz.storage.SettingsStorage;
|
||||
@@ -24,17 +26,18 @@ import ru.m.tankz.view.GamepadView;
|
||||
@:view("game") private var gameView(default, null):GameView;
|
||||
@:view private var gamepad(default, null):GamepadView;
|
||||
|
||||
@:provide var network:NetworkManager;
|
||||
@:provide var soundManager:SoundManager;
|
||||
@:provide var state:GameState;
|
||||
@:provide var record:GameRecord;
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
@:provide static var gameStorage:GameStorage;
|
||||
@:provide static var settings:SettingsStorage;
|
||||
|
||||
@:provide var game:IGame;
|
||||
@:provide var gameInit:GameInit;
|
||||
//@:provide var result:Result;
|
||||
@:provide static var bus:IControlBus;
|
||||
|
||||
private var game:IGame;
|
||||
private var recorder:GameRecord;
|
||||
|
||||
public function init():Void {
|
||||
bus.connect(gamepad);
|
||||
}
|
||||
@@ -52,6 +55,12 @@ import ru.m.tankz.view.GamepadView;
|
||||
}
|
||||
}
|
||||
}
|
||||
game = switch gameInit {
|
||||
case LOCAL(start): new LocalGame(start);
|
||||
case NETWORK(network): new NetworkGame(network);
|
||||
case RECORD(record): new GamePlayer(record);
|
||||
case _: null;
|
||||
}
|
||||
gameView.type = game.type;
|
||||
soundManager.config = game.config;
|
||||
gameView.render.config = game.config;
|
||||
@@ -74,9 +83,9 @@ import ru.m.tankz.view.GamepadView;
|
||||
|
||||
public function onGameEvent(event:GameEvent):Void {
|
||||
switch event {
|
||||
case COMPLETE(state, winner):
|
||||
this.state = state;
|
||||
updateProgress(game, winner);
|
||||
case COMPLETE(result):
|
||||
//this.result = result;
|
||||
updateProgress(game, result.winner);
|
||||
stop();
|
||||
switcher.change(ResultFrame.ID);
|
||||
case _:
|
||||
|
||||
@@ -7,9 +7,8 @@ import haxework.view.LabelView;
|
||||
import haxework.view.VGroupView;
|
||||
import ru.m.tankz.bundle.ILevelBundle;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.game.GameInit;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.game.IGame;
|
||||
import ru.m.tankz.local.LocalGame;
|
||||
import ru.m.tankz.storage.GameStorage;
|
||||
import ru.m.tankz.Type;
|
||||
import ru.m.tankz.view.popup.LevelPopup;
|
||||
@@ -20,8 +19,7 @@ import ru.m.tankz.view.popup.LevelPopup;
|
||||
@:view var header:LabelView;
|
||||
@:view var levels:DataView<LevelConfig, ButtonView>;
|
||||
|
||||
@:provide var state:GameState;
|
||||
@:provide var game:IGame;
|
||||
@:provide var gameInit:GameInit;
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
@:provide var levelBundle:ILevelBundle;
|
||||
@:provide var storage:GameStorage;
|
||||
@@ -30,15 +28,27 @@ import ru.m.tankz.view.popup.LevelPopup;
|
||||
private var levelPopup:LevelPopup;
|
||||
|
||||
public function onShow():Void {
|
||||
var state = getState();
|
||||
header.text = state.type;
|
||||
pack = levelBundle.get(new PackId(state.type));
|
||||
levels.data = pack.data;
|
||||
}
|
||||
|
||||
private function getState():GameState {
|
||||
return switch gameInit {
|
||||
case LOCAL(start): start.state;
|
||||
case _: null;
|
||||
}
|
||||
}
|
||||
|
||||
private function start(level:LevelConfig, preset:GamePreset, control:ControlPreset):Void {
|
||||
state.presetId = preset.id;
|
||||
state.controls = control.values;
|
||||
game = new LocalGame(state, level);
|
||||
switch gameInit {
|
||||
case LOCAL(start):
|
||||
start.state.presetId = preset.id;
|
||||
start.state.controls = control.values;
|
||||
start.level = level;
|
||||
case _:
|
||||
}
|
||||
switcher.change(GameFrame.ID);
|
||||
}
|
||||
|
||||
@@ -46,7 +56,7 @@ import ru.m.tankz.view.popup.LevelPopup;
|
||||
var progress = storage.get(pack.id);
|
||||
var result = new ButtonView();
|
||||
result.skinId = "button.level";
|
||||
var presetsLine = [for (p in state.config.presets) progress.isPresetCompleted(level.id, p.id) ? '*' : '_'].join('');
|
||||
var presetsLine = [for (p in getState().config.presets) progress.isPresetCompleted(level.id, p.id) ? '*' : '_'].join('');
|
||||
result.text = '${level.id}\n${presetsLine}';
|
||||
result.disabled = !progress.isLevelAvailable(level.id);
|
||||
return result;
|
||||
@@ -59,6 +69,7 @@ import ru.m.tankz.view.popup.LevelPopup;
|
||||
if (levelPopup == null) {
|
||||
levelPopup = new LevelPopup();
|
||||
}
|
||||
var state = getState();
|
||||
levelPopup.setData(
|
||||
level,
|
||||
state.config.presets,
|
||||
|
||||
@@ -14,7 +14,6 @@ import ru.m.tankz.storage.RecordStorage;
|
||||
|
||||
@:provide var recordStorage:RecordStorage;
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
@:provide var record:GameRecord;
|
||||
|
||||
public function onShow():Void {
|
||||
var data = Lambda.array(recordStorage);
|
||||
|
||||
@@ -4,7 +4,6 @@ import haxework.view.DataView;
|
||||
import haxework.view.frame.FrameSwitcher;
|
||||
import haxework.view.LabelView;
|
||||
import haxework.view.VGroupView;
|
||||
import ru.m.tankz.game.GameRunner;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.game.IGame;
|
||||
import ru.m.tankz.view.common.LifeView;
|
||||
@@ -16,23 +15,23 @@ import ru.m.tankz.view.common.LifeView;
|
||||
@:view("level") var levelLabel:LabelView;
|
||||
|
||||
@:provide var frames:FrameSwitcher;
|
||||
@:provide var state:GameState;
|
||||
@:provide var game:IGame;
|
||||
|
||||
private function playerViewFactory(index:Int, player:PlayerState) {
|
||||
var view = new LifeView();
|
||||
var playerConfig = state.config.getPlayer(player.id);
|
||||
// ToDo:
|
||||
/*var playerConfig = state.config.getPlayer(player.id);
|
||||
var tankType = playerConfig.tanks[0].type;
|
||||
var tankConfig = state.config.getTank(tankType);
|
||||
view.tank = tankConfig == null ? 'ba' : tankConfig.skin;
|
||||
view.color = state.getPlayerColor(player.id);
|
||||
view.life = player.frags;
|
||||
view.score = player.score;
|
||||
view.score = player.score;*/
|
||||
return view;
|
||||
}
|
||||
|
||||
public function onShow() {
|
||||
resultView.data = Lambda.array(state.players);
|
||||
//resultView.data = Lambda.array(state.players);
|
||||
//levelLabel.text = 'Level ${state.levelId}'; // ToDo: level?
|
||||
}
|
||||
|
||||
|
||||
@@ -2,11 +2,12 @@ package ru.m.tankz.view;
|
||||
|
||||
import haxework.view.frame.FrameSwitcher;
|
||||
import haxework.view.VGroupView;
|
||||
import ru.m.tankz.game.GameInit;
|
||||
import ru.m.tankz.game.GameState;
|
||||
import ru.m.tankz.network.NetworkManager;
|
||||
import ru.m.tankz.Type.GameType;
|
||||
import ru.m.tankz.view.network.RoomListFrame;
|
||||
import ru.m.tankz.view.network.RoomFrame;
|
||||
import ru.m.tankz.view.network.RoomListFrame;
|
||||
import ru.m.tankz.view.popup.FontPopup;
|
||||
import ru.m.tankz.view.popup.LoginPopup;
|
||||
|
||||
@@ -14,14 +15,14 @@ import ru.m.tankz.view.popup.LoginPopup;
|
||||
|
||||
public static var ID(default, never):String = "start";
|
||||
|
||||
@:provide var state:GameState;
|
||||
@:provide var gameInit:GameInit;
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
@:provide var network:NetworkManager;
|
||||
|
||||
private var fontPopup:FontPopup;
|
||||
|
||||
private function startGame(type:GameType):Void {
|
||||
state = new GameState(type);
|
||||
gameInit = LOCAL({state: new GameState(type), level: null});
|
||||
switcher.change(LevelFrame.ID);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package ru.m.tankz.view.common;
|
||||
|
||||
import ru.m.tankz.game.record.GamePlayer;
|
||||
import ru.m.tankz.game.IGame;
|
||||
import haxework.view.frame.FrameSwitcher;
|
||||
import haxework.view.HGroupView;
|
||||
import haxework.view.LabelView;
|
||||
import haxework.view.list.ListView;
|
||||
import ru.m.tankz.game.GameInit;
|
||||
import ru.m.tankz.game.record.GameRecord;
|
||||
import ru.m.tankz.storage.RecordStorage;
|
||||
|
||||
@@ -20,7 +19,7 @@ import ru.m.tankz.storage.RecordStorage;
|
||||
|
||||
@:provide var recordStorage:RecordStorage;
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
@:provide var game:IGame;
|
||||
@:provide var gameInit:GameInit;
|
||||
|
||||
private function set_data(value:GameRecordInfo):GameRecordInfo {
|
||||
if (data != value) {
|
||||
@@ -35,7 +34,7 @@ import ru.m.tankz.storage.RecordStorage;
|
||||
|
||||
private function play():Void {
|
||||
var record = recordStorage.read(data.id);
|
||||
game = new GamePlayer(record);
|
||||
gameInit = RECORD(record);
|
||||
switcher.change(GameFrame.ID);
|
||||
}
|
||||
|
||||
|
||||
@@ -35,9 +35,9 @@ import ru.m.tankz.view.common.LifeView;
|
||||
|
||||
public function onGameEvent(event:GameEvent):Void {
|
||||
switch event {
|
||||
case START(state, level):
|
||||
this.level.text = 'Level ${level.id}';
|
||||
refresh(state);
|
||||
case START(start):
|
||||
this.level.text = 'Level ${start.level.id}';
|
||||
refresh(start.state);
|
||||
case CHANGE(TEAM_LIFE(teamId, life)):
|
||||
if (teamId == ClassicGame.BOT) {
|
||||
bot.life = life;
|
||||
|
||||
@@ -16,9 +16,9 @@ import ru.m.tankz.view.common.LifeView;
|
||||
|
||||
public function onGameEvent(event:GameEvent):Void {
|
||||
switch event {
|
||||
case START(state, level):
|
||||
this.level.text = 'Level ${level.id}';
|
||||
players.data = Lambda.array(state.players);
|
||||
case START(start):
|
||||
this.level.text = 'Level ${start.level.id}';
|
||||
players.data = Lambda.array(start.state.players);
|
||||
case _:
|
||||
for (view in players.views) {
|
||||
view.toUpdate();
|
||||
|
||||
@@ -33,9 +33,9 @@ import ru.m.tankz.view.common.LifeView;
|
||||
|
||||
public function onGameEvent(event:GameEvent):Void {
|
||||
switch event {
|
||||
case START(state, level):
|
||||
this.level.text = 'Level ${level.id}';
|
||||
refresh(state);
|
||||
case START(start):
|
||||
this.level.text = 'Level ${start.level.id}';
|
||||
refresh(start.state);
|
||||
case CHANGE(TEAM_LIFE(teamId, life)):
|
||||
getLifeView(teamId).life = life;
|
||||
case CHANGE(TEAM_SCORE(teamId, score)):
|
||||
|
||||
@@ -5,8 +5,7 @@ import haxework.view.frame.FrameSwitcher;
|
||||
import haxework.view.list.VListView;
|
||||
import haxework.view.TextView;
|
||||
import haxework.view.VGroupView;
|
||||
import ru.m.tankz.game.IGame;
|
||||
import ru.m.tankz.network.NetworkGame;
|
||||
import ru.m.tankz.game.GameInit;
|
||||
import ru.m.tankz.network.NetworkManager;
|
||||
import ru.m.tankz.proto.room.RoomProto;
|
||||
import ru.m.tankz.proto.room.RoomSlotProto;
|
||||
@@ -21,7 +20,7 @@ import ru.m.tankz.proto.room.RoomSlotProto;
|
||||
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
@:provide var network:NetworkManager;
|
||||
@:provide var game:IGame;
|
||||
@:provide var gameInit:GameInit;
|
||||
|
||||
private function refresh(room:RoomProto):Void {
|
||||
if (room != null) {
|
||||
@@ -29,9 +28,7 @@ import ru.m.tankz.proto.room.RoomSlotProto;
|
||||
info.text = '${room.game.type} #${room.game.level}';
|
||||
slots.data = room.slots;
|
||||
if (room.game.started) {
|
||||
if (this.game == null) {
|
||||
this.game = new NetworkGame(network);
|
||||
}
|
||||
gameInit = NETWORK(network);
|
||||
switcher.change(GameFrame.ID);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -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 _:
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ class _GameListener implements GameListener {
|
||||
public function onGameEvent(event:GameEvent):Void {
|
||||
dispatcher.dispatchEvent(game, event);
|
||||
switch event {
|
||||
case COMPLETE(_, _):
|
||||
case COMPLETE(_):
|
||||
dispatcher.delete(game.id);
|
||||
dispose();
|
||||
case _:
|
||||
|
||||
@@ -23,7 +23,10 @@ class ServerGame extends GameRunner {
|
||||
@:provide static var levelBundle:ILevelBundle;
|
||||
|
||||
public function new(room:RoomProto) {
|
||||
super(new GameState(room.game.type, 0), levelBundle.get(new PackId(room.game.type)).data[room.game.level]);
|
||||
super({
|
||||
state: new GameState(room.game.type, 0),
|
||||
level: levelBundle.get(new PackId(room.game.type)).data[room.game.level],
|
||||
});
|
||||
this.controlFactory = new ServerControlFactory();
|
||||
this.room = room;
|
||||
}
|
||||
@@ -88,7 +91,7 @@ class ServerGame extends GameRunner {
|
||||
var result = [];
|
||||
result.push(EventUtil.buildBricksSpawn(engine.map));
|
||||
result = result.concat(EventUtil.buildCellsDestroyed(engine.map));
|
||||
result.push(START(state, level));
|
||||
result.push(START({state: state, level: level}));
|
||||
for (entity in engine.entities) {
|
||||
switch EntityTypeResolver.of(entity) {
|
||||
case EAGLE(eagle): result.push(EventUtil.buildEagleSpawn(eagle));
|
||||
|
||||
Reference in New Issue
Block a user