import { Direction, RpgMovementInput } from '@rpgjs/common'; import { RpgPlayer } from '../Player/Player'; import { normalizeServerMovementInput } from './map-input'; import { Controls } from './map-types'; type DashInput = Exclude, Direction | null>; /** * Map operations used by the input processor. */ export interface MapInputProcessorHost { getPlayer(playerId: string): RpgPlayer | undefined; getPlayers(): RpgPlayer[]; getTick(): number; getBodyPosition(playerId: string): { x: number; y: number; } | undefined; movePlayer(player: RpgPlayer, direction: Direction): Promise; dashBody(player: RpgPlayer, input: DashInput): void; stopMovement(player: RpgPlayer): void; } /** * Consumes queued client movement inputs for the players of a map. * * Inputs only update velocities; the authoritative physics step is run by the * map tick loop. A processed frame is acknowledged to the client only after the * next physics step, through `captureProcessedInputPositions()`. */ export declare class MapInputProcessor { private readonly host; private pendingAckFrames; constructor(host: MapInputProcessorHost); /** Last frame acknowledged, or waiting for acknowledgement, for a player. */ getLastAckedFrame(player: RpgPlayer): number; /** Forget the pending acknowledgement of a player (join, leave). */ forgetPlayer(playerId: string): void; /** Drop queued inputs and input tracking of a player that cannot move. */ resetPlayer(player: RpgPlayer): void; private processById; process(player: RpgPlayer, controls?: Controls): Promise<{ player: RpgPlayer; inputs: RpgMovementInput[]; }>; captureProcessedInputPositions(tick: number): void; processPendingInputsForTick(): Promise; getPendingInputCount(): number; } export {};