listening to lockGroupMessage on front

This commit is contained in:
Hanusiak Piotr
2022-03-02 10:44:26 +01:00
parent d43c8d181a
commit ef22d4ba20
12 changed files with 145 additions and 23 deletions
+5
View File
@@ -48,6 +48,11 @@ export interface GroupCreatedUpdatedMessageInterface {
locked: boolean;
}
export interface LockGroupMessageInterface {
groupId: number;
locked: boolean;
}
export interface GroupUsersUpdateMessageInterface {
groupId: number;
userIds: number[];
+8 -2
View File
@@ -40,6 +40,7 @@ import {
PositionMessage_Direction,
SetPlayerDetailsMessage as SetPlayerDetailsMessageTsProto,
PingMessage as PingMessageTsProto,
LockGroupMessage,
} from "../Messages/ts-proto-generated/messages";
import { Subject } from "rxjs";
@@ -101,6 +102,9 @@ export class RoomConnection implements RoomConnection {
private readonly _groupUsersUpdateMessageStream = new Subject<GroupUsersUpdateMessageInterface>();
public readonly groupUsersUpdateMessageStream = this._groupUsersUpdateMessageStream.asObservable();
private readonly _lockGroupMessageStream = new Subject<LockGroupMessage>();
public readonly lockGroupMessageStream = this._lockGroupMessageStream.asObservable();
private readonly _groupDeleteMessageStream = new Subject<GroupDeleteMessageTsProto>();
public readonly groupDeleteMessageStream = this._groupDeleteMessageStream.asObservable();
@@ -264,6 +268,10 @@ export class RoomConnection implements RoomConnection {
this._emoteEventMessageStream.next(subMessage.emoteEventMessage);
break;
}
case "lockGroupMessage": {
this._lockGroupMessageStream.next(subMessage.lockGroupMessage);
break;
}
case "playerDetailsUpdatedMessage": {
this._playerDetailsUpdatedMessageStream.next(subMessage.playerDetailsUpdatedMessage);
break;
@@ -403,8 +411,6 @@ export class RoomConnection implements RoomConnection {
break;
}
case "groupUsersUpdateMessage": {
console.log("GOT GROUP USERS UPDATE MESSAGE");
console.log(message.groupUsersUpdateMessage);
this._groupUsersUpdateMessageStream.next(message.groupUsersUpdateMessage);
break;
}
+53 -13
View File
@@ -51,6 +51,7 @@ import { PathfindingManager } from "../../Utils/PathfindingManager";
import { ActivatablesManager } from "./ActivatablesManager";
import type {
GroupCreatedUpdatedMessageInterface,
LockGroupMessageInterface,
MessageUserMovedInterface,
MessageUserPositionInterface,
OnConnectInterface,
@@ -132,6 +133,11 @@ interface DeleteGroupEventInterface {
groupId: number;
}
interface LockGroupEventInterface {
type: "LockGroupEvent";
event: LockGroupMessageInterface;
}
interface PlayerDetailsUpdatedInterface {
type: "PlayerDetailsUpdated";
details: PlayerDetailsUpdatedMessageInterface;
@@ -147,6 +153,7 @@ export class GameScene extends DirtyScene {
mapFile!: ITiledMap;
animatedTiles!: AnimatedTiles;
groups: Map<number, Sprite>;
currentPlayerGroupId?: number;
circleTexture!: CanvasTexture;
circleRedTexture!: CanvasTexture;
pendingEvents = new Queue<
@@ -156,6 +163,7 @@ export class GameScene extends DirtyScene {
| UserMovedEventInterface
| GroupCreatedUpdatedEventInterface
| DeleteGroupEventInterface
| LockGroupEventInterface
| PlayerDetailsUpdatedInterface
>();
private initPosition: PositionInterface | null = null;
@@ -225,6 +233,7 @@ export class GameScene extends DirtyScene {
});
this.Terrains = [];
this.groups = new Map<number, Sprite>();
this.currentPlayerGroupId = undefined;
this.instance = room.getInstance();
this.MapUrlFile = MapUrlFile;
@@ -720,13 +729,17 @@ export class GameScene extends DirtyScene {
);
this.input.keyboard.on("keydown-L", (event: Event) => {
console.log("group locked");
this.connection?.emitLockGroup(1, true);
if (this.currentPlayerGroupId !== undefined) {
console.log("group locked");
this.connection?.emitLockGroup(this.currentPlayerGroupId, true);
}
});
this.input.keyboard.on("keydown-U", (event: Event) => {
console.log("group unlocked");
this.connection?.emitLockGroup(1, false);
if (this.currentPlayerGroupId !== undefined) {
console.log("group unlocked");
this.connection?.emitLockGroup(this.currentPlayerGroupId, false);
}
});
}
@@ -792,7 +805,6 @@ export class GameScene extends DirtyScene {
this.connection.groupUpdateMessageStream.subscribe(
(groupPositionMessage: GroupCreatedUpdatedMessageInterface) => {
console.log(groupPositionMessage);
this.shareGroupPosition(groupPositionMessage);
}
);
@@ -805,6 +817,10 @@ export class GameScene extends DirtyScene {
}
});
this.connection.lockGroupMessageStream.subscribe((message) => {
this.lockGroup(message);
});
this.connection.onServerDisconnected(() => {
console.log("Player disconnected from server. Reloading scene.");
this.cleanupClosingScene();
@@ -838,6 +854,12 @@ export class GameScene extends DirtyScene {
});
});
this.connection.groupUsersUpdateMessageStream.subscribe((message) => {
this.currentPlayerGroupId = message.groupId;
console.log("GOT GROUP USERS UPDATE MESSAGE");
console.log(message);
});
/**
* Triggered when we receive the JWT token to connect to Jitsi
*/
@@ -1820,19 +1842,22 @@ ${escapedMessage}
break;
}
case "GroupCreatedUpdatedEvent":
console.log("CREATE OR UPDATE GROUP");
this.doShareGroupPosition(event.event);
break;
// TODO: CALL THIS ON GROUP LOCK CHANGE
// case "GroupCreatedUpdatedEvent":
// this.doShareGroupPosition(event.event);
// break;
case "DeleteGroupEvent":
this.doDeleteGroup(event.groupId);
break;
case "PlayerDetailsUpdated":
this.doUpdatePlayerDetails(event.details);
break;
case "DeleteGroupEvent": {
this.doDeleteGroup(event.groupId);
if (this.currentPlayerGroupId === event.groupId) {
this.currentPlayerGroupId = undefined;
}
break;
}
case "LockGroupEvent": {
this.doLockGroup(event.event);
break;
}
default: {
const tmp: never = event;
}
@@ -2027,6 +2052,21 @@ ${escapedMessage}
this.groups.delete(groupId);
}
lockGroup(event: LockGroupMessageInterface): void {
this.pendingEvents.enqueue({
type: "LockGroupEvent",
event,
});
}
doLockGroup(event: LockGroupMessageInterface): void {
const group = this.groups.get(event.groupId);
if (!group) {
return;
}
group.setTexture(event.lock ? "circleSprite-red" : "circleSprite-white");
}
doUpdatePlayerDetails(message: PlayerDetailsUpdatedMessageInterface): void {
const character = this.MapPlayersByKey.get(message.userId);
if (character === undefined) {