[proto] added GameRequest and GameResponse
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package ru.m.tankz.frame;
|
||||
|
||||
import ru.m.tankz.network.NetworkManager;
|
||||
import ru.m.tankz.network.NetworkGame;
|
||||
import flash.events.Event;
|
||||
import haxe.ds.Option;
|
||||
import haxe.Timer;
|
||||
@@ -24,6 +26,7 @@ class GameFrame extends VGroupView {
|
||||
|
||||
@:view var state(default, null):LabelView;
|
||||
@:view var render(default, null):Render;
|
||||
@:provide var network:NetworkManager;
|
||||
|
||||
private var game:Game;
|
||||
private var timer:Timer;
|
||||
@@ -35,17 +38,20 @@ class GameFrame extends VGroupView {
|
||||
}
|
||||
|
||||
private function start(save:GameSave):Void {
|
||||
game = new Game(save.state.type);
|
||||
if (game == null) {
|
||||
throw 'Unsupported game type "${save.state.type}"';
|
||||
switch (save.server) {
|
||||
case GameServer.LOCAL:
|
||||
game = new Game(save.state.type);
|
||||
game.start(save).then(onGameStateChange).endThen(onGameComplete);
|
||||
timer = new Timer(10);
|
||||
timer.run = updateEngine;
|
||||
case GameServer.NETWORK:
|
||||
game = new NetworkGame(save.state.type);
|
||||
network.game = cast game;
|
||||
}
|
||||
game.engine.connect(render);
|
||||
game.engine.connect(Provider.get(SoundManager));
|
||||
game.start(save).then(onGameStateChange).endThen(onGameComplete);
|
||||
content.addEventListener(Event.ENTER_FRAME, redraw);
|
||||
render.draw(game.engine);
|
||||
timer = new Timer(10);
|
||||
timer.run = updateEngine;
|
||||
state.text = stateString(game);
|
||||
Provider.get(SoundManager).play('start');
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ class NetworkFrame extends VGroupView {
|
||||
userList.data = game.players;
|
||||
frameSwitcher.change(gameFrame.id);
|
||||
if (game.state == GameStateProto.STARTED) {
|
||||
Provider.set(GameSave, new GameSave({type: ClassicGame.TYPE, presetId: ClassicGame.PLAYER1}));
|
||||
Provider.set(GameSave, new GameSave({type: ClassicGame.TYPE, presetId: ClassicGame.PLAYER1}, null, GameServer.NETWORK));
|
||||
mainFrameSwitcher.change(GameFrame.ID);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package ru.m.tankz.network;
|
||||
|
||||
import ru.m.tankz.proto.pack.GameRequest;
|
||||
import ru.m.tankz.proto.core.GameProto;
|
||||
import ru.m.tankz.proto.pack.StartGameRequest;
|
||||
import ru.m.tankz.proto.game.GameChangeProto;
|
||||
import ru.m.tankz.proto.game.GameActionTypeProto;
|
||||
@@ -28,6 +30,7 @@ class NetworkManager {
|
||||
public var gameSignal:Signal<GameInfoProto>;
|
||||
public var gameUpdateSignal:Signal<Array<GameChangeProto>>;
|
||||
public var user(default, null):User;
|
||||
public var game(default, set):NetworkGame;
|
||||
|
||||
@:provide private var connection:ClientConnection;
|
||||
@:provide private var storage:UserStorage;
|
||||
@@ -113,7 +116,7 @@ class NetworkManager {
|
||||
L.d('Network', '$event');
|
||||
'offline';
|
||||
case ConnectionEvent.ERROR(error):
|
||||
L.e('Network', '$error');
|
||||
L.e('Network', '$error', error);
|
||||
'error';
|
||||
});
|
||||
}
|
||||
@@ -141,6 +144,14 @@ class NetworkManager {
|
||||
gameSignal.emit(packet.startGame.game);
|
||||
} else if (packet.hasUpdateGame()) {
|
||||
gameUpdateSignal.emit(packet.updateGame.changes);
|
||||
} else if (packet.hasGame()) {
|
||||
game.load(packet.game.game);
|
||||
}
|
||||
}
|
||||
|
||||
private function set_game(value:NetworkGame):NetworkGame {
|
||||
this.game = value;
|
||||
connection.send(new Request().setGame(new GameRequest()));
|
||||
return this.game;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user