Skip to content

1681-engine / index / Room

Class: Room<D, B> ​

Defined in: src/net/Room.ts:93

An authoritative room for a server: players send input steps, the room applies them with the same stepMover the clients predict with, and builds each player a snapshot of everyone (with their own body whole, so their prediction can rewind to it). Transport-free: wire input, step and snapshotFor to any socket library.

Every step a player sends is applied once, in order; a client cannot move faster by sending more (the queue is capped and drained at most maxStepsPerTick a tick), and nonsense input is refused and counted.

Type Parameters ​

Type ParameterDefault type
Dunknown
Bunknown

Constructors ​

Constructor ​

ts
new Room<D, B>(options): Room<D, B>;

Defined in: src/net/Room.ts:110

Parameters ​

ParameterType
optionsRoomOptions<D, B>

Returns ​

Room<D, B>

Properties ​

bodies ​

ts
readonly bodies: Map<number, RoomBody<B>>;

Defined in: src/net/Room.ts:96

The bodies the server moves (addBody).


history ​

ts
readonly history: LagCompensator | null;

Defined in: src/net/Room.ts:99

Past positions for judging shots against what a client saw, when the room was made with rewindMs.


players ​

ts
readonly players: Map<number, RoomPlayer<D>>;

Defined in: src/net/Room.ts:94


rewindMs ​

ts
readonly rewindMs: number;

Defined in: src/net/Room.ts:101

How far back a client's claimed view time is honoured (rewindMs, 0 when off).


tick ​

ts
tick: number = 0;

Defined in: src/net/Room.ts:97

Methods ​

addBody() ​

ts
addBody(
   data, 
   x, 
   y, 
   id?
): RoomBody<B>;

Defined in: src/net/Room.ts:168

Adds a body the server moves, at (x, y), with the game's data (what players are told it looks like). Its id is id, or the next from BODY_ID_BASE up; an id a player or body has is refused.

Parameters ​

ParameterType
dataB
xnumber
ynumber
id?number

Returns ​

RoomBody<B>


input() ​

ts
input(
   id, 
   seq, 
   steps
): boolean;

Defined in: src/net/Room.ts:193

Input steps seq, seq + 1, … from a player. Steps already received are skipped (a resend), any step with numbers no client sends refuses the whole message, and steps past a full queue are dropped. Returns false when something was refused.

Parameters ​

ParameterType
idnumber
seqnumber
stepsreadonly InputStep[]

Returns ​

boolean


join() ​

ts
join(id, data): RoomPlayer<D>;

Defined in: src/net/Room.ts:122

Parameters ​

ParameterType
idnumber
dataD

Returns ​

RoomPlayer<D>


leave() ​

ts
leave(id): void;

Defined in: src/net/Room.ts:146

Parameters ​

ParameterType
idnumber

Returns ​

void


place() ​

ts
place(
   id, 
   x, 
   y
): void;

Defined in: src/net/Room.ts:249

Moves a player by hand (a teleport, a respawn), and files it in the interest grid at once. Writing mover.x/y directly also works; the room then finds it at its new place from the next step.

Parameters ​

ParameterType
idnumber
xnumber
ynumber

Returns ​

void


record() ​

ts
record(time): void;

Defined in: src/net/Room.ts:157

Records where every body is now, at server time time, into history; RoomHost calls it as each round of snapshots goes out, so the history holds exactly the positions clients interpolate between.

Parameters ​

ParameterType
timenumber

Returns ​

void


removeBody() ​

ts
removeBody(id): void;

Defined in: src/net/Room.ts:182

Takes a body out: players who saw it get it in rm with their next snapshot.

Parameters ​

ParameterType
idnumber

Returns ​

void


snapshotFor() ​

ts
snapshotFor(id, time): Snapshot | null;

Defined in: src/net/Room.ts:263

The snapshot player id should get now. time is the server's wall clock (ms).

Parameters ​

ParameterType
idnumber
timenumber

Returns ​

Snapshot | null


step() ​

ts
step(): void;

Defined in: src/net/Room.ts:228

One simulation step for everyone.

Returns ​

void

Released under the MIT License.