import { AbstractMesh } from '@babylonjs/core'; import { DeviceType, InputDevice, InputState } from "../interfaces/input.d.ts"; /** Payload for input:device:connected events */ export interface DeviceConnectedPayload { device: InputDevice; } /** Payload for input:device:disconnected events */ export interface DeviceDisconnectedPayload { device: InputDevice; } /** Payload for input:changed events */ export interface InputChangedPayload { deviceId: string; device: InputDevice; state: InputState; } /** Payload for input:device-type:changed events */ export interface DeviceTypeChangedPayload { deviceType: DeviceType; previousDeviceType: DeviceType | null; } /** Payload for level:progress events */ export interface LevelProgressPayload { levelName: string; progress: number; message?: string; } /** Payload for level:complete events */ export interface LevelCompletePayload { levelName: string; message?: string; /** The loaded level instance (available for accessing scene, entities, etc.) */ level: import('../interfaces/level.ts').LevelInstance; } /** Payload for level:error events */ export interface LevelErrorPayload { levelName: string; message: string; error: unknown; } /** Payload for level:transition:start events */ export interface LevelTransitionStartPayload { from?: string; to: string; } /** Payload for level:transition:progress events */ export interface LevelTransitionProgressPayload { stage: string; levelName: string; } /** Payload for level:transition:complete events */ export interface LevelTransitionCompletePayload { levelName: string; } /** Payload for level:transition:error events */ export interface LevelTransitionErrorPayload { from?: string; to: string; error: unknown; } /** Payload for action:* events */ export interface ActionPayload { value: boolean | number; deviceId: string; context?: string; } /** Payload for trigger:enter events */ export interface TriggerEnterPayload { trigger: string; other: AbstractMesh; } /** Payload for trigger:exit events */ export interface TriggerExitPayload { trigger: string; other: AbstractMesh; } /** Payload for entity:state-changed events */ export interface EntityStateChangedPayload { /** The ID of the entity whose state changed */ entityId: string; /** The type of the entity */ entityType: string; /** The current state (optional - may include full state or just changed parts) */ state?: object; /** Specific changes made (optional - alternative to full state) */ changes?: Record; } /** Payload for asset:progress events */ export interface AssetProgressPayload { path: string; loaded: number; total: number; } /** Payload for asset:complete events */ export interface AssetCompletePayload { paths: string[]; } /** Payload for game:paused events */ export interface GamePausedPayload { /** Optional reason for pausing */ reason?: string; } /** Payload for game:resumed events */ export interface GameResumedPayload { /** Optional reason for resuming */ reason?: string; } /** * Maps library event type strings to their payload types. * This is the source of truth for type safety of library-emitted events. * * The index signature allows this interface to satisfy Record * while still providing type safety for known event types. */ export interface LibraryEventPayloadMap { 'input:device:connected': DeviceConnectedPayload; 'input:device:disconnected': DeviceDisconnectedPayload; 'input:changed': InputChangedPayload; 'input:device-type:changed': DeviceTypeChangedPayload; 'level:progress': LevelProgressPayload; 'level:complete': LevelCompletePayload; 'level:error': LevelErrorPayload; 'level:transition:start': LevelTransitionStartPayload; 'level:transition:progress': LevelTransitionProgressPayload; 'level:transition:complete': LevelTransitionCompletePayload; 'level:transition:error': LevelTransitionErrorPayload; 'asset:progress': AssetProgressPayload; 'asset:complete': AssetCompletePayload; 'trigger:enter': TriggerEnterPayload; 'trigger:exit': TriggerExitPayload; 'entity:state-changed': EntityStateChangedPayload; 'game:paused': GamePausedPayload; 'game:resumed': GameResumedPayload; [key: string]: unknown; }