import type { Disposable, LostHandler, RestoreHandler, SceneLoadOptions, Scene, AssetManager, Composition, Renderer, Ticker } from '@galacean/effects-core';
import { Engine, EventEmitter } from '@galacean/effects-core';
import type { PlayerConfig, PlayerEvent } from './types';
/**
 * Galacean Effects 播放器
 */
export declare class Player extends EventEmitter<PlayerEvent<Player>> implements Disposable, LostHandler, RestoreHandler {
    readonly env: string;
    /**
     * 播放器的 canvas 对象
     */
    readonly canvas: HTMLCanvasElement;
    /**
     * 播放器的唯一标识
     */
    readonly name: string;
    /**
     * 播放器的容器元素
     */
    readonly container: HTMLElement | null;
    /**
     * 播放器使用的引擎
     */
    readonly engine: Engine;
    private readonly onError?;
    private autoPlaying;
    private resumePending;
    private disposed;
    /**
     * 是否跳过指针移动时的拾取检测, 开启后可以减少移动时的性能消耗，但会导致 pointermove 事件无法触发
     */
    get skipPointerMovePicking(): boolean;
    set skipPointerMovePicking(value: boolean);
    /**
     * 计时器
     * 手动渲染 `manualRender=true` 时不创建计时器
     */
    get ticker(): Ticker | null;
    /**
     * 播放器的渲染器对象
     */
    get renderer(): Renderer;
    get gpuCapability(): import("@galacean/effects-core").GPUCapability;
    /**
     * 当前播放的合成对象数组，请不要修改内容
     */
    private get compositions();
    private get assetManagers();
    private get assetService();
    private get event();
    private get displayAspect();
    private set displayAspect(value);
    private get displayScale();
    private set displayScale(value);
    private get offscreenMode();
    private set offscreenMode(value);
    /**
     * 播放器的像素比
     */
    private get pixelRatio();
    private set pixelRatio(value);
    /**
     * 播放器的构造函数
     * @param config
     */
    constructor(config: PlayerConfig);
    /**
     * 设置当前 Player 的播放速度
     * @param speed - 播放速度
     */
    setSpeed(speed: number): void;
    /**
     * 获取当前 Player 的播放速度
     * @returns
     */
    getSpeed(): number;
    /**
     * 根据名称查找对应的合成（可能找不到，如果有同名的合成，默认返回第一个）
     * @example
     * ``` ts
     * const composition = player.getCompositionByName('新建合成1');
     * ```
     * @param name - 目标合成名称
     */
    getCompositionByName(name: string): Composition | undefined;
    /**
     * 获取当前播放的所有合成（请不要修改返回的数组内容）
     */
    getCompositions(): Composition[];
    /**
     * Gets the array of asset managers.
     * @returns
     */
    getAssetManager(): ReadonlyArray<AssetManager>;
    /**
     * 获取当前播放的合成数量
     */
    get compositionCount(): number;
    /**
     * 是否有合成在播放
     */
    get hasPlayable(): boolean;
    /**
     * 播放器是否已暂停
     */
    get paused(): boolean | undefined;
    /**
     * 获取播放器是否可交互
     */
    get interactive(): boolean;
    /**
     * 设置播放器是否可交互
     */
    set interactive(enable: boolean);
    /**
     * 加载动画资源
     * @example
     * ``` ts
     * // 1. 加载单个合成链接并设置可选参数
     * const composition = await player.loadScene('xxx.json', { ... });
     * const composition = await player.loadScene({ url: 'xxx.json' }, { ... });
     *
     * // 2. 加载单个合成的 JSON 对象并设置可选参数
     * const composition = await player.loadScene(JSONValue, { ... });
     *
     * // 3. 加载多个合成链接或 JSON 对象
     * const [_, _, _] = await player.loadScene(['x1.json', 'x2.json', JSONValue]);
     *
     * // 4. 加载多个合成链接并各自设置可选参数
     * const [_, _] = await player.loadScene([{
     *   url: 'x1.json',
     *   options: { autoplay: false, ... },
     * }, {
     *   url: 'x2.json',
     *   options: { speed: 2, ... },
     * }, { ... }]);
     *
     * // 5. 加载多个合成链接并统一设置可选参数（共用）
     * const [_, _, _] = await player.loadScene(['x1.json', 'x2.json', ...], { ... });
     * const [_, _] = await player.loadScene(
     *   [{ url: 'x1.json' }, { url: 'x2.json' }, { ... }],
     *   {
     *     variables: {
     *       'name': 'value',
     *     },
     *     speed: 2,
     *     ...
     *    },
     * );
     *
     * // 6. 疯狂混合
     * await player.loadScene([
     *   {
     *     url: 'x1.json',
     *     options: {
     *       variables: {
     *         'name1': 'value1',
     *       },
     *       speed: 2,
     *     },
     *   },
     *   'x2.json',
     *   JSONValue,
     * ], {
     *   variables: {
     *     'name2': 'value2',
     *   },
     *   speed: 0.1,
     * });
     * ```
     * @param scene - 一个或一组 URL 或者通过 URL 请求的 JSONObject 或者 Scene 对象
     * @param options - 加载可选参数
     * @returns
     */
    loadScene(scene: Scene.LoadType, options?: SceneLoadOptions): Promise<Composition>;
    loadScene(scene: Scene.LoadType[], options?: SceneLoadOptions): Promise<Composition[]>;
    /**
     * 播放通过 player 加载好的全部合成
     */
    play(): void;
    /**
     * 跳转全部合成到指定时间后播放
     * @param time - 指定时间, 单位秒
     */
    gotoAndPlay(time: number): void;
    /**
     * 跳转全部合成到指定时间并停留
     * @param time - 指定时间, 单位秒
     */
    gotoAndStop(time: number): void;
    /**
     * 顺序播放一组还未开始播放的合成
     * @param compositions - 要播放的合成数组
     */
    playSequence(compositions: Composition[]): void;
    /**
     * 暂停播放器
     * @param options
     * @param options.offloadTexture - 是否卸载贴图纹理，减少内存
     * @returns
     */
    pause(options?: {
        offloadTexture?: boolean;
    }): void;
    /**
     * 恢复播放器
     * > 如果暂停时卸载了纹理贴图，此函数将自动请求网络重新加载纹理
     * @returns
     */
    resume(): Promise<void>;
    /**
     * player 在定时器每帧的回调
     * @param dt - 时间差，毫秒
     */
    tick(dt: number): void;
    /**
     * 调整画布的宽高比
     * @param aspect
     * @param scale
     */
    resizeToAspect(aspect: number, scale?: number): void;
    /**
     * 将播放器重新和父容器大小对齐
     */
    resize(): void;
    /**
     * 清空 canvas 的画面
     */
    clearCanvas(): void;
    /**
     * 播放器在 `webglcontextlost` 时执行的操作
     * @param e - Event
     */
    lost: (e: Event) => void;
    /**
     * 播放器在 `webglcontextrestored` 时执行的操作
     * @returns
     */
    restore: () => Promise<void>;
    /**
     * 销毁当前播放的所有 Composition
     */
    destroyCurrentCompositions(): void;
    /**
     * 销毁播放器
     */
    dispose(): void;
    private offloadTexture;
    private handleThrowError;
    private handleEmitEvent;
}
/**
 * 禁止/允许创建新的播放器，已创建的不受影响
 * @param disable - 是否禁止
 */
export declare function disableAllPlayer(disable: boolean): void;
