import * as Core from "@intelligentgraphics/ig.gfx.core";
import { EventEmitter } from "@intelligentgraphics/ig.utilities";
import { Session } from "@intelligentgraphics/igd.productdata";
import { PlannerManager } from "../Manager";
import { AnimationPosition, AnimationStatus, AnimationManagerOptions, AnimationDirection } from "./Base";
export interface SceneAnimationManagerEvents {
    statusChange: AnimationStatus;
    /**
     * Called when the animateability of the scene changes
     *
     * @type {boolean} wether the scene is animatable
     */
    animateabilityChange: boolean;
}
declare type SceneAnimationManagerEventEmitter = Pick<EventEmitter<SceneAnimationManagerEvents>, "on" | "off" | "once">;
/**
 * Manages animations for the whole scene
 *
 * @export
 * @interface SceneAnimationManager
 * @extends {SceneAnimationManagerEventEmitter}
 */
export interface SceneAnimationManager extends SceneAnimationManagerEventEmitter {
    setPosition(position: AnimationPosition): void;
    /**
     * Returns the latest idle position
     *
     * @returns {(AnimationPosition | "mixed")}
     */
    getPosition(): AnimationPosition | "mixed";
    getStatus(): AnimationStatus;
    getActiveOrNextAnimationDirection(): AnimationDirection;
    /**
     * Animates the whole scene
     *
     * @param {Core.Animation.AnimationParams} params
     * @param {Core.Animation.AnimatorOptions} [options]
     */
    showAnimation(params: Core.Animation.AnimationParams): void;
    /**
     * Show an animation starting from the current position of the components. Defaults to from start for differences in animation statuses
     *
     * @param {boolean} [invertAnimationAfter]
     * @param {Core.Animation.AnimatorOptions} [options]
     */
    showAnimationFromCurrentPosition(invertAnimationAfter?: boolean): void;
    pauseAnimation(): void;
    continueAnimation(): void;
    /**
     * Stops the animations. Does not reset animation position the latest idle position
     *
     */
    stopAnimation(): void;
    /**
     * Determines wether there is at least one animatable component inside the scene
     *
     * @returns {boolean}
     */
    canAnimate(): boolean;
}
/**
 * Creates an animation manager that manages animations and positions for all animatable components in the whole scene
 *
 * @param {PlannerManager} plannerManager
 * @returns {SceneAnimationManager}
 */
export declare const createSceneAnimationManager: (session: Session<import("@intelligentgraphics/igd.productdata").ApplicationStateValue, import("@intelligentgraphics/igd.productdata").NotificationPayloads<import("@intelligentgraphics/igd.productdata").ApplicationStateValue>>, plannerManager: PlannerManager, { continueAnimationsAfterUpdate, reapplyAnimationProgressAfterUpdate, }?: Partial<AnimationManagerOptions>, animatorOptions?: Core.Animation.AnimatorOptions | undefined) => SceneAnimationManager;
export {};
