import type { SkeletonData, TextureAtlas } from '@esotericsoftware/spine-core';
import { AnimationState } from '@esotericsoftware/spine-core';
import type { BinaryAsset, BoundingBoxTriangle, Engine, HitTestTriangleParams, Maskable, Renderer, Texture } from '@galacean/effects';
import { MaskMode, RendererComponent, spec, MaskProcessor } from '@galacean/effects';
export interface BoundsData {
    x: number;
    y: number;
    width: number;
    height: number;
}
export interface SpineBaseData {
    atlas: TextureAtlas;
    skeletonData: SkeletonData;
}
export interface SpineResource {
    atlas: {
        bins: BinaryAsset;
        source: [start: number, length?: number];
    };
    skeleton: {
        bins: BinaryAsset;
        source: [start: number, length?: number];
    };
    images: Texture[];
    skeletonType: spec.skeletonFileType;
    cache?: SpineBaseData;
    editorResourceID?: string;
}
export interface SpineDataCache extends SpineBaseData {
    skinList?: string[];
    animationList?: string[];
    editorResourceID?: string;
}
/**
 * Spine 组件
 * @since 2.0.0
 */
export declare class SpineComponent extends RendererComponent implements Maskable {
    startSize: number;
    /**
     * 根据相机计算的缩放比例
     */
    scaleFactor: number;
    /**
     * 大小计算规则：
     * 1 : 相机逆投影 + 固定画布大小
     * 0 ：除以包围盒大小
     */
    resizeRule: number;
    /**
     * 当前骨架对应的皮肤列表
     */
    skinList: string[];
    /**
     * 当前骨架对应的动画列表
     */
    animationList: string[];
    /**
     * png 是否预乘 alpha
     */
    pma: boolean;
    /**
     * renderer 和 mask 数据
     */
    rendererOptions: Pick<spec.SpineComponent, 'renderer'> & {
        maskMode: MaskMode;
        mask: number;
    };
    options: spec.PluginSpineOption;
    resource: SpineResource;
    cache: SpineDataCache;
    readonly maskManager: MaskProcessor;
    private content;
    private skeleton;
    private state;
    private animationStateData;
    private activeAnimation;
    private skeletonData;
    /**
     * aabb 包围盒与 skeleton 原点的距离
     */
    private offset;
    /**
     * aabb 包围盒的宽度与高度
     */
    private size;
    constructor(engine: Engine);
    fromData(data: spec.SpineComponent): void;
    onAwake(): void;
    onUpdate(dt: number): void;
    render(renderer: Renderer): void;
    drawStencilMask(renderer: Renderer): void;
    onDestroy(): void;
    private initContent;
    /**
     * 返回当前 AABB 包围盒对应的三角形顶点数组
     * @returns
     */
    getBoundingBox(): BoundingBoxTriangle;
    getHitTestParams(force?: boolean): HitTestTriangleParams | void;
    /**
     * 设置单个动画
     * @param animation - 动画名
     * @param speed - 播放速度
     */
    setAnimation(animation: string, speed?: number): void;
    /**
     * 设置播放一组动画
     * @param animationList - 动画名列表
     * @param speed - 播放速度
     */
    setAnimationList(animationList: string[], speed?: number): void;
    /**
     * 设置播放一组动画，循环播放最后一个
     * @param animationList - 动画名列表
     * @param speed - 播放速度
     * @since 1.6.0
     */
    setAnimationListLoopEnd(animationList: string[], speed?: number): void;
    /**
     * 设置 Spine 播放的速度
     * @param speed - 速度
     */
    setSpeed(speed: number): void;
    /**
     * 获取 Spine 播放的速度
     * @returns
     */
    getSpeed(): number;
    /**
     * 获取正在播放的动作列表
     * @returns
     */
    getActiveAnimation(): string[];
    /**
     * 获取当前 Spine 中的 AnimationState
     * @returns
     * @since 1.6.0
     */
    getAnimationState(): AnimationState;
    /**
     * 设置指定动画之间的融合时间，请在 `player.play` 之前进行设置
     * @param fromName - 淡出动作
     * @param toName - 淡入动作
     * @param duration - 融合时间
     */
    setMixDuration(fromName: string, toName: string, duration: number): void;
    /**
     * 修改所有动作之间的融合时间，请在 `player.play` 之前进行设置
     * @param mixDuration - 融合时间
     */
    setDefaultMixDuration(mixDuration: number): void;
    /**
     * 动画循环时，移除最后一个动作切换到第一个动作的融合效果，请在 `player.play` 之前进行设置
     */
    deleteMixForLoop(): void;
    /**
     * 设置皮肤
     * @param skin - 要设置的皮肤
     */
    setSkin(skin: string): void;
    resize(): void;
    convertSizeToOldRule(): number;
    getBounds(): BoundsData | undefined;
}
