import type { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js"; import type { Node } from "@babylonjs/core/node.js"; import { type MaterialAnimatedProperty, type SceneAnimationCancellationReason, type SceneAnimationTrackState, type SceneAnimationTrackV1, type SceneDocumentData } from "@skenora/contracts"; import { SceneAnimationTrackController, type SceneAnimationTrackBinding } from "../systems/scene-animation-track-controller.js"; import type { AnimationPropertyOwners } from "../systems/animation-property-owners.js"; import type { RuntimeClock } from "../systems/runtime-clock.js"; import type { ParticleCloudProjectionCapability } from "./particle-capability.js"; interface ProjectionPorts { cloud?(entityId: string): ParticleCloudProjectionCapability | null; document(): Readonly | null; generation(): number; assertWritable(kind: "entity" | "material"): void; node(entityId: string): Node | null; materials(materialId: string): readonly PBRMaterial[]; prepareMaterialWrite(materialId: string, property: MaterialAnimatedProperty, value: unknown): () => void; prepareProgramParameter?(materialId: string, parameter: string, value: unknown): () => void; restoreMaterial(materialId: string, document: Readonly): void; } /** Lazy projection adapter. The document stays session-owned; poses are temporary. */ export declare class SceneAnimationProjection { #private; readonly owners: AnimationPropertyOwners; readonly ports: ProjectionPorts; readonly controller: SceneAnimationTrackController; constructor(clock: RuntimeClock, owners: AnimationPropertyOwners, ports: ProjectionPorts, onState: (state: SceneAnimationTrackState) => void); hasTouchedEntity(id: string): boolean; forgetTarget(kind: "entity" | "material", id: string): void; cancelMaterials(): void; /** Includes completed/stopped tracks, using the latest authoritative values. */ restoreTouched(document?: Readonly | null): void; reset(reason: SceneAnimationCancellationReason): void; dispose(): void; /** Clips reuse the exact target adapter and preview touched-target ownership. */ prepareTrack(track: Readonly): SceneAnimationTrackBinding; } export {}; //# sourceMappingURL=scene-animation-projection.d.ts.map