/// import { IHintPlayer } from "./Hint"; export type ApplicationFeatures = { captions?: boolean, captionsStyles?: boolean, sound?: boolean, vo?: boolean, music?: boolean, sfx?: boolean, soundVolume?: boolean, musicVolume?: boolean, voVolume?: boolean, sfxVolume?: boolean, pointerSize?: boolean, controlSensitivity?: boolean, buttonSize?: boolean, removableLayers?: boolean, hudPosition?: boolean, hitAreaScale?: boolean, dragThresholdScale?: boolean, health?: boolean, objectCount?: boolean, completionPercentage?: boolean, speedScale?: boolean, timersScale?: boolean, inputCount?: boolean keyBinding?: boolean, colorVision?: boolean, fullScreen?: boolean, }; export type CaptionStyle = { color: string, edge: string, font:string, background:string, size:string, align:string, value?:string } export type KeyBinding = { [key:string]: string } export type ApplicationConfig = { features?: ApplicationFeatures, hintPlayer?: IHintPlayer } export class Application { constructor(config: ApplicationConfig); validateListeners(): void; state: { ready: Property, pause: Property, captionsMuted: Property, captionsStyles: Property, playOptions: Property, soundVolume: Property, musicVolume: Property, voVolume: Property, sfxVolume: Property, pointerSize: Property, controlSensitivity: Property, buttonSize: Property, removableLayers: Property, hudPosition: Property, hitAreaScale: Property, dragThresholdScale: Property, health: Property, objectCount: Property, completionPercentage: Property, speedScale: Property, timersScale: Property, inputCount: Property keyBinding: Property, colorVision: Property, fullScreen: Property, [key:string]: Property } stateDefaults: { pause: boolean, captionsMuted: boolean, captionsStyles: { color:string, edge:string, font:string, background:string, size:string, align:string }, soundVolume: number, musicVolume: number, voVolume: number, sfxVolume: number, pointerSize: number, controlSensitivity: number, buttonSize: number, removableLayers: number, hudPosition: string, hitAreaScale: number, dragThresholdScale: number, health: number, objectCount: number, completionPercentage: number, speedScale: number, timersScale: number, inputCount: number, keyBinding: object, colorVision: string, fullScreen: boolean, } setStateDefaults(): void; hints: IHintPlayer; features: ApplicationFeatures; container: BellhopIframe.Bellhop; setupPlugins(): Promise; getPlugin(name: string): ApplicationPlugin | undefined static _plugins: ApplicationPlugin[]; static getPlugin(name: string): ApplicationPlugin | undefined static uses(plugin: ApplicationPlugin): void } export interface ApplicationPluginOptions { name: string; } export class ApplicationPlugin { constructor(options: ApplicationPluginOptions) name: string; start(app: Application): void; preload(app: Application): Promise; init(app: Application): void; } export type PropertyChangeListener = (value: T, previousValue: T) => void; export class Property { constructor(initialValue: T, alwaysNotify?: boolean); private _value: T; private listeners: PropertyChangeListener[]; value: T; notifyChange(): void; subscribe(callback: PropertyChangeListener): void; unsubscribe(callback: PropertyChangeListener): void; hasListeners: boolean; } export class UserData { static read(name:string): Promise; static write(name:string, value:any):Promise; static delete(name:string): Promise; } export class DateUtil { static isInSeason(startDate: string | Date, endDate: string | Date): boolean; }