import type { Scene } from "@babylonjs/core/scene.js"; import type { Node } from "@babylonjs/core/node.js"; import { type EntityRecord, type SceneDocumentData, type TransformUpdate } from "@skenora/contracts"; import type { ResourceResolver } from "@skenora/resources"; export interface RuntimeTransientParticipation { readonly picking: boolean; readonly shadows: boolean; readonly framing: boolean; readonly ground: boolean; readonly selection: boolean; } export interface RuntimeTransientEntityState { readonly id: string; readonly generation: number; readonly type: EntityRecord["type"]; readonly parentId: string | null; readonly status: "preparing" | "ready" | "failed" | "disposed"; readonly participation: RuntimeTransientParticipation; readonly diagnostic?: string; readonly transform?: TransformUpdate; } export interface RuntimeTransientEntityHandle { readonly id: string; readonly ready: Promise; despawn(): void; } export interface RuntimeTransientEntityOptions { readonly parentId?: string | null; readonly signal?: AbortSignal; readonly participation?: Partial; } interface Source { document: Readonly; resources: ResourceResolver; generation: number; } interface Ports { scene: Scene; source(): Source | null; assertWritable(): void; resolve(id: string): Node | null; subscribeClock(listener: (deltaMs: number) => void): () => void; publish(state: RuntimeTransientEntityState): void; revoke(id: string): void; } export interface RuntimeTransientLimits { readonly maxEntities?: number; readonly maxMeshes?: number; readonly maxVertices?: number; } export interface RuntimeTransientCapability { readonly limits: Required; spawn(template: Omit, options?: RuntimeTransientEntityOptions): RuntimeTransientEntityHandle; getNode(id: string): Node | null; getStates(): readonly RuntimeTransientEntityState[]; despawn(id: string): boolean; } export declare function normalizeRuntimeTransientLimits(limits?: RuntimeTransientLimits): Required; /** Bounded owned projections, never a second persistent scene document. */ export declare class RuntimeTransientEntities implements RuntimeTransientCapability { #private; readonly ports: Ports; readonly limits: Required; constructor(ports: Ports, limits?: RuntimeTransientLimits); spawn(template: Omit, options?: RuntimeTransientEntityOptions): RuntimeTransientEntityHandle; getNode(id: string): Node | null; getStates(): readonly RuntimeTransientEntityState[]; despawn(id: string): boolean; reset(): void; dispose(): void; } export {}; //# sourceMappingURL=runtime-transient-entities.d.ts.map