From 8f0b02a9c8a77b9d7cce3f448b8b7cebc76815d0 Mon Sep 17 00:00:00 2001
From: Piotr 'pwh' Hanusiak
Date: Thu, 14 Apr 2022 11:03:58 +0200
Subject: [PATCH] change away to availability status
---
back/src/Model/GameRoom.ts | 2 +-
back/src/Model/User.ts | 17 +++++++-------
back/src/Services/SocketManager.ts | 4 ++--
front/src/Connexion/ConnexionModels.ts | 5 +++--
front/src/Connexion/RoomConnection.ts | 7 +++---
.../src/Phaser/Components/PlayerStatusDot.ts | 22 +++++++++----------
front/src/Phaser/Game/GameScene.ts | 16 +++++++-------
front/src/Phaser/Game/PlayerInterface.ts | 3 ++-
front/src/Stores/PlayersStore.ts | 5 +++--
maps/tests/status_indicator.json | 2 +-
messages/protos/messages.proto | 14 ++++++++----
pusher/src/Model/Zone.ts | 13 ++++++-----
12 files changed, 60 insertions(+), 50 deletions(-)
diff --git a/back/src/Model/GameRoom.ts b/back/src/Model/GameRoom.ts
index 5b1e13bf..2971557d 100644
--- a/back/src/Model/GameRoom.ts
+++ b/back/src/Model/GameRoom.ts
@@ -146,7 +146,7 @@ export class GameRoom {
position,
false,
this.positionNotifier,
- joinRoomMessage.getAway(),
+ joinRoomMessage.getStatus(),
socket,
joinRoomMessage.getTagList(),
joinRoomMessage.getVisitcardurl(),
diff --git a/back/src/Model/User.ts b/back/src/Model/User.ts
index 7a6a53f1..ec31d1f0 100644
--- a/back/src/Model/User.ts
+++ b/back/src/Model/User.ts
@@ -5,6 +5,7 @@ import { Movable } from "../Model/Movable";
import { PositionNotifier } from "../Model/PositionNotifier";
import { ServerDuplexStream } from "grpc";
import {
+ AvailabilityStatus,
BatchMessage,
CompanionMessage,
FollowAbortMessage,
@@ -32,7 +33,7 @@ export class User implements Movable {
private position: PointInterface,
public silent: boolean,
private positionNotifier: PositionNotifier,
- private away: boolean,
+ private status: AvailabilityStatus,
public readonly socket: UserSocket,
public readonly tags: string[],
public readonly visitCardUrl: string | null,
@@ -90,8 +91,8 @@ export class User implements Movable {
return this.outlineColor;
}
- public isAway(): boolean {
- return this.away;
+ public getStatus(): AvailabilityStatus {
+ return this.status;
}
get following(): User | undefined {
@@ -134,9 +135,9 @@ export class User implements Movable {
}
this.voiceIndicatorShown = details.getShowvoiceindicator()?.getValue();
- const away = details.getAway();
- if (away) {
- this.away = away.getValue();
+ const status = details.getStatus();
+ if (status !== undefined) {
+ this.status = status;
}
const playerDetails = new SetPlayerDetailsMessage();
@@ -147,8 +148,8 @@ export class User implements Movable {
if (this.voiceIndicatorShown !== undefined) {
playerDetails.setShowvoiceindicator(new BoolValue().setValue(this.voiceIndicatorShown));
}
- if (details.getAway() !== undefined) {
- playerDetails.setAway(new BoolValue().setValue(this.away));
+ if (details.getStatus() !== undefined) {
+ playerDetails.setStatus(details.getStatus());
}
this.positionNotifier.updatePlayerDetails(this, playerDetails);
diff --git a/back/src/Services/SocketManager.ts b/back/src/Services/SocketManager.ts
index c186658f..9a70a148 100644
--- a/back/src/Services/SocketManager.ts
+++ b/back/src/Services/SocketManager.ts
@@ -328,7 +328,7 @@ export class SocketManager {
userJoinedZoneMessage.setUserid(thing.id);
userJoinedZoneMessage.setUseruuid(thing.uuid);
userJoinedZoneMessage.setName(thing.name);
- userJoinedZoneMessage.setAway(thing.isAway());
+ userJoinedZoneMessage.setStatus(thing.getStatus());
userJoinedZoneMessage.setCharacterlayersList(ProtobufUtils.toCharacterLayerMessages(thing.characterLayers));
userJoinedZoneMessage.setPosition(ProtobufUtils.toPositionMessage(thing.getPosition()));
userJoinedZoneMessage.setFromzone(this.toProtoZone(fromZone));
@@ -656,7 +656,7 @@ export class SocketManager {
userJoinedMessage.setUserid(thing.id);
userJoinedMessage.setUseruuid(thing.uuid);
userJoinedMessage.setName(thing.name);
- userJoinedMessage.setAway(thing.isAway());
+ userJoinedMessage.setStatus(thing.getStatus());
userJoinedMessage.setCharacterlayersList(ProtobufUtils.toCharacterLayerMessages(thing.characterLayers));
userJoinedMessage.setPosition(ProtobufUtils.toPositionMessage(thing.getPosition()));
if (thing.visitCardUrl) {
diff --git a/front/src/Connexion/ConnexionModels.ts b/front/src/Connexion/ConnexionModels.ts
index 1231373f..d3909f55 100644
--- a/front/src/Connexion/ConnexionModels.ts
+++ b/front/src/Connexion/ConnexionModels.ts
@@ -1,6 +1,7 @@
import type { SignalData } from "simple-peer";
import type { RoomConnection } from "./RoomConnection";
import type { BodyResourceDescriptionInterface } from "../Phaser/Entity/PlayerTextures";
+import { AvailabilityStatus } from "../Messages/ts-proto-generated/protos/messages";
export interface PointInterface {
x: number;
@@ -14,7 +15,7 @@ export interface MessageUserPositionInterface {
name: string;
characterLayers: BodyResourceDescriptionInterface[];
position: PointInterface;
- away: boolean;
+ status: AvailabilityStatus;
visitCardUrl: string | null;
companion: string | null;
userUuid: string;
@@ -30,7 +31,7 @@ export interface MessageUserJoined {
name: string;
characterLayers: BodyResourceDescriptionInterface[];
position: PointInterface;
- away: boolean;
+ status: AvailabilityStatus;
visitCardUrl: string | null;
companion: string | null;
userUuid: string;
diff --git a/front/src/Connexion/RoomConnection.ts b/front/src/Connexion/RoomConnection.ts
index e385fcc7..06a752f9 100644
--- a/front/src/Connexion/RoomConnection.ts
+++ b/front/src/Connexion/RoomConnection.ts
@@ -41,6 +41,7 @@ import {
SetPlayerDetailsMessage as SetPlayerDetailsMessageTsProto,
PingMessage as PingMessageTsProto,
CharacterLayerMessage,
+ AvailabilityStatus,
} from "../Messages/ts-proto-generated/protos/messages";
import { Subject } from "rxjs";
import { selectCharacterSceneVisibleStore } from "../Stores/SelectCharacterStore";
@@ -520,9 +521,9 @@ export class RoomConnection implements RoomConnection {
this.socket.send(bytes);
}
- public emitPlayerAway(away: boolean): void {
+ public emitPlayerStatusChange(status: AvailabilityStatus): void {
const message = SetPlayerDetailsMessageTsProto.fromPartial({
- away,
+ status,
});
const bytes = ClientToServerMessageTsProto.encode({
message: {
@@ -670,7 +671,7 @@ export class RoomConnection implements RoomConnection {
characterLayers,
visitCardUrl: message.visitCardUrl,
position: ProtobufClientUtils.toPointInterface(position),
- away: message.away,
+ status: message.status,
companion: companion ? companion.name : null,
userUuid: message.userUuid,
outlineColor: message.hasOutline ? message.outlineColor : undefined,
diff --git a/front/src/Phaser/Components/PlayerStatusDot.ts b/front/src/Phaser/Components/PlayerStatusDot.ts
index 4e09451a..fe739bda 100644
--- a/front/src/Phaser/Components/PlayerStatusDot.ts
+++ b/front/src/Phaser/Components/PlayerStatusDot.ts
@@ -1,16 +1,11 @@
+import { AvailabilityStatus } from "../../Messages/ts-proto-generated/protos/messages";
import { Easing } from "../../types";
-export enum PlayerStatus {
- Online = "Online",
- Silenced = "Silenced",
- Away = "Away",
-}
-
export class PlayerStatusDot extends Phaser.GameObjects.Container {
private statusImage: Phaser.GameObjects.Image;
private statusImageOutline: Phaser.GameObjects.Image;
- private status: PlayerStatus;
+ private status: AvailabilityStatus;
private readonly COLORS = {
online: 0x8cc43f,
@@ -19,12 +14,13 @@ export class PlayerStatusDot extends Phaser.GameObjects.Container {
awayOutline: 0x875d13,
silenced: 0xe74c3c,
silencedOutline: 0xc0392b,
+ never: 0xff00ff,
};
constructor(scene: Phaser.Scene, x: number, y: number) {
super(scene, x, y);
- this.status = PlayerStatus.Online;
+ this.status = AvailabilityStatus.ONLINE;
this.statusImage = this.scene.add.image(0, 0, "iconStatusIndicatorInside");
this.statusImageOutline = this.scene.add.image(0, 0, "iconStatusIndicatorOutline");
@@ -36,7 +32,7 @@ export class PlayerStatusDot extends Phaser.GameObjects.Container {
this.scene.add.existing(this);
}
- public setStatus(status: PlayerStatus, instant: boolean = false): void {
+ public setStatus(status: AvailabilityStatus, instant: boolean = false): void {
if (this.status === status) {
return;
}
@@ -73,12 +69,14 @@ export class PlayerStatusDot extends Phaser.GameObjects.Container {
private getColors(): { filling: number; outline: number } {
switch (this.status) {
- case PlayerStatus.Online:
+ case AvailabilityStatus.ONLINE:
return { filling: this.COLORS.online, outline: this.COLORS.onlineOutline };
- case PlayerStatus.Away:
+ case AvailabilityStatus.AWAY:
return { filling: this.COLORS.away, outline: this.COLORS.awayOutline };
- case PlayerStatus.Silenced:
+ case AvailabilityStatus.SILENCED:
return { filling: this.COLORS.silenced, outline: this.COLORS.silencedOutline };
+ default:
+ return { filling: this.COLORS.never, outline: this.COLORS.never };
}
}
}
diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts
index 5fa11d4b..8c2c5afc 100644
--- a/front/src/Phaser/Game/GameScene.ts
+++ b/front/src/Phaser/Game/GameScene.ts
@@ -100,9 +100,8 @@ import type { CoWebsite } from "../../WebRtc/CoWebsite/CoWesbite";
import CancelablePromise from "cancelable-promise";
import { Deferred } from "ts-deferred";
import { SuperLoaderPlugin } from "../Services/SuperLoaderPlugin";
-import { PlayerDetailsUpdatedMessage } from "../../Messages/ts-proto-generated/protos/messages";
+import { AvailabilityStatus, PlayerDetailsUpdatedMessage } from "../../Messages/ts-proto-generated/protos/messages";
import { privacyShutdownStore } from "../../Stores/PrivacyShutdownStore";
-import { PlayerStatus } from "../Components/PlayerStatusDot";
export interface GameSceneInitInterface {
initPosition: PointInterface | null;
reconnecting: boolean;
@@ -710,7 +709,8 @@ export class GameScene extends DirtyScene {
});
this.privacyShutdownStoreUnsubscribe = privacyShutdownStore.subscribe((away) => {
- this.connection?.emitPlayerAway(away);
+ // TODO: Might be a problem with SILENCED here
+ this.connection?.emitPlayerStatusChange(away ? AvailabilityStatus.AWAY : AvailabilityStatus.ONLINE);
});
Promise.all([
@@ -771,7 +771,7 @@ export class GameScene extends DirtyScene {
characterLayers: message.characterLayers,
name: message.name,
position: message.position,
- away: message.away,
+ status: message.status,
visitCardUrl: message.visitCardUrl,
companion: message.companion,
userUuid: message.userUuid,
@@ -1956,8 +1956,8 @@ ${escapedMessage}
if (addPlayerData.outlineColor !== undefined) {
player.setApiOutlineColor(addPlayerData.outlineColor);
}
- if (addPlayerData.away !== undefined) {
- player.setStatus(addPlayerData.away ? PlayerStatus.Away : PlayerStatus.Online, true);
+ if (addPlayerData.status !== undefined) {
+ player.setStatus(addPlayerData.status, true);
}
this.MapPlayers.add(player);
this.MapPlayersByKey.set(player.userId, player);
@@ -2108,8 +2108,8 @@ ${escapedMessage}
if (message.details?.showVoiceIndicator !== undefined) {
character.showTalkIcon(message.details?.showVoiceIndicator);
}
- if (message.details?.away !== undefined) {
- character.setStatus(message.details?.away ? PlayerStatus.Away : PlayerStatus.Online);
+ if (message.details?.status !== undefined) {
+ character.setStatus(message.details?.status);
}
}
diff --git a/front/src/Phaser/Game/PlayerInterface.ts b/front/src/Phaser/Game/PlayerInterface.ts
index 571bf3cb..c6ac3420 100644
--- a/front/src/Phaser/Game/PlayerInterface.ts
+++ b/front/src/Phaser/Game/PlayerInterface.ts
@@ -1,3 +1,4 @@
+import { AvailabilityStatus } from "../../Messages/ts-proto-generated/protos/messages";
import type { BodyResourceDescriptionInterface } from "../Entity/PlayerTextures";
export interface PlayerInterface {
@@ -7,7 +8,7 @@ export interface PlayerInterface {
visitCardUrl: string | null;
companion: string | null;
userUuid: string;
- away: boolean;
+ status: AvailabilityStatus;
color?: string;
outlineColor?: number;
}
diff --git a/front/src/Stores/PlayersStore.ts b/front/src/Stores/PlayersStore.ts
index 70c59b92..be270b5a 100644
--- a/front/src/Stores/PlayersStore.ts
+++ b/front/src/Stores/PlayersStore.ts
@@ -2,6 +2,7 @@ import { writable } from "svelte/store";
import type { PlayerInterface } from "../Phaser/Game/PlayerInterface";
import type { RoomConnection } from "../Connexion/RoomConnection";
import { getRandomColor } from "../WebRtc/ColorGenerator";
+import { AvailabilityStatus } from "../Messages/ts-proto-generated/protos/messages";
let idCount = 0;
@@ -28,7 +29,7 @@ function createPlayersStore() {
visitCardUrl: message.visitCardUrl,
companion: message.companion,
userUuid: message.userUuid,
- away: message.away,
+ status: message.status,
color: getRandomColor(),
});
return users;
@@ -58,7 +59,7 @@ function createPlayersStore() {
characterLayers: [],
visitCardUrl: null,
companion: null,
- away: false,
+ status: AvailabilityStatus.ONLINE,
userUuid: "dummy",
color: getRandomColor(),
});
diff --git a/maps/tests/status_indicator.json b/maps/tests/status_indicator.json
index 8342a7b8..deb82e8d 100644
--- a/maps/tests/status_indicator.json
+++ b/maps/tests/status_indicator.json
@@ -121,7 +121,7 @@
"rotation":0,
"text":
{
- "text":"Get into silent zone to show status dot for your WOKA",
+ "text":"Get into silent zone to show red status dot for your WOKA",
"wrap":true
},
"type":"",
diff --git a/messages/protos/messages.proto b/messages/protos/messages.proto
index fae82184..43bb185c 100644
--- a/messages/protos/messages.proto
+++ b/messages/protos/messages.proto
@@ -4,6 +4,12 @@ import "google/protobuf/wrappers.proto";
/*********** PARTIAL MESSAGES **************/
+enum AvailabilityStatus {
+ ONLINE = 0;
+ SILENCED = 1;
+ AWAY = 2;
+}
+
message PositionMessage {
int32 x = 1;
int32 y = 2;
@@ -53,7 +59,7 @@ message SetPlayerDetailsMessage {
google.protobuf.UInt32Value outlineColor = 3;
google.protobuf.BoolValue removeOutlineColor = 4;
google.protobuf.BoolValue showVoiceIndicator = 5;
- google.protobuf.BoolValue away = 6;
+ AvailabilityStatus status = 6;
}
message UserMovesMessage {
@@ -207,7 +213,7 @@ message UserJoinedMessage {
string userUuid = 7;
uint32 outlineColor = 8;
bool hasOutline = 9;
- bool away = 10;
+ AvailabilityStatus status = 10;
}
message UserLeftMessage {
@@ -346,7 +352,7 @@ message JoinRoomMessage {
CompanionMessage companion = 8;
string visitCardUrl = 9;
string userRoomToken = 10;
- bool away = 11;
+ AvailabilityStatus status = 11;
}
message UserJoinedZoneMessage {
@@ -360,7 +366,7 @@ message UserJoinedZoneMessage {
string userUuid = 8;
uint32 outlineColor = 9;
bool hasOutline = 10;
- bool away = 11;
+ AvailabilityStatus status = 11;
}
message UserLeftZoneMessage {
diff --git a/pusher/src/Model/Zone.ts b/pusher/src/Model/Zone.ts
index ab82bf1b..c15aeefd 100644
--- a/pusher/src/Model/Zone.ts
+++ b/pusher/src/Model/Zone.ts
@@ -18,6 +18,7 @@ import {
ErrorMessage,
PlayerDetailsUpdatedMessage,
SetPlayerDetailsMessage,
+ AvailabilityStatus,
} from "../Messages/generated/messages_pb";
import { ClientReadableStream } from "grpc";
import { PositionDispatcher } from "../Model/PositionDispatcher";
@@ -49,7 +50,7 @@ export class UserDescriptor {
private name: string,
private characterLayers: CharacterLayerMessage[],
private position: PositionMessage,
- private away: boolean,
+ private status: AvailabilityStatus,
private visitCardUrl: string | null,
private companion?: CompanionMessage,
private outlineColor?: number
@@ -70,7 +71,7 @@ export class UserDescriptor {
message.getName(),
message.getCharacterlayersList(),
position,
- message.getAway(),
+ message.getStatus(),
message.getVisitcardurl(),
message.getCompanion(),
message.getHasoutline() ? message.getOutlinecolor() : undefined
@@ -91,9 +92,9 @@ export class UserDescriptor {
} else {
this.outlineColor = playerDetails.getOutlinecolor()?.getValue();
}
- const away = playerDetails.getAway();
- if (away) {
- this.away = away.getValue();
+ const status = playerDetails.getStatus();
+ if (status !== undefined) {
+ this.status = status;
}
}
@@ -104,7 +105,7 @@ export class UserDescriptor {
userJoinedMessage.setName(this.name);
userJoinedMessage.setCharacterlayersList(this.characterLayers);
userJoinedMessage.setPosition(this.position);
- userJoinedMessage.setAway(this.away);
+ userJoinedMessage.setStatus(this.status);
if (this.visitCardUrl) {
userJoinedMessage.setVisitcardurl(this.visitCardUrl);
}