moveTo object position
This commit is contained in:
parent
c39f23de6f
commit
fe570c9117
@ -323,6 +323,10 @@ export class GameMap {
|
|||||||
throw new Error("No possible position found");
|
throw new Error("No possible position found");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getObjectWithName(name: string): ITiledMapObject | undefined {
|
||||||
|
return this.tiledObjects.find((object) => object.name === name);
|
||||||
|
}
|
||||||
|
|
||||||
private getLayersByKey(key: number): Array<ITiledMapLayer> {
|
private getLayersByKey(key: number): Array<ITiledMapLayer> {
|
||||||
return this.flatLayers.filter((flatLayer) => flatLayer.type === "tilelayer" && flatLayer.data[key] !== 0);
|
return this.flatLayers.filter((flatLayer) => flatLayer.type === "tilelayer" && flatLayer.data[key] !== 0);
|
||||||
}
|
}
|
||||||
|
@ -568,6 +568,8 @@ export class GameScene extends DirtyScene {
|
|||||||
this.createCurrentPlayer();
|
this.createCurrentPlayer();
|
||||||
this.removeAllRemotePlayers(); //cleanup the list of remote players in case the scene was rebooted
|
this.removeAllRemotePlayers(); //cleanup the list of remote players in case the scene was rebooted
|
||||||
|
|
||||||
|
this.tryMovePlayerWithMoveToParameter();
|
||||||
|
|
||||||
this.cameraManager = new CameraManager(
|
this.cameraManager = new CameraManager(
|
||||||
this,
|
this,
|
||||||
{ x: this.Map.widthInPixels, y: this.Map.heightInPixels },
|
{ x: this.Map.widthInPixels, y: this.Map.heightInPixels },
|
||||||
@ -1460,9 +1462,9 @@ ${escapedMessage}
|
|||||||
});
|
});
|
||||||
|
|
||||||
iframeListener.registerAnswerer("movePlayerTo", async (message) => {
|
iframeListener.registerAnswerer("movePlayerTo", async (message) => {
|
||||||
const index = this.getGameMap().getTileIndexAt(message.x, message.y);
|
const startTileIndex = this.getGameMap().getTileIndexAt(this.CurrentPlayer.x, this.CurrentPlayer.y);
|
||||||
const startTile = this.getGameMap().getTileIndexAt(this.CurrentPlayer.x, this.CurrentPlayer.y);
|
const destinationTileIndex = this.getGameMap().getTileIndexAt(message.x, message.y);
|
||||||
const path = await this.getPathfindingManager().findPath(startTile, index, true, true);
|
const path = await this.getPathfindingManager().findPath(startTileIndex, destinationTileIndex, true, true);
|
||||||
path.shift();
|
path.shift();
|
||||||
if (path.length === 0) {
|
if (path.length === 0) {
|
||||||
throw new Error("no path available");
|
throw new Error("no path available");
|
||||||
@ -1626,6 +1628,31 @@ ${escapedMessage}
|
|||||||
this.MapPlayersByKey.clear();
|
this.MapPlayersByKey.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private tryMovePlayerWithMoveToParameter(): void {
|
||||||
|
const moveToParam = urlManager.getHashParameter("moveTo");
|
||||||
|
if (moveToParam) {
|
||||||
|
try {
|
||||||
|
const destinationObject = this.gameMap.getObjectWithName(moveToParam);
|
||||||
|
let endPos;
|
||||||
|
if (destinationObject) {
|
||||||
|
endPos = this.gameMap.getTileIndexAt(destinationObject.x, destinationObject.y);
|
||||||
|
} else {
|
||||||
|
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}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private getExitUrl(layer: ITiledMapLayer): string | undefined {
|
private getExitUrl(layer: ITiledMapLayer): string | undefined {
|
||||||
return this.getProperty(layer, GameMapProperties.EXIT_URL) as string | undefined;
|
return this.getProperty(layer, GameMapProperties.EXIT_URL) as string | undefined;
|
||||||
}
|
}
|
||||||
@ -1748,22 +1775,6 @@ ${escapedMessage}
|
|||||||
this.connection?.emitEmoteEvent(emoteKey);
|
this.connection?.emitEmoteEvent(emoteKey);
|
||||||
analyticsClient.launchEmote(emoteKey);
|
analyticsClient.launchEmote(emoteKey);
|
||||||
});
|
});
|
||||||
const moveToParam = urlManager.getHashParameter("moveTo");
|
|
||||||
if (moveToParam) {
|
|
||||||
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) {
|
} catch (err) {
|
||||||
if (err instanceof TextureError) {
|
if (err instanceof TextureError) {
|
||||||
gameManager.leaveGame(SelectCharacterSceneName, new SelectCharacterScene());
|
gameManager.leaveGame(SelectCharacterSceneName, new SelectCharacterScene());
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"infinite":false,
|
"infinite":false,
|
||||||
"layers":[
|
"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],
|
"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, 12, 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,
|
"height":10,
|
||||||
"id":1,
|
"id":1,
|
||||||
"name":"floor",
|
"name":"floor",
|
||||||
@ -204,6 +204,35 @@
|
|||||||
"width":92.7120717279925,
|
"width":92.7120717279925,
|
||||||
"x":233.848901257569,
|
"x":233.848901257569,
|
||||||
"y":135.845612785282
|
"y":135.845612785282
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"height":0,
|
||||||
|
"id":9,
|
||||||
|
"name":"destination",
|
||||||
|
"point":true,
|
||||||
|
"rotation":0,
|
||||||
|
"type":"",
|
||||||
|
"visible":true,
|
||||||
|
"width":0,
|
||||||
|
"x":207.918025151374,
|
||||||
|
"y":243.31625523987
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"height":45.0829063809967,
|
||||||
|
"id":10,
|
||||||
|
"name":"",
|
||||||
|
"rotation":0,
|
||||||
|
"text":
|
||||||
|
{
|
||||||
|
"halign":"center",
|
||||||
|
"text":"destination object",
|
||||||
|
"wrap":true
|
||||||
|
},
|
||||||
|
"type":"",
|
||||||
|
"visible":true,
|
||||||
|
"width":83,
|
||||||
|
"x":167.26,
|
||||||
|
"y":254.682580344667
|
||||||
}],
|
}],
|
||||||
"opacity":1,
|
"opacity":1,
|
||||||
"type":"objectgroup",
|
"type":"objectgroup",
|
||||||
@ -212,7 +241,7 @@
|
|||||||
"y":0
|
"y":0
|
||||||
}],
|
}],
|
||||||
"nextlayerid":11,
|
"nextlayerid":11,
|
||||||
"nextobjectid":9,
|
"nextobjectid":11,
|
||||||
"orientation":"orthogonal",
|
"orientation":"orthogonal",
|
||||||
"renderorder":"right-down",
|
"renderorder":"right-down",
|
||||||
"tiledversion":"1.7.2",
|
"tiledversion":"1.7.2",
|
||||||
|
Loading…
Reference in New Issue
Block a user