@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
57 lines • 1.92 kB
TypeScript
/**
* ECS system that owns the per-entity replication lifecycle.
*
* Responsibilities:
* - When an entity gains a {@link NetworkIdentity}, allocate a `network_id`
* in the peer's slot table (or honour an explicit pre-set one — used by
* `Snapshotter` and incoming-packet flows).
* - When an entity loses its `NetworkIdentity` (or is destroyed), free the
* slot.
*
* **Not** responsible for the per-tick `begin_tick` / `end_tick` cadence —
* the engine's `EntityManager` doesn't expose pre/post-simulate hooks, so the
* application code wraps its `engine.simulate(dt)` call:
*
* ```js
* peer.begin_tick(frame_number);
* engine.simulate(dt);
* peer.end_tick();
* ```
*
* Add this system to the engine once per `NetworkPeer` instance:
*
* ```js
* const peer = new NetworkPeer({ ... });
* const network_system = new NetworkSystem(peer);
* engine.entityManager.addSystem(network_system);
* ```
*
* @author Alex Goldring
* @copyright Company Named Limited (c) 2025
*/
export class NetworkSystem extends System<any, any, any, any, any> {
/**
* @param {NetworkPeer} peer
*/
constructor(peer: NetworkPeer);
dependencies: (typeof NetworkIdentity)[];
components_used: ResourceAccessSpecification<typeof NetworkIdentity>[];
/**
* @type {NetworkPeer}
*/
peer: NetworkPeer;
/**
* @param {NetworkIdentity} identity
* @param {number} entity
*/
link(identity: NetworkIdentity, entity: number): void;
/**
* @param {NetworkIdentity} identity
* @param {number} entity
*/
unlink(identity: NetworkIdentity, entity: number): void;
}
import { System } from "../../ecs/System.js";
import { NetworkIdentity } from "./components/NetworkIdentity.js";
import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
//# sourceMappingURL=NetworkSystem.d.ts.map