[proto] add game and event proto

This commit is contained in:
2020-05-26 14:25:37 +03:00
parent f7f6423938
commit b7b1ac3871
13 changed files with 135 additions and 70 deletions

View File

@@ -10,7 +10,7 @@ import ru.m.data.IDataSource;
import ru.m.puzzlez.core.GameEvent;
import ru.m.puzzlez.core.GameState;
import ru.m.puzzlez.core.Id;
import ru.m.puzzlez.proto.core.GameProto;
import ru.m.puzzlez.proto.game.GameProto;
import ru.m.puzzlez.proto.core.UserProto;
import ru.m.puzzlez.proto.pack.GameCreateRequest;
import ru.m.puzzlez.proto.pack.GameJoinRequest;
@@ -62,6 +62,11 @@ import ru.m.puzzlez.proto.pack.Response;
connection.send(new Request().setGameJoin(new GameJoinRequest().setGameId(state.id)));
}
public function sendGameAction(action:GameAction):Void {
// ToDo: send action
//connection.send(new Request().setGameEvent());
}
private function onConnectionChange(event:ConnectionEvent):Void {
L.i("network", '${event}');
switch event {
@@ -90,7 +95,8 @@ import ru.m.puzzlez.proto.pack.Response;
gameSignal.emit(game);
} else if (packet.hasGameEvent()) {
for (event in packet.gameEvent.events) {
gameEventSignal.emit(Unserializer.run(event.event));
// ToDo: convert event?
//gameEventSignal.emit(Unserializer.run(event.event));
}
}
}

View File

@@ -7,17 +7,17 @@ import ru.m.puzzlez.core.IGame;
class NetworkGame implements IGame {
public var state(default, null):GameState;
public var signal(default, null):Signal<GameEvent>;
public var events(default, null):Signal<GameEvent>;
@:provide private var network:Network;
public function new(state:GameState) {
this.state = state;
signal = new Signal();
events = new Signal();
}
private function onEvent(event:GameEvent):Void {
signal.emit(event);
public function action(action:GameAction):Void {
network.sendGameAction(action);
}
public function start():Void {
@@ -36,6 +36,10 @@ class NetworkGame implements IGame {
public function dispose():Void {
stop();
signal.dispose();
events.dispose();
}
private function onEvent(event:GameEvent):Void {
events.emit(event);
}
}

View File

@@ -5,7 +5,7 @@ import hw.view.IView;
import ru.m.puzzlez.core.GameEvent;
interface IRender extends IView<Dynamic> {
public var signal(default, null):Signal<GameEvent>;
public var actions(default, null):Signal<GameAction>;
public var scale(get, set):Float;
public var manager(default, null):RenderManager;

View File

@@ -23,7 +23,7 @@ import ru.m.puzzlez.storage.SettingsStorage;
class Render extends SpriteView implements IRender {
public var signal(default, null):Signal<GameEvent>;
public var actions(default, null):Signal<GameAction>;
public var scale(get, set):Float;
public var manager(default, null):RenderManager;
@@ -69,7 +69,7 @@ class Render extends SpriteView implements IRender {
content.addChild(container);
manager = new RenderManager(content, container);
progress = new ProgressView();
signal = new Signal();
actions = new Signal();
tableView = new Sprite();
tableView.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
imageView = new CompleteView();
@@ -80,7 +80,7 @@ class Render extends SpriteView implements IRender {
public function onGameEvent(event:GameEvent):Void {
switch event {
case START(state) | RESUME(state):
case START(state, resume):
onStart(state);
case CHANGE(PART_UPDATE(id, TABLE(point))):
var part:PartView = parts[id];
@@ -203,21 +203,21 @@ class Render extends SpriteView implements IRender {
activePoint = RenderUtil.convertPoint(tableView.globalToLocal(point));
tableView.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
tableView.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
signal.emit(ACTION(PART_TAKE(playerId, activePart.id)));
actions.emit(PART_TAKE(playerId, activePart.id));
}
}
private function onMouseMove(event:MouseEvent):Void {
var newPoint:Point = RenderUtil.convertPoint(tableView.globalToLocal(new FlashPoint(event.stageX, event.stageY)));
var partPosition = activePart.position.add(newPoint).subtract(activePoint);
signal.emit(ACTION(PART_MOVE(playerId, activePart.id, partPosition.clone())));
actions.emit(PART_MOVE(playerId, activePart.id, partPosition.clone()));
activePoint = newPoint;
}
private function onMouseUp(event:MouseEvent):Void {
var newPoint:Point = RenderUtil.convertPoint(tableView.globalToLocal(new FlashPoint(event.stageX, event.stageY)));
var partPosition = activePart.position.add(newPoint).subtract(activePoint);
signal.emit(ACTION(PART_PUT(playerId, activePart.id, partPosition.clone())));
actions.emit(PART_PUT(playerId, activePart.id, partPosition.clone()));
tableView.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
tableView.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
activePart = null;

View File

@@ -38,9 +38,9 @@ import ru.m.puzzlez.view.popup.PreviewPopup;
} else {
game = new Game(state);
}
game.signal.connect(render.onGameEvent);
game.signal.connect(onGameEvent);
render.signal.connect(game.signal.emit);
game.events.connect(render.onGameEvent);
game.events.connect(onGameEvent);
render.actions.connect(game.action);
game.start();
}
@@ -49,7 +49,7 @@ import ru.m.puzzlez.view.popup.PreviewPopup;
save();
}
if (game != null) {
render.signal.disconnect(game.signal.emit);
render.actions.disconnect(game.action);
game.stop();
game.dispose();
game = null;