blob: 5d85f24abeb644a11873eb894dcbdceb1b7bdff5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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!");
}
});
}
}
|