import { PolyScene } from '../PolyScene';
import { CoreGraphNode } from '../../../core/graph/CoreGraphNode';
export declare const DESIRED_FPS = 60;
export type onTimeTickHook = (delta: number) => void;
export type onPlayingStateChangeCallback = () => void;
export interface TimeControllerUpdateTimeOptions {
    updateClockDelta?: boolean;
}
export declare const TIME_CONTROLLER_UPDATE_TIME_OPTIONS_DEFAULT: TimeControllerUpdateTimeOptions;
type onTimeTickCallbacksMap = Map<string, onTimeTickHook>;
export declare class TimeController {
    private scene;
    static START_FRAME: Readonly<number>;
    private _frame;
    private _timeUniform;
    private _timeDeltaUniform;
    private _graphNode;
    private _realtimeState;
    private _maxFrame;
    private _maxFrameLocked;
    private _playing;
    private _clock;
    constructor(scene: PolyScene);
    get graphNode(): CoreGraphNode;
    dispose(): void;
    updateClockDelta(): number;
    delta(): number;
    setDelta(delta: number): number;
    frame(): number;
    timeUniform(): import("@vue/reactivity").Ref<number>;
    timeDeltaUniform(): import("@vue/reactivity").Ref<number>;
    time(): number;
    maxFrame(): number;
    maxFrameLocked(): boolean;
    realtimeState(): boolean;
    setMaxFrame(maxFrame: number): void;
    setMaxFrameLocked(state: boolean): void;
    setRealtimeState(state: boolean): void;
    setTime(time: number, updateFrame?: boolean): void;
    setFrame(frame: number, updateTime?: boolean): void;
    setFrameToStart(): void;
    incrementTimeIfPlaying(options?: TimeControllerUpdateTimeOptions): void;
    incrementTime(options?: TimeControllerUpdateTimeOptions): void;
    private _ensureFrameWithinBounds;
    playing(): boolean;
    pause(): void;
    play(): void;
    togglePlayPause(): void;
    private _playAllowedWithoutAllNodesCooked;
    forbidPlayUntilAllNodesCooked(): void;
    private _onBeforeTickCallbacksMap;
    private _onAfterTickCallbacksMap;
    private _onPlayingStateChangeCallbacksMap;
    private _onBeforeTickCallbacks;
    private _onAfterTickCallbacks;
    private _onPlayingStateChangeCallbacks;
    registerOnBeforeTick(callbackName: string, callback: onTimeTickHook): void;
    unRegisterOnBeforeTick(callbackName: string): void;
    registeredBeforeTickCallbacks(): Map<any, any>;
    hasBeforeTickCallback(callbackName: string): boolean;
    registerOnAfterTick(callbackName: string, callback: onTimeTickHook): void;
    unRegisterOnAfterTick(callbackName: string): void;
    registeredAfterTickCallbacks(): onTimeTickCallbacksMap;
    hasAfterTickCallback(callbackName: string): boolean;
    onPlayingStateChange(callback: onPlayingStateChangeCallback): void;
    removeOnPlayingStateChange(callback: onPlayingStateChangeCallback): void;
    private _updateOnPlayingStateChangeCallbacks;
    private _registerCallback;
    private _unregisterCallback;
    private _updateCallbacks;
}
export {};
