import { CurveDefinition } from './api/Curve';
import { BytecodeStateType } from './api/HaikuBytecode';
import HaikuClock from './HaikuClock';
export interface StateTransitionParameters {
    curve: CurveDefinition;
    duration: number;
    queue?: boolean;
}
export interface StateValues {
    [stateName: string]: BytecodeStateType;
}
export interface RunningStateTransition {
    transitionStart: StateValues;
    transitionEnd: StateValues;
    transitionParameter: StateTransitionParameters;
    startTime: number;
    endTime: number;
}
export default class StateTransitionManager {
    private readonly states;
    private readonly clock;
    private transitions;
    constructor(states: StateValues, clock: HaikuClock);
    /**
     * Create a new state transition.
     */
    setState(transitionEnd: StateValues, parameter?: StateTransitionParameters): void;
    private setStates;
    private isExpired;
    /**
     * Should be called on every tick. It cleans expired state transitions
     * and execute interpolation of running state transitions.
     */
    tickStateTransitions(): void;
    /**
     * Delete every running transition
     */
    deleteAllStateTransitions(): void;
    readonly numQueuedTransitions: number;
}
