/** * This class is in charge of computing the position of all players. * Player movement is delayed by 200ms so position depends on ticks. */ import type { HasPlayerMovedEvent } from "../../Api/Events/HasPlayerMovedEvent"; import type { PlayerMovement } from "./PlayerMovement"; export class PlayersPositionInterpolator { playerMovements: Map = new Map(); updatePlayerPosition(userId: number, playerMovement: PlayerMovement): void { this.playerMovements.set(userId, playerMovement); } removePlayer(userId: number): void { this.playerMovements.delete(userId); } getUpdatedPositions(tick: number): Map { const positions = new Map(); this.playerMovements.forEach((playerMovement: PlayerMovement, userId: number) => { if (playerMovement.isOutdated(tick)) { //console.log("outdated") this.playerMovements.delete(userId); } //console.log("moving") positions.set(userId, playerMovement.getPosition(tick)); }); return positions; } }