From cb0c5beecfde3c50c96acc7256f0d5385dfd7de1 Mon Sep 17 00:00:00 2001 From: Hanusiak Piotr Date: Thu, 20 Jan 2022 14:14:24 +0100 Subject: [PATCH 1/8] get additional hash parameters from url --- front/src/Url/UrlManager.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/front/src/Url/UrlManager.ts b/front/src/Url/UrlManager.ts index 011efa5a..c6e463e4 100644 --- a/front/src/Url/UrlManager.ts +++ b/front/src/Url/UrlManager.ts @@ -49,6 +49,14 @@ class UrlManager { return hash.length > 1 ? hash.substring(1) : null; } + public getHashParameters(): Record { + return window.location.hash.split("&").reduce((res: Record, item: string) => { + const parts = item.split("="); + res[parts[0]] = parts[1]; + return res; + }, {}); + } + pushStartLayerNameToUrl(startLayerName: string): void { window.location.hash = startLayerName; } From e87c0a07a41004fa86d50333629f2fd43bb7bd3b Mon Sep 17 00:00:00 2001 From: Hanusiak Piotr Date: Thu, 20 Jan 2022 15:10:54 +0100 Subject: [PATCH 2/8] moveTo parameter working if layer is found --- front/src/Phaser/Game/GameMap.ts | 33 +++++++++++++++++++++++++++++- front/src/Phaser/Game/GameScene.ts | 23 ++++++++++++++++----- front/src/Url/UrlManager.ts | 5 +++-- front/src/Utils/MathUtils.ts | 4 ++++ 4 files changed, 57 insertions(+), 8 deletions(-) diff --git a/front/src/Phaser/Game/GameMap.ts b/front/src/Phaser/Game/GameMap.ts index fc16110f..54f91866 100644 --- a/front/src/Phaser/Game/GameMap.ts +++ b/front/src/Phaser/Game/GameMap.ts @@ -1,4 +1,10 @@ -import type { ITiledMap, ITiledMapLayer, ITiledMapObject, ITiledMapProperty } from "../Map/ITiledMap"; +import type { + ITiledMap, + ITiledMapLayer, + ITiledMapObject, + ITiledMapProperty, + ITiledMapTileLayer, +} from "../Map/ITiledMap"; import { flattenGroupLayersMap } from "../Map/LayersFlattener"; import TilemapLayer = Phaser.Tilemaps.TilemapLayer; import { DEPTH_OVERLAY_INDEX } from "./DepthIndexes"; @@ -291,6 +297,31 @@ export class GameMap { } } + public getRandomPositionFromLayer(layerName: string): { x: number; y: number } { + const layer = this.findLayer(layerName) as ITiledMapTileLayer; + if (!layer) { + throw new Error(`No layer "${layerName}" was found`); + } + const tiles = layer.data; + if (!tiles) { + throw new Error(`No tiles in "${layerName}" were found`); + } + if (typeof tiles === "string") { + throw new Error("The content of a JSON map must be filled as a JSON array, not as a string"); + } + const possiblePositions: { x: number; y: number }[] = []; + tiles.forEach((objectKey: number, key: number) => { + if (objectKey === 0) { + return; + } + possiblePositions.push({ x: key % layer.width, y: Math.floor(key / layer.width) }); + }); + if (possiblePositions.length > 0) { + return MathUtils.randomFromArray(possiblePositions); + } + throw new Error("No possible position found"); + } + private getLayersByKey(key: number): Array { return this.flatLayers.filter((flatLayer) => flatLayer.type === "tilelayer" && flatLayer.data[key] !== 0); } diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index 739e195d..8c5df9b7 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -559,6 +559,12 @@ export class GameScene extends DirtyScene { .catch((e) => console.error(e)); } + this.pathfindingManager = new PathfindingManager( + this, + this.gameMap.getCollisionsGrid(), + this.gameMap.getTileDimensions() + ); + //notify game manager can to create currentUser in map this.createCurrentPlayer(); this.removeAllRemotePlayers(); //cleanup the list of remote players in case the scene was rebooted @@ -569,11 +575,6 @@ export class GameScene extends DirtyScene { waScaleManager ); - this.pathfindingManager = new PathfindingManager( - this, - this.gameMap.getCollisionsGrid(), - this.gameMap.getTileDimensions() - ); biggestAvailableAreaStore.recompute(); this.cameraManager.startFollowPlayer(this.CurrentPlayer); @@ -1725,6 +1726,18 @@ ${escapedMessage} this.connection?.emitEmoteEvent(emoteKey); analyticsClient.launchEmote(emoteKey); }); + const moveToParam = urlManager.getHashParameter("moveTo"); + if (moveToParam) { + const endPos = this.gameMap.getRandomPositionFromLayer(moveToParam); + this.pathfindingManager + .findPath(this.gameMap.getTileIndexAt(this.CurrentPlayer.x, this.CurrentPlayer.y), endPos) + .then((path) => { + if (path && path.length > 0) { + this.CurrentPlayer.setPathToFollow(path).catch((reason) => console.warn(reason)); + } + }) + .catch((reason) => console.warn(reason)); + } } catch (err) { if (err instanceof TextureError) { gameManager.leaveGame(SelectCharacterSceneName, new SelectCharacterScene()); diff --git a/front/src/Url/UrlManager.ts b/front/src/Url/UrlManager.ts index c6e463e4..3be17f08 100644 --- a/front/src/Url/UrlManager.ts +++ b/front/src/Url/UrlManager.ts @@ -49,12 +49,13 @@ class UrlManager { return hash.length > 1 ? hash.substring(1) : null; } - public getHashParameters(): Record { - return window.location.hash.split("&").reduce((res: Record, item: string) => { + public getHashParameter(name: string): string | undefined { + const parameters = window.location.hash.split("&").reduce((res: Record, item: string) => { const parts = item.split("="); res[parts[0]] = parts[1]; return res; }, {}); + return parameters[name]; } pushStartLayerNameToUrl(startLayerName: string): void { diff --git a/front/src/Utils/MathUtils.ts b/front/src/Utils/MathUtils.ts index c2fc88a2..fc055d11 100644 --- a/front/src/Utils/MathUtils.ts +++ b/front/src/Utils/MathUtils.ts @@ -31,4 +31,8 @@ export class MathUtils { const distance = Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2); return squared ? Math.sqrt(distance) : distance; } + + public static randomFromArray(array: T[]): T { + return array[Math.floor(Math.random() * array.length)]; + } } From cebb803b2b9f9696f82418c79a2f3d79260f00f5 Mon Sep 17 00:00:00 2001 From: Hanusiak Piotr Date: Thu, 20 Jan 2022 15:47:49 +0100 Subject: [PATCH 3/8] added test for moveTo command --- front/src/Url/UrlManager.ts | 6 +- maps/tests/index.html | 8 ++ maps/tests/move_to.json | 269 ++++++++++++++++++++++++++++++++++++ 3 files changed, 282 insertions(+), 1 deletion(-) create mode 100644 maps/tests/move_to.json diff --git a/front/src/Url/UrlManager.ts b/front/src/Url/UrlManager.ts index 3be17f08..0833919a 100644 --- a/front/src/Url/UrlManager.ts +++ b/front/src/Url/UrlManager.ts @@ -46,7 +46,11 @@ class UrlManager { public getStartLayerNameFromUrl(): string | null { const hash = window.location.hash; - return hash.length > 1 ? hash.substring(1) : null; + let layerName = null; + if (hash.length > 1) { + layerName = hash.includes("&") ? hash.split("&")[0].substring(1) : hash.substring(1); + } + return layerName; } public getHashParameter(name: string): string | undefined { diff --git a/maps/tests/index.html b/maps/tests/index.html index 4af51be5..d27d7804 100644 --- a/maps/tests/index.html +++ b/maps/tests/index.html @@ -56,6 +56,14 @@ Test start tile (S2) + + + Success Failure Pending + + + Test moveTo parameter + + Success Failure Pending diff --git a/maps/tests/move_to.json b/maps/tests/move_to.json new file mode 100644 index 00000000..2fdabab0 --- /dev/null +++ b/maps/tests/move_to.json @@ -0,0 +1,269 @@ +{ "compressionlevel":-1, + "height":10, + "infinite":false, + "layers":[ + { + "data":[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + "height":10, + "id":1, + "name":"floor", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":10, + "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, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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":10, + "id":2, + "name":"start", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":10, + "x":0, + "y":0 + }, + { + "data":[17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17], + "height":10, + "id":7, + "name":"walls", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":10, + "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, 34, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 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":10, + "id":8, + "name":"exit", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":10, + "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, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":10, + "id":10, + "name":"start2", + "opacity":1, + "properties":[ + { + "name":"startLayer", + "type":"bool", + "value":true + }], + "type":"tilelayer", + "visible":true, + "width":10, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":3, + "name":"floorLayer", + "objects":[ + { + "height":33.4788210765457, + "id":1, + "name":"", + "rotation":0, + "text": + { + "fontfamily":"Sans Serif", + "pixelsize":13, + "text":"Add \"moveTo\" parameter to the URL to make character move at game start.", + "wrap":true + }, + "type":"", + "visible":true, + "width":249.954975648686, + "x":35.2740564642832, + "y":34.4372323693377 + }, + { + "height":19.6921, + "id":3, + "name":"", + "rotation":0, + "text": + { + "fontfamily":"Sans Serif", + "pixelsize":13, + "text":"...#start2&moveTo=exit", + "wrap":true + }, + "type":"", + "visible":true, + "width":158.292, + "x":32, + "y":114 + }, + { + "height":19.6921, + "id":4, + "name":"", + "rotation":0, + "text": + { + "fontfamily":"Sans Serif", + "pixelsize":13, + "text":"start", + "wrap":true + }, + "type":"", + "visible":true, + "width":26.7596292501164, + "x":3.30880298090358, + "y":135.124359571495 + }, + { + "height":19.6921, + "id":5, + "name":"", + "rotation":0, + "text": + { + "fontfamily":"Sans Serif", + "pixelsize":13, + "text":"...#start2&moveTo=start", + "wrap":true + }, + "type":"", + "visible":true, + "width":158.292, + "x":32, + "y":132 + }, + { + "height":19.6921, + "id":6, + "name":"", + "rotation":0, + "text": + { + "fontfamily":"Sans Serif", + "pixelsize":13, + "text":"...#start&moveTo=exit", + "wrap":true + }, + "type":"", + "visible":true, + "width":158.292, + "x":32, + "y":93.740349627387 + }, + { + "height":19.6921, + "id":7, + "name":"", + "rotation":0, + "text": + { + "fontfamily":"Sans Serif", + "pixelsize":13, + "text":"start2", + "wrap":true + }, + "type":"", + "visible":true, + "width":33.0940201210992, + "x":74.556855798789, + "y":245.393819585468 + }, + { + "height":19.6921, + "id":8, + "name":"", + "rotation":0, + "text": + { + "fontfamily":"Sans Serif", + "pixelsize":13, + "text":"exit", + "wrap":true + }, + "type":"", + "visible":true, + "width":33.094, + "x":257.323517000466, + "y":135.100386888682 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }], + "nextlayerid":11, + "nextobjectid":9, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.7.2", + "tileheight":32, + "tilesets":[ + { + "columns":11, + "firstgid":1, + "image":"tileset1.png", + "imageheight":352, + "imagewidth":352, + "margin":0, + "name":"tileset1", + "spacing":0, + "tilecount":121, + "tileheight":32, + "tiles":[ + { + "id":16, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":17, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":18, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }, + { + "id":19, + "properties":[ + { + "name":"collides", + "type":"bool", + "value":true + }] + }], + "tilewidth":32 + }], + "tilewidth":32, + "type":"map", + "version":"1.6", + "width":10 +} \ No newline at end of file From b5887bceb4452524781198ba07d49a2d3f7e9ece Mon Sep 17 00:00:00 2001 From: Hanusiak Piotr Date: Mon, 24 Jan 2022 17:03:14 +0100 Subject: [PATCH 4/8] PR fixes --- docs/maps/entry-exit.md | 17 +++++++++++++++++ docs/maps/images/moveTo-layer-example.png | Bin 0 -> 34963 bytes front/src/Phaser/Game/GameScene.ts | 22 +++++++++++++--------- 3 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 docs/maps/images/moveTo-layer-example.png diff --git a/docs/maps/entry-exit.md b/docs/maps/entry-exit.md index 6f98af93..7f74a46b 100644 --- a/docs/maps/entry-exit.md +++ b/docs/maps/entry-exit.md @@ -65,3 +65,20 @@ How to use entry point : * To enter via this entry point, simply add a hash with the entry point name to the URL ("#[_entryPointName_]"). For instance: "`https://workadventu.re/_/global/mymap.com/path/map.json#my-entry-point`". * You can of course use the "#" notation in an exit scene URL (so an exit scene URL will point to a given entry scene URL) + +## Defining destination point with moveTo parameter + +We are able to direct WOKA to the desired place immediately after spawn. To make users spawn on entry point and the go to the, for example, meeting room automatically, simply add `moveTo` as an additional parameter of URL: + +*Use default entry point* +``` +.../my_map.json#&moveTo=exit +``` +*Define entry point and moveTo parameter* +``` +.../my_map.json#start&moveTo=meeting-room +``` + +For this to work, moveTo must be equal to the layer name of interest. This layer should have at least one tile defined. In case of layer having many tiles, user will go to one of them, randomly selected. + +![](images/moveTo-layer-example.png) \ No newline at end of file diff --git a/docs/maps/images/moveTo-layer-example.png b/docs/maps/images/moveTo-layer-example.png new file mode 100644 index 0000000000000000000000000000000000000000..66f5e3c6bfd1fa246bb04e73af351e100f34bad8 GIT binary patch literal 34963 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 { - if (path && path.length > 0) { - this.CurrentPlayer.setPathToFollow(path).catch((reason) => console.warn(reason)); - } - }) - .catch((reason) => console.warn(reason)); + try { + const endPos = this.gameMap.getRandomPositionFromLayer(moveToParam); + this.pathfindingManager + .findPath(this.gameMap.getTileIndexAt(this.CurrentPlayer.x, this.CurrentPlayer.y), endPos) + .then((path) => { + if (path && path.length > 0) { + this.CurrentPlayer.setPathToFollow(path).catch((reason) => console.warn(reason)); + } + }) + .catch((reason) => console.warn(reason)); + } catch (err) { + console.warn(`Cannot proceed with moveTo command:\n\t-> ${err}`); + } } } catch (err) { if (err instanceof TextureError) { From 934a59e59f9ed06a2d6a9a1625a4292998026672 Mon Sep 17 00:00:00 2001 From: Hanusiak Piotr Date: Tue, 25 Jan 2022 10:05:04 +0100 Subject: [PATCH 5/8] improved way of getting hash parameters --- front/src/Url/UrlManager.ts | 29 ++++++++++++++++++----------- maps/tests/move_to.json | 6 ++++++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/front/src/Url/UrlManager.ts b/front/src/Url/UrlManager.ts index 0833919a..cb0e1ed0 100644 --- a/front/src/Url/UrlManager.ts +++ b/front/src/Url/UrlManager.ts @@ -45,21 +45,28 @@ class UrlManager { } public getStartLayerNameFromUrl(): string | null { - const hash = window.location.hash; - let layerName = null; - if (hash.length > 1) { - layerName = hash.includes("&") ? hash.split("&")[0].substring(1) : hash.substring(1); + const parameters = this.getHashParameters(); + for (const key in parameters) { + if (parameters[key] === undefined) { + return key; + } } - return layerName; + return null; } public getHashParameter(name: string): string | undefined { - const parameters = window.location.hash.split("&").reduce((res: Record, item: string) => { - const parts = item.split("="); - res[parts[0]] = parts[1]; - return res; - }, {}); - return parameters[name]; + return this.getHashParameters()[name]; + } + + private getHashParameters(): Record { + return window.location.hash + .substring(1) + .split("&") + .reduce((res: Record, item: string) => { + const parts = item.split("="); + res[parts[0]] = parts[1]; + return res; + }, {}); } pushStartLayerNameToUrl(startLayerName: string): void { diff --git a/maps/tests/move_to.json b/maps/tests/move_to.json index 2fdabab0..39be809b 100644 --- a/maps/tests/move_to.json +++ b/maps/tests/move_to.json @@ -44,6 +44,12 @@ "id":8, "name":"exit", "opacity":1, + "properties":[ + { + "name":"startLayer", + "type":"bool", + "value":true + }], "type":"tilelayer", "visible":true, "width":10, From 40366eb070644b5cc7f31e3777aa890f636a8c25 Mon Sep 17 00:00:00 2001 From: Hanusiak Piotr Date: Tue, 25 Jan 2022 10:20:21 +0100 Subject: [PATCH 6/8] readme update --- docs/maps/entry-exit.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/maps/entry-exit.md b/docs/maps/entry-exit.md index 7f74a46b..6163afb1 100644 --- a/docs/maps/entry-exit.md +++ b/docs/maps/entry-exit.md @@ -74,10 +74,14 @@ We are able to direct WOKA to the desired place immediately after spawn. To make ``` .../my_map.json#&moveTo=exit ``` -*Define entry point and moveTo parameter* +*Define entry point and moveTo parameter like this...* ``` .../my_map.json#start&moveTo=meeting-room ``` +*...or like this* +``` +.../my_map.json#moveTo=meeting-room&start +``` For this to work, moveTo must be equal to the layer name of interest. This layer should have at least one tile defined. In case of layer having many tiles, user will go to one of them, randomly selected. From 1ca56efd426affe44ac4999af12a86a797db4b7a Mon Sep 17 00:00:00 2001 From: Piotr Hanusiak Date: Tue, 25 Jan 2022 10:58:59 +0100 Subject: [PATCH 7/8] Update docs/maps/entry-exit.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: David NĂ©grier --- docs/maps/entry-exit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maps/entry-exit.md b/docs/maps/entry-exit.md index 6163afb1..2040beb3 100644 --- a/docs/maps/entry-exit.md +++ b/docs/maps/entry-exit.md @@ -68,7 +68,7 @@ How to use entry point : ## Defining destination point with moveTo parameter -We are able to direct WOKA to the desired place immediately after spawn. To make users spawn on entry point and the go to the, for example, meeting room automatically, simply add `moveTo` as an additional parameter of URL: +We are able to direct a Woka to the desired place immediately after spawn. To make users spawn on an entry point and then, walk automatically to a meeting room, simply add `moveTo` as an additional parameter of URL: *Use default entry point* ``` From 90a76e9f04a54b4829cdc10f28c0309d17f3b029 Mon Sep 17 00:00:00 2001 From: Hanusiak Piotr Date: Tue, 25 Jan 2022 11:03:58 +0100 Subject: [PATCH 8/8] fixed layer name in docs --- docs/maps/images/moveTo-layer-example.png | Bin 34963 -> 28120 bytes maps/tests/move_to.json | 18 +++++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/maps/images/moveTo-layer-example.png b/docs/maps/images/moveTo-layer-example.png index 66f5e3c6bfd1fa246bb04e73af351e100f34bad8..12e8a4ad9b8277684f06fa3b24fdebc27b339972 100644 GIT binary patch literal 28120 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