{"version":3,"file":"AnimationStateData.mjs","sources":["../../src/core/AnimationStateData.ts"],"sourcesContent":["import type { SkeletonData } from './SkeletonData';\nimport type { IAnimationStateData, StringMap } from '@pixi-spine/base';\nimport type { Animation } from './Animation';\n\n/** Stores mix (crossfade) durations to be applied when {@link AnimationState} animations are changed.\n * @public\n * */\nexport class AnimationStateData implements IAnimationStateData<SkeletonData, Animation> {\n    /** The SkeletonData to look up animations when they are specified by name. */\n    skeletonData: SkeletonData;\n\n    animationToMixTime: StringMap<number> = {};\n\n    /** The mix duration to use when no mix duration has been defined between two animations. */\n    defaultMix = 0;\n\n    constructor(skeletonData: SkeletonData) {\n        if (!skeletonData) throw new Error('skeletonData cannot be null.');\n        this.skeletonData = skeletonData;\n    }\n\n    /** Sets a mix duration by animation name.\n     *\n     * See {@link #setMixWith()}. */\n    setMix(fromName: string, toName: string, duration: number) {\n        const from = this.skeletonData.findAnimation(fromName);\n\n        if (!from) throw new Error(`Animation not found: ${fromName}`);\n        const to = this.skeletonData.findAnimation(toName);\n\n        if (!to) throw new Error(`Animation not found: ${toName}`);\n        this.setMixWith(from, to, duration);\n    }\n\n    /** Sets the mix duration when changing from the specified animation to the other.\n     *\n     * See {@link TrackEntry#mixDuration}. */\n    setMixWith(from: Animation, to: Animation, duration: number) {\n        if (!from) throw new Error('from cannot be null.');\n        if (!to) throw new Error('to cannot be null.');\n        const key = `${from.name}.${to.name}`;\n\n        this.animationToMixTime[key] = duration;\n    }\n\n    /** Returns the mix duration to use when changing from the specified animation to the other, or the {@link #defaultMix} if\n     * no mix duration has been set. */\n    getMix(from: Animation, to: Animation) {\n        const key = `${from.name}.${to.name}`;\n        const value = this.animationToMixTime[key];\n\n        return value === undefined ? this.defaultMix : value;\n    }\n}\n"],"names":[],"mappings":"AAOO,MAAM,kBAA2E,CAAA;AAAA,EASpF,YAAY,YAA4B,EAAA;AALxC,IAAA,IAAA,CAAA,kBAAA,GAAwC,EAAC,CAAA;AAGzC;AAAA,IAAa,IAAA,CAAA,UAAA,GAAA,CAAA,CAAA;AAGT,IAAA,IAAI,CAAC,YAAA;AAAc,MAAM,MAAA,IAAI,MAAM,8BAA8B,CAAA,CAAA;AACjE,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AAAA,GACxB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,CAAO,QAAkB,EAAA,MAAA,EAAgB,QAAkB,EAAA;AACvD,IAAA,MAAM,IAAO,GAAA,IAAA,CAAK,YAAa,CAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;AAErD,IAAA,IAAI,CAAC,IAAA;AAAM,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,qBAAA,EAAwB,QAAU,CAAA,CAAA,CAAA,CAAA;AAC7D,IAAA,MAAM,EAAK,GAAA,IAAA,CAAK,YAAa,CAAA,aAAA,CAAc,MAAM,CAAA,CAAA;AAEjD,IAAA,IAAI,CAAC,EAAA;AAAI,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,qBAAA,EAAwB,MAAQ,CAAA,CAAA,CAAA,CAAA;AACzD,IAAK,IAAA,CAAA,UAAA,CAAW,IAAM,EAAA,EAAA,EAAI,QAAQ,CAAA,CAAA;AAAA,GACtC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,CAAW,IAAiB,EAAA,EAAA,EAAe,QAAkB,EAAA;AACzD,IAAA,IAAI,CAAC,IAAA;AAAM,MAAM,MAAA,IAAI,MAAM,sBAAsB,CAAA,CAAA;AACjD,IAAA,IAAI,CAAC,EAAA;AAAI,MAAM,MAAA,IAAI,MAAM,oBAAoB,CAAA,CAAA;AAC7C,IAAA,MAAM,GAAM,GAAA,CAAA,EAAG,IAAK,CAAA,IAAA,CAAA,CAAA,EAAQ,EAAG,CAAA,IAAA,CAAA,CAAA,CAAA;AAE/B,IAAK,IAAA,CAAA,kBAAA,CAAmB,GAAG,CAAI,GAAA,QAAA,CAAA;AAAA,GACnC;AAAA;AAAA;AAAA,EAIA,MAAA,CAAO,MAAiB,EAAe,EAAA;AACnC,IAAA,MAAM,GAAM,GAAA,CAAA,EAAG,IAAK,CAAA,IAAA,CAAA,CAAA,EAAQ,EAAG,CAAA,IAAA,CAAA,CAAA,CAAA;AAC/B,IAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,kBAAA,CAAmB,GAAG,CAAA,CAAA;AAEzC,IAAO,OAAA,KAAA,KAAU,KAAY,CAAA,GAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA;AAAA,GACnD;AACJ;;;;"}