Merge branch 'develop' into move-to-from-hash-parameter

This commit is contained in:
Hanusiak Piotr 2022-01-24 16:31:03 +01:00
commit 3cc38e6bbe
3 changed files with 44 additions and 43 deletions

View file

@ -175,7 +175,7 @@ WA.player.state.toto //will retrieve the variable
### Move player to position ### Move player to position
```typescript ```typescript
WA.player.moveTo(x: number, y: number, speed?: number): Promise<{ x: number, y: number }>; WA.player.moveTo(x: number, y: number, speed?: number): Promise<{ x: number, y: number, cancelled: boolean }>;
``` ```
Player will try to find shortest path to the destination point and proceed to move there. Player will try to find shortest path to the destination point and proceed to move there.
```typescript ```typescript

View file

@ -8,6 +8,7 @@ If you use group layers in your map, to reference a layer in a group you will ne
together. together.
Example : Example :
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<img src="images/groupLayer.png" class="figure-img img-fluid rounded" alt="" /> <img src="images/groupLayer.png" class="figure-img img-fluid rounded" alt="" />
@ -16,10 +17,10 @@ Example :
The name of the layers of this map are : The name of the layers of this map are :
* `entries/start` - `entries/start`
* `bottom/ground/under` - `bottom/ground/under`
* `bottom/build/carpet` - `bottom/build/carpet`
* `wall` - `wall`
### Detecting when the user enters/leaves a layer ### Detecting when the user enters/leaves a layer
@ -30,17 +31,18 @@ WA.room.onLeaveLayer(name: string): Subscription
Listens to the position of the current user. The event is triggered when the user enters or leaves a given layer. Listens to the position of the current user. The event is triggered when the user enters or leaves a given layer.
* **name**: the name of the layer who as defined in Tiled. - **name**: the name of the layer who as defined in Tiled.
Example: Example:
```javascript ```ts
WA.room.onEnterLayer('myLayer').subscribe(() => { const myLayerSubscriber = WA.room.onEnterLayer("myLayer").subscribe(() => {
WA.chat.sendChatMessage("Hello!", 'Mr Robot'); WA.chat.sendChatMessage("Hello!", "Mr Robot");
}); });
WA.room.onLeaveLayer('myLayer').subscribe(() => { WA.room.onLeaveLayer("myLayer").subscribe(() => {
WA.chat.sendChatMessage("Goodbye!", 'Mr Robot'); WA.chat.sendChatMessage("Goodbye!", "Mr Robot");
myLayerSubscriber.unsubscribe();
}); });
``` ```
@ -56,10 +58,10 @@ layer in that group layer.
Example : Example :
```javascript ```ts
WA.room.showLayer('bottom'); WA.room.showLayer("bottom");
//... //...
WA.room.hideLayer('bottom'); WA.room.hideLayer("bottom");
``` ```
### Set/Create properties in a layer ### Set/Create properties in a layer
@ -76,8 +78,8 @@ To unset a property from a layer, use `setProperty` with `propertyValue` set to
Example : Example :
```javascript ```ts
WA.room.setProperty('wikiLayer', 'openWebsite', 'https://www.wikipedia.org/'); WA.room.setProperty("wikiLayer", "openWebsite", "https://www.wikipedia.org/");
``` ```
### Get the room id ### Get the room id
@ -92,9 +94,9 @@ The ID of the current room is available from the `WA.room.id` property.
```typescript ```typescript
WA.onInit().then(() => { WA.onInit().then(() => {
console.log('Room id: ', WA.room.id); console.log("Room id: ", WA.room.id);
// Will output something like: 'https://play.workadventu.re/@/myorg/myworld/myroom', or 'https://play.workadventu.re/_/global/mymap.org/map.json" // Will output something like: 'https://play.workadventu.re/@/myorg/myworld/myroom', or 'https://play.workadventu.re/_/global/mymap.org/map.json"
}) });
``` ```
### Get the map URL ### Get the map URL
@ -109,9 +111,9 @@ The URL of the map is available from the `WA.room.mapURL` property.
```typescript ```typescript
WA.onInit().then(() => { WA.onInit().then(() => {
console.log('Map URL: ', WA.room.mapURL); console.log("Map URL: ", WA.room.mapURL);
// Will output something like: 'https://mymap.org/map.json" // Will output something like: 'https://mymap.org/map.json"
}) });
``` ```
### Getting map data ### Getting map data
@ -122,7 +124,7 @@ WA.room.getTiledMap(): Promise<ITiledMap>
Returns a promise that resolves to the JSON map file. Returns a promise that resolves to the JSON map file.
```javascript ```ts
const map = await WA.room.getTiledMap(); const map = await WA.room.getTiledMap();
console.log("Map generated with Tiled version ", map.tiledversion); console.log("Map generated with Tiled version ", map.tiledversion);
``` ```
@ -140,6 +142,7 @@ WA.room.setTiles(tiles: TileDescriptor[]): void
Replace the tile at the `x` and `y` coordinates in the layer named `layer` by the tile with the id `tile`. Replace the tile at the `x` and `y` coordinates in the layer named `layer` by the tile with the id `tile`.
If `tile` is a string, it's not the id of the tile but the value of the property `name`. If `tile` is a string, it's not the id of the tile but the value of the property `name`.
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<img src="images/nameIndexProperty.png" class="figure-img img-fluid rounded" alt="" /> <img src="images/nameIndexProperty.png" class="figure-img img-fluid rounded" alt="" />
@ -148,10 +151,10 @@ If `tile` is a string, it's not the id of the tile but the value of the property
`TileDescriptor` has the following attributes : `TileDescriptor` has the following attributes :
* **x (number) :** The coordinate x of the tile that you want to replace. - **x (number) :** The coordinate x of the tile that you want to replace.
* **y (number) :** The coordinate y of the tile that you want to replace. - **y (number) :** The coordinate y of the tile that you want to replace.
* **tile (number | string) :** The id of the tile that will be placed in the map. - **tile (number | string) :** The id of the tile that will be placed in the map.
* **layer (string) :** The name of the layer where the tile will be placed. - **layer (string) :** The name of the layer where the tile will be placed.
**Important !** : If you use `tile` as a number, be sure to add the `firstgid` of the tileset of the tile that you want **Important !** : If you use `tile` as a number, be sure to add the `firstgid` of the tileset of the tile that you want
to the id of the tile in Tiled Editor. to the id of the tile in Tiled Editor.
@ -160,12 +163,12 @@ Note: If you want to unset a tile, use `setTiles` with `tile` set to `null`.
Example : Example :
```javascript ```ts
WA.room.setTiles([ WA.room.setTiles([
{ x: 6, y: 4, tile: 'blue', layer: 'setTiles' }, { x: 6, y: 4, tile: "blue", layer: "setTiles" },
{ x: 7, y: 4, tile: 109, layer: 'setTiles' }, { x: 7, y: 4, tile: 109, layer: "setTiles" },
{ x: 8, y: 4, tile: 109, layer: 'setTiles' }, { x: 8, y: 4, tile: 109, layer: "setTiles" },
{ x: 9, y: 4, tile: 'blue', layer: 'setTiles' } { x: 9, y: 4, tile: "blue", layer: "setTiles" },
]); ]);
``` ```
@ -179,10 +182,10 @@ Load a tileset in JSON format from an url and return the id of the first tile of
You can create a tileset file in Tile Editor. You can create a tileset file in Tile Editor.
```javascript ```ts
WA.room.loadTileset("Assets/Tileset.json").then((firstId) => { WA.room.loadTileset("Assets/Tileset.json").then((firstId) => {
WA.room.setTiles([{ x: 4, y: 4, tile: firstId, layer: 'bottom' }]); WA.room.setTiles([{ x: 4, y: 4, tile: firstId, layer: "bottom" }]);
}) });
``` ```
## Embedding websites in a map ## Embedding websites in a map
@ -199,10 +202,10 @@ WA.room.website.get(objectName: string): Promise<EmbeddedWebsite>
You can get an instance of an embedded website by using the `WA.room.website.get()` method. It returns a promise of You can get an instance of an embedded website by using the `WA.room.website.get()` method. It returns a promise of
an `EmbeddedWebsite` instance. an `EmbeddedWebsite` instance.
```javascript ```ts
// Get an existing website object where 'my_website' is the name of the object (on any layer object of the map) // Get an existing website object where 'my_website' is the name of the object (on any layer object of the map)
const website = await WA.room.website.get('my_website'); const website = await WA.room.website.get("my_website");
website.url = 'https://example.com'; website.url = "https://example.com";
website.visible = true; website.visible = true;
``` ```
@ -231,7 +234,7 @@ interface CreateEmbeddedWebsiteEvent {
You can create an instance of an embedded website by using the `WA.room.website.create()` method. It returns You can create an instance of an embedded website by using the `WA.room.website.create()` method. It returns
an `EmbeddedWebsite` instance. an `EmbeddedWebsite` instance.
```javascript ```ts
// Create a new website object // Create a new website object
const website = WA.room.website.create({ const website = WA.room.website.create({
name: "my_website", name: "my_website",
@ -269,10 +272,10 @@ class EmbeddedWebsite {
visible: boolean; visible: boolean;
allow: string; allow: string;
allowApi: boolean; allowApi: boolean;
x: number; // In "game" pixels, relative to the map or player coordinates, depending on origin x: number; // In "game" pixels, relative to the map or player coordinates, depending on origin
y: number; // In "game" pixels, relative to the map or player coordinates, depending on origin y: number; // In "game" pixels, relative to the map or player coordinates, depending on origin
width: number; // In "game" pixels width: number; // In "game" pixels
height: number; // In "game" pixels height: number; // In "game" pixels
origin: "player" | "map"; origin: "player" | "map";
scale: number; scale: number;
} }
@ -282,4 +285,3 @@ When you modify a property of an `EmbeddedWebsite` instance, the iframe is autom
{.alert.alert-warning} The websites you add/edit/delete via the scripting API are only shown locally. If you want them {.alert.alert-warning} The websites you add/edit/delete via the scripting API are only shown locally. If you want them
to be displayed for every player, you can use [variables](api-start.md) to share a common state between all users. to be displayed for every player, you can use [variables](api-start.md) to share a common state between all users.

View file

@ -1463,7 +1463,6 @@ ${escapedMessage}
}); });
iframeListener.registerAnswerer("movePlayerTo", async (message) => { iframeListener.registerAnswerer("movePlayerTo", async (message) => {
// TODO: walk player to position, wait for promise to resolve
const index = this.getGameMap().getTileIndexAt(message.x, message.y); const index = this.getGameMap().getTileIndexAt(message.x, message.y);
const startTile = this.getGameMap().getTileIndexAt(this.CurrentPlayer.x, this.CurrentPlayer.y); const startTile = this.getGameMap().getTileIndexAt(this.CurrentPlayer.x, this.CurrentPlayer.y);
const path = await this.getPathfindingManager().findPath(startTile, index, true, true); const path = await this.getPathfindingManager().findPath(startTile, index, true, true);