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 Parameter | Default type |
|---|---|
D | unknown |
B | unknown |
Constructors ​
Constructor ​
new Room<D, B>(options): Room<D, B>;Defined in: src/net/Room.ts:110
Parameters ​
| Parameter | Type |
|---|---|
options | RoomOptions<D, B> |
Returns ​
Room<D, B>
Properties ​
bodies ​
readonly bodies: Map<number, RoomBody<B>>;Defined in: src/net/Room.ts:96
The bodies the server moves (addBody).
history ​
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 ​
readonly players: Map<number, RoomPlayer<D>>;Defined in: src/net/Room.ts:94
rewindMs ​
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 ​
tick: number = 0;Defined in: src/net/Room.ts:97
Methods ​
addBody() ​
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 ​
| Parameter | Type |
|---|---|
data | B |
x | number |
y | number |
id? | number |
Returns ​
RoomBody<B>
input() ​
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 ​
| Parameter | Type |
|---|---|
id | number |
seq | number |
steps | readonly InputStep[] |
Returns ​
boolean
join() ​
join(id, data): RoomPlayer<D>;Defined in: src/net/Room.ts:122
Parameters ​
| Parameter | Type |
|---|---|
id | number |
data | D |
Returns ​
RoomPlayer<D>
leave() ​
leave(id): void;Defined in: src/net/Room.ts:146
Parameters ​
| Parameter | Type |
|---|---|
id | number |
Returns ​
void
place() ​
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 ​
| Parameter | Type |
|---|---|
id | number |
x | number |
y | number |
Returns ​
void
record() ​
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 ​
| Parameter | Type |
|---|---|
time | number |
Returns ​
void
removeBody() ​
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 ​
| Parameter | Type |
|---|---|
id | number |
Returns ​
void
snapshotFor() ​
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 ​
| Parameter | Type |
|---|---|
id | number |
time | number |
Returns ​
Snapshot | null
step() ​
step(): void;Defined in: src/net/Room.ts:228
One simulation step for everyone.
Returns ​
void