From 6a394945f34717527a9cd9076a3f190beff00d03 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Thu, 7 Apr 2022 15:49:58 +0200 Subject: [PATCH 01/17] we can now trigger events when stepping on tiled rectangular objects. WIP --- front/src/Phaser/Game/GameMap.ts | 23 +- .../Phaser/Game/GameMapPropertiesListener.ts | 2 + front/src/Phaser/Game/GameScene.ts | 1 + maps/starter/map.json | 679 +++++++++--------- 4 files changed, 364 insertions(+), 341 deletions(-) diff --git a/front/src/Phaser/Game/GameMap.ts b/front/src/Phaser/Game/GameMap.ts index d0ca4850..9f782aef 100644 --- a/front/src/Phaser/Game/GameMap.ts +++ b/front/src/Phaser/Game/GameMap.ts @@ -76,7 +76,8 @@ export class GameMap { ) { this.flatLayers = flattenGroupLayersMap(map); this.tiledObjects = this.getObjectsFromLayers(this.flatLayers); - this.zones = this.tiledObjects.filter((object) => object.type === "zone"); + this.zones = this.tiledObjects.filter((object) => object.width > 0); + console.log(this.zones); let depth = -2; for (const layer of this.flatLayers) { @@ -469,6 +470,26 @@ export class GameMap { private getProperties(key: number): Map { const properties = new Map(); + const zonesByNewPosition = this.position + ? this.zones.filter((zone) => { + if (!this.position) { + return false; + } + return MathUtils.isOverlappingWithRectangle(this.position, zone); + }) + : []; + + for (const zone of zonesByNewPosition) { + if (zone.properties !== undefined) { + for (const property of zone.properties) { + if (property.value === undefined) { + continue; + } + properties.set(property.name, property.value); + } + } + } + for (const layer of this.flatLayers) { if (layer.type !== "tilelayer") { continue; diff --git a/front/src/Phaser/Game/GameMapPropertiesListener.ts b/front/src/Phaser/Game/GameMapPropertiesListener.ts index 103cc4bc..ae1699c4 100644 --- a/front/src/Phaser/Game/GameMapPropertiesListener.ts +++ b/front/src/Phaser/Game/GameMapPropertiesListener.ts @@ -66,6 +66,8 @@ export class GameMapPropertiesListener { } }); } else { + console.log("START JITSI"); + console.log(newValue, oldValue, allProps); const openJitsiRoomFunction = () => { const roomName = jitsiFactory.getRoomName(newValue.toString(), this.scene.instance); const jitsiUrl = allProps.get(GameMapProperties.JITSI_URL) as string | undefined; diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 457702da..21bd036b 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -893,6 +893,7 @@ export class GameScene extends DirtyScene { }); this.gameMap.onEnterZone((zones) => { + console.log("ZONE ENTERED"); for (const zone of zones) { const focusable = zone.properties?.find((property) => property.name === "focusable"); if (focusable && focusable.value === true) { diff --git a/maps/starter/map.json b/maps/starter/map.json index 8d93c66e..beee3669 100644 --- a/maps/starter/map.json +++ b/maps/starter/map.json @@ -1,341 +1,340 @@ -{ "compressionlevel":-1, - "height":17, - "infinite":false, - "layers":[ - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":6, - "name":"start", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 443, 443, 443, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":7, - "name":"collisions", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":29, - "name":"jitsiMeetingRoom", - "opacity":1, - "properties":[ - { - "name":"jitsiRoom", - "type":"string", - "value":"MeetingRoom" - }], - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":38, - "name":"jitsiChillzone", - "opacity":1, - "properties":[ - { - "name":"jitsiRoom", - "type":"string", - "value":"ChillZone" - }, - { - "name":"jitsiTrigger", - "type":"string", - "value":"onaction" - }], - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":23, - "name":"clockZone", - "opacity":1, - "properties":[ - { - "name":"zone", - "type":"string", - "value":"clock" - }], - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201], - "height":17, - "id":4, - "name":"floor", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[49, 58, 58, 58, 58, 58, 58, 42, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 42, 57, 57, 57, 57, 57, 57, 57, 50, 45, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 45, 45, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 45, 45, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 32, 58, 58, 58, 58, 58, 58, 58, 60, 83, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 84, 93, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 94], - "height":17, - "id":9, - "name":"walls", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 293, 0, 107, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 107, 0, 0, 128, 1, 2, 3, 0, 0, 0, 0, 304, 296, 297, 296, 297, 304, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 11, 12, 13, 0, 0, 0, 0, 315, 307, 308, 307, 308, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 23, 0, 0, 0, 0, 243, 0, 0, 0, 0, 2147483943, 0, 0, 0, 325, 340, 340, 326, 0, 0, 325, 340, 340, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 283, 283, 0, 2147483954, 0, 0, 0, 0, 340, 340, 0, 0, 0, 0, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 294, 0, 0, 0, 0, 0, 325, 340, 340, 326, 0, 0, 325, 340, 340, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 351, 0, 0, 0, 0, 351, 351, 0, 0, 0, 0, 0, 0, 325, 273, 275, 326, 0, 0, 0, 394, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 405, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 333, 334, 333, 334, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 345, 344, 345, 344, 345, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 220, 220, 220, 220, 218, 0, 0, 0, 0, 0, 0, 0, 0, 284, 286, 0, 0, 0, 0, 438, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 336, 335, 336, 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 347, 346, 347, 346, 347, 0, 2147483811, 2147483810, 2147483809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":1, - "name":"furniture", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 231, 231, 231, 231, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":33, - "name":"aboveFurniture", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":2, - "name":"floorLayer", - "objects":[ - { - "height":64, - "id":4, - "name":"clockPopup", - "rotation":0, - "type":"", - "visible":true, - "width":128, - "x":512, - "y":0 - }], - "opacity":1, - "type":"objectgroup", - "visible":true, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 329, 0, 0, 0, 0, 329, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 209, 209, 209, 209, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483801, 2147483800, 2147483799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":3, - "name":"abovePlayer1", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 400, 399, 400, 399, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 411, 410, 411, 410, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":27, - "name":"abovePlayer2", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 402, 401, 402, 401, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 413, 412, 413, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":28, - "name":"abovePlayer3", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }], - "nextlayerid":39, - "nextobjectid":9, - "orientation":"orthogonal", - "properties":[ - { - "name":"mapCopyright", - "type":"string", - "value":"Credits: Valdo Romao https:\/\/www.linkedin.com\/in\/valdo-romao\/ \nLicense: CC-BY-SA 3.0 (http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/)" - }, - { - "name":"mapDescription", - "type":"string", - "value":"A perfect virtual office to get started with WorkAdventure!" - }, - { - "name":"mapImage", - "type":"string", - "value":"map.png" - }, - { - "name":"mapLink", - "type":"string", - "value":"https:\/\/thecodingmachine.github.io\/workadventure-map-starter-kit\/map.json" - }, - { - "name":"mapName", - "type":"string", - "value":"Starter kit" - }, - { - "name":"script", - "type":"string", - "value":"..\/dist\/script.js" - }], - "renderorder":"right-down", - "tiledversion":"1.7.0", - "tileheight":32, - "tilesets":[ - { - "columns":10, - "firstgid":1, - "image":"..\/assets\/tileset5_export.png", - "imageheight":320, - "imagewidth":320, - "margin":0, - "name":"tileset5_export", - "properties":[ - { - "name":"tilesetCopyright", - "type":"string", - "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" - }], - "spacing":0, - "tilecount":100, - "tileheight":32, - "tilewidth":32 - }, - { - "columns":10, - "firstgid":101, - "image":"..\/assets\/tileset6_export.png", - "imageheight":320, - "imagewidth":320, - "margin":0, - "name":"tileset6_export", - "properties":[ - { - "name":"tilesetCopyright", - "type":"string", - "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" - }], - "spacing":0, - "tilecount":100, - "tileheight":32, - "tilewidth":32 - }, - { - "columns":11, - "firstgid":201, - "image":"..\/assets\/tileset1.png", - "imageheight":352, - "imagewidth":352, - "margin":0, - "name":"tileset1", - "properties":[ - { - "name":"tilesetCopyright", - "type":"string", - "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" - }], - "spacing":0, - "tilecount":121, - "tileheight":32, - "tilewidth":32 - }, - { - "columns":11, - "firstgid":322, - "image":"..\/assets\/tileset1-repositioning.png", - "imageheight":352, - "imagewidth":352, - "margin":0, - "name":"tileset1-repositioning", - "properties":[ - { - "name":"tilesetCopyright", - "type":"string", - "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" - }], - "spacing":0, - "tilecount":121, - "tileheight":32, - "tilewidth":32 - }, - { - "columns":6, - "firstgid":443, - "image":"..\/assets\/Special_Zones.png", - "imageheight":64, - "imagewidth":192, - "margin":0, - "name":"Special_Zones", - "properties":[ - { - "name":"tilesetCopyright", - "type":"string", - "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" - }], - "spacing":0, - "tilecount":12, - "tileheight":32, - "tiles":[ - { - "id":0, - "properties":[ - { - "name":"collides", - "type":"bool", - "value":true - }] - }], - "tilewidth":32 - }], - "tilewidth":32, - "type":"map", - "version":"1.6", - "width":31 +{ "compressionlevel":-1, + "height":17, + "infinite":false, + "layers":[ + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":6, + "name":"start", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 443, 443, 443, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":7, + "name":"collisions", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":29, + "name":"jitsiMeetingRoom", + "opacity":1, + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"MeetingRoom" + }], + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":23, + "name":"clockZone", + "opacity":1, + "properties":[ + { + "name":"zone", + "type":"string", + "value":"clock" + }], + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201], + "height":17, + "id":4, + "name":"floor", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[49, 58, 58, 58, 58, 58, 58, 42, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 42, 57, 57, 57, 57, 57, 57, 57, 50, 45, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 45, 45, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 45, 45, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 32, 58, 58, 58, 58, 58, 58, 58, 60, 83, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 84, 93, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 94], + "height":17, + "id":9, + "name":"walls", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 293, 0, 107, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 107, 0, 0, 128, 1, 2, 3, 0, 0, 0, 0, 304, 296, 297, 296, 297, 304, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 11, 12, 13, 0, 0, 0, 0, 315, 307, 308, 307, 308, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 23, 0, 0, 0, 0, 243, 0, 0, 0, 0, 2147483943, 0, 0, 0, 325, 340, 340, 326, 0, 0, 325, 340, 340, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 283, 283, 0, 2147483954, 0, 0, 0, 0, 340, 340, 0, 0, 0, 0, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 294, 0, 0, 0, 0, 0, 325, 340, 340, 326, 0, 0, 325, 340, 340, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 351, 0, 0, 0, 0, 351, 351, 0, 0, 0, 0, 0, 0, 325, 273, 275, 326, 0, 0, 0, 394, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 405, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 333, 334, 333, 334, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 345, 344, 345, 344, 345, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 220, 220, 220, 220, 218, 0, 0, 0, 0, 0, 0, 0, 0, 284, 286, 0, 0, 0, 0, 438, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 336, 335, 336, 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 347, 346, 347, 346, 347, 0, 2147483811, 2147483810, 2147483809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":1, + "name":"furniture", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 231, 231, 231, 231, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":33, + "name":"aboveFurniture", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":2, + "name":"floorLayer", + "objects":[ + { + "height":64, + "id":4, + "name":"clockPopup", + "rotation":0, + "type":"", + "visible":true, + "width":128, + "x":512, + "y":0 + }, + { + "height":39.2648412257873, + "id":9, + "name":"jitsiChillZone", + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"MeetingRoom" + }, + { + "name":"jitsiTrigger", + "type":"string", + "value":"onaction" + }], + "rotation":0.513253840280061, + "type":"", + "visible":true, + "width":76.5390990955655, + "x":59.0274706237854, + "y":91.8390566468795 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 329, 0, 0, 0, 0, 329, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 209, 209, 209, 209, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483801, 2147483800, 2147483799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":3, + "name":"abovePlayer1", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 400, 399, 400, 399, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 411, 410, 411, 410, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":27, + "name":"abovePlayer2", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 402, 401, 402, 401, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 413, 412, 413, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":28, + "name":"abovePlayer3", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }], + "nextlayerid":39, + "nextobjectid":10, + "orientation":"orthogonal", + "properties":[ + { + "name":"mapCopyright", + "type":"string", + "value":"Credits: Valdo Romao https:\/\/www.linkedin.com\/in\/valdo-romao\/ \nLicense: CC-BY-SA 3.0 (http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/)" + }, + { + "name":"mapDescription", + "type":"string", + "value":"A perfect virtual office to get started with WorkAdventure!" + }, + { + "name":"mapImage", + "type":"string", + "value":"map.png" + }, + { + "name":"mapLink", + "type":"string", + "value":"https:\/\/thecodingmachine.github.io\/workadventure-map-starter-kit\/map.json" + }, + { + "name":"mapName", + "type":"string", + "value":"Starter kit" + }, + { + "name":"script", + "type":"string", + "value":"..\/dist\/script.js" + }], + "renderorder":"right-down", + "tiledversion":"1.7.2", + "tileheight":32, + "tilesets":[ + { + "columns":10, + "firstgid":1, + "image":"..\/assets\/tileset5_export.png", + "imageheight":320, + "imagewidth":320, + "margin":0, + "name":"tileset5_export", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":100, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":10, + "firstgid":101, + "image":"..\/assets\/tileset6_export.png", + "imageheight":320, + "imagewidth":320, + "margin":0, + "name":"tileset6_export", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":100, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":11, + "firstgid":201, + "image":"..\/assets\/tileset1.png", + "imageheight":352, + "imagewidth":352, + "margin":0, + "name":"tileset1", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":121, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":11, + "firstgid":322, + "image":"..\/assets\/tileset1-repositioning.png", + "imageheight":352, + "imagewidth":352, + "margin":0, + "name":"tileset1-repositioning", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":121, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":6, + "firstgid":443, + "image":"..\/assets\/Special_Zones.png", + "imageheight":64, + "imagewidth":192, + "margin":0, + "name":"Special_Zones", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":12, + "tileheight":32, + "tiles":[ + { + "id":0, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }], + "tilewidth":32 + }], + "tilewidth":32, + "type":"map", + "version":"1.6", + "width":31 } \ No newline at end of file From 67f49722922fb49885c56879cda3e27f73b07e36 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Mon, 11 Apr 2022 13:12:19 +0200 Subject: [PATCH 02/17] little cleanup --- front/src/Phaser/Game/GameMap.ts | 42 ++++------ front/src/Phaser/Game/GameMapProperties.ts | 2 + .../Phaser/Game/GameMapPropertiesListener.ts | 2 - front/src/Phaser/Game/GameScene.ts | 9 ++- maps/starter/map.json | 80 ++++++++++++++----- 5 files changed, 83 insertions(+), 52 deletions(-) diff --git a/front/src/Phaser/Game/GameMap.ts b/front/src/Phaser/Game/GameMap.ts index 9f782aef..ce6e2711 100644 --- a/front/src/Phaser/Game/GameMap.ts +++ b/front/src/Phaser/Game/GameMap.ts @@ -77,7 +77,6 @@ export class GameMap { this.flatLayers = flattenGroupLayersMap(map); this.tiledObjects = this.getObjectsFromLayers(this.flatLayers); this.zones = this.tiledObjects.filter((object) => object.width > 0); - console.log(this.zones); let depth = -2; for (const layer of this.flatLayers) { @@ -424,23 +423,8 @@ export class GameMap { * We use Tiled Objects with type "zone" as zones with defined x, y, width and height for easier event triggering. */ private triggerZonesChange(): void { - const zonesByOldPosition = this.oldPosition - ? this.zones.filter((zone) => { - if (!this.oldPosition) { - return false; - } - return MathUtils.isOverlappingWithRectangle(this.oldPosition, zone); - }) - : []; - - const zonesByNewPosition = this.position - ? this.zones.filter((zone) => { - if (!this.position) { - return false; - } - return MathUtils.isOverlappingWithRectangle(this.position, zone); - }) - : []; + const zonesByOldPosition = this.getZonesOnPosition(this.oldPosition); + const zonesByNewPosition = this.getZonesOnPosition(this.position); const enterZones = new Set(zonesByNewPosition); const leaveZones = new Set(zonesByOldPosition); @@ -470,16 +454,7 @@ export class GameMap { private getProperties(key: number): Map { const properties = new Map(); - const zonesByNewPosition = this.position - ? this.zones.filter((zone) => { - if (!this.position) { - return false; - } - return MathUtils.isOverlappingWithRectangle(this.position, zone); - }) - : []; - - for (const zone of zonesByNewPosition) { + for (const zone of this.getZonesOnPosition(this.position)) { if (zone.properties !== undefined) { for (const property of zone.properties) { if (property.value === undefined) { @@ -528,6 +503,17 @@ export class GameMap { return properties; } + private getZonesOnPosition(position?: { x: number; y: number }): ITiledMapObject[] { + return position + ? this.zones.filter((zone) => { + if (!position) { + return false; + } + return MathUtils.isOverlappingWithRectangle(position, zone); + }) + : []; + } + private getTileProperty(index: number): Array { if (this.tileSetPropertyMap[index]) { return this.tileSetPropertyMap[index]; diff --git a/front/src/Phaser/Game/GameMapProperties.ts b/front/src/Phaser/Game/GameMapProperties.ts index b77bd02b..1c2a78b6 100644 --- a/front/src/Phaser/Game/GameMapProperties.ts +++ b/front/src/Phaser/Game/GameMapProperties.ts @@ -7,6 +7,7 @@ export enum GameMapProperties { EXIT_URL = "exitUrl", EXIT_SCENE_URL = "exitSceneUrl", FONT_FAMILY = "font-family", + FOCUSABLE = "focusable", JITSI_ADMIN_ROOM_TAG = "jitsiRoomAdminTag", JITSI_CONFIG = "jitsiConfig", JITSI_INTERFACE_CONFIG = "jitsiInterfaceConfig", @@ -35,4 +36,5 @@ export enum GameMapProperties { URL = "url", WRITABLE_BY = "writableBy", ZONE = "zone", + ZOOM_MARGIN = "zoom_margin", } diff --git a/front/src/Phaser/Game/GameMapPropertiesListener.ts b/front/src/Phaser/Game/GameMapPropertiesListener.ts index ae1699c4..103cc4bc 100644 --- a/front/src/Phaser/Game/GameMapPropertiesListener.ts +++ b/front/src/Phaser/Game/GameMapPropertiesListener.ts @@ -66,8 +66,6 @@ export class GameMapPropertiesListener { } }); } else { - console.log("START JITSI"); - console.log(newValue, oldValue, allProps); const openJitsiRoomFunction = () => { const roomName = jitsiFactory.getRoomName(newValue.toString(), this.scene.instance); const jitsiUrl = allProps.get(GameMapProperties.JITSI_URL) as string | undefined; diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 21bd036b..210cfba1 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -893,11 +893,14 @@ export class GameScene extends DirtyScene { }); this.gameMap.onEnterZone((zones) => { - console.log("ZONE ENTERED"); for (const zone of zones) { - const focusable = zone.properties?.find((property) => property.name === "focusable"); + const focusable = zone.properties?.find( + (property) => property.name === GameMapProperties.FOCUSABLE + ); if (focusable && focusable.value === true) { - const zoomMargin = zone.properties?.find((property) => property.name === "zoom_margin"); + const zoomMargin = zone.properties?.find( + (property) => property.name === GameMapProperties.ZOOM_MARGIN + ); this.cameraManager.enterFocusMode( { x: zone.x + zone.width * 0.5, diff --git a/maps/starter/map.json b/maps/starter/map.json index beee3669..b6ea80b9 100644 --- a/maps/starter/map.json +++ b/maps/starter/map.json @@ -26,24 +26,6 @@ "x":0, "y":0 }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":29, - "name":"jitsiMeetingRoom", - "opacity":1, - "properties":[ - { - "name":"jitsiRoom", - "type":"string", - "value":"MeetingRoom" - }], - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, { "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":17, @@ -147,6 +129,66 @@ "width":76.5390990955655, "x":59.0274706237854, "y":91.8390566468795 + }, + { + "height":179.413785031117, + "id":10, + "name":"focusableChillZone", + "properties":[ + { + "name":"focusOn", + "type":"bool", + "value":true + }, + { + "name":"focusable", + "type":"bool", + "value":true + }, + { + "name":"jitsiRoom", + "type":"string", + "value":"MeetingRoom" + }, + { + "name":"jitsiTrigger", + "type":"string", + "value":"onaction" + }], + "rotation":0.513254, + "type":"", + "visible":true, + "width":283.802849832786, + "x":316.73045, + "y":255.367599999999 + }, + { + "height":119, + "id":11, + "name":"", + "properties":[ + { + "name":"silent", + "type":"bool", + "value":true + }], + "rotation":0, + "type":"", + "visible":true, + "width":214, + "x":745, + "y":329 + }, + { + "height":0, + "id":13, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":0, + "x":358, + "y":629 }], "opacity":1, "type":"objectgroup", @@ -191,7 +233,7 @@ "y":0 }], "nextlayerid":39, - "nextobjectid":10, + "nextobjectid":14, "orientation":"orthogonal", "properties":[ { From 2fa504a18949153237c363f79cacd5414beaf188 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Mon, 11 Apr 2022 13:40:55 +0200 Subject: [PATCH 03/17] add test map --- maps/starter/map.json | 721 ++++++++++++++++------------------ maps/tests/index.html | 8 + maps/tests/tiled_objects.json | 268 +++++++++++++ 3 files changed, 616 insertions(+), 381 deletions(-) create mode 100644 maps/tests/tiled_objects.json diff --git a/maps/starter/map.json b/maps/starter/map.json index b6ea80b9..8d93c66e 100644 --- a/maps/starter/map.json +++ b/maps/starter/map.json @@ -1,382 +1,341 @@ -{ "compressionlevel":-1, - "height":17, - "infinite":false, - "layers":[ - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":6, - "name":"start", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 443, 443, 443, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":7, - "name":"collisions", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":23, - "name":"clockZone", - "opacity":1, - "properties":[ - { - "name":"zone", - "type":"string", - "value":"clock" - }], - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201], - "height":17, - "id":4, - "name":"floor", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[49, 58, 58, 58, 58, 58, 58, 42, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 42, 57, 57, 57, 57, 57, 57, 57, 50, 45, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 45, 45, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 45, 45, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 32, 58, 58, 58, 58, 58, 58, 58, 60, 83, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 84, 93, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 94], - "height":17, - "id":9, - "name":"walls", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 293, 0, 107, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 107, 0, 0, 128, 1, 2, 3, 0, 0, 0, 0, 304, 296, 297, 296, 297, 304, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 11, 12, 13, 0, 0, 0, 0, 315, 307, 308, 307, 308, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 23, 0, 0, 0, 0, 243, 0, 0, 0, 0, 2147483943, 0, 0, 0, 325, 340, 340, 326, 0, 0, 325, 340, 340, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 283, 283, 0, 2147483954, 0, 0, 0, 0, 340, 340, 0, 0, 0, 0, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 294, 0, 0, 0, 0, 0, 325, 340, 340, 326, 0, 0, 325, 340, 340, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 351, 0, 0, 0, 0, 351, 351, 0, 0, 0, 0, 0, 0, 325, 273, 275, 326, 0, 0, 0, 394, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 405, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 333, 334, 333, 334, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 345, 344, 345, 344, 345, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 220, 220, 220, 220, 218, 0, 0, 0, 0, 0, 0, 0, 0, 284, 286, 0, 0, 0, 0, 438, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 336, 335, 336, 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 347, 346, 347, 346, 347, 0, 2147483811, 2147483810, 2147483809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":1, - "name":"furniture", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 231, 231, 231, 231, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":33, - "name":"aboveFurniture", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "draworder":"topdown", - "id":2, - "name":"floorLayer", - "objects":[ - { - "height":64, - "id":4, - "name":"clockPopup", - "rotation":0, - "type":"", - "visible":true, - "width":128, - "x":512, - "y":0 - }, - { - "height":39.2648412257873, - "id":9, - "name":"jitsiChillZone", - "properties":[ - { - "name":"jitsiRoom", - "type":"string", - "value":"MeetingRoom" - }, - { - "name":"jitsiTrigger", - "type":"string", - "value":"onaction" - }], - "rotation":0.513253840280061, - "type":"", - "visible":true, - "width":76.5390990955655, - "x":59.0274706237854, - "y":91.8390566468795 - }, - { - "height":179.413785031117, - "id":10, - "name":"focusableChillZone", - "properties":[ - { - "name":"focusOn", - "type":"bool", - "value":true - }, - { - "name":"focusable", - "type":"bool", - "value":true - }, - { - "name":"jitsiRoom", - "type":"string", - "value":"MeetingRoom" - }, - { - "name":"jitsiTrigger", - "type":"string", - "value":"onaction" - }], - "rotation":0.513254, - "type":"", - "visible":true, - "width":283.802849832786, - "x":316.73045, - "y":255.367599999999 - }, - { - "height":119, - "id":11, - "name":"", - "properties":[ - { - "name":"silent", - "type":"bool", - "value":true - }], - "rotation":0, - "type":"", - "visible":true, - "width":214, - "x":745, - "y":329 - }, - { - "height":0, - "id":13, - "name":"", - "rotation":0, - "type":"", - "visible":true, - "width":0, - "x":358, - "y":629 - }], - "opacity":1, - "type":"objectgroup", - "visible":true, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 329, 0, 0, 0, 0, 329, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 209, 209, 209, 209, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483801, 2147483800, 2147483799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":3, - "name":"abovePlayer1", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 400, 399, 400, 399, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 411, 410, 411, 410, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":27, - "name":"abovePlayer2", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 402, 401, 402, 401, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 413, 412, 413, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":17, - "id":28, - "name":"abovePlayer3", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":31, - "x":0, - "y":0 - }], - "nextlayerid":39, - "nextobjectid":14, - "orientation":"orthogonal", - "properties":[ - { - "name":"mapCopyright", - "type":"string", - "value":"Credits: Valdo Romao https:\/\/www.linkedin.com\/in\/valdo-romao\/ \nLicense: CC-BY-SA 3.0 (http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/)" - }, - { - "name":"mapDescription", - "type":"string", - "value":"A perfect virtual office to get started with WorkAdventure!" - }, - { - "name":"mapImage", - "type":"string", - "value":"map.png" - }, - { - "name":"mapLink", - "type":"string", - "value":"https:\/\/thecodingmachine.github.io\/workadventure-map-starter-kit\/map.json" - }, - { - "name":"mapName", - "type":"string", - "value":"Starter kit" - }, - { - "name":"script", - "type":"string", - "value":"..\/dist\/script.js" - }], - "renderorder":"right-down", - "tiledversion":"1.7.2", - "tileheight":32, - "tilesets":[ - { - "columns":10, - "firstgid":1, - "image":"..\/assets\/tileset5_export.png", - "imageheight":320, - "imagewidth":320, - "margin":0, - "name":"tileset5_export", - "properties":[ - { - "name":"tilesetCopyright", - "type":"string", - "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" - }], - "spacing":0, - "tilecount":100, - "tileheight":32, - "tilewidth":32 - }, - { - "columns":10, - "firstgid":101, - "image":"..\/assets\/tileset6_export.png", - "imageheight":320, - "imagewidth":320, - "margin":0, - "name":"tileset6_export", - "properties":[ - { - "name":"tilesetCopyright", - "type":"string", - "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" - }], - "spacing":0, - "tilecount":100, - "tileheight":32, - "tilewidth":32 - }, - { - "columns":11, - "firstgid":201, - "image":"..\/assets\/tileset1.png", - "imageheight":352, - "imagewidth":352, - "margin":0, - "name":"tileset1", - "properties":[ - { - "name":"tilesetCopyright", - "type":"string", - "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" - }], - "spacing":0, - "tilecount":121, - "tileheight":32, - "tilewidth":32 - }, - { - "columns":11, - "firstgid":322, - "image":"..\/assets\/tileset1-repositioning.png", - "imageheight":352, - "imagewidth":352, - "margin":0, - "name":"tileset1-repositioning", - "properties":[ - { - "name":"tilesetCopyright", - "type":"string", - "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" - }], - "spacing":0, - "tilecount":121, - "tileheight":32, - "tilewidth":32 - }, - { - "columns":6, - "firstgid":443, - "image":"..\/assets\/Special_Zones.png", - "imageheight":64, - "imagewidth":192, - "margin":0, - "name":"Special_Zones", - "properties":[ - { - "name":"tilesetCopyright", - "type":"string", - "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" - }], - "spacing":0, - "tilecount":12, - "tileheight":32, - "tiles":[ - { - "id":0, - "properties":[ - { - "name":"collides", - "type":"bool", - "value":true - }] - }], - "tilewidth":32 - }], - "tilewidth":32, - "type":"map", - "version":"1.6", - "width":31 +{ "compressionlevel":-1, + "height":17, + "infinite":false, + "layers":[ + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":6, + "name":"start", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 443, 443, 443, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":7, + "name":"collisions", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":29, + "name":"jitsiMeetingRoom", + "opacity":1, + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"MeetingRoom" + }], + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 454, 454, 454, 454, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":38, + "name":"jitsiChillzone", + "opacity":1, + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"ChillZone" + }, + { + "name":"jitsiTrigger", + "type":"string", + "value":"onaction" + }], + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":23, + "name":"clockZone", + "opacity":1, + "properties":[ + { + "name":"zone", + "type":"string", + "value":"clock" + }], + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201], + "height":17, + "id":4, + "name":"floor", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[49, 58, 58, 58, 58, 58, 58, 42, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 42, 57, 57, 57, 57, 57, 57, 57, 50, 45, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 45, 45, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 45, 45, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 32, 58, 58, 58, 58, 58, 58, 58, 60, 83, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 84, 93, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 94], + "height":17, + "id":9, + "name":"walls", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 293, 0, 107, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 107, 0, 0, 128, 1, 2, 3, 0, 0, 0, 0, 304, 296, 297, 296, 297, 304, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 11, 12, 13, 0, 0, 0, 0, 315, 307, 308, 307, 308, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 23, 0, 0, 0, 0, 243, 0, 0, 0, 0, 2147483943, 0, 0, 0, 325, 340, 340, 326, 0, 0, 325, 340, 340, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 283, 283, 0, 2147483954, 0, 0, 0, 0, 340, 340, 0, 0, 0, 0, 340, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 294, 0, 0, 0, 0, 0, 325, 340, 340, 326, 0, 0, 325, 340, 340, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 351, 0, 0, 0, 0, 351, 351, 0, 0, 0, 0, 0, 0, 325, 273, 275, 326, 0, 0, 0, 394, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 405, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 333, 334, 333, 334, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 345, 344, 345, 344, 345, 0, 0, 0, 0, 0, 0, 0, 325, 2147483923, 275, 326, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 220, 220, 220, 220, 218, 0, 0, 0, 0, 0, 0, 0, 0, 284, 286, 0, 0, 0, 0, 438, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 336, 335, 336, 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 347, 346, 347, 346, 347, 0, 2147483811, 2147483810, 2147483809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":1, + "name":"furniture", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 2147483909, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 231, 231, 231, 231, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":33, + "name":"aboveFurniture", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":2, + "name":"floorLayer", + "objects":[ + { + "height":64, + "id":4, + "name":"clockPopup", + "rotation":0, + "type":"", + "visible":true, + "width":128, + "x":512, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 329, 0, 0, 0, 0, 329, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 209, 209, 209, 209, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483801, 2147483800, 2147483799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":3, + "name":"abovePlayer1", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 400, 399, 400, 399, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 411, 410, 411, 410, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":27, + "name":"abovePlayer2", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 402, 401, 402, 401, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 413, 412, 413, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":28, + "name":"abovePlayer3", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }], + "nextlayerid":39, + "nextobjectid":9, + "orientation":"orthogonal", + "properties":[ + { + "name":"mapCopyright", + "type":"string", + "value":"Credits: Valdo Romao https:\/\/www.linkedin.com\/in\/valdo-romao\/ \nLicense: CC-BY-SA 3.0 (http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/)" + }, + { + "name":"mapDescription", + "type":"string", + "value":"A perfect virtual office to get started with WorkAdventure!" + }, + { + "name":"mapImage", + "type":"string", + "value":"map.png" + }, + { + "name":"mapLink", + "type":"string", + "value":"https:\/\/thecodingmachine.github.io\/workadventure-map-starter-kit\/map.json" + }, + { + "name":"mapName", + "type":"string", + "value":"Starter kit" + }, + { + "name":"script", + "type":"string", + "value":"..\/dist\/script.js" + }], + "renderorder":"right-down", + "tiledversion":"1.7.0", + "tileheight":32, + "tilesets":[ + { + "columns":10, + "firstgid":1, + "image":"..\/assets\/tileset5_export.png", + "imageheight":320, + "imagewidth":320, + "margin":0, + "name":"tileset5_export", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":100, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":10, + "firstgid":101, + "image":"..\/assets\/tileset6_export.png", + "imageheight":320, + "imagewidth":320, + "margin":0, + "name":"tileset6_export", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":100, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":11, + "firstgid":201, + "image":"..\/assets\/tileset1.png", + "imageheight":352, + "imagewidth":352, + "margin":0, + "name":"tileset1", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":121, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":11, + "firstgid":322, + "image":"..\/assets\/tileset1-repositioning.png", + "imageheight":352, + "imagewidth":352, + "margin":0, + "name":"tileset1-repositioning", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":121, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":6, + "firstgid":443, + "image":"..\/assets\/Special_Zones.png", + "imageheight":64, + "imagewidth":192, + "margin":0, + "name":"Special_Zones", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":12, + "tileheight":32, + "tiles":[ + { + "id":0, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }], + "tilewidth":32 + }], + "tilewidth":32, + "type":"map", + "version":"1.6", + "width":31 } \ No newline at end of file diff --git a/maps/tests/index.html b/maps/tests/index.html index e625aa6d..ddb1959a 100644 --- a/maps/tests/index.html +++ b/maps/tests/index.html @@ -168,6 +168,14 @@ Layer visibility + Layer size and offset + + + Success Failure Pending + + + Test Tiled Objects with properties + +

Iframe API

diff --git a/maps/tests/tiled_objects.json b/maps/tests/tiled_objects.json new file mode 100644 index 00000000..f59380fd --- /dev/null +++ b/maps/tests/tiled_objects.json @@ -0,0 +1,268 @@ +{ "compressionlevel":-1, + "height":17, + "infinite":false, + "layers":[ + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":6, + "name":"start", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":17, + "id":7, + "name":"collisions", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201], + "height":17, + "id":4, + "name":"floor", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "data":[49, 58, 58, 58, 58, 58, 58, 42, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 42, 57, 57, 57, 57, 57, 57, 57, 50, 45, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 45, 45, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 45, 45, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 32, 58, 58, 58, 58, 58, 58, 58, 60, 83, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 84, 93, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 94], + "height":17, + "id":9, + "name":"walls", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":31, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":2, + "name":"floorLayer", + "objects":[ + { + "ellipse":true, + "height":128, + "id":9, + "name":"", + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"Chill Room" + }, + { + "name":"jitsiTrigger", + "type":"string", + "value":"onaction" + }], + "rotation":0, + "type":"", + "visible":true, + "width":320, + "x":317.331510594668, + "y":97.6404647983595 + }, + { + "height":130.187286397813, + "id":11, + "name":"", + "properties":[ + { + "name":"jitsiRoom", + "type":"string", + "value":"MeetingRoom" + }], + "rotation":0, + "type":"", + "visible":true, + "width":192.568694463431, + "x":30.738664843928, + "y":94.0241512873092 + }, + { + "height":95.8323080428344, + "id":12, + "name":"", + "properties":[ + { + "name":"silent", + "type":"bool", + "value":true + }], + "rotation":0, + "type":"", + "visible":true, + "width":225.115516062885, + "x":735.919799498747, + "y":354.398724082935 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }], + "nextlayerid":39, + "nextobjectid":13, + "orientation":"orthogonal", + "properties":[ + { + "name":"mapCopyright", + "type":"string", + "value":"Credits: Valdo Romao https:\/\/www.linkedin.com\/in\/valdo-romao\/ \nLicense: CC-BY-SA 3.0 (http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/)" + }, + { + "name":"mapDescription", + "type":"string", + "value":"A perfect virtual office to get started with WorkAdventure!" + }, + { + "name":"mapImage", + "type":"string", + "value":"map.png" + }, + { + "name":"mapLink", + "type":"string", + "value":"https:\/\/thecodingmachine.github.io\/workadventure-map-starter-kit\/map.json" + }, + { + "name":"mapName", + "type":"string", + "value":"Starter kit" + }, + { + "name":"script", + "type":"string", + "value":"..\/dist\/script.js" + }], + "renderorder":"right-down", + "tiledversion":"1.7.2", + "tileheight":32, + "tilesets":[ + { + "columns":10, + "firstgid":1, + "image":"..\/assets\/tileset5_export.png", + "imageheight":320, + "imagewidth":320, + "margin":0, + "name":"tileset5_export", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":100, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":10, + "firstgid":101, + "image":"..\/assets\/tileset6_export.png", + "imageheight":320, + "imagewidth":320, + "margin":0, + "name":"tileset6_export", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":100, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":11, + "firstgid":201, + "image":"..\/assets\/tileset1.png", + "imageheight":352, + "imagewidth":352, + "margin":0, + "name":"tileset1", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":121, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":11, + "firstgid":322, + "image":"..\/assets\/tileset1-repositioning.png", + "imageheight":352, + "imagewidth":352, + "margin":0, + "name":"tileset1-repositioning", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":121, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":6, + "firstgid":443, + "image":"..\/assets\/Special_Zones.png", + "imageheight":64, + "imagewidth":192, + "margin":0, + "name":"Special_Zones", + "properties":[ + { + "name":"tilesetCopyright", + "type":"string", + "value":"\u00a9 2021 WorkAdventure \nLicence: WORKADVENTURE SPECIFIC RESOURCES LICENSE (see LICENSE.assets file)" + }], + "spacing":0, + "tilecount":12, + "tileheight":32, + "tiles":[ + { + "id":0, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }], + "tilewidth":32 + }], + "tilewidth":32, + "type":"map", + "version":"1.6", + "width":31 +} \ No newline at end of file From 255f4375daab7be0ed1cb3d18997c7225fdb4e57 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Mon, 11 Apr 2022 16:16:52 +0200 Subject: [PATCH 04/17] go from zones to area name for interactive Tiled Objects --- ...{ChangeZoneEvent.ts => ChangeAreaEvent.ts} | 4 +- front/src/Api/Events/IframeEvent.ts | 6 +- front/src/Api/IframeListener.ts | 18 ++--- front/src/Phaser/Game/GameMap.ts | 77 ++++++++++--------- front/src/Phaser/Game/GameScene.ts | 30 ++++---- maps/tests/tiled_objects.json | 27 +++++-- 6 files changed, 90 insertions(+), 72 deletions(-) rename front/src/Api/Events/{ChangeZoneEvent.ts => ChangeAreaEvent.ts} (64%) diff --git a/front/src/Api/Events/ChangeZoneEvent.ts b/front/src/Api/Events/ChangeAreaEvent.ts similarity index 64% rename from front/src/Api/Events/ChangeZoneEvent.ts rename to front/src/Api/Events/ChangeAreaEvent.ts index e7ca3668..0ad7decb 100644 --- a/front/src/Api/Events/ChangeZoneEvent.ts +++ b/front/src/Api/Events/ChangeAreaEvent.ts @@ -1,6 +1,6 @@ import * as tg from "generic-type-guard"; -export const isChangeZoneEvent = new tg.IsInterface() +export const isChangeAreaEvent = new tg.IsInterface() .withProperties({ name: tg.isString, }) @@ -8,4 +8,4 @@ export const isChangeZoneEvent = new tg.IsInterface() /** * A message sent from the game to the iFrame when a user enters or leaves a zone. */ -export type ChangeZoneEvent = tg.GuardedType; +export type ChangeAreaEvent = tg.GuardedType; diff --git a/front/src/Api/Events/IframeEvent.ts b/front/src/Api/Events/IframeEvent.ts index 9daccbec..2f92161f 100644 --- a/front/src/Api/Events/IframeEvent.ts +++ b/front/src/Api/Events/IframeEvent.ts @@ -31,7 +31,7 @@ import type { MenuRegisterEvent, UnregisterMenuEvent } from "./ui/MenuRegisterEv import type { ChangeLayerEvent } from "./ChangeLayerEvent"; import { isPlayerPosition } from "./PlayerPosition"; import type { WasCameraUpdatedEvent } from "./WasCameraUpdatedEvent"; -import type { ChangeZoneEvent } from "./ChangeZoneEvent"; +import type { ChangeAreaEvent } from "./ChangeAreaEvent"; import type { CameraSetEvent } from "./CameraSetEvent"; import type { CameraFollowPlayerEvent } from "./CameraFollowPlayerEvent"; import { isColorEvent } from "./ColorEvent"; @@ -95,8 +95,8 @@ export interface IframeResponseEventMap { leaveEvent: EnterLeaveEvent; enterLayerEvent: ChangeLayerEvent; leaveLayerEvent: ChangeLayerEvent; - enterZoneEvent: ChangeZoneEvent; - leaveZoneEvent: ChangeZoneEvent; + enterAreaEvent: ChangeAreaEvent; + leaveAreaEvent: ChangeAreaEvent; buttonClickedEvent: ButtonClickedEvent; remotePlayerClickedEvent: RemotePlayerClickedEvent; actionsMenuActionClickedEvent: ActionsMenuActionClickedEvent; diff --git a/front/src/Api/IframeListener.ts b/front/src/Api/IframeListener.ts index e3609b9f..c78c5909 100644 --- a/front/src/Api/IframeListener.ts +++ b/front/src/Api/IframeListener.ts @@ -31,7 +31,7 @@ import { ModifyEmbeddedWebsiteEvent, isEmbeddedWebsiteEvent } from "./Events/Emb import { handleMenuRegistrationEvent, handleMenuUnregisterEvent } from "../Stores/MenuStore"; import type { ChangeLayerEvent } from "./Events/ChangeLayerEvent"; import type { WasCameraUpdatedEvent } from "./Events/WasCameraUpdatedEvent"; -import type { ChangeZoneEvent } from "./Events/ChangeZoneEvent"; +import type { ChangeAreaEvent } from "./Events/ChangeAreaEvent"; import { CameraSetEvent, isCameraSetEvent } from "./Events/CameraSetEvent"; import { CameraFollowPlayerEvent, isCameraFollowPlayerEvent } from "./Events/CameraFollowPlayerEvent"; import type { RemotePlayerClickedEvent } from "./Events/RemotePlayerClickedEvent"; @@ -441,21 +441,21 @@ class IframeListener { }); } - sendEnterZoneEvent(zoneName: string) { + sendEnterAreaEvent(areaName: string) { this.postMessage({ - type: "enterZoneEvent", + type: "enterAreaEvent", data: { - name: zoneName, - } as ChangeZoneEvent, + name: areaName, + } as ChangeAreaEvent, }); } - sendLeaveZoneEvent(zoneName: string) { + sendLeaveAreaEvent(areaName: string) { this.postMessage({ - type: "leaveZoneEvent", + type: "leaveAreaEvent", data: { - name: zoneName, - } as ChangeZoneEvent, + name: areaName, + } as ChangeAreaEvent, }); } diff --git a/front/src/Phaser/Game/GameMap.ts b/front/src/Phaser/Game/GameMap.ts index ce6e2711..8894d726 100644 --- a/front/src/Phaser/Game/GameMap.ts +++ b/front/src/Phaser/Game/GameMap.ts @@ -22,9 +22,9 @@ export type layerChangeCallback = ( allLayersOnNewPosition: Array ) => void; -export type zoneChangeCallback = ( - zonesChangedByAction: Array, - allZonesOnNewPosition: Array +export type areaChangeCallback = ( + areasChangedByAction: Array, + allAreasOnNewPosition: Array ) => void; /** @@ -54,8 +54,8 @@ export class GameMap { private enterLayerCallbacks = Array(); private leaveLayerCallbacks = Array(); - private enterZoneCallbacks = Array(); - private leaveZoneCallbacks = Array(); + private enterAreaCallbacks = Array(); + private leaveAreaCallbacks = Array(); private tileNameMap = new Map(); @@ -63,7 +63,7 @@ export class GameMap { public readonly flatLayers: ITiledMapLayer[]; public readonly tiledObjects: ITiledMapObject[]; public readonly phaserLayers: TilemapLayer[] = []; - public readonly zones: ITiledMapObject[] = []; + public readonly areas: ITiledMapObject[] = []; public exitUrls: Array = []; @@ -76,7 +76,8 @@ export class GameMap { ) { this.flatLayers = flattenGroupLayersMap(map); this.tiledObjects = this.getObjectsFromLayers(this.flatLayers); - this.zones = this.tiledObjects.filter((object) => object.width > 0); + // NOTE: We leave "zone" for legacy reasons + this.areas = this.tiledObjects.filter((object) => ["zone", "area"].includes(object.type)); let depth = -2; for (const layer of this.flatLayers) { @@ -148,7 +149,7 @@ export class GameMap { public setPosition(x: number, y: number) { this.oldPosition = this.position; this.position = { x, y }; - this.triggerZonesChange(); + this.triggerAreasChange(); this.oldKey = this.key; @@ -201,17 +202,17 @@ export class GameMap { } /** - * Registers a callback called when the user moves inside another zone. + * Registers a callback called when the user moves inside another area. */ - public onEnterZone(callback: zoneChangeCallback) { - this.enterZoneCallbacks.push(callback); + public onEnterArea(callback: areaChangeCallback) { + this.enterAreaCallbacks.push(callback); } /** - * Registers a callback called when the user moves outside another zone. + * Registers a callback called when the user moves outside another area. */ - public onLeaveZone(callback: zoneChangeCallback) { - this.leaveZoneCallbacks.push(callback); + public onLeaveArea(callback: areaChangeCallback) { + this.leaveAreaCallbacks.push(callback); } public findLayer(layerName: string): ITiledMapLayer | undefined { @@ -420,33 +421,33 @@ export class GameMap { } /** - * We use Tiled Objects with type "zone" as zones with defined x, y, width and height for easier event triggering. + * We use Tiled Objects with type "area" as areas with defined x, y, width and height for easier event triggering. */ - private triggerZonesChange(): void { - const zonesByOldPosition = this.getZonesOnPosition(this.oldPosition); - const zonesByNewPosition = this.getZonesOnPosition(this.position); + private triggerAreasChange(): void { + const areasByOldPosition = this.getAreasOnPosition(this.oldPosition); + const areasByNewPosition = this.getAreasOnPosition(this.position); - const enterZones = new Set(zonesByNewPosition); - const leaveZones = new Set(zonesByOldPosition); + const enterAreas = new Set(areasByNewPosition); + const leaveAreas = new Set(areasByOldPosition); - enterZones.forEach((zone) => { - if (leaveZones.has(zone)) { - leaveZones.delete(zone); - enterZones.delete(zone); + enterAreas.forEach((area) => { + if (leaveAreas.has(area)) { + leaveAreas.delete(area); + enterAreas.delete(area); } }); - if (enterZones.size > 0) { - const zonesArray = Array.from(enterZones); - for (const callback of this.enterZoneCallbacks) { - callback(zonesArray, zonesByNewPosition); + if (enterAreas.size > 0) { + const areasArray = Array.from(enterAreas); + for (const callback of this.enterAreaCallbacks) { + callback(areasArray, areasByNewPosition); } } - if (leaveZones.size > 0) { - const zonesArray = Array.from(leaveZones); - for (const callback of this.leaveZoneCallbacks) { - callback(zonesArray, zonesByNewPosition); + if (leaveAreas.size > 0) { + const areasArray = Array.from(leaveAreas); + for (const callback of this.leaveAreaCallbacks) { + callback(areasArray, areasByNewPosition); } } } @@ -454,9 +455,9 @@ export class GameMap { private getProperties(key: number): Map { const properties = new Map(); - for (const zone of this.getZonesOnPosition(this.position)) { - if (zone.properties !== undefined) { - for (const property of zone.properties) { + for (const area of this.getAreasOnPosition(this.position)) { + if (area.properties !== undefined) { + for (const property of area.properties) { if (property.value === undefined) { continue; } @@ -503,13 +504,13 @@ export class GameMap { return properties; } - private getZonesOnPosition(position?: { x: number; y: number }): ITiledMapObject[] { + private getAreasOnPosition(position?: { x: number; y: number }): ITiledMapObject[] { return position - ? this.zones.filter((zone) => { + ? this.areas.filter((area) => { if (!position) { return false; } - return MathUtils.isOverlappingWithRectangle(position, zone); + return MathUtils.isOverlappingWithRectangle(position, area); }) : []; } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 210cfba1..7478540d 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -892,42 +892,42 @@ export class GameScene extends DirtyScene { }); }); - this.gameMap.onEnterZone((zones) => { - for (const zone of zones) { - const focusable = zone.properties?.find( + this.gameMap.onEnterArea((areas) => { + for (const area of areas) { + const focusable = area.properties?.find( (property) => property.name === GameMapProperties.FOCUSABLE ); if (focusable && focusable.value === true) { - const zoomMargin = zone.properties?.find( + const zoomMargin = area.properties?.find( (property) => property.name === GameMapProperties.ZOOM_MARGIN ); this.cameraManager.enterFocusMode( { - x: zone.x + zone.width * 0.5, - y: zone.y + zone.height * 0.5, - width: zone.width, - height: zone.height, + x: area.x + area.width * 0.5, + y: area.y + area.height * 0.5, + width: area.width, + height: area.height, }, zoomMargin ? Math.max(0, Number(zoomMargin.value)) : undefined ); break; } } - zones.forEach((zone) => { - iframeListener.sendEnterZoneEvent(zone.name); + areas.forEach((area) => { + iframeListener.sendEnterAreaEvent(area.name); }); }); - this.gameMap.onLeaveZone((zones) => { - for (const zone of zones) { - const focusable = zone.properties?.find((property) => property.name === "focusable"); + this.gameMap.onLeaveArea((areas) => { + for (const area of areas) { + const focusable = area.properties?.find((property) => property.name === "focusable"); if (focusable && focusable.value === true) { this.cameraManager.leaveFocusMode(this.CurrentPlayer, 1000); break; } } - zones.forEach((zone) => { - iframeListener.sendLeaveZoneEvent(zone.name); + areas.forEach((area) => { + iframeListener.sendLeaveAreaEvent(area.name); }); }); diff --git a/maps/tests/tiled_objects.json b/maps/tests/tiled_objects.json index f59380fd..d22a2efc 100644 --- a/maps/tests/tiled_objects.json +++ b/maps/tests/tiled_objects.json @@ -27,7 +27,7 @@ "y":0 }, { - "data":[201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201], + "data":[201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 223, 223, 223, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201], "height":17, "id":4, "name":"floor", @@ -72,7 +72,7 @@ "value":"onaction" }], "rotation":0, - "type":"", + "type":"area", "visible":true, "width":320, "x":317.331510594668, @@ -89,7 +89,7 @@ "value":"MeetingRoom" }], "rotation":0, - "type":"", + "type":"area", "visible":true, "width":192.568694463431, "x":30.738664843928, @@ -106,11 +106,28 @@ "value":true }], "rotation":0, - "type":"", + "type":"area", "visible":true, "width":225.115516062885, "x":735.919799498747, "y":354.398724082935 + }, + { + "height":63.2854864433812, + "id":13, + "name":"", + "properties":[ + { + "name":"openWebsite", + "type":"string", + "value":"https:\/\/youtu.be\/iF-ucIgP0OE?list=RDGMEMWO-g6DgCWEqKlDtKbJA1GwVMiF-ucIgP0OE" + }], + "rotation":0, + "type":"area", + "visible":true, + "width":96.736386420597, + "x":799.205285942128, + "y":96.736386420597 }], "opacity":1, "type":"objectgroup", @@ -119,7 +136,7 @@ "y":0 }], "nextlayerid":39, - "nextobjectid":13, + "nextobjectid":15, "orientation":"orthogonal", "properties":[ { From 1ca393f3dbc0893abd59edd11379464357198ff4 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Tue, 12 Apr 2022 10:57:38 +0200 Subject: [PATCH 05/17] open website linked from Tiled Object --- .../Phaser/Game/GameMapPropertiesListener.ts | 361 +++++++++--------- front/src/Phaser/Game/GameScene.ts | 5 +- maps/tests/tiled_objects.json | 2 +- 3 files changed, 191 insertions(+), 177 deletions(-) diff --git a/front/src/Phaser/Game/GameMapPropertiesListener.ts b/front/src/Phaser/Game/GameMapPropertiesListener.ts index 103cc4bc..264af81a 100644 --- a/front/src/Phaser/Game/GameMapPropertiesListener.ts +++ b/front/src/Phaser/Game/GameMapPropertiesListener.ts @@ -6,7 +6,7 @@ import { layoutManagerActionStore } from "../../Stores/LayoutManagerStore"; import { localUserStore } from "../../Connexion/LocalUserStore"; import { get } from "svelte/store"; import { ON_ACTION_TRIGGER_BUTTON, ON_ICON_TRIGGER_BUTTON } from "../../WebRtc/LayoutManager"; -import type { ITiledMapLayer } from "../Map/ITiledMap"; +import type { ITiledMapLayer, ITiledMapProperty } from "../Map/ITiledMap"; import { GameMapProperties } from "./GameMapProperties"; import type { CoWebsite } from "../../WebRtc/CoWebsite/CoWesbite"; import { SimpleCoWebsite } from "../../WebRtc/CoWebsite/SimpleCoWebsite"; @@ -23,9 +23,17 @@ interface OpenCoWebsite { coWebsite?: CoWebsite; } +/** + * Either Layer or Object within Objects Layer in Tiled + */ +export interface ITiledPlace { + name: string; + properties?: ITiledMapProperty[]; +} + export class GameMapPropertiesListener { - private coWebsitesOpenByLayer = new Map(); - private coWebsitesActionTriggerByLayer = new Map(); + private coWebsitesOpenByPlace = new Map(); + private coWebsitesActionTriggerByPlace = new Map(); constructor(private scene: GameScene, private gameMap: GameMap) {} @@ -179,193 +187,196 @@ export class GameMapPropertiesListener { } }); - // Open a new co-website by the property. this.gameMap.onEnterLayer((newLayers) => { - const handler = () => { - newLayers.forEach((layer) => { - if (!layer.properties) { - return; - } - - let openWebsiteProperty: string | undefined; - let allowApiProperty: boolean | undefined; - let websitePolicyProperty: string | undefined; - let websiteWidthProperty: number | undefined; - let websitePositionProperty: number | undefined; - let websiteTriggerProperty: string | undefined; - let websiteTriggerMessageProperty: string | undefined; - - layer.properties.forEach((property) => { - switch (property.name) { - case GameMapProperties.OPEN_WEBSITE: - openWebsiteProperty = property.value as string | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_ALLOW_API: - allowApiProperty = property.value as boolean | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_POLICY: - websitePolicyProperty = property.value as string | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_WIDTH: - websiteWidthProperty = property.value as number | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_POSITION: - websitePositionProperty = property.value as number | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_TRIGGER: - websiteTriggerProperty = property.value as string | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_TRIGGER_MESSAGE: - websiteTriggerMessageProperty = property.value as string | undefined; - break; - } - }); - - if (!openWebsiteProperty) { - return; - } - - const actionId = "openWebsite-" + (Math.random() + 1).toString(36).substring(7); - - if (this.coWebsitesOpenByLayer.has(layer)) { - return; - } - - const coWebsiteOpen: OpenCoWebsite = { - actionId: actionId, - }; - - this.coWebsitesOpenByLayer.set(layer, coWebsiteOpen); - - const loadCoWebsiteFunction = (coWebsite: CoWebsite) => { - coWebsiteManager.loadCoWebsite(coWebsite).catch(() => { - console.error("Error during loading a co-website: " + coWebsite.getUrl()); - }); - - layoutManagerActionStore.removeAction(actionId); - }; - - const openCoWebsiteFunction = () => { - const coWebsite = new SimpleCoWebsite( - new URL(openWebsiteProperty ?? "", this.scene.MapUrlFile), - allowApiProperty, - websitePolicyProperty, - websiteWidthProperty, - false - ); - - coWebsiteOpen.coWebsite = coWebsite; - - coWebsiteManager.addCoWebsiteToStore(coWebsite, websitePositionProperty); - - loadCoWebsiteFunction(coWebsite); - }; - - if ( - localUserStore.getForceCowebsiteTrigger() || - websiteTriggerProperty === ON_ACTION_TRIGGER_BUTTON - ) { - if (!websiteTriggerMessageProperty) { - websiteTriggerMessageProperty = get(LL).trigger.cowebsite(); - } - - this.coWebsitesActionTriggerByLayer.set(layer, actionId); - - layoutManagerActionStore.addAction({ - uuid: actionId, - type: "message", - message: websiteTriggerMessageProperty, - callback: () => openCoWebsiteFunction(), - userInputManager: this.scene.userInputManager, - }); - } else if (websiteTriggerProperty === ON_ICON_TRIGGER_BUTTON) { - const coWebsite = new SimpleCoWebsite( - new URL(openWebsiteProperty ?? "", this.scene.MapUrlFile), - allowApiProperty, - websitePolicyProperty, - websiteWidthProperty, - false - ); - - coWebsiteOpen.coWebsite = coWebsite; - - coWebsiteManager.addCoWebsiteToStore(coWebsite, websitePositionProperty); - } - - if (!websiteTriggerProperty) { - openCoWebsiteFunction(); - } - }); - }; - - handler(); + this.onEnterPlaceHandler(newLayers); }); - // Close opened co-websites on leave the layer who contain the property. this.gameMap.onLeaveLayer((oldLayers) => { - const handler = () => { - oldLayers.forEach((layer) => { - if (!layer.properties) { - return; - } + this.onLeavePlaceHandler(oldLayers); + }); - let openWebsiteProperty: string | undefined; - let websiteTriggerProperty: string | undefined; + this.gameMap.onEnterArea((newAreas) => { + this.onEnterPlaceHandler(newAreas); + }); - layer.properties.forEach((property) => { - switch (property.name) { - case GameMapProperties.OPEN_WEBSITE: - openWebsiteProperty = property.value as string | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_TRIGGER: - websiteTriggerProperty = property.value as string | undefined; - break; - } - }); + this.gameMap.onLeaveArea((oldAreas) => { + this.onLeavePlaceHandler(oldAreas); + }); + } - if (!openWebsiteProperty) { - return; - } + private onEnterPlaceHandler(places: ITiledPlace[]): void { + places.forEach((place) => { + if (!place.properties) { + return; + } - const coWebsiteOpen = this.coWebsitesOpenByLayer.get(layer); + let openWebsiteProperty: string | undefined; + let allowApiProperty: boolean | undefined; + let websitePolicyProperty: string | undefined; + let websiteWidthProperty: number | undefined; + let websitePositionProperty: number | undefined; + let websiteTriggerProperty: string | undefined; + let websiteTriggerMessageProperty: string | undefined; - if (!coWebsiteOpen) { - return; - } + place.properties.forEach((property) => { + switch (property.name) { + case GameMapProperties.OPEN_WEBSITE: + openWebsiteProperty = property.value as string | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_ALLOW_API: + allowApiProperty = property.value as boolean | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_POLICY: + websitePolicyProperty = property.value as string | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_WIDTH: + websiteWidthProperty = property.value as number | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_POSITION: + websitePositionProperty = property.value as number | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_TRIGGER: + websiteTriggerProperty = property.value as string | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_TRIGGER_MESSAGE: + websiteTriggerMessageProperty = property.value as string | undefined; + break; + } + }); - const coWebsite = coWebsiteOpen.coWebsite; + if (!openWebsiteProperty) { + return; + } - if (coWebsite) { - coWebsiteManager.closeCoWebsite(coWebsite); - } + const actionId = "openWebsite-" + (Math.random() + 1).toString(36).substring(7); - this.coWebsitesOpenByLayer.delete(layer); + if (this.coWebsitesOpenByPlace.has(place)) { + return; + } - if (!websiteTriggerProperty) { - return; - } - - const actionStore = get(layoutManagerActionStore); - const actionTriggerUuid = this.coWebsitesActionTriggerByLayer.get(layer); - - if (!actionTriggerUuid) { - return; - } - - const action = - actionStore && actionStore.length > 0 - ? actionStore.find((action) => action.uuid === actionTriggerUuid) - : undefined; - - if (action) { - layoutManagerActionStore.removeAction(actionTriggerUuid); - } - - this.coWebsitesActionTriggerByLayer.delete(layer); - }); + const coWebsiteOpen: OpenCoWebsite = { + actionId: actionId, }; - handler(); + this.coWebsitesOpenByPlace.set(place, coWebsiteOpen); + + const loadCoWebsiteFunction = (coWebsite: CoWebsite) => { + coWebsiteManager.loadCoWebsite(coWebsite).catch(() => { + console.error("Error during loading a co-website: " + coWebsite.getUrl()); + }); + + layoutManagerActionStore.removeAction(actionId); + }; + + const openCoWebsiteFunction = () => { + const coWebsite = new SimpleCoWebsite( + new URL(openWebsiteProperty ?? "", this.scene.MapUrlFile), + allowApiProperty, + websitePolicyProperty, + websiteWidthProperty, + false + ); + + coWebsiteOpen.coWebsite = coWebsite; + + coWebsiteManager.addCoWebsiteToStore(coWebsite, websitePositionProperty); + + loadCoWebsiteFunction(coWebsite); + }; + + if (localUserStore.getForceCowebsiteTrigger() || websiteTriggerProperty === ON_ACTION_TRIGGER_BUTTON) { + if (!websiteTriggerMessageProperty) { + websiteTriggerMessageProperty = get(LL).trigger.cowebsite(); + } + + this.coWebsitesActionTriggerByPlace.set(place, actionId); + + layoutManagerActionStore.addAction({ + uuid: actionId, + type: "message", + message: websiteTriggerMessageProperty, + callback: () => openCoWebsiteFunction(), + userInputManager: this.scene.userInputManager, + }); + } else if (websiteTriggerProperty === ON_ICON_TRIGGER_BUTTON) { + const coWebsite = new SimpleCoWebsite( + new URL(openWebsiteProperty ?? "", this.scene.MapUrlFile), + allowApiProperty, + websitePolicyProperty, + websiteWidthProperty, + false + ); + + coWebsiteOpen.coWebsite = coWebsite; + + coWebsiteManager.addCoWebsiteToStore(coWebsite, websitePositionProperty); + } + + if (!websiteTriggerProperty) { + openCoWebsiteFunction(); + } + }); + } + + private onLeavePlaceHandler(places: ITiledPlace[]): void { + places.forEach((place) => { + if (!place.properties) { + return; + } + + let openWebsiteProperty: string | undefined; + let websiteTriggerProperty: string | undefined; + + place.properties.forEach((property) => { + switch (property.name) { + case GameMapProperties.OPEN_WEBSITE: + openWebsiteProperty = property.value as string | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_TRIGGER: + websiteTriggerProperty = property.value as string | undefined; + break; + } + }); + + if (!openWebsiteProperty) { + return; + } + + const coWebsiteOpen = this.coWebsitesOpenByPlace.get(place); + + if (!coWebsiteOpen) { + return; + } + + const coWebsite = coWebsiteOpen.coWebsite; + + if (coWebsite) { + coWebsiteManager.closeCoWebsite(coWebsite); + } + + this.coWebsitesOpenByPlace.delete(place); + + if (!websiteTriggerProperty) { + return; + } + + const actionStore = get(layoutManagerActionStore); + const actionTriggerUuid = this.coWebsitesActionTriggerByPlace.get(place); + + if (!actionTriggerUuid) { + return; + } + + const action = + actionStore && actionStore.length > 0 + ? actionStore.find((action) => action.uuid === actionTriggerUuid) + : undefined; + + if (action) { + layoutManagerActionStore.removeAction(actionTriggerUuid); + } + + this.coWebsitesActionTriggerByPlace.delete(place); }); } } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 7478540d..a17159b2 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -892,6 +892,7 @@ export class GameScene extends DirtyScene { }); }); + // TODO: Move to GameMapPropertiesListener? this.gameMap.onEnterArea((areas) => { for (const area of areas) { const focusable = area.properties?.find( @@ -920,7 +921,9 @@ export class GameScene extends DirtyScene { this.gameMap.onLeaveArea((areas) => { for (const area of areas) { - const focusable = area.properties?.find((property) => property.name === "focusable"); + const focusable = area.properties?.find( + (property) => property.name === GameMapProperties.FOCUSABLE + ); if (focusable && focusable.value === true) { this.cameraManager.leaveFocusMode(this.CurrentPlayer, 1000); break; diff --git a/maps/tests/tiled_objects.json b/maps/tests/tiled_objects.json index d22a2efc..d939a961 100644 --- a/maps/tests/tiled_objects.json +++ b/maps/tests/tiled_objects.json @@ -120,7 +120,7 @@ { "name":"openWebsite", "type":"string", - "value":"https:\/\/youtu.be\/iF-ucIgP0OE?list=RDGMEMWO-g6DgCWEqKlDtKbJA1GwVMiF-ucIgP0OE" + "value":"https:\/\/www.youtube.com\/embed\/CvXUGIm_hkA?list=RDCvXUGIm_hkA" }], "rotation":0, "type":"area", From 54b6c3800e8f3d2de9a23cab898528a813c456b7 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Tue, 12 Apr 2022 11:43:52 +0200 Subject: [PATCH 06/17] remove unused import --- front/src/Phaser/Game/GameMapPropertiesListener.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/front/src/Phaser/Game/GameMapPropertiesListener.ts b/front/src/Phaser/Game/GameMapPropertiesListener.ts index 264af81a..950172d2 100644 --- a/front/src/Phaser/Game/GameMapPropertiesListener.ts +++ b/front/src/Phaser/Game/GameMapPropertiesListener.ts @@ -6,7 +6,7 @@ import { layoutManagerActionStore } from "../../Stores/LayoutManagerStore"; import { localUserStore } from "../../Connexion/LocalUserStore"; import { get } from "svelte/store"; import { ON_ACTION_TRIGGER_BUTTON, ON_ICON_TRIGGER_BUTTON } from "../../WebRtc/LayoutManager"; -import type { ITiledMapLayer, ITiledMapProperty } from "../Map/ITiledMap"; +import type { ITiledMapProperty } from "../Map/ITiledMap"; import { GameMapProperties } from "./GameMapProperties"; import type { CoWebsite } from "../../WebRtc/CoWebsite/CoWesbite"; import { SimpleCoWebsite } from "../../WebRtc/CoWebsite/SimpleCoWebsite"; @@ -29,6 +29,8 @@ interface OpenCoWebsite { export interface ITiledPlace { name: string; properties?: ITiledMapProperty[]; + width?: number; + height?: number; } export class GameMapPropertiesListener { From d4f5dc6d3529efff37f2395e32d6db7195a88699 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Tue, 12 Apr 2022 12:47:45 +0200 Subject: [PATCH 07/17] moved focusable property handling away from gamescene --- .../Phaser/Game/GameMapPropertiesListener.ts | 371 ++++++++++-------- front/src/Phaser/Game/GameScene.ts | 30 -- maps/tests/tiled_objects.json | 148 ++++++- 3 files changed, 354 insertions(+), 195 deletions(-) diff --git a/front/src/Phaser/Game/GameMapPropertiesListener.ts b/front/src/Phaser/Game/GameMapPropertiesListener.ts index 950172d2..37fad9ab 100644 --- a/front/src/Phaser/Game/GameMapPropertiesListener.ts +++ b/front/src/Phaser/Game/GameMapPropertiesListener.ts @@ -29,6 +29,8 @@ interface OpenCoWebsite { export interface ITiledPlace { name: string; properties?: ITiledMapProperty[]; + x?: number; + y?: number; width?: number; height?: number; } @@ -208,115 +210,8 @@ export class GameMapPropertiesListener { private onEnterPlaceHandler(places: ITiledPlace[]): void { places.forEach((place) => { - if (!place.properties) { - return; - } - - let openWebsiteProperty: string | undefined; - let allowApiProperty: boolean | undefined; - let websitePolicyProperty: string | undefined; - let websiteWidthProperty: number | undefined; - let websitePositionProperty: number | undefined; - let websiteTriggerProperty: string | undefined; - let websiteTriggerMessageProperty: string | undefined; - - place.properties.forEach((property) => { - switch (property.name) { - case GameMapProperties.OPEN_WEBSITE: - openWebsiteProperty = property.value as string | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_ALLOW_API: - allowApiProperty = property.value as boolean | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_POLICY: - websitePolicyProperty = property.value as string | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_WIDTH: - websiteWidthProperty = property.value as number | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_POSITION: - websitePositionProperty = property.value as number | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_TRIGGER: - websiteTriggerProperty = property.value as string | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_TRIGGER_MESSAGE: - websiteTriggerMessageProperty = property.value as string | undefined; - break; - } - }); - - if (!openWebsiteProperty) { - return; - } - - const actionId = "openWebsite-" + (Math.random() + 1).toString(36).substring(7); - - if (this.coWebsitesOpenByPlace.has(place)) { - return; - } - - const coWebsiteOpen: OpenCoWebsite = { - actionId: actionId, - }; - - this.coWebsitesOpenByPlace.set(place, coWebsiteOpen); - - const loadCoWebsiteFunction = (coWebsite: CoWebsite) => { - coWebsiteManager.loadCoWebsite(coWebsite).catch(() => { - console.error("Error during loading a co-website: " + coWebsite.getUrl()); - }); - - layoutManagerActionStore.removeAction(actionId); - }; - - const openCoWebsiteFunction = () => { - const coWebsite = new SimpleCoWebsite( - new URL(openWebsiteProperty ?? "", this.scene.MapUrlFile), - allowApiProperty, - websitePolicyProperty, - websiteWidthProperty, - false - ); - - coWebsiteOpen.coWebsite = coWebsite; - - coWebsiteManager.addCoWebsiteToStore(coWebsite, websitePositionProperty); - - loadCoWebsiteFunction(coWebsite); - }; - - if (localUserStore.getForceCowebsiteTrigger() || websiteTriggerProperty === ON_ACTION_TRIGGER_BUTTON) { - if (!websiteTriggerMessageProperty) { - websiteTriggerMessageProperty = get(LL).trigger.cowebsite(); - } - - this.coWebsitesActionTriggerByPlace.set(place, actionId); - - layoutManagerActionStore.addAction({ - uuid: actionId, - type: "message", - message: websiteTriggerMessageProperty, - callback: () => openCoWebsiteFunction(), - userInputManager: this.scene.userInputManager, - }); - } else if (websiteTriggerProperty === ON_ICON_TRIGGER_BUTTON) { - const coWebsite = new SimpleCoWebsite( - new URL(openWebsiteProperty ?? "", this.scene.MapUrlFile), - allowApiProperty, - websitePolicyProperty, - websiteWidthProperty, - false - ); - - coWebsiteOpen.coWebsite = coWebsite; - - coWebsiteManager.addCoWebsiteToStore(coWebsite, websitePositionProperty); - } - - if (!websiteTriggerProperty) { - openCoWebsiteFunction(); - } + this.handleOpenWebsitePropertiesOnEnter(place); + this.handleFocusablePropertiesOnEnter(place); }); } @@ -326,59 +221,211 @@ export class GameMapPropertiesListener { return; } - let openWebsiteProperty: string | undefined; - let websiteTriggerProperty: string | undefined; - - place.properties.forEach((property) => { - switch (property.name) { - case GameMapProperties.OPEN_WEBSITE: - openWebsiteProperty = property.value as string | undefined; - break; - case GameMapProperties.OPEN_WEBSITE_TRIGGER: - websiteTriggerProperty = property.value as string | undefined; - break; - } - }); - - if (!openWebsiteProperty) { - return; - } - - const coWebsiteOpen = this.coWebsitesOpenByPlace.get(place); - - if (!coWebsiteOpen) { - return; - } - - const coWebsite = coWebsiteOpen.coWebsite; - - if (coWebsite) { - coWebsiteManager.closeCoWebsite(coWebsite); - } - - this.coWebsitesOpenByPlace.delete(place); - - if (!websiteTriggerProperty) { - return; - } - - const actionStore = get(layoutManagerActionStore); - const actionTriggerUuid = this.coWebsitesActionTriggerByPlace.get(place); - - if (!actionTriggerUuid) { - return; - } - - const action = - actionStore && actionStore.length > 0 - ? actionStore.find((action) => action.uuid === actionTriggerUuid) - : undefined; - - if (action) { - layoutManagerActionStore.removeAction(actionTriggerUuid); - } - - this.coWebsitesActionTriggerByPlace.delete(place); + this.handleOpenWebsitePropertiesOnLeave(place); + this.handleFocusablePropertiesOnLeave(place); }); } + + private handleOpenWebsitePropertiesOnEnter(place: ITiledPlace): void { + if (!place.properties) { + return; + } + let openWebsiteProperty: string | undefined; + let allowApiProperty: boolean | undefined; + let websitePolicyProperty: string | undefined; + let websiteWidthProperty: number | undefined; + let websitePositionProperty: number | undefined; + let websiteTriggerProperty: string | undefined; + let websiteTriggerMessageProperty: string | undefined; + + place.properties.forEach((property) => { + switch (property.name) { + case GameMapProperties.OPEN_WEBSITE: + openWebsiteProperty = property.value as string | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_ALLOW_API: + allowApiProperty = property.value as boolean | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_POLICY: + websitePolicyProperty = property.value as string | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_WIDTH: + websiteWidthProperty = property.value as number | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_POSITION: + websitePositionProperty = property.value as number | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_TRIGGER: + websiteTriggerProperty = property.value as string | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_TRIGGER_MESSAGE: + websiteTriggerMessageProperty = property.value as string | undefined; + break; + } + }); + + if (!openWebsiteProperty) { + return; + } + + const actionId = "openWebsite-" + (Math.random() + 1).toString(36).substring(7); + + if (this.coWebsitesOpenByPlace.has(place)) { + return; + } + + const coWebsiteOpen: OpenCoWebsite = { + actionId: actionId, + }; + + this.coWebsitesOpenByPlace.set(place, coWebsiteOpen); + + const loadCoWebsiteFunction = (coWebsite: CoWebsite) => { + coWebsiteManager.loadCoWebsite(coWebsite).catch(() => { + console.error("Error during loading a co-website: " + coWebsite.getUrl()); + }); + + layoutManagerActionStore.removeAction(actionId); + }; + + const openCoWebsiteFunction = () => { + const coWebsite = new SimpleCoWebsite( + new URL(openWebsiteProperty ?? "", this.scene.MapUrlFile), + allowApiProperty, + websitePolicyProperty, + websiteWidthProperty, + false + ); + + coWebsiteOpen.coWebsite = coWebsite; + + coWebsiteManager.addCoWebsiteToStore(coWebsite, websitePositionProperty); + + loadCoWebsiteFunction(coWebsite); + }; + + if (localUserStore.getForceCowebsiteTrigger() || websiteTriggerProperty === ON_ACTION_TRIGGER_BUTTON) { + if (!websiteTriggerMessageProperty) { + websiteTriggerMessageProperty = get(LL).trigger.cowebsite(); + } + + this.coWebsitesActionTriggerByPlace.set(place, actionId); + + layoutManagerActionStore.addAction({ + uuid: actionId, + type: "message", + message: websiteTriggerMessageProperty, + callback: () => openCoWebsiteFunction(), + userInputManager: this.scene.userInputManager, + }); + } else if (websiteTriggerProperty === ON_ICON_TRIGGER_BUTTON) { + const coWebsite = new SimpleCoWebsite( + new URL(openWebsiteProperty ?? "", this.scene.MapUrlFile), + allowApiProperty, + websitePolicyProperty, + websiteWidthProperty, + false + ); + + coWebsiteOpen.coWebsite = coWebsite; + + coWebsiteManager.addCoWebsiteToStore(coWebsite, websitePositionProperty); + } + + if (!websiteTriggerProperty) { + openCoWebsiteFunction(); + } + } + + private handleFocusablePropertiesOnEnter(place: ITiledPlace): void { + if (!place.properties) { + return; + } + if (place.x === undefined || place.y === undefined || !place.height || !place.width) { + return; + } + const focusable = place.properties.find((property) => property.name === GameMapProperties.FOCUSABLE); + if (focusable && focusable.value === true) { + const zoomMargin = place.properties.find((property) => property.name === GameMapProperties.ZOOM_MARGIN); + this.scene.getCameraManager().enterFocusMode( + { + x: place.x + place.width * 0.5, + y: place.y + place.height * 0.5, + width: place.width, + height: place.height, + }, + zoomMargin ? Math.max(0, Number(zoomMargin.value)) : undefined + ); + } + } + + private handleOpenWebsitePropertiesOnLeave(place: ITiledPlace): void { + if (!place.properties) { + return; + } + + let openWebsiteProperty: string | undefined; + let websiteTriggerProperty: string | undefined; + + place.properties.forEach((property) => { + switch (property.name) { + case GameMapProperties.OPEN_WEBSITE: + openWebsiteProperty = property.value as string | undefined; + break; + case GameMapProperties.OPEN_WEBSITE_TRIGGER: + websiteTriggerProperty = property.value as string | undefined; + break; + } + }); + + if (!openWebsiteProperty) { + return; + } + + const coWebsiteOpen = this.coWebsitesOpenByPlace.get(place); + + if (!coWebsiteOpen) { + return; + } + + const coWebsite = coWebsiteOpen.coWebsite; + + if (coWebsite) { + coWebsiteManager.closeCoWebsite(coWebsite); + } + + this.coWebsitesOpenByPlace.delete(place); + + if (!websiteTriggerProperty) { + return; + } + + const actionStore = get(layoutManagerActionStore); + const actionTriggerUuid = this.coWebsitesActionTriggerByPlace.get(place); + + if (!actionTriggerUuid) { + return; + } + + const action = + actionStore && actionStore.length > 0 + ? actionStore.find((action) => action.uuid === actionTriggerUuid) + : undefined; + + if (action) { + layoutManagerActionStore.removeAction(actionTriggerUuid); + } + + this.coWebsitesActionTriggerByPlace.delete(place); + } + + private handleFocusablePropertiesOnLeave(place: ITiledPlace): void { + if (!place.properties) { + return; + } + const focusable = place.properties.find((property) => property.name === GameMapProperties.FOCUSABLE); + if (focusable && focusable.value === true) { + this.scene.getCameraManager().leaveFocusMode(this.scene.CurrentPlayer, 1000); + } + } } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index a17159b2..87a9bee2 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -892,43 +892,13 @@ export class GameScene extends DirtyScene { }); }); - // TODO: Move to GameMapPropertiesListener? this.gameMap.onEnterArea((areas) => { - for (const area of areas) { - const focusable = area.properties?.find( - (property) => property.name === GameMapProperties.FOCUSABLE - ); - if (focusable && focusable.value === true) { - const zoomMargin = area.properties?.find( - (property) => property.name === GameMapProperties.ZOOM_MARGIN - ); - this.cameraManager.enterFocusMode( - { - x: area.x + area.width * 0.5, - y: area.y + area.height * 0.5, - width: area.width, - height: area.height, - }, - zoomMargin ? Math.max(0, Number(zoomMargin.value)) : undefined - ); - break; - } - } areas.forEach((area) => { iframeListener.sendEnterAreaEvent(area.name); }); }); this.gameMap.onLeaveArea((areas) => { - for (const area of areas) { - const focusable = area.properties?.find( - (property) => property.name === GameMapProperties.FOCUSABLE - ); - if (focusable && focusable.value === true) { - this.cameraManager.leaveFocusMode(this.CurrentPlayer, 1000); - break; - } - } areas.forEach((area) => { iframeListener.sendLeaveAreaEvent(area.name); }); diff --git a/maps/tests/tiled_objects.json b/maps/tests/tiled_objects.json index d939a961..3f029b41 100644 --- a/maps/tests/tiled_objects.json +++ b/maps/tests/tiled_objects.json @@ -27,7 +27,7 @@ "y":0 }, { - "data":[201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 223, 223, 223, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201], + "data":[201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 223, 223, 223, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 223, 223, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 223, 223, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 223, 223, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 223, 223, 223, 223, 223, 223, 223, 223, 201, 234, 234, 234, 234, 234, 234, 234, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201], "height":17, "id":4, "name":"floor", @@ -39,7 +39,7 @@ "y":0 }, { - "data":[49, 58, 58, 58, 58, 58, 58, 42, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 42, 57, 57, 57, 57, 57, 57, 57, 50, 45, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 45, 45, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 45, 45, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 32, 58, 58, 58, 58, 58, 58, 58, 60, 83, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 84, 93, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 94], + "data":[49, 58, 58, 58, 58, 58, 58, 42, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 42, 57, 57, 57, 57, 57, 57, 57, 50, 45, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 45, 45, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 45, 45, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 45, 45, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 32, 58, 58, 58, 58, 58, 58, 58, 60, 83, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 84, 93, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 94], "height":17, "id":9, "name":"walls", @@ -117,6 +117,11 @@ "id":13, "name":"", "properties":[ + { + "name":"focusable", + "type":"bool", + "value":true + }, { "name":"openWebsite", "type":"string", @@ -128,6 +133,143 @@ "width":96.736386420597, "x":799.205285942128, "y":96.736386420597 + }, + { + "height":124.762816131237, + "id":15, + "name":"", + "properties":[ + { + "name":"focusable", + "type":"bool", + "value":true + }, + { + "name":"zoom_margin", + "type":"float", + "value":0.5 + }], + "rotation":0, + "type":"area", + "visible":true, + "width":254.95010252905, + "x":448.422875370244, + "y":320.947824105719 + }, + { + "height":19, + "id":17, + "name":"", + "rotation":0, + "text": + { + "text":"FOCUSABLE ", + "wrap":true + }, + "type":"", + "visible":true, + "width":93.848940533151, + "x":529.877534745956, + "y":358.459899749373 + }, + { + "height":19, + "id":18, + "name":"", + "rotation":0, + "text": + { + "text":"JITSI ON TRIGGER", + "wrap":true + }, + "type":"", + "visible":true, + "width":164.367053998633, + "x":408.731032125769, + "y":150.521872863978 + }, + { + "height":19, + "id":19, + "name":"", + "rotation":0, + "text": + { + "text":"JITSI", + "wrap":true + }, + "type":"", + "visible":true, + "width":43.2205513784461, + "x":100.440305308726, + "y":147.80963773069 + }, + { + "height":102.175210754158, + "id":20, + "name":"", + "rotation":0, + "text": + { + "halign":"center", + "text":"OPEN WEBSITE AND FOCUSABLE", + "wrap":true + }, + "type":"", + "visible":true, + "width":99.2734107997265, + "x":796.580656185919, + "y":102.605718842561 + }, + { + "height":19, + "id":21, + "name":"", + "rotation":0, + "text": + { + "text":"SILENT ZONE", + "wrap":true + }, + "type":"", + "visible":true, + "width":112.834586466165, + "x":799.292891319207, + "y":391.910799726589 + }, + { + "height":95.892082727209, + "id":22, + "name":"", + "properties":[ + { + "name":"focusable", + "type":"bool", + "value":true + }], + "rotation":359.800363945476, + "type":"", + "visible":true, + "width":318.187448731897, + "x":32.4024392837801, + "y":352.890077348834 + }, + { + "height":43.4101161995899, + "id":23, + "name":"", + "rotation":0, + "text": + { + "halign":"center", + "text":"THIS SHOULD NOT TRIGGER ANYTHING (TYPE IS NOT 'AREA')", + "wrap":true + }, + "type":"", + "visible":true, + "width":288.225791752108, + "x":41.6752107541581, + "y":381.965937571201 }], "opacity":1, "type":"objectgroup", @@ -136,7 +278,7 @@ "y":0 }], "nextlayerid":39, - "nextobjectid":15, + "nextobjectid":24, "orientation":"orthogonal", "properties":[ { From 480277df6019cd0923147af01ab0bf5bbec36461 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Tue, 12 Apr 2022 14:45:49 +0200 Subject: [PATCH 08/17] change zone to area on example images for focusable area --- docs/maps/images/camera/4_add_zone_type.png | Bin 5253 -> 8617 bytes .../images/camera/5_click_add_property.png | Bin 41213 -> 46123 bytes .../images/camera/7_make_sure_checked.png | Bin 9358 -> 11466 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/maps/images/camera/4_add_zone_type.png b/docs/maps/images/camera/4_add_zone_type.png index 0416d1e475165e0eee273b036888825fe8bf33d7..18224ea59a73c699a0431aa816fe7587a7e1d0ec 100644 GIT binary patch literal 8617 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 literal 5253 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 T%njhzA?Vf(1FeedwxRz8puncz diff --git a/docs/maps/images/camera/5_click_add_property.png b/docs/maps/images/camera/5_click_add_property.png index 9aa96a2fd759749987b4901628c9904970bd6f22..329ac437e01ea22cde1a8e2b9d57cd4cd581331d 100644 GIT binary patch literal 46123 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 literal 41213 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 literal 9358 zcmZ{Kbx<2&yKjQKyHlJ}+@ZKrTnfeA-HQcxcc(bC#T^Qv#e%!LQ{1(1(w@2BId|sX zKQ=pWCfRp)9{I_$QL4(a=qMy800018UQS9K0007^2Neu(h)07McE8j8e?Nnb8tawa2@eBx4Ka7or9xJ|7ttIW(Yby;X;MUcrQSKgxPK+`Gt z>&ABUxGW2Hwy_@8$P_b4dXA}ki@2!rdvT@ zpO?Vzuj^K4e-Jgbw6Nhg*n_rSkxVrw5U`3vy0D5cPgmNeS6AOL;{*i-Z4V?6rhN(K z1s#CaUtjJLL>{fh#6T5at?lfF$HoZo@e3D>{BLGa**e+%AKj_n> z`(7K9ySopn8( z7AJ_nkPbp1QStEv>JnmK_#BoR17BY#{~X9}_s8L?BkNp>A7-!`pxknK{MKaM)FP7l zAu!0nQSsuq(Si!u#2j)&`mzVA+l`)NDBC-gffYmO*@2`OeZ|LTMLT%pf+ zfNUso)E15x6X2I?^vCut8}8J-ClQ4;f;&}#a&G}!93f=Z_Rm%fn=vkk9N-xehDvDI z?v5M`H_1Z14A9HZU@Nbx_C8GJS!oT3qZJ;WP4ZEk4@J);?1BgmODt)i!N+vXsMIm@ zwNh}pB)4hTalvgiHa0$Ips2b`ZeTUSK>?w|SeO$r965(~_`eib3H(bLGH`DAozec#{ggj-A8fEHDR`Tz zhHajCzT;)uk{&`OXlC4n6@1TT4I4SxI}Fp;K5nUtghP*!?x5H&+FvCq<+D;AiqO^qaf!sQO?xwq7SB zbG}j;%PHBEJEtMqr$D36Kdds1ZMp4>F|+Qo*cuy|$~{i6qX;egW1?Z6=5Z`~0}FY< zU3xucq5&si>FsVZdM6aV!k4{=S4FP*S)d9k8Ne;j7IlP{sL1d1&xld?>q`w6*SaWT z(^0AFR&D!%>SyJ_z;|qC3My-A6jr~&N7nPG-aQ2(zZ)n_;f^PQXDvI%8XiX8K=k76GqgWkj*HLmP+&;lY-9r@4~HhYM`^?kON1||NjNdRj;{&G!AQm>V1*7f8} ztkg13^QCx%bhmMy1@#G2_~-ZC;ddJSCcF%uxeHb}c4N8arB_x<1f>@}KL&~~#*;Mm zmk!}ZQs_A+A6^Nj6UTH#d@KlD7gu|+4FE<|35X*xyr(9e*aN>qc4T~W7_pOE!xP}H zd35xbiki3TNudp4Isa(e=PAkb4NvgZ&Atk@CokVnKtot<(6tCt&OnqVgQHIM-jU6Nuo6{K=WiMT%0Dbfav7 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 From 35964cdb5b5c4f7b96c297378ef91a7f542bda34 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Tue, 12 Apr 2022 15:02:01 +0200 Subject: [PATCH 09/17] update docs --- docs/maps/camera.md | 14 +++++++------- docs/maps/meeting-rooms.md | 17 +++++++++-------- docs/maps/opening-a-website.md | 11 ++++++----- docs/maps/special-zones.md | 10 ++++++---- 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/docs/maps/camera.md b/docs/maps/camera.md index 9e58fcad..59a212f8 100644 --- a/docs/maps/camera.md +++ b/docs/maps/camera.md @@ -1,15 +1,15 @@ {.section-title.accent.text-primary} # Working with camera -## Focusable Zones +## Focusable Area -It is possible to define special regions on the map that can make the camera zoom and center on themselves. We call them "Focusable Zones". When player gets inside, his camera view will be altered - focused, zoomed and locked on defined zone, like this: +It is possible to define special regions on the map that can make the camera zoom and center on themselves. We call them "Focusable Area". When player gets inside, his camera view will be altered - focused, zoomed and locked on defined area, like this:
-### Adding new **Focusable Zone**: +### Adding new **Focusable Area**: 1. Make sure you are editing an **Object Layer** @@ -29,7 +29,7 @@ It is possible to define special regions on the map that can make the camera zoo -4. Make sure your object is of type "zone"! +4. Make sure your object is of type "area"!
@@ -53,11 +53,11 @@ It is possible to define special regions on the map that can make the camera zoo
-All should be set up now and your new **Focusable Zone** should be working fine! +All should be set up now and your new **Focusable Area** should be working fine! ### Defining custom zoom margin: -If you want, you can add an additional property to control how much should the camera zoom onto focusable zone. +If you want, you can add an additional property to control how much should the camera zoom onto focusable area. 1. Like before, click on **Add Property** @@ -77,7 +77,7 @@ If you want, you can add an additional property to control how much should the c - For example, if you define your zone as a 300x200 rectangle, setting this property to 0.5 *(50%)* means the camera will try to fit within the viewport the entire zone + margin of 50% of its dimensions, so 450x300. + For example, if you define your area as a 300x200 rectangle, setting this property to 0.5 *(50%)* means the camera will try to fit within the viewport the entire area + margin of 50% of its dimensions, so 450x300. - No margin defined diff --git a/docs/maps/meeting-rooms.md b/docs/maps/meeting-rooms.md index 9c3963ed..f971d039 100644 --- a/docs/maps/meeting-rooms.md +++ b/docs/maps/meeting-rooms.md @@ -9,19 +9,20 @@ On your map, you can define special zones (meeting rooms) that will trigger the In order to create Jitsi meet zones: -* You must create a specific layer. -* In layer properties, you MUST add a "`jitsiRoom`" property (of type "`string`"). The value of the property is the name of the room in Jitsi. Note: the name of the room will be "slugified" and prepended with the name of the instance of the map (so that different instances of the map have different rooms) +* You must create a specific object. +* Object must be of type "`area`" +* In object properties, you MUST add a "`jitsiRoom`" property (of type "`string`"). The value of the property is the name of the room in Jitsi. Note: the name of the room will be "slugified" and prepended with the name of the instance of the map (so that different instances of the map have different rooms) * You may also use "jitsiWidth" property (of type "number" between 0 and 100) to control the width of the iframe containing the meeting room. -You can have this layer (i.e. your meeting area) to be selectable as the precise location for your meeting using the [Google Calendar integration for Work Adventure](/integrations/google-calendar). To do so, you must set the `meetingRoomLabel` property. You can provide any name that you would like your meeting room to have (as a string). +You can have this object (i.e. your meeting area) to be selectable as the precise location for your meeting using the [Google Calendar integration for Work Adventure](/integrations/google-calendar). To do so, you must set the `meetingRoomLabel` property. You can provide any name that you would like your meeting room to have (as a string). ## Triggering of the "Jitsi meet" action -By default, Jitsi meet will open when a user enters the zone defined on the map. +By default, Jitsi meet will open when a user enters the area defined on the map. It is however possible to trigger Jitsi only on user action. You can do this with the `jitsiTrigger` property. -If you set `jitsiTrigger: onaction`, when the user walks on the layer, an alert message will be displayed at the bottom of the screen: +If you set `jitsiTrigger: onaction`, when the user walks on the area, an alert message will be displayed at the bottom of the screen:
@@ -32,7 +33,7 @@ If you set `jitsiTriggerMessage: your message action` you can edit alert message ## Customizing your "Jitsi meet" -Your Jitsi meet experience can be customized using Jitsi specific config options. The `jitsiConfig` and `jitsiInterfaceConfig` properties can be used on the Jitsi layer to change the way Jitsi looks and behaves. Those 2 properties are accepting a JSON string. +Your Jitsi meet experience can be customized using Jitsi specific config options. The `jitsiConfig` and `jitsiInterfaceConfig` properties can be used on the Jitsi object to change the way Jitsi looks and behaves. Those 2 properties are accepting a JSON string. For instance, use `jitsiConfig: { "startWithAudioMuted": true }` to automatically mute the microphone when someone enters a room. Or use `jitsiInterfaceConfig: { "DEFAULT_BACKGROUND": "#77ee77" }` to change the background color of Jitsi. @@ -60,7 +61,7 @@ You can grant moderator rights to some of your members. Jitsi moderators can: * Mute everybody expect one speaker * Kick users out of the meeting -In order to grant moderator rights to a given user, you can add a `jitsiRoomAdminTag` property to your Jitsi layer. For instance, if you write a property: +In order to grant moderator rights to a given user, you can add a `jitsiRoomAdminTag` property to your Jitsi object. For instance, if you write a property: jitsiRoomAdminTag: speaker @@ -74,7 +75,7 @@ WorkAdventure usually comes with a default Jitsi meet installation. If you are u You have the possibility, in your map, to override the Jitsi meet instance that will be used by default. This can be useful for regulatory reasons. Maybe your company wants to keep control on the video streams and therefore, wants to self-host a Jitsi instance? Or maybe you want to use a very special configuration or very special version of Jitsi? -Use the `jitsiUrl` property to in the Jitsi layer to specify the Jitsi instance that should be used. Beware, `jitsiUrl` takes in parameter a **domain name**, without the protocol. So you should use: +Use the `jitsiUrl` property to in the Jitsi object to specify the Jitsi instance that should be used. Beware, `jitsiUrl` takes in parameter a **domain name**, without the protocol. So you should use: `jitsiUrl: meet.jit.si` and not `jitsiUrl: https://meet.jit.si` diff --git a/docs/maps/opening-a-website.md b/docs/maps/opening-a-website.md index a84bde30..74aa6f46 100644 --- a/docs/maps/opening-a-website.md +++ b/docs/maps/opening-a-website.md @@ -10,8 +10,9 @@ on the right side of the screen) In order to create a zone that opens websites: -* You must create a specific layer. -* In layer properties, you MUST add a "`openWebsite`" property (of type "`string`"). The value of the property is the URL of the website to open (the URL must start with "https://") +* You must create a specific object. +* Object must be of type "`area`" +* In object properties, you MUST add a "`openWebsite`" property (of type "`string`"). The value of the property is the URL of the website to open (the URL must start with "https://") * You may also use "`openWebsiteWidth`" property (of type "`int`" or "`float`" between 0 and 100) to control the width of the iframe. * You may also use "`openTab`" property (of type "`string`") to open in a new tab instead. @@ -43,7 +44,7 @@ By default, the iFrame will open when a user enters the zone defined on the map. It is however possible to trigger the iFrame only on user action. You can do this with the `openWebsiteTrigger` property. -If you set `openWebsiteTrigger: onaction`, when the user walks on the layer, an alert message will be displayed at the bottom of the screen: +If you set `openWebsiteTrigger: onaction`, when the user walks on the area, an alert message will be displayed at the bottom of the screen:
@@ -52,7 +53,7 @@ If you set `openWebsiteTrigger: onaction`, when the user walks on the layer, an If you set `openWebsiteTriggerMessage: your message action` you can edit alert message displayed. If is not defined, the default message displayed is 'Press on SPACE to open the web site'. -If you set `openWebsiteTrigger: onicon`, when the user walks on the layer, an icon will be displayed at the bottom of the screen: +If you set `openWebsiteTrigger: onicon`, when the user walks on the area, an icon will be displayed at the bottom of the screen:
@@ -78,6 +79,6 @@ Cowebsites allow you to have several sites open at the same time. If you want to open a Jitsi and another page it's easy! -You have just to [add a Jitsi to the map](meeting-rooms.md) and [add a co-website](opening-a-website.md#the-openwebsite-property) on the same layer. +You have just to [add a Jitsi to the map](meeting-rooms.md) and [add a co-website](opening-a-website.md#the-openwebsite-property) on the same object. It's done! diff --git a/docs/maps/special-zones.md b/docs/maps/special-zones.md index 30ebebab..0d639b01 100644 --- a/docs/maps/special-zones.md +++ b/docs/maps/special-zones.md @@ -9,8 +9,9 @@ On your map, you can define special silent zones where nobody is allowed to talk In order to create a silent zone: -* You must create a specific layer. -* In layer properties, you MUST add a boolean "`silent`" property. If the silent property is checked, the users are entering the silent zone when they walk on any tile of the layer. +* You must create a specific object. +* Object must be of type "`area`" +* In object properties, you MUST add a boolean "`silent`" property. If the silent property is checked, the users are entering the silent zone when they walk on the area. ## Playing sounds or background music @@ -18,8 +19,9 @@ Your map can define special zones where a sound or background music will automat In order to create a zone that triggers sounds/music: -* You must create a specific layer. -* In layer properties, you MUST add a "`playAudio`" property. The value of the property is a URL to an MP3 file that will be played. The URL can be relative to the URL of the map. +* You must create a specific object. +* Object must be of type "`area`" +* In object properties, you MUST add a "`playAudio`" property. The value of the property is a URL to an MP3 file that will be played. The URL can be relative to the URL of the map. * You may use the boolean property "`audioLoop`" to make the sound loop (thanks captain obvious). * If the "`audioVolume`" property is set, the audio player uses either the value of the property or the last volume set by the user - whichever is smaller. This property is a float from 0 to 1.0 From 99b49c39c5d56297f03bcd689430ce24b5527e54 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Tue, 12 Apr 2022 15:15:58 +0200 Subject: [PATCH 10/17] change TestDoor to Test Pathfinding to no longer be misleading --- maps/tests/{DoorTest => Pathfinding}/map.json | 0 maps/tests/{DoorTest => Pathfinding}/script.php | 0 maps/tests/index.html | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename maps/tests/{DoorTest => Pathfinding}/map.json (100%) rename maps/tests/{DoorTest => Pathfinding}/script.php (100%) diff --git a/maps/tests/DoorTest/map.json b/maps/tests/Pathfinding/map.json similarity index 100% rename from maps/tests/DoorTest/map.json rename to maps/tests/Pathfinding/map.json diff --git a/maps/tests/DoorTest/script.php b/maps/tests/Pathfinding/script.php similarity index 100% rename from maps/tests/DoorTest/script.php rename to maps/tests/Pathfinding/script.php diff --git a/maps/tests/index.html b/maps/tests/index.html index ddb1959a..be9ba2c5 100644 --- a/maps/tests/index.html +++ b/maps/tests/index.html @@ -50,10 +50,10 @@
From ce1961e34e61b2f2daa71fcf1c595089c90a45c5 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Tue, 12 Apr 2022 15:43:32 +0200 Subject: [PATCH 11/17] more docs changes --- docs/maps/meeting-rooms.md | 3 +++ docs/maps/opening-a-website.md | 3 +++ docs/maps/special-zones.md | 6 ++++++ docs/maps/wa-maps.md | 6 +++--- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/maps/meeting-rooms.md b/docs/maps/meeting-rooms.md index f971d039..be86bda0 100644 --- a/docs/maps/meeting-rooms.md +++ b/docs/maps/meeting-rooms.md @@ -16,6 +16,9 @@ In order to create Jitsi meet zones: You can have this object (i.e. your meeting area) to be selectable as the precise location for your meeting using the [Google Calendar integration for Work Adventure](/integrations/google-calendar). To do so, you must set the `meetingRoomLabel` property. You can provide any name that you would like your meeting room to have (as a string). +{.alert.alert-info} +As an alternative, you may also put the `jitsiRoom` properties on a layer (rather than putting them on an "area" object) + ## Triggering of the "Jitsi meet" action By default, Jitsi meet will open when a user enters the area defined on the map. diff --git a/docs/maps/opening-a-website.md b/docs/maps/opening-a-website.md index 74aa6f46..2318a7ab 100644 --- a/docs/maps/opening-a-website.md +++ b/docs/maps/opening-a-website.md @@ -20,6 +20,9 @@ In order to create a zone that opens websites: A website can explicitly forbid another website from loading it in an iFrame using the [X-Frame-Options HTTP header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options). +{.alert.alert-info} +As an alternative, you may also put the `openWebsite` properties on a layer (rather than putting them on an "area" object) + ## Integrating a Youtube video A common use case is to use `openWebsite` to open a Youtube video. diff --git a/docs/maps/special-zones.md b/docs/maps/special-zones.md index 0d639b01..73d1af72 100644 --- a/docs/maps/special-zones.md +++ b/docs/maps/special-zones.md @@ -13,6 +13,9 @@ In order to create a silent zone: * Object must be of type "`area`" * In object properties, you MUST add a boolean "`silent`" property. If the silent property is checked, the users are entering the silent zone when they walk on the area. +{.alert.alert-info} +As an alternative, you may also put the `silent` property on a layer (rather than putting them on an "area" object) + ## Playing sounds or background music Your map can define special zones where a sound or background music will automatically be played. @@ -27,3 +30,6 @@ In order to create a zone that triggers sounds/music: {.alert.alert-info} "`playAudioLoop`" is deprecated and should not be used anymore. + +{.alert.alert-info} +As an alternative, you may also put the `playAudio` properties on a layer (rather than putting them on an "area" object) diff --git a/docs/maps/wa-maps.md b/docs/maps/wa-maps.md index 6e84a251..8bec629b 100644 --- a/docs/maps/wa-maps.md +++ b/docs/maps/wa-maps.md @@ -87,11 +87,11 @@ Repeat for every tile that should be "collidable". In the next sections, you will see how you can add behaviour on your map by adding "properties". You can add properties for a variety of features: putting exits, opening websites, meeting rooms, silent zones, etc... -You can add properties either on individual tiles of a tileset OR on a complete layer. +You can add properties either on individual tiles of a tileset, on Tiled object OR on a complete layer. -If you put a property on a layer, it will be triggered if your Woka walks on any tile of the layer. +If you put a property on a object or layer, it will be triggered if your Woka walks on object area / any tile of the layer. -The exception is the "collides" property that can only be set on tiles, but not on a complete layer. +The exception is the "collides" property that can only be set on tiles, but not on an object or on complete layer. ## Insert helpful information in your map From fe0f2872fc3fbf88fdbe524e9f7ab4b6813a885f Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Tue, 12 Apr 2022 15:51:23 +0200 Subject: [PATCH 12/17] performance comment --- docs/maps/meeting-rooms.md | 1 + docs/maps/opening-a-website.md | 1 + docs/maps/special-zones.md | 2 ++ 3 files changed, 4 insertions(+) diff --git a/docs/maps/meeting-rooms.md b/docs/maps/meeting-rooms.md index be86bda0..4dbc0df2 100644 --- a/docs/maps/meeting-rooms.md +++ b/docs/maps/meeting-rooms.md @@ -18,6 +18,7 @@ You can have this object (i.e. your meeting area) to be selectable as the precis {.alert.alert-info} As an alternative, you may also put the `jitsiRoom` properties on a layer (rather than putting them on an "area" object) +but we advise to stick with "area" objects for better performance! ## Triggering of the "Jitsi meet" action diff --git a/docs/maps/opening-a-website.md b/docs/maps/opening-a-website.md index 2318a7ab..52a68168 100644 --- a/docs/maps/opening-a-website.md +++ b/docs/maps/opening-a-website.md @@ -22,6 +22,7 @@ the [X-Frame-Options HTTP header](https://developer.mozilla.org/en-US/docs/Web/H {.alert.alert-info} As an alternative, you may also put the `openWebsite` properties on a layer (rather than putting them on an "area" object) +but we advise to stick with "area" objects for better performance! ## Integrating a Youtube video diff --git a/docs/maps/special-zones.md b/docs/maps/special-zones.md index 73d1af72..1d22a3fc 100644 --- a/docs/maps/special-zones.md +++ b/docs/maps/special-zones.md @@ -15,6 +15,7 @@ In order to create a silent zone: {.alert.alert-info} As an alternative, you may also put the `silent` property on a layer (rather than putting them on an "area" object) +but we advise to stick with "area" objects for better performance! ## Playing sounds or background music @@ -33,3 +34,4 @@ In order to create a zone that triggers sounds/music: {.alert.alert-info} As an alternative, you may also put the `playAudio` properties on a layer (rather than putting them on an "area" object) +but we advise to stick with "area" objects for better performance! From ec3b28271d42b71bd0b0ae79de75198fd35bca25 Mon Sep 17 00:00:00 2001 From: Piotr 'pwh' Hanusiak Date: Tue, 19 Apr 2022 15:55:41 +0200 Subject: [PATCH 13/17] fixed object areas not triggering properties change on immediate collision --- front/src/Phaser/Game/GameMap.ts | 24 +++++++++++++++++------- maps/tests/tiled_objects.json | 18 +++++++++--------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/front/src/Phaser/Game/GameMap.ts b/front/src/Phaser/Game/GameMap.ts index 8894d726..5528b287 100644 --- a/front/src/Phaser/Game/GameMap.ts +++ b/front/src/Phaser/Game/GameMap.ts @@ -65,6 +65,8 @@ export class GameMap { public readonly phaserLayers: TilemapLayer[] = []; public readonly areas: ITiledMapObject[] = []; + private readonly areasPositionOffsetY: number = 16; + public exitUrls: Array = []; public hasStartTile = false; @@ -149,7 +151,10 @@ export class GameMap { public setPosition(x: number, y: number) { this.oldPosition = this.position; this.position = { x, y }; - this.triggerAreasChange(); + const areasChanged = this.triggerAreasChange(); + if (areasChanged) { + this.triggerAllProperties(); + } this.oldKey = this.key; @@ -422,10 +427,11 @@ export class GameMap { /** * We use Tiled Objects with type "area" as areas with defined x, y, width and height for easier event triggering. + * @returns If there were any areas changes */ - private triggerAreasChange(): void { - const areasByOldPosition = this.getAreasOnPosition(this.oldPosition); - const areasByNewPosition = this.getAreasOnPosition(this.position); + private triggerAreasChange(): boolean { + const areasByOldPosition = this.getAreasOnPosition(this.oldPosition, this.areasPositionOffsetY); + const areasByNewPosition = this.getAreasOnPosition(this.position, this.areasPositionOffsetY); const enterAreas = new Set(areasByNewPosition); const leaveAreas = new Set(areasByOldPosition); @@ -437,11 +443,13 @@ export class GameMap { } }); + let areasChange = false; if (enterAreas.size > 0) { const areasArray = Array.from(enterAreas); for (const callback of this.enterAreaCallbacks) { callback(areasArray, areasByNewPosition); } + areasChange = true; } if (leaveAreas.size > 0) { @@ -449,13 +457,15 @@ export class GameMap { for (const callback of this.leaveAreaCallbacks) { callback(areasArray, areasByNewPosition); } + areasChange = true; } + return areasChange; } private getProperties(key: number): Map { const properties = new Map(); - for (const area of this.getAreasOnPosition(this.position)) { + for (const area of this.getAreasOnPosition(this.position, this.areasPositionOffsetY)) { if (area.properties !== undefined) { for (const property of area.properties) { if (property.value === undefined) { @@ -504,13 +514,13 @@ export class GameMap { return properties; } - private getAreasOnPosition(position?: { x: number; y: number }): ITiledMapObject[] { + private getAreasOnPosition(position?: { x: number; y: number }, offsetY: number = 0): ITiledMapObject[] { return position ? this.areas.filter((area) => { if (!position) { return false; } - return MathUtils.isOverlappingWithRectangle(position, area); + return MathUtils.isOverlappingWithRectangle({ x: position.x, y: position.y + offsetY }, area); }) : []; } diff --git a/maps/tests/tiled_objects.json b/maps/tests/tiled_objects.json index 3f029b41..90175f12 100644 --- a/maps/tests/tiled_objects.json +++ b/maps/tests/tiled_objects.json @@ -15,7 +15,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":17, "id":7, "name":"collisions", @@ -39,7 +39,7 @@ "y":0 }, { - "data":[49, 58, 58, 58, 58, 58, 58, 42, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 42, 57, 57, 57, 57, 57, 57, 57, 50, 45, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 45, 45, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 45, 45, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 45, 45, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 32, 58, 58, 58, 58, 58, 58, 58, 60, 83, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 84, 93, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 94], + "data":[49, 58, 58, 58, 58, 58, 58, 42, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 42, 57, 57, 57, 57, 57, 57, 57, 50, 45, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 45, 63, 63, 63, 63, 63, 63, 63, 45, 45, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 45, 73, 73, 73, 73, 73, 73, 73, 45, 45, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 32, 58, 58, 58, 58, 58, 58, 58, 60, 83, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 84, 93, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 94], "height":17, "id":9, "name":"walls", @@ -96,9 +96,9 @@ "y":94.0241512873092 }, { - "height":95.8323080428344, + "height":97.8323080428344, "id":12, - "name":"", + "name":"silent zone area", "properties":[ { "name":"silent", @@ -110,10 +110,10 @@ "visible":true, "width":225.115516062885, "x":735.919799498747, - "y":354.398724082935 + "y":352.398724082935 }, { - "height":63.2854864433812, + "height":62.2854864433812, "id":13, "name":"", "properties":[ @@ -135,7 +135,7 @@ "y":96.736386420597 }, { - "height":124.762816131237, + "height":127.762816131237, "id":15, "name":"", "properties":[ @@ -154,7 +154,7 @@ "visible":true, "width":254.95010252905, "x":448.422875370244, - "y":320.947824105719 + "y":319.947824105719 }, { "height":19, @@ -277,7 +277,7 @@ "x":0, "y":0 }], - "nextlayerid":39, + "nextlayerid":40, "nextobjectid":24, "orientation":"orthogonal", "properties":[ From b8fd85fe1544221905930bdd85981a497bb2c7c7 Mon Sep 17 00:00:00 2001 From: Lukas Hass Date: Tue, 1 Mar 2022 18:23:01 +0100 Subject: [PATCH 14/17] lazy load TextGlobalMessage component --- front/src/Components/Menu/Menu.svelte | 13 +++-- .../Components/Menu/TextGlobalMessage.svelte | 53 +++++++++++++++++-- .../style/TextGlobalMessageSvelte-Style.scss | 45 ---------------- front/style/index.scss | 1 - 4 files changed, 54 insertions(+), 58 deletions(-) delete mode 100644 front/style/TextGlobalMessageSvelte-Style.scss diff --git a/front/src/Components/Menu/Menu.svelte b/front/src/Components/Menu/Menu.svelte index 21e62520..2583c208 100644 --- a/front/src/Components/Menu/Menu.svelte +++ b/front/src/Components/Menu/Menu.svelte @@ -3,7 +3,6 @@ import SettingsSubMenu from "./SettingsSubMenu.svelte"; import ProfileSubMenu from "./ProfileSubMenu.svelte"; import AboutRoomSubMenu from "./AboutRoomSubMenu.svelte"; - import GlobalMessageSubMenu from "./GlobalMessagesSubMenu.svelte"; import ContactSubMenu from "./ContactSubMenu.svelte"; import CustomSubMenu from "./CustomSubMenu.svelte"; import GuestSubMenu from "./GuestSubMenu.svelte"; @@ -25,16 +24,16 @@ let props: { url: string; allowApi: boolean }; let unsubscriberSubMenuStore: Unsubscriber; - onMount(() => { + onMount(async () => { unsubscriberSubMenuStore = subMenusStore.subscribe(() => { if (!$subMenusStore.includes(activeSubMenu)) { - switchMenu($subMenusStore[0]); + void switchMenu($subMenusStore[0]); } }); checkSubMenuToShow(); - switchMenu($subMenusStore[0]); + await switchMenu($subMenusStore[0]); }); onDestroy(() => { @@ -43,7 +42,7 @@ } }); - function switchMenu(menu: MenuItem) { + async function switchMenu(menu: MenuItem) { if (menu.type === "translated") { activeSubMenu = menu; switch (menu.key) { @@ -60,7 +59,7 @@ activeComponent = AboutRoomSubMenu; break; case SubMenusInterface.globalMessages: - activeComponent = GlobalMessageSubMenu; + activeComponent = (await import("./GlobalMessagesSubMenu.svelte")).default; break; case SubMenusInterface.contact: activeComponent = ContactSubMenu; @@ -111,7 +110,7 @@ diff --git a/front/src/Components/Menu/TextGlobalMessage.svelte b/front/src/Components/Menu/TextGlobalMessage.svelte index 6b42e42e..73e606dc 100644 --- a/front/src/Components/Menu/TextGlobalMessage.svelte +++ b/front/src/Components/Menu/TextGlobalMessage.svelte @@ -3,7 +3,7 @@ import { onDestroy, onMount } from "svelte"; import { gameManager } from "../../Phaser/Game/GameManager"; import { AdminMessageEventTypes } from "../../Connexion/AdminMessagesService"; - import type { Quill } from "quill"; + import Quill from "quill"; import type { PlayGlobalMessageInterface } from "../../Connexion/ConnexionModels"; import LL from "../../i18n/i18n-svelte"; @@ -54,10 +54,7 @@ }; //Quill - onMount(async () => { - // Import quill - const { default: Quill } = await import("quill"); // eslint-disable-line @typescript-eslint/no-explicit-any - + onMount(() => { quill = new Quill(QUILL_EDITOR, { placeholder: $LL.menu.globalMessage.enter(), theme: "snow", @@ -76,3 +73,49 @@
+ + diff --git a/front/style/TextGlobalMessageSvelte-Style.scss b/front/style/TextGlobalMessageSvelte-Style.scss deleted file mode 100644 index 94baa67a..00000000 --- a/front/style/TextGlobalMessageSvelte-Style.scss +++ /dev/null @@ -1,45 +0,0 @@ -//TextGlobalMessage - -// TODO: load on demand with TextGlobalMessage component -@import "quill/dist/quill.snow.css"; - -section.section-input-send-text { - --height-toolbar: 20%; - height: 100%; - - .ql-toolbar{ - max-height: var(--height-toolbar); - background: whitesmoke; - } - - div.input-send-text{ - height: calc(100% - var(--height-toolbar)); - overflow: auto; - - color: whitesmoke; - font-size: 1rem; - - .ql-editor.ql-blank::before { - color: whitesmoke; - font-size: 1rem; - } - - .ql-tooltip { - top: 40% !important; - left: 20% !important; - - color: whitesmoke; - background-color: #333333; - } - } -} - -@include media-breakpoint-up(md) { - section.section-input-send-text { - --height-toolbar: 30%; - - .ql-toolbar { - overflow: auto; - } - } -} diff --git a/front/style/index.scss b/front/style/index.scss index 21690c98..cf0f365a 100644 --- a/front/style/index.scss +++ b/front/style/index.scss @@ -3,4 +3,3 @@ @import "cowebsite.scss"; @import "fonts.scss"; @import "style"; -@import "TextGlobalMessageSvelte-Style"; From 576a2b89cc2428cd01ba55c1865827930ffa5977 Mon Sep 17 00:00:00 2001 From: Alban Bruder <36596731+albanbruder@users.noreply.github.com> Date: Wed, 20 Apr 2022 10:42:01 +0200 Subject: [PATCH 15/17] Use NES.css to style share link (#2104) * Use NES.css to style share link * Run pretty Co-authored-by: Alban Bruder --- front/src/Components/Menu/GuestSubMenu.svelte | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/front/src/Components/Menu/GuestSubMenu.svelte b/front/src/Components/Menu/GuestSubMenu.svelte index fbbc48a4..3afdfb51 100644 --- a/front/src/Components/Menu/GuestSubMenu.svelte +++ b/front/src/Components/Menu/GuestSubMenu.svelte @@ -47,7 +47,13 @@ {#if !canShare} {:else} From 59d3a38921b38d2c1d4a6616d9edb97d90983983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A9n=C3=A9dicte=20Q?= <37311765+HimeShaman@users.noreply.github.com> Date: Wed, 20 Apr 2022 15:05:56 +0200 Subject: [PATCH 16/17] Reworking the wording of "away" mode (#2053) * Initial commit * Styles * Prettier fixx * fixes path * Adjusts size Co-authored-by: Benedicte Quimbert --- .../Components/Menu/SettingsSubMenu.svelte | 42 ++++++++++++++++++- front/src/Components/images/info.svg | 4 ++ front/src/i18n/de-DE/menu.ts | 8 ++-- front/src/i18n/en-US/menu.ts | 8 ++-- front/src/i18n/fr-FR/menu.ts | 8 ++-- 5 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 front/src/Components/images/info.svg diff --git a/front/src/Components/Menu/SettingsSubMenu.svelte b/front/src/Components/Menu/SettingsSubMenu.svelte index 64a6e0ac..41fd425a 100644 --- a/front/src/Components/Menu/SettingsSubMenu.svelte +++ b/front/src/Components/Menu/SettingsSubMenu.svelte @@ -9,6 +9,8 @@ import { isMediaBreakpointUp } from "../../Utils/BreakpointsUtils"; import { audioManagerVolumeStore } from "../../Stores/AudioManagerStore"; + import infoImg from "../images/info.svg"; + let fullscreen: boolean = localUserStore.getFullscreen(); let notification: boolean = localUserStore.getNotification() === "granted"; let forceCowebsiteTrigger: boolean = localUserStore.getForceCowebsiteTrigger(); @@ -179,8 +181,15 @@
-

{$LL.menu.settings.privacySettings.title()}

-

{$LL.menu.settings.privacySettings.explanation()}

+
+

+ {$LL.menu.settings.privacySettings.title()} + info icon +

+
+

{$LL.menu.settings.privacySettings.explanation()}

+
+
- Success Failure Pending + Success Failure Pending - Test Doors + Test Pathfinding