UNPKG

cbt-game-engine

Version:

Platform-agnostic game engine for Interactive Autism Quiz Game

96 lines (92 loc) 3.15 kB
interface GameSegment { id: number; question: string; animationFile?: string; expectedAnswer?: string; timeLimit?: number; completed: boolean; } interface GameConfig { segments: GameSegment[]; defaultTimeLimit: number; enableMicrophone: boolean; enableTextToSpeech: boolean; celebrationDuration: number; } type GameState = 'idle' | 'question' | 'listening' | 'celebrating' | 'completed'; interface GameProgress { currentSegment: number; totalSegments: number; completedSegments: number; score: number; } interface GameCallbacks { onSegmentStart?: (segment: GameSegment, progress: GameProgress) => void; onQuestionAsked?: (question: string, segment: GameSegment) => void; onListeningStart?: (timeLeft: number, segment: GameSegment) => void; onListeningTick?: (timeLeft: number, segment: GameSegment) => void; onListeningEnd?: (segment: GameSegment) => void; onCelebrationStart?: (segment: GameSegment) => void; onCelebrationEnd?: (segment: GameSegment) => void; onSegmentComplete?: (segment: GameSegment, progress: GameProgress) => void; onGameComplete?: (finalProgress: GameProgress) => void; onError?: (error: Error, context: string) => void; } interface PlatformServices { textToSpeech: { speak: (text: string, options?: any) => Promise<void>; stop: () => void; isSupported: () => boolean; }; microphone: { requestPermission: () => Promise<boolean>; startListening: () => Promise<MediaStream | null>; stopListening: (stream?: MediaStream) => void; isSupported: () => boolean; }; haptics?: { light: () => void; medium: () => void; heavy: () => void; }; analytics?: { trackEvent: (event: string, properties?: Record<string, any>) => void; }; } interface GameEngineState { gameState: GameState; currentSegment: number; timeLeft: number; progress: GameProgress; isAudioPlaying: boolean; isMicrophoneActive: boolean; error: string | null; } declare const useGameEngine: (config: GameConfig, callbacks: GameCallbacks, platformServices: PlatformServices) => { getCurrentSegment: () => GameSegment; startSegment: () => void; nextSegment: () => void; resetGame: () => void; skipSegment: () => void; canStartSegment: boolean; canNextSegment: boolean; isGameComplete: boolean; hasError: boolean; gameState: GameState; currentSegment: number; timeLeft: number; progress: GameProgress; isAudioPlaying: boolean; isMicrophoneActive: boolean; error: string | null; }; declare const createDefaultConfig: () => GameConfig; declare const createSegment: (id: number, question: string, animationFile?: string, timeLimit?: number) => { id: number; question: string; animationFile: string | undefined; completed: boolean; timeLimit: number | undefined; }; export { createDefaultConfig, createSegment, useGameEngine }; export type { GameCallbacks, GameConfig, GameEngineState, GameProgress, GameSegment, GameState, PlatformServices };