/** * TraitContextFactory * * Creates TraitContext objects backed by platform-provided APIs. * This is the dependency-injection layer that connects HoloScript's 121 trait * handlers to real platform services (audio, physics, haptics, accessibility, etc.) * * Without this factory, trait handlers receive no-op context and do nothing. * With it, every trait handler in @holoscript/core actually executes against * real platform services. * * Consuming platforms (e.g., Hololand, custom engines) implement the Provider * interfaces and pass them to createTraitContextFactory(). * * @module TraitContextFactory */ import type { TraitContext, ARSessionPose, RaycastHit } from '@holoscript/core'; import type { VRHand, Vector3 } from '@holoscript/core'; /** Implemented by platform physics engine */ export interface PhysicsProvider { applyVelocity(nodeId: string, velocity: Vector3): void; applyAngularVelocity(nodeId: string, angularVelocity: Vector3): void; setKinematic(nodeId: string, kinematic: boolean): void; raycast(origin: Vector3, direction: Vector3, maxDistance: number): RaycastHit | null; getBodyPosition?(nodeId: string): Vector3 | null; getBodyVelocity?(nodeId: string): Vector3 | null; } /** Implemented by platform spatial audio engine */ export interface AudioProvider { playSound(source: string, options?: { position?: Vector3; volume?: number; spatial?: boolean; }): void; updateSpatialSource?(nodeId: string, options: { hrtfProfile?: string; occlusion?: number; reverbWet?: number; }): void; registerAmbisonicSource?(nodeId: string, order: number): void; setAudioPortal?(portalId: string, targetZone: string, openingSize: number): void; updateAudioMaterial?(nodeId: string, absorption: number, reflection: number): void; } /** Implemented by platform haptic engine */ export interface HapticsProvider { pulse(hand: 'left' | 'right', intensity: number, duration?: number): void; rumble(hand: 'left' | 'right', intensity: number): void; } /** Implemented by platform accessibility manager */ export interface AccessibilityProvider { announce(text: string): void; setScreenReaderFocus(nodeId: string): void; setAltText(nodeId: string, text: string): void; setHighContrast(enabled: boolean): void; } /** Implemented by WebXR session or platform gesture system */ export interface VRProvider { getLeftHand(): VRHand | null; getRightHand(): VRHand | null; getHeadsetPosition(): Vector3; getHeadsetRotation(): Vector3; getPointerRay(hand: 'left' | 'right'): { origin: Vector3; direction: Vector3; } | null; getDominantHand(): VRHand | null; } /** Implemented by platform network layer for networked traits */ export interface NetworkProvider { broadcastState(nodeId: string, state: Record): void; requestAuthority(nodeId: string): boolean; onRemoteUpdate(nodeId: string, callback: (state: Record) => void): void; } /** Implemented by platform renderer for volumetric/GPU traits */ export interface RendererProvider { createGaussianSplat(nodeId: string, config: Record): void; createPointCloud(nodeId: string, config: Record): void; dispatchCompute(nodeId: string, shader: string, workgroups: number[]): void; destroyRenderable(nodeId: string): void; } /** Implemented by WebXR, ARCore, ARKit, or RealityKit session adapters */ export interface ARSessionProvider { readonly available: boolean; getPose(nodeId?: string): ARSessionPose | null; getAnchor?(anchorId: string): ARSessionPose | null; } export interface TraitContextFactoryConfig { physics?: PhysicsProvider; audio?: AudioProvider; haptics?: HapticsProvider; accessibility?: AccessibilityProvider; vr?: VRProvider; network?: NetworkProvider; renderer?: RendererProvider; arSession?: ARSessionProvider; } export declare class TraitContextFactory { private physicsProvider; private audioProvider; private hapticsProvider; private accessibilityProvider; private vrProvider; private networkProvider; private rendererProvider; private arSessionProvider; private scaleMagnitude; private globalState; private eventListeners; constructor(config?: TraitContextFactoryConfig); setPhysicsProvider(provider: PhysicsProvider): void; setAudioProvider(provider: AudioProvider): void; setHapticsProvider(provider: HapticsProvider): void; setAccessibilityProvider(provider: AccessibilityProvider): void; setVRProvider(provider: VRProvider): void; setNetworkProvider(provider: NetworkProvider): void; setRendererProvider(provider: RendererProvider): void; setARSessionProvider(provider: ARSessionProvider): void; on(event: string, handler: (payload: unknown) => void): void; off(event: string, handler: (payload: unknown) => void): void; private emit; /** * Build a TraitContext backed by real providers. * Pass this to VRTraitRegistry.attachTrait / updateTrait / handleEvent. */ createContext(): TraitContext; getNetworkProvider(): NetworkProvider | undefined; getRendererProvider(): RendererProvider | undefined; dispose(): void; } export declare function createTraitContextFactory(config?: TraitContextFactoryConfig): TraitContextFactory; //# sourceMappingURL=TraitContextFactory.d.ts.map