Added support for quiet areas
[libreadventure.git] / front / src / Phaser / Game / GameScene.ts
index ea8edd5bd127608bf777a9981eb8d7a678a1cd63..38a4fd41ec2ceec1cb5eeb1ec84d00075cd1ce1f 100644 (file)
@@ -43,6 +43,7 @@ export class GameScene extends Phaser.Scene {
     private initPosition: PositionInterface|null = null;
     private playersPositionInterpolator = new PlayersPositionInterpolator();
     active: boolean;
+    silent: boolean;
 
     MapKey: string;
     MapUrlFile: string;
@@ -54,6 +55,7 @@ export class GameScene extends Phaser.Scene {
     lastMoveEventSent: HasMovedEvent = {
         direction: '',
         moving: false,
+        silent: false,
         x: -1000,
         y: -1000
     }
@@ -385,7 +387,8 @@ export class GameScene extends Phaser.Scene {
             this.GameManager.getPlayerName(),
             this.GameManager.getCharacterSelected(),
             PlayerAnimationNames.WalkDown,
-            false
+            false,
+            true
         );
 
         //create collision
@@ -393,7 +396,7 @@ export class GameScene extends Phaser.Scene {
         this.createCollisionObject();
 
         //join room
-        this.GameManager.joinRoom(this.RoomId, this.startX, this.startY, PlayerAnimationNames.WalkDown, false);
+        this.GameManager.joinRoom(this.RoomId, this.startX, this.startY, PlayerAnimationNames.WalkDown, false, false);
 
         //listen event to share position of user
         this.CurrentPlayer.on(hasMovedEventName, this.pushPlayerPosition.bind(this))
@@ -427,6 +430,7 @@ export class GameScene extends Phaser.Scene {
 
     private doPushPlayerPosition(event: HasMovedEvent): void {
         this.lastMoveEventSent = event;
+        this.lastMoveEventSent.silent = this.silent;
         this.lastSentTick = this.currentTick;
         this.GameManager.pushPlayerPosition(event);
     }
@@ -478,6 +482,20 @@ export class GameScene extends Phaser.Scene {
             }
         }
 
+       // Silent areas
+        tile = this.Map.getTileAt(this.Map.worldToTileX(this.CurrentPlayer.x), this.Map.worldToTileY(this.CurrentPlayer.y), true, "silent");
+       if (tile !== null){
+           if (tile.index !== -1){
+                this.silent=true;
+               document.getElementById("webRtcSwitch").style.display="none";
+               document.getElementById("quietzone").style.display="block";
+           }else{
+                this.silent=false;
+               document.getElementById("webRtcSwitch").style.display="block";
+               document.getElementById("quietzone").style.display="none";
+            }
+       }
+
         // Let's move all users
         let updatedPlayersPositions = this.playersPositionInterpolator.getUpdatedPositions(time);
         updatedPlayersPositions.forEach((moveEvent: HasMovedEvent, userId: string) => {
@@ -556,7 +574,8 @@ export class GameScene extends Phaser.Scene {
             addPlayerData.name,
             addPlayerData.character,
             addPlayerData.position.direction,
-            addPlayerData.position.moving
+            addPlayerData.position.moving,
+            addPlayerData.position.silent
         );
         this.MapPlayers.add(player);
         this.MapPlayersByKey.set(player.userId, player);
@@ -595,6 +614,7 @@ export class GameScene extends Phaser.Scene {
 
     shareGroupPosition(groupPositionMessage: GroupCreatedUpdatedMessageInterface) {
         let groupId = groupPositionMessage.groupId;
+       if (this.silent){return}
 
         let group = this.groups.get(groupId);
         if (group !== undefined) {