summaryrefslogtreecommitdiff
path: root/client/src/akkamon/render/engine/RemotePlayerEngine.ts
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2021-07-23 13:03:19 +0200
committerMike Vink <mike1994vink@gmail.com>2021-07-23 13:03:19 +0200
commiteaff86546eca516d51c27eb9d63ea33a96576e90 (patch)
tree6af16df4b45b2944c41adf865905240da75612c7 /client/src/akkamon/render/engine/RemotePlayerEngine.ts
parent0148ea0de6aa06306fd973694e313b98a777c136 (diff)
info(): moved a bunch of files
Diffstat (limited to 'client/src/akkamon/render/engine/RemotePlayerEngine.ts')
-rw-r--r--client/src/akkamon/render/engine/RemotePlayerEngine.ts84
1 files changed, 84 insertions, 0 deletions
diff --git a/client/src/akkamon/render/engine/RemotePlayerEngine.ts b/client/src/akkamon/render/engine/RemotePlayerEngine.ts
new file mode 100644
index 0000000..5d85f24
--- /dev/null
+++ b/client/src/akkamon/render/engine/RemotePlayerEngine.ts
@@ -0,0 +1,84 @@
+import Phaser from 'phaser';
+import type AkkamonStartScene from './scene';
+import { akkamonClient } from './app';
+import type { Direction } from './Direction';
+import {
+ Queue,
+ RemotePlayerSprite
+} from './RemotePlayerSprite';
+import type {
+ RemoteMovementQueues
+} from './events';
+
+export class RemotePlayerEngine {
+
+ private scene: AkkamonStartScene;
+
+ private trainerIdToRemotePlayerSprite: Map<string, RemotePlayerSprite> = new Map();
+
+ constructor(scene: AkkamonStartScene) {
+ this.scene = scene;
+ }
+
+ push(remoteMovementQueues: RemoteMovementQueues) {
+ this.updateMembers(remoteMovementQueues);
+ this.pushMovesToSprites(remoteMovementQueues);
+ }
+
+ pushMovesToSprites(remoteMovementQueues: RemoteMovementQueues) {
+ this.trainerIdToRemotePlayerSprite.forEach((remoteSprite: RemotePlayerSprite, key: string) => {
+ remoteSprite.push(remoteMovementQueues[key].value);
+ });
+ }
+
+ update(delta: number): void {
+ this.trainerIdToRemotePlayerSprite.forEach((remoteSprite: RemotePlayerSprite, key: string) => {
+ if (remoteSprite.isMoving()) {
+ console.log("remote player currently walking");
+ remoteSprite.updatePixelPosition(delta);
+ } else if (remoteSprite.hasMovesLeft()) {
+ console.log("remote player starts moving");
+ remoteSprite.startMoving();
+ }
+ });
+ }
+
+ updateMembers(newRemoteMovementQueues: RemoteMovementQueues) {
+ const traineridToQueueValue = newRemoteMovementQueues;
+
+ Object.keys(newRemoteMovementQueues).forEach((key: string) => {
+
+ var moveQueue = traineridToQueueValue[key].value;
+ if (moveQueue !== undefined) {
+
+ // console.log("-> key: " + key + " has position " + newTilePos.x + ", " + newTilePos.y);
+
+ if (!this.trainerIdToRemotePlayerSprite.has(key)) {
+ // console.log("adding remote player sprite for " + key);
+ this.trainerIdToRemotePlayerSprite.set(key,
+ new RemotePlayerSprite({
+ scene: this.scene,
+ tilePos: new Phaser.Math.Vector2(this.scene.spawnPointTilePos!),
+ texture: this.scene.textures.get("atlas"),
+ frame: "misa-front",
+ moveQueue: new Queue(moveQueue)
+ }
+ ));
+ } else {
+ // console.log("key: " + key + " already had a sprite!");
+ }
+ }
+
+ });
+
+ this.trainerIdToRemotePlayerSprite.forEach((value: RemotePlayerSprite, key: string) => {
+ if (!(key in newRemoteMovementQueues)) {
+ // console.log("removing remote player sprite for " + key);
+ this.trainerIdToRemotePlayerSprite.get(key)!.destroy();
+ this.trainerIdToRemotePlayerSprite.delete(key);
+ } else {
+ // console.log("Player " + key + " was not removed!");
+ }
+ });
+ }
+}