{"version":3,"file":"Animation.mjs","sources":["../../src/core/Animation.ts"],"sourcesContent":["import type { Event } from './Event';\nimport type { Skeleton } from './Skeleton';\nimport { Attachment, VertexAttachment } from './attachments';\nimport { NumberArrayLike, IAnimation, ITimeline, MathUtils, MixBlend, StringSet, Utils, MixDirection, IHasTextureRegion } from '@pixi-spine/base';\nimport type { Slot } from './Slot';\nimport type { IkConstraint } from './IkConstraint';\nimport type { TransformConstraint } from './TransformConstraint';\nimport type { PathConstraint } from './PathConstraint';\nimport { SequenceMode, SequenceModeValues } from './attachments/Sequence';\n\n/**\n * A simple container for a list of timelines and a name.\n * @public\n * */\nexport class Animation implements IAnimation<Timeline> {\n    /** The animation's name, which is unique across all animations in the skeleton. */\n    name: string;\n    timelines: Array<Timeline> = [];\n    timelineIds: StringSet = new StringSet();\n\n    /** The duration of the animation in seconds, which is the highest time of all keys in the timeline. */\n    duration: number;\n\n    constructor(name: string, timelines: Array<Timeline>, duration: number) {\n        if (!name) throw new Error('name cannot be null.');\n        this.name = name;\n        this.setTimelines(timelines);\n        this.duration = duration;\n    }\n\n    setTimelines(timelines: Array<Timeline>) {\n        if (!timelines) throw new Error('timelines cannot be null.');\n        this.timelines = timelines;\n        this.timelineIds.clear();\n        for (let i = 0; i < timelines.length; i++) this.timelineIds.addAll(timelines[i].getPropertyIds());\n    }\n\n    hasTimeline(ids: string[]): boolean {\n        for (let i = 0; i < ids.length; i++) if (this.timelineIds.contains(ids[i])) return true;\n\n        return false;\n    }\n\n    /** Applies all the animation's timelines to the specified skeleton.\n     *\n     * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}.\n     * @param loop If true, the animation repeats after {@link #getDuration()}.\n     * @param events May be null to ignore fired events. */\n    apply(skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        if (!skeleton) throw new Error('skeleton cannot be null.');\n\n        if (loop && this.duration != 0) {\n            time %= this.duration;\n            if (lastTime > 0) lastTime %= this.duration;\n        }\n\n        const timelines = this.timelines;\n\n        for (let i = 0, n = timelines.length; i < n; i++) timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction);\n    }\n}\n\nconst Property = {\n    rotate: 0,\n    x: 1,\n    y: 2,\n    scaleX: 3,\n    scaleY: 4,\n    shearX: 5,\n    shearY: 6,\n\n    rgb: 7,\n    alpha: 8,\n    rgb2: 9,\n\n    attachment: 10,\n    deform: 11,\n\n    event: 12,\n    drawOrder: 13,\n\n    ikConstraint: 14,\n    transformConstraint: 15,\n\n    pathConstraintPosition: 16,\n    pathConstraintSpacing: 17,\n    pathConstraintMix: 18,\n\n    sequence: 19,\n};\n\n/** The interface for all timelines.\n * @public\n * */\nexport abstract class Timeline implements ITimeline {\n    propertyIds: string[];\n    frames: NumberArrayLike;\n\n    constructor(frameCount: number, propertyIds: string[]) {\n        this.propertyIds = propertyIds;\n        this.frames = Utils.newFloatArray(frameCount * this.getFrameEntries());\n    }\n\n    getPropertyIds() {\n        return this.propertyIds;\n    }\n\n    getFrameEntries(): number {\n        return 1;\n    }\n\n    getFrameCount() {\n        return this.frames.length / this.getFrameEntries();\n    }\n\n    getDuration(): number {\n        return this.frames[this.frames.length - this.getFrameEntries()];\n    }\n\n    abstract apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event> | null, alpha: number, blend: MixBlend, direction: MixDirection): void;\n\n    static search1(frames: NumberArrayLike, time: number) {\n        const n = frames.length;\n\n        for (let i = 1; i < n; i++) if (frames[i] > time) return i - 1;\n\n        return n - 1;\n    }\n\n    static search(frames: NumberArrayLike, time: number, step: number) {\n        const n = frames.length;\n\n        for (let i = step; i < n; i += step) if (frames[i] > time) return i - step;\n\n        return n - step;\n    }\n}\n\n/**\n * @public\n */\nexport interface BoneTimeline {\n    /** The index of the bone in {@link Skeleton#bones} that will be changed. */\n    boneIndex: number;\n}\n\n/**\n * @public\n */\nexport interface SlotTimeline {\n    /** The index of the slot in {@link Skeleton#slots} that will be changed. */\n    slotIndex: number;\n}\n\n/** The base class for timelines that use interpolation between key frame values.\n * @public\n * */\nexport abstract class CurveTimeline extends Timeline {\n    protected curves: NumberArrayLike; // type, x, y, ...\n\n    constructor(frameCount: number, bezierCount: number, propertyIds: string[]) {\n        super(frameCount, propertyIds);\n        this.curves = Utils.newFloatArray(frameCount + bezierCount * 18 /* BEZIER_SIZE*/);\n        this.curves[frameCount - 1] = 1 /* STEPPED*/;\n    }\n\n    /** Sets the specified key frame to linear interpolation. */\n    setLinear(frame: number) {\n        this.curves[frame] = 0 /* LINEAR*/;\n    }\n\n    /** Sets the specified key frame to stepped interpolation. */\n    setStepped(frame: number) {\n        this.curves[frame] = 1 /* STEPPED*/;\n    }\n\n    /** Shrinks the storage for Bezier curves, for use when <code>bezierCount</code> (specified in the constructor) was larger\n     * than the actual number of Bezier curves. */\n    shrink(bezierCount: number) {\n        const size = this.getFrameCount() + bezierCount * 18; /* BEZIER_SIZE*/\n\n        if (this.curves.length > size) {\n            const newCurves = Utils.newFloatArray(size);\n\n            Utils.arrayCopy(this.curves, 0, newCurves, 0, size);\n            this.curves = newCurves;\n        }\n    }\n\n    /** Stores the segments for the specified Bezier curve. For timelines that modify multiple values, there may be more than\n     * one curve per frame.\n     * @param bezier The ordinal of this Bezier curve for this timeline, between 0 and <code>bezierCount - 1</code> (specified\n     *           in the constructor), inclusive.\n     * @param frame Between 0 and <code>frameCount - 1</code>, inclusive.\n     * @param value The index of the value for this frame that this curve is used for.\n     * @param time1 The time for the first key.\n     * @param value1 The value for the first key.\n     * @param cx1 The time for the first Bezier handle.\n     * @param cy1 The value for the first Bezier handle.\n     * @param cx2 The time of the second Bezier handle.\n     * @param cy2 The value for the second Bezier handle.\n     * @param time2 The time for the second key.\n     * @param value2 The value for the second key. */\n    setBezier(bezier: number, frame: number, value: number, time1: number, value1: number, cx1: number, cy1: number, cx2: number, cy2: number, time2: number, value2: number) {\n        const curves = this.curves;\n        let i = this.getFrameCount() + bezier * 18; /* BEZIER_SIZE*/\n\n        if (value == 0) curves[frame] = 2 /* BEZIER*/ + i;\n        const tmpx = (time1 - cx1 * 2 + cx2) * 0.03;\n        const tmpy = (value1 - cy1 * 2 + cy2) * 0.03;\n        const dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006;\n        const dddy = ((cy1 - cy2) * 3 - value1 + value2) * 0.006;\n        let ddx = tmpx * 2 + dddx;\n        let ddy = tmpy * 2 + dddy;\n        let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667;\n        let dy = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667;\n        let x = time1 + dx;\n        let y = value1 + dy;\n\n        for (let n = i + 18 /* BEZIER_SIZE*/; i < n; i += 2) {\n            curves[i] = x;\n            curves[i + 1] = y;\n            dx += ddx;\n            dy += ddy;\n            ddx += dddx;\n            ddy += dddy;\n            x += dx;\n            y += dy;\n        }\n    }\n\n    /** Returns the Bezier interpolated value for the specified time.\n     * @param frameIndex The index into {@link #getFrames()} for the values of the frame before <code>time</code>.\n     * @param valueOffset The offset from <code>frameIndex</code> to the value this curve is used for.\n     * @param i The index of the Bezier segments. See {@link #getCurveType(int)}. */\n    getBezierValue(time: number, frameIndex: number, valueOffset: number, i: number) {\n        const curves = this.curves;\n\n        if (curves[i] > time) {\n            const x = this.frames[frameIndex];\n            const y = this.frames[frameIndex + valueOffset];\n\n            return y + ((time - x) / (curves[i] - x)) * (curves[i + 1] - y);\n        }\n        const n = i + 18; /* BEZIER_SIZE*/\n\n        for (i += 2; i < n; i += 2) {\n            if (curves[i] >= time) {\n                const x = curves[i - 2];\n                const y = curves[i - 1];\n\n                return y + ((time - x) / (curves[i] - x)) * (curves[i + 1] - y);\n            }\n        }\n        frameIndex += this.getFrameEntries();\n        const x = curves[n - 2];\n        const y = curves[n - 1];\n\n        return y + ((time - x) / (this.frames[frameIndex] - x)) * (this.frames[frameIndex + valueOffset] - y);\n    }\n}\n/**\n * @public\n */\nexport abstract class CurveTimeline1 extends CurveTimeline {\n    constructor(frameCount: number, bezierCount: number, propertyId: string) {\n        super(frameCount, bezierCount, [propertyId]);\n    }\n\n    getFrameEntries() {\n        return 2 /* ENTRIES*/;\n    }\n\n    /** Sets the time and value for the specified frame.\n     * @param frame Between 0 and <code>frameCount</code>, inclusive.\n     * @param time The frame time in seconds. */\n    setFrame(frame: number, time: number, value: number) {\n        frame <<= 1;\n        this.frames[frame] = time;\n        this.frames[frame + 1 /* VALUE*/] = value;\n    }\n\n    /** Returns the interpolated value for the specified time. */\n    getCurveValue(time: number) {\n        const frames = this.frames;\n        let i = frames.length - 2;\n\n        for (let ii = 2; ii <= i; ii += 2) {\n            if (frames[ii] > time) {\n                i = ii - 2;\n                break;\n            }\n        }\n\n        const curveType = this.curves[i >> 1];\n\n        switch (curveType) {\n            case 0 /* LINEAR*/:\n                const before = frames[i];\n                const value = frames[i + 1 /* VALUE*/];\n\n                return value + ((time - before) / (frames[i + 2 /* ENTRIES*/] - before)) * (frames[i + 2 /* ENTRIES*/ + 1 /* VALUE*/] - value);\n            case 1 /* STEPPED*/:\n                return frames[i + 1 /* VALUE*/];\n        }\n\n        return this.getBezierValue(time, i, 1 /* VALUE*/, curveType - 2 /* BEZIER*/);\n    }\n}\n\n/** The base class for a {@link CurveTimeline} which sets two properties.\n * @public\n * */\nexport abstract class CurveTimeline2 extends CurveTimeline {\n    /** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}.\n     * @param propertyIds Unique identifiers for the properties the timeline modifies. */\n    constructor(frameCount: number, bezierCount: number, propertyId1: string, propertyId2: string) {\n        super(frameCount, bezierCount, [propertyId1, propertyId2]);\n    }\n\n    getFrameEntries() {\n        return 3 /* ENTRIES*/;\n    }\n\n    /** Sets the time and values for the specified frame.\n     * @param frame Between 0 and <code>frameCount</code>, inclusive.\n     * @param time The frame time in seconds. */\n    setFrame(frame: number, time: number, value1: number, value2: number) {\n        frame *= 3 /* ENTRIES*/;\n        this.frames[frame] = time;\n        this.frames[frame + 1 /* VALUE1*/] = value1;\n        this.frames[frame + 2 /* VALUE2*/] = value2;\n    }\n}\n\n/** Changes a bone's local {@link Bone#rotation}.\n * @public\n * */\nexport class RotateTimeline extends CurveTimeline1 implements BoneTimeline {\n    boneIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, boneIndex: number) {\n        super(frameCount, bezierCount, `${Property.rotate}|${boneIndex}`);\n        this.boneIndex = boneIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event> | null, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const bone = skeleton.bones[this.boneIndex];\n\n        if (!bone.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    bone.rotation = bone.data.rotation;\n\n                    return;\n                case MixBlend.first:\n                    bone.rotation += (bone.data.rotation - bone.rotation) * alpha;\n            }\n\n            return;\n        }\n\n        let r = this.getCurveValue(time);\n\n        switch (blend) {\n            case MixBlend.setup:\n                bone.rotation = bone.data.rotation + r * alpha;\n                break;\n            case MixBlend.first:\n            case MixBlend.replace:\n                r += bone.data.rotation - bone.rotation;\n            case MixBlend.add:\n                bone.rotation += r * alpha;\n        }\n    }\n}\n\n/** Changes a bone's local {@link Bone#x} and {@link Bone#y}.\n * @public\n * */\nexport class TranslateTimeline extends CurveTimeline2 implements BoneTimeline {\n    boneIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, boneIndex: number) {\n        super(frameCount, bezierCount, `${Property.x}|${boneIndex}`, `${Property.y}|${boneIndex}`);\n        this.boneIndex = boneIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const bone = skeleton.bones[this.boneIndex];\n\n        if (!bone.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    bone.x = bone.data.x;\n                    bone.y = bone.data.y;\n\n                    return;\n                case MixBlend.first:\n                    bone.x += (bone.data.x - bone.x) * alpha;\n                    bone.y += (bone.data.y - bone.y) * alpha;\n            }\n\n            return;\n        }\n\n        let x = 0;\n        let y = 0;\n        const i = Timeline.search(frames, time, 3 /* ENTRIES*/);\n        const curveType = this.curves[i / 3 /* ENTRIES*/];\n\n        switch (curveType) {\n            case 0 /* LINEAR*/:\n                const before = frames[i];\n\n                x = frames[i + 1 /* VALUE1*/];\n                y = frames[i + 2 /* VALUE2*/];\n                const t = (time - before) / (frames[i + 3 /* ENTRIES*/] - before);\n\n                x += (frames[i + 3 /* ENTRIES*/ + 1 /* VALUE1*/] - x) * t;\n                y += (frames[i + 3 /* ENTRIES*/ + 2 /* VALUE2*/] - y) * t;\n                break;\n            case 1 /* STEPPED*/:\n                x = frames[i + 1 /* VALUE1*/];\n                y = frames[i + 2 /* VALUE2*/];\n                break;\n            default:\n                x = this.getBezierValue(time, i, 1 /* VALUE1*/, curveType - 2 /* BEZIER*/);\n                y = this.getBezierValue(time, i, 2 /* VALUE2*/, curveType + 18 /* BEZIER_SIZE*/ - 2 /* BEZIER*/);\n        }\n\n        switch (blend) {\n            case MixBlend.setup:\n                bone.x = bone.data.x + x * alpha;\n                bone.y = bone.data.y + y * alpha;\n                break;\n            case MixBlend.first:\n            case MixBlend.replace:\n                bone.x += (bone.data.x + x - bone.x) * alpha;\n                bone.y += (bone.data.y + y - bone.y) * alpha;\n                break;\n            case MixBlend.add:\n                bone.x += x * alpha;\n                bone.y += y * alpha;\n        }\n    }\n}\n\n/** Changes a bone's local {@link Bone#x}.\n * @public\n * */\nexport class TranslateXTimeline extends CurveTimeline1 implements BoneTimeline {\n    boneIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, boneIndex: number) {\n        super(frameCount, bezierCount, `${Property.x}|${boneIndex}`);\n        this.boneIndex = boneIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const bone = skeleton.bones[this.boneIndex];\n\n        if (!bone.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    bone.x = bone.data.x;\n\n                    return;\n                case MixBlend.first:\n                    bone.x += (bone.data.x - bone.x) * alpha;\n            }\n\n            return;\n        }\n\n        const x = this.getCurveValue(time);\n\n        switch (blend) {\n            case MixBlend.setup:\n                bone.x = bone.data.x + x * alpha;\n                break;\n            case MixBlend.first:\n            case MixBlend.replace:\n                bone.x += (bone.data.x + x - bone.x) * alpha;\n                break;\n            case MixBlend.add:\n                bone.x += x * alpha;\n        }\n    }\n}\n\n/** Changes a bone's local {@link Bone#x}.\n * @public\n * */\nexport class TranslateYTimeline extends CurveTimeline1 implements BoneTimeline {\n    boneIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, boneIndex: number) {\n        super(frameCount, bezierCount, `${Property.y}|${boneIndex}`);\n        this.boneIndex = boneIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const bone = skeleton.bones[this.boneIndex];\n\n        if (!bone.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    bone.y = bone.data.y;\n\n                    return;\n                case MixBlend.first:\n                    bone.y += (bone.data.y - bone.y) * alpha;\n            }\n\n            return;\n        }\n\n        const y = this.getCurveValue(time);\n\n        switch (blend) {\n            case MixBlend.setup:\n                bone.y = bone.data.y + y * alpha;\n                break;\n            case MixBlend.first:\n            case MixBlend.replace:\n                bone.y += (bone.data.y + y - bone.y) * alpha;\n                break;\n            case MixBlend.add:\n                bone.y += y * alpha;\n        }\n    }\n}\n\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}.\n * @public\n * */\nexport class ScaleTimeline extends CurveTimeline2 implements BoneTimeline {\n    boneIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, boneIndex: number) {\n        super(frameCount, bezierCount, `${Property.scaleX}|${boneIndex}`, `${Property.scaleY}|${boneIndex}`);\n        this.boneIndex = boneIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const bone = skeleton.bones[this.boneIndex];\n\n        if (!bone.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    bone.scaleX = bone.data.scaleX;\n                    bone.scaleY = bone.data.scaleY;\n\n                    return;\n                case MixBlend.first:\n                    bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n                    bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n            }\n\n            return;\n        }\n\n        let x;\n        let y;\n        const i = Timeline.search(frames, time, 3 /* ENTRIES*/);\n        const curveType = this.curves[i / 3 /* ENTRIES*/];\n\n        switch (curveType) {\n            case 0 /* LINEAR*/:\n                const before = frames[i];\n\n                x = frames[i + 1 /* VALUE1*/];\n                y = frames[i + 2 /* VALUE2*/];\n                const t = (time - before) / (frames[i + 3 /* ENTRIES*/] - before);\n\n                x += (frames[i + 3 /* ENTRIES*/ + 1 /* VALUE1*/] - x) * t;\n                y += (frames[i + 3 /* ENTRIES*/ + 2 /* VALUE2*/] - y) * t;\n                break;\n            case 1 /* STEPPED*/:\n                x = frames[i + 1 /* VALUE1*/];\n                y = frames[i + 2 /* VALUE2*/];\n                break;\n            default:\n                x = this.getBezierValue(time, i, 1 /* VALUE1*/, curveType - 2 /* BEZIER*/);\n                y = this.getBezierValue(time, i, 2 /* VALUE2*/, curveType + 18 /* BEZIER_SIZE*/ - 2 /* BEZIER*/);\n        }\n        x *= bone.data.scaleX;\n        y *= bone.data.scaleY;\n\n        if (alpha == 1) {\n            if (blend == MixBlend.add) {\n                bone.scaleX += x - bone.data.scaleX;\n                bone.scaleY += y - bone.data.scaleY;\n            } else {\n                bone.scaleX = x;\n                bone.scaleY = y;\n            }\n        } else {\n            let bx = 0;\n            let by = 0;\n\n            if (direction == MixDirection.mixOut) {\n                switch (blend) {\n                    case MixBlend.setup:\n                        bx = bone.data.scaleX;\n                        by = bone.data.scaleY;\n                        bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n                        bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n                        break;\n                    case MixBlend.first:\n                    case MixBlend.replace:\n                        bx = bone.scaleX;\n                        by = bone.scaleY;\n                        bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n                        bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n                        break;\n                    case MixBlend.add:\n                        bone.scaleX += (x - bone.data.scaleX) * alpha;\n                        bone.scaleY += (y - bone.data.scaleY) * alpha;\n                }\n            } else {\n                switch (blend) {\n                    case MixBlend.setup:\n                        bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);\n                        by = Math.abs(bone.data.scaleY) * MathUtils.signum(y);\n                        bone.scaleX = bx + (x - bx) * alpha;\n                        bone.scaleY = by + (y - by) * alpha;\n                        break;\n                    case MixBlend.first:\n                    case MixBlend.replace:\n                        bx = Math.abs(bone.scaleX) * MathUtils.signum(x);\n                        by = Math.abs(bone.scaleY) * MathUtils.signum(y);\n                        bone.scaleX = bx + (x - bx) * alpha;\n                        bone.scaleY = by + (y - by) * alpha;\n                        break;\n                    case MixBlend.add:\n                        bone.scaleX += (x - bone.data.scaleX) * alpha;\n                        bone.scaleY += (y - bone.data.scaleY) * alpha;\n                }\n            }\n        }\n    }\n}\n\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}.\n * @public\n * */\nexport class ScaleXTimeline extends CurveTimeline1 implements BoneTimeline {\n    boneIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, boneIndex: number) {\n        super(frameCount, bezierCount, `${Property.scaleX}|${boneIndex}`);\n        this.boneIndex = boneIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const bone = skeleton.bones[this.boneIndex];\n\n        if (!bone.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    bone.scaleX = bone.data.scaleX;\n\n                    return;\n                case MixBlend.first:\n                    bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n            }\n\n            return;\n        }\n\n        const x = this.getCurveValue(time) * bone.data.scaleX;\n\n        if (alpha == 1) {\n            if (blend == MixBlend.add) bone.scaleX += x - bone.data.scaleX;\n            else bone.scaleX = x;\n        } else {\n            // Mixing out uses sign of setup or current pose, else use sign of key.\n            let bx = 0;\n\n            if (direction == MixDirection.mixOut) {\n                switch (blend) {\n                    case MixBlend.setup:\n                        bx = bone.data.scaleX;\n                        bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n                        break;\n                    case MixBlend.first:\n                    case MixBlend.replace:\n                        bx = bone.scaleX;\n                        bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n                        break;\n                    case MixBlend.add:\n                        bone.scaleX += (x - bone.data.scaleX) * alpha;\n                }\n            } else {\n                switch (blend) {\n                    case MixBlend.setup:\n                        bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);\n                        bone.scaleX = bx + (x - bx) * alpha;\n                        break;\n                    case MixBlend.first:\n                    case MixBlend.replace:\n                        bx = Math.abs(bone.scaleX) * MathUtils.signum(x);\n                        bone.scaleX = bx + (x - bx) * alpha;\n                        break;\n                    case MixBlend.add:\n                        bone.scaleX += (x - bone.data.scaleX) * alpha;\n                }\n            }\n        }\n    }\n}\n\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}.\n * @public\n * */\nexport class ScaleYTimeline extends CurveTimeline1 implements BoneTimeline {\n    boneIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, boneIndex: number) {\n        super(frameCount, bezierCount, `${Property.scaleY}|${boneIndex}`);\n        this.boneIndex = boneIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const bone = skeleton.bones[this.boneIndex];\n\n        if (!bone.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    bone.scaleY = bone.data.scaleY;\n\n                    return;\n                case MixBlend.first:\n                    bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n            }\n\n            return;\n        }\n\n        const y = this.getCurveValue(time) * bone.data.scaleY;\n\n        if (alpha == 1) {\n            if (blend == MixBlend.add) bone.scaleY += y - bone.data.scaleY;\n            else bone.scaleY = y;\n        } else {\n            // Mixing out uses sign of setup or current pose, else use sign of key.\n            let by = 0;\n\n            if (direction == MixDirection.mixOut) {\n                switch (blend) {\n                    case MixBlend.setup:\n                        by = bone.data.scaleY;\n                        bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n                        break;\n                    case MixBlend.first:\n                    case MixBlend.replace:\n                        by = bone.scaleY;\n                        bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n                        break;\n                    case MixBlend.add:\n                        bone.scaleY += (y - bone.data.scaleY) * alpha;\n                }\n            } else {\n                switch (blend) {\n                    case MixBlend.setup:\n                        by = Math.abs(bone.data.scaleY) * MathUtils.signum(y);\n                        bone.scaleY = by + (y - by) * alpha;\n                        break;\n                    case MixBlend.first:\n                    case MixBlend.replace:\n                        by = Math.abs(bone.scaleY) * MathUtils.signum(y);\n                        bone.scaleY = by + (y - by) * alpha;\n                        break;\n                    case MixBlend.add:\n                        bone.scaleY += (y - bone.data.scaleY) * alpha;\n                }\n            }\n        }\n    }\n}\n\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}.\n * @public\n * */\nexport class ShearTimeline extends CurveTimeline2 implements BoneTimeline {\n    boneIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, boneIndex: number) {\n        super(frameCount, bezierCount, `${Property.shearX}|${boneIndex}`, `${Property.shearY}|${boneIndex}`);\n        this.boneIndex = boneIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const bone = skeleton.bones[this.boneIndex];\n\n        if (!bone.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    bone.shearX = bone.data.shearX;\n                    bone.shearY = bone.data.shearY;\n\n                    return;\n                case MixBlend.first:\n                    bone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n                    bone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n            }\n\n            return;\n        }\n\n        let x = 0;\n        let y = 0;\n        const i = Timeline.search(frames, time, 3 /* ENTRIES*/);\n        const curveType = this.curves[i / 3 /* ENTRIES*/];\n\n        switch (curveType) {\n            case 0 /* LINEAR*/:\n                const before = frames[i];\n\n                x = frames[i + 1 /* VALUE1*/];\n                y = frames[i + 2 /* VALUE2*/];\n                const t = (time - before) / (frames[i + 3 /* ENTRIES*/] - before);\n\n                x += (frames[i + 3 /* ENTRIES*/ + 1 /* VALUE1*/] - x) * t;\n                y += (frames[i + 3 /* ENTRIES*/ + 2 /* VALUE2*/] - y) * t;\n                break;\n            case 1 /* STEPPED*/:\n                x = frames[i + 1 /* VALUE1*/];\n                y = frames[i + 2 /* VALUE2*/];\n                break;\n            default:\n                x = this.getBezierValue(time, i, 1 /* VALUE1*/, curveType - 2 /* BEZIER*/);\n                y = this.getBezierValue(time, i, 2 /* VALUE2*/, curveType + 18 /* BEZIER_SIZE*/ - 2 /* BEZIER*/);\n        }\n\n        switch (blend) {\n            case MixBlend.setup:\n                bone.shearX = bone.data.shearX + x * alpha;\n                bone.shearY = bone.data.shearY + y * alpha;\n                break;\n            case MixBlend.first:\n            case MixBlend.replace:\n                bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n                bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n                break;\n            case MixBlend.add:\n                bone.shearX += x * alpha;\n                bone.shearY += y * alpha;\n        }\n    }\n}\n\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}.\n * @public\n * */\nexport class ShearXTimeline extends CurveTimeline1 implements BoneTimeline {\n    boneIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, boneIndex: number) {\n        super(frameCount, bezierCount, `${Property.shearX}|${boneIndex}`);\n        this.boneIndex = boneIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const bone = skeleton.bones[this.boneIndex];\n\n        if (!bone.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    bone.shearX = bone.data.shearX;\n\n                    return;\n                case MixBlend.first:\n                    bone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n            }\n\n            return;\n        }\n\n        const x = this.getCurveValue(time);\n\n        switch (blend) {\n            case MixBlend.setup:\n                bone.shearX = bone.data.shearX + x * alpha;\n                break;\n            case MixBlend.first:\n            case MixBlend.replace:\n                bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n                break;\n            case MixBlend.add:\n                bone.shearX += x * alpha;\n        }\n    }\n}\n\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}.\n * @public\n * */\nexport class ShearYTimeline extends CurveTimeline1 implements BoneTimeline {\n    boneIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, boneIndex: number) {\n        super(frameCount, bezierCount, `${Property.shearY}|${boneIndex}`);\n        this.boneIndex = boneIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const bone = skeleton.bones[this.boneIndex];\n\n        if (!bone.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    bone.shearY = bone.data.shearY;\n\n                    return;\n                case MixBlend.first:\n                    bone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n            }\n\n            return;\n        }\n\n        const y = this.getCurveValue(time);\n\n        switch (blend) {\n            case MixBlend.setup:\n                bone.shearY = bone.data.shearY + y * alpha;\n                break;\n            case MixBlend.first:\n            case MixBlend.replace:\n                bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n                break;\n            case MixBlend.add:\n                bone.shearY += y * alpha;\n        }\n    }\n}\n\n/** Changes a slot's {@link Slot#color}.\n * @public\n * */\nexport class RGBATimeline extends CurveTimeline implements SlotTimeline {\n    slotIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, slotIndex: number) {\n        super(frameCount, bezierCount, [`${Property.rgb}|${slotIndex}`, `${Property.alpha}|${slotIndex}`]);\n        this.slotIndex = slotIndex;\n    }\n\n    getFrameEntries() {\n        return 5 /* ENTRIES*/;\n    }\n\n    /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n    setFrame(frame: number, time: number, r: number, g: number, b: number, a: number) {\n        frame *= 5 /* ENTRIES*/;\n        this.frames[frame] = time;\n        this.frames[frame + 1 /* R*/] = r;\n        this.frames[frame + 2 /* G*/] = g;\n        this.frames[frame + 3 /* B*/] = b;\n        this.frames[frame + 4 /* A*/] = a;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const slot = skeleton.slots[this.slotIndex];\n\n        if (!slot.bone.active) return;\n\n        const frames = this.frames;\n        const color = slot.color;\n\n        if (time < frames[0]) {\n            const setup = slot.data.color;\n\n            switch (blend) {\n                case MixBlend.setup:\n                    color.setFromColor(setup);\n\n                    return;\n                case MixBlend.first:\n                    color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha);\n            }\n\n            return;\n        }\n\n        let r = 0;\n        let g = 0;\n        let b = 0;\n        let a = 0;\n        const i = Timeline.search(frames, time, 5 /* ENTRIES*/);\n        const curveType = this.curves[i / 5 /* ENTRIES*/];\n\n        switch (curveType) {\n            case 0 /* LINEAR*/:\n                const before = frames[i];\n\n                r = frames[i + 1 /* R*/];\n                g = frames[i + 2 /* G*/];\n                b = frames[i + 3 /* B*/];\n                a = frames[i + 4 /* A*/];\n                const t = (time - before) / (frames[i + 5 /* ENTRIES*/] - before);\n\n                r += (frames[i + 5 /* ENTRIES*/ + 1 /* R*/] - r) * t;\n                g += (frames[i + 5 /* ENTRIES*/ + 2 /* G*/] - g) * t;\n                b += (frames[i + 5 /* ENTRIES*/ + 3 /* B*/] - b) * t;\n                a += (frames[i + 5 /* ENTRIES*/ + 4 /* A*/] - a) * t;\n                break;\n            case 1 /* STEPPED*/:\n                r = frames[i + 1 /* R*/];\n                g = frames[i + 2 /* G*/];\n                b = frames[i + 3 /* B*/];\n                a = frames[i + 4 /* A*/];\n                break;\n            default:\n                r = this.getBezierValue(time, i, 1 /* R*/, curveType - 2 /* BEZIER*/);\n                g = this.getBezierValue(time, i, 2 /* G*/, curveType + 18 /* BEZIER_SIZE*/ - 2 /* BEZIER*/);\n                b = this.getBezierValue(time, i, 3 /* B*/, curveType + 18 /* BEZIER_SIZE*/ * 2 - 2 /* BEZIER*/);\n                a = this.getBezierValue(time, i, 4 /* A*/, curveType + 18 /* BEZIER_SIZE*/ * 3 - 2 /* BEZIER*/);\n        }\n        if (alpha == 1) color.set(r, g, b, a);\n        else {\n            if (blend == MixBlend.setup) color.setFromColor(slot.data.color);\n            color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);\n        }\n    }\n}\n\n/** Changes a slot's {@link Slot#color}.\n * @public\n * */\nexport class RGBTimeline extends CurveTimeline implements SlotTimeline {\n    slotIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, slotIndex: number) {\n        super(frameCount, bezierCount, [`${Property.rgb}|${slotIndex}`]);\n        this.slotIndex = slotIndex;\n    }\n\n    getFrameEntries() {\n        return 4 /* ENTRIES*/;\n    }\n\n    /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n    setFrame(frame: number, time: number, r: number, g: number, b: number) {\n        frame <<= 2;\n        this.frames[frame] = time;\n        this.frames[frame + 1 /* R*/] = r;\n        this.frames[frame + 2 /* G*/] = g;\n        this.frames[frame + 3 /* B*/] = b;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const slot = skeleton.slots[this.slotIndex];\n\n        if (!slot.bone.active) return;\n\n        const frames = this.frames;\n        const color = slot.color;\n\n        if (time < frames[0]) {\n            const setup = slot.data.color;\n\n            switch (blend) {\n                case MixBlend.setup:\n                    color.r = setup.r;\n                    color.g = setup.g;\n                    color.b = setup.b;\n\n                    return;\n                case MixBlend.first:\n                    color.r += (setup.r - color.r) * alpha;\n                    color.g += (setup.g - color.g) * alpha;\n                    color.b += (setup.b - color.b) * alpha;\n            }\n\n            return;\n        }\n\n        let r = 0;\n        let g = 0;\n        let b = 0;\n        const i = Timeline.search(frames, time, 4 /* ENTRIES*/);\n        const curveType = this.curves[i >> 2];\n\n        switch (curveType) {\n            case 0 /* LINEAR*/:\n                const before = frames[i];\n\n                r = frames[i + 1 /* R*/];\n                g = frames[i + 2 /* G*/];\n                b = frames[i + 3 /* B*/];\n                const t = (time - before) / (frames[i + 4 /* ENTRIES*/] - before);\n\n                r += (frames[i + 4 /* ENTRIES*/ + 1 /* R*/] - r) * t;\n                g += (frames[i + 4 /* ENTRIES*/ + 2 /* G*/] - g) * t;\n                b += (frames[i + 4 /* ENTRIES*/ + 3 /* B*/] - b) * t;\n                break;\n            case 1 /* STEPPED*/:\n                r = frames[i + 1 /* R*/];\n                g = frames[i + 2 /* G*/];\n                b = frames[i + 3 /* B*/];\n                break;\n            default:\n                r = this.getBezierValue(time, i, 1 /* R*/, curveType - 2 /* BEZIER*/);\n                g = this.getBezierValue(time, i, 2 /* G*/, curveType + 18 /* BEZIER_SIZE*/ - 2 /* BEZIER*/);\n                b = this.getBezierValue(time, i, 3 /* B*/, curveType + 18 /* BEZIER_SIZE*/ * 2 - 2 /* BEZIER*/);\n        }\n        if (alpha == 1) {\n            color.r = r;\n            color.g = g;\n            color.b = b;\n        } else {\n            if (blend == MixBlend.setup) {\n                const setup = slot.data.color;\n\n                color.r = setup.r;\n                color.g = setup.g;\n                color.b = setup.b;\n            }\n            color.r += (r - color.r) * alpha;\n            color.g += (g - color.g) * alpha;\n            color.b += (b - color.b) * alpha;\n        }\n    }\n}\n\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}.\n * @public\n * */\nexport class AlphaTimeline extends CurveTimeline1 implements SlotTimeline {\n    slotIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, slotIndex: number) {\n        super(frameCount, bezierCount, `${Property.alpha}|${slotIndex}`);\n        this.slotIndex = slotIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const slot = skeleton.slots[this.slotIndex];\n\n        if (!slot.bone.active) return;\n\n        const color = slot.color;\n\n        if (time < this.frames[0]) {\n            // Time is before first frame.\n            const setup = slot.data.color;\n\n            switch (blend) {\n                case MixBlend.setup:\n                    color.a = setup.a;\n\n                    return;\n                case MixBlend.first:\n                    color.a += (setup.a - color.a) * alpha;\n            }\n\n            return;\n        }\n\n        const a = this.getCurveValue(time);\n\n        if (alpha == 1) color.a = a;\n        else {\n            if (blend == MixBlend.setup) color.a = slot.data.color.a;\n            color.a += (a - color.a) * alpha;\n        }\n    }\n}\n\n/** Changes a slot's {@link Slot#color} and {@link Slot#darkColor} for two color tinting.\n * @public\n * */\nexport class RGBA2Timeline extends CurveTimeline implements SlotTimeline {\n    slotIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, slotIndex: number) {\n        super(frameCount, bezierCount, [`${Property.rgb}|${slotIndex}`, `${Property.alpha}|${slotIndex}`, `${Property.rgb2}|${slotIndex}`]);\n        this.slotIndex = slotIndex;\n    }\n\n    getFrameEntries() {\n        return 8 /* ENTRIES*/;\n    }\n\n    /** Sets the time in seconds, light, and dark colors for the specified key frame. */\n    setFrame(frame: number, time: number, r: number, g: number, b: number, a: number, r2: number, g2: number, b2: number) {\n        frame <<= 3;\n        this.frames[frame] = time;\n        this.frames[frame + 1 /* R*/] = r;\n        this.frames[frame + 2 /* G*/] = g;\n        this.frames[frame + 3 /* B*/] = b;\n        this.frames[frame + 4 /* A*/] = a;\n        this.frames[frame + 5 /* R2*/] = r2;\n        this.frames[frame + 6 /* G2*/] = g2;\n        this.frames[frame + 7 /* B2*/] = b2;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const slot = skeleton.slots[this.slotIndex];\n\n        if (!slot.bone.active) return;\n\n        const frames = this.frames;\n        const light = slot.color;\n        const dark = slot.darkColor;\n\n        if (time < frames[0]) {\n            const setupLight = slot.data.color;\n            const setupDark = slot.data.darkColor;\n\n            switch (blend) {\n                case MixBlend.setup:\n                    light.setFromColor(setupLight);\n                    dark.r = setupDark.r;\n                    dark.g = setupDark.g;\n                    dark.b = setupDark.b;\n\n                    return;\n                case MixBlend.first:\n                    light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha);\n                    dark.r += (setupDark.r - dark.r) * alpha;\n                    dark.g += (setupDark.g - dark.g) * alpha;\n                    dark.b += (setupDark.b - dark.b) * alpha;\n            }\n\n            return;\n        }\n\n        let r = 0;\n        let g = 0;\n        let b = 0;\n        let a = 0;\n        let r2 = 0;\n        let g2 = 0;\n        let b2 = 0;\n        const i = Timeline.search(frames, time, 8 /* ENTRIES*/);\n        const curveType = this.curves[i >> 3];\n\n        switch (curveType) {\n            case 0 /* LINEAR*/:\n                const before = frames[i];\n\n                r = frames[i + 1 /* R*/];\n                g = frames[i + 2 /* G*/];\n                b = frames[i + 3 /* B*/];\n                a = frames[i + 4 /* A*/];\n                r2 = frames[i + 5 /* R2*/];\n                g2 = frames[i + 6 /* G2*/];\n                b2 = frames[i + 7 /* B2*/];\n                const t = (time - before) / (frames[i + 8 /* ENTRIES*/] - before);\n\n                r += (frames[i + 8 /* ENTRIES*/ + 1 /* R*/] - r) * t;\n                g += (frames[i + 8 /* ENTRIES*/ + 2 /* G*/] - g) * t;\n                b += (frames[i + 8 /* ENTRIES*/ + 3 /* B*/] - b) * t;\n                a += (frames[i + 8 /* ENTRIES*/ + 4 /* A*/] - a) * t;\n                r2 += (frames[i + 8 /* ENTRIES*/ + 5 /* R2*/] - r2) * t;\n                g2 += (frames[i + 8 /* ENTRIES*/ + 6 /* G2*/] - g2) * t;\n                b2 += (frames[i + 8 /* ENTRIES*/ + 7 /* B2*/] - b2) * t;\n                break;\n            case 1 /* STEPPED*/:\n                r = frames[i + 1 /* R*/];\n                g = frames[i + 2 /* G*/];\n                b = frames[i + 3 /* B*/];\n                a = frames[i + 4 /* A*/];\n                r2 = frames[i + 5 /* R2*/];\n                g2 = frames[i + 6 /* G2*/];\n                b2 = frames[i + 7 /* B2*/];\n                break;\n            default:\n                r = this.getBezierValue(time, i, 1 /* R*/, curveType - 2 /* BEZIER*/);\n                g = this.getBezierValue(time, i, 2 /* G*/, curveType + 18 /* BEZIER_SIZE*/ - 2 /* BEZIER*/);\n                b = this.getBezierValue(time, i, 3 /* B*/, curveType + 18 /* BEZIER_SIZE*/ * 2 - 2 /* BEZIER*/);\n                a = this.getBezierValue(time, i, 4 /* A*/, curveType + 18 /* BEZIER_SIZE*/ * 3 - 2 /* BEZIER*/);\n                r2 = this.getBezierValue(time, i, 5 /* R2*/, curveType + 18 /* BEZIER_SIZE*/ * 4 - 2 /* BEZIER*/);\n                g2 = this.getBezierValue(time, i, 6 /* G2*/, curveType + 18 /* BEZIER_SIZE*/ * 5 - 2 /* BEZIER*/);\n                b2 = this.getBezierValue(time, i, 7 /* B2*/, curveType + 18 /* BEZIER_SIZE*/ * 6 - 2 /* BEZIER*/);\n        }\n\n        if (alpha == 1) {\n            light.set(r, g, b, a);\n            dark.r = r2;\n            dark.g = g2;\n            dark.b = b2;\n        } else {\n            if (blend == MixBlend.setup) {\n                light.setFromColor(slot.data.color);\n                const setupDark = slot.data.darkColor;\n\n                dark.r = setupDark.r;\n                dark.g = setupDark.g;\n                dark.b = setupDark.b;\n            }\n            light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);\n            dark.r += (r2 - dark.r) * alpha;\n            dark.g += (g2 - dark.g) * alpha;\n            dark.b += (b2 - dark.b) * alpha;\n        }\n    }\n}\n\n/** Changes a slot's {@link Slot#color} and {@link Slot#darkColor} for two color tinting.\n * @public\n * */\nexport class RGB2Timeline extends CurveTimeline implements SlotTimeline {\n    slotIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, slotIndex: number) {\n        super(frameCount, bezierCount, [`${Property.rgb}|${slotIndex}`, `${Property.rgb2}|${slotIndex}`]);\n        this.slotIndex = slotIndex;\n    }\n\n    getFrameEntries() {\n        return 7 /* ENTRIES*/;\n    }\n\n    /** Sets the time in seconds, light, and dark colors for the specified key frame. */\n    setFrame(frame: number, time: number, r: number, g: number, b: number, r2: number, g2: number, b2: number) {\n        frame *= 7 /* ENTRIES*/;\n        this.frames[frame] = time;\n        this.frames[frame + 1 /* R*/] = r;\n        this.frames[frame + 2 /* G*/] = g;\n        this.frames[frame + 3 /* B*/] = b;\n        this.frames[frame + 4 /* R2*/] = r2;\n        this.frames[frame + 5 /* G2*/] = g2;\n        this.frames[frame + 6 /* B2*/] = b2;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const slot = skeleton.slots[this.slotIndex];\n\n        if (!slot.bone.active) return;\n\n        const frames = this.frames;\n        const light = slot.color;\n        const dark = slot.darkColor;\n\n        if (time < frames[0]) {\n            const setupLight = slot.data.color;\n            const setupDark = slot.data.darkColor;\n\n            switch (blend) {\n                case MixBlend.setup:\n                    light.r = setupLight.r;\n                    light.g = setupLight.g;\n                    light.b = setupLight.b;\n                    dark.r = setupDark.r;\n                    dark.g = setupDark.g;\n                    dark.b = setupDark.b;\n\n                    return;\n                case MixBlend.first:\n                    light.r += (setupLight.r - light.r) * alpha;\n                    light.g += (setupLight.g - light.g) * alpha;\n                    light.b += (setupLight.b - light.b) * alpha;\n                    dark.r += (setupDark.r - dark.r) * alpha;\n                    dark.g += (setupDark.g - dark.g) * alpha;\n                    dark.b += (setupDark.b - dark.b) * alpha;\n            }\n\n            return;\n        }\n\n        let r = 0;\n        let g = 0;\n        let b = 0;\n        let r2 = 0;\n        let g2 = 0;\n        let b2 = 0;\n        const i = Timeline.search(frames, time, 7 /* ENTRIES*/);\n        const curveType = this.curves[i / 7 /* ENTRIES*/];\n\n        switch (curveType) {\n            case 0 /* LINEAR*/:\n                const before = frames[i];\n\n                r = frames[i + 1 /* R*/];\n                g = frames[i + 2 /* G*/];\n                b = frames[i + 3 /* B*/];\n                r2 = frames[i + 4 /* R2*/];\n                g2 = frames[i + 5 /* G2*/];\n                b2 = frames[i + 6 /* B2*/];\n                const t = (time - before) / (frames[i + 7 /* ENTRIES*/] - before);\n\n                r += (frames[i + 7 /* ENTRIES*/ + 1 /* R*/] - r) * t;\n                g += (frames[i + 7 /* ENTRIES*/ + 2 /* G*/] - g) * t;\n                b += (frames[i + 7 /* ENTRIES*/ + 3 /* B*/] - b) * t;\n                r2 += (frames[i + 7 /* ENTRIES*/ + 4 /* R2*/] - r2) * t;\n                g2 += (frames[i + 7 /* ENTRIES*/ + 5 /* G2*/] - g2) * t;\n                b2 += (frames[i + 7 /* ENTRIES*/ + 6 /* B2*/] - b2) * t;\n                break;\n            case 1 /* STEPPED*/:\n                r = frames[i + 1 /* R*/];\n                g = frames[i + 2 /* G*/];\n                b = frames[i + 3 /* B*/];\n                r2 = frames[i + 4 /* R2*/];\n                g2 = frames[i + 5 /* G2*/];\n                b2 = frames[i + 6 /* B2*/];\n                break;\n            default:\n                r = this.getBezierValue(time, i, 1 /* R*/, curveType - 2 /* BEZIER*/);\n                g = this.getBezierValue(time, i, 2 /* G*/, curveType + 18 /* BEZIER_SIZE*/ - 2 /* BEZIER*/);\n                b = this.getBezierValue(time, i, 3 /* B*/, curveType + 18 /* BEZIER_SIZE*/ * 2 - 2 /* BEZIER*/);\n                r2 = this.getBezierValue(time, i, 4 /* R2*/, curveType + 18 /* BEZIER_SIZE*/ * 3 - 2 /* BEZIER*/);\n                g2 = this.getBezierValue(time, i, 5 /* G2*/, curveType + 18 /* BEZIER_SIZE*/ * 4 - 2 /* BEZIER*/);\n                b2 = this.getBezierValue(time, i, 6 /* B2*/, curveType + 18 /* BEZIER_SIZE*/ * 5 - 2 /* BEZIER*/);\n        }\n\n        if (alpha == 1) {\n            light.r = r;\n            light.g = g;\n            light.b = b;\n            dark.r = r2;\n            dark.g = g2;\n            dark.b = b2;\n        } else {\n            if (blend == MixBlend.setup) {\n                const setupLight = slot.data.color;\n                const setupDark = slot.data.darkColor;\n\n                light.r = setupLight.r;\n                light.g = setupLight.g;\n                light.b = setupLight.b;\n                dark.r = setupDark.r;\n                dark.g = setupDark.g;\n                dark.b = setupDark.b;\n            }\n            light.r += (r - light.r) * alpha;\n            light.g += (g - light.g) * alpha;\n            light.b += (b - light.b) * alpha;\n            dark.r += (r2 - dark.r) * alpha;\n            dark.g += (g2 - dark.g) * alpha;\n            dark.b += (b2 - dark.b) * alpha;\n        }\n    }\n}\n\n/** Changes a slot's {@link Slot#attachment}.\n * @public\n * */\nexport class AttachmentTimeline extends Timeline implements SlotTimeline {\n    slotIndex = 0;\n\n    /** The attachment name for each key frame. May contain null values to clear the attachment. */\n    attachmentNames: Array<string | null>;\n\n    constructor(frameCount: number, slotIndex: number) {\n        super(frameCount, [`${Property.attachment}|${slotIndex}`]);\n        this.slotIndex = slotIndex;\n        this.attachmentNames = new Array<string>(frameCount);\n    }\n\n    getFrameCount() {\n        return this.frames.length;\n    }\n\n    /** Sets the time in seconds and the attachment name for the specified key frame. */\n    setFrame(frame: number, time: number, attachmentName: string | null) {\n        this.frames[frame] = time;\n        this.attachmentNames[frame] = attachmentName;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const slot = skeleton.slots[this.slotIndex];\n\n        if (!slot.bone.active) return;\n\n        if (direction == MixDirection.mixOut) {\n            if (blend == MixBlend.setup) this.setAttachment(skeleton, slot, slot.data.attachmentName);\n\n            return;\n        }\n\n        if (time < this.frames[0]) {\n            if (blend == MixBlend.setup || blend == MixBlend.first) this.setAttachment(skeleton, slot, slot.data.attachmentName);\n\n            return;\n        }\n\n        this.setAttachment(skeleton, slot, this.attachmentNames[Timeline.search1(this.frames, time)]);\n    }\n\n    setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string | null) {\n        slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n    }\n}\n\n/** Changes a slot's {@link Slot#deform} to deform a {@link VertexAttachment}.\n * @public\n * */\nexport class DeformTimeline extends CurveTimeline implements SlotTimeline {\n    slotIndex = 0;\n\n    /** The attachment that will be deformed. */\n    attachment: VertexAttachment;\n\n    /** The vertices for each key frame. */\n    vertices: Array<NumberArrayLike>;\n\n    constructor(frameCount: number, bezierCount: number, slotIndex: number, attachment: VertexAttachment) {\n        super(frameCount, bezierCount, [`${Property.deform}|${slotIndex}|${attachment.id}`]);\n        this.slotIndex = slotIndex;\n        this.attachment = attachment;\n        this.vertices = new Array<NumberArrayLike>(frameCount);\n    }\n\n    getFrameCount() {\n        return this.frames.length;\n    }\n\n    /** Sets the time in seconds and the vertices for the specified key frame.\n     * @param vertices Vertex positions for an unweighted VertexAttachment, or deform offsets if it has weights. */\n    setFrame(frame: number, time: number, vertices: NumberArrayLike) {\n        this.frames[frame] = time;\n        this.vertices[frame] = vertices;\n    }\n\n    /** @param value1 Ignored (0 is used for a deform timeline).\n     * @param value2 Ignored (1 is used for a deform timeline). */\n    setBezier(bezier: number, frame: number, value: number, time1: number, value1: number, cx1: number, cy1: number, cx2: number, cy2: number, time2: number, value2: number) {\n        const curves = this.curves;\n        let i = this.getFrameCount() + bezier * 18; /* BEZIER_SIZE*/\n\n        if (value == 0) curves[frame] = 2 /* BEZIER*/ + i;\n        const tmpx = (time1 - cx1 * 2 + cx2) * 0.03;\n        const tmpy = cy2 * 0.03 - cy1 * 0.06;\n        const dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006;\n        const dddy = (cy1 - cy2 + 0.33333333) * 0.018;\n        let ddx = tmpx * 2 + dddx;\n        let ddy = tmpy * 2 + dddy;\n        let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667;\n        let dy = cy1 * 0.3 + tmpy + dddy * 0.16666667;\n        let x = time1 + dx;\n        let y = dy;\n\n        for (let n = i + 18 /* BEZIER_SIZE*/; i < n; i += 2) {\n            curves[i] = x;\n            curves[i + 1] = y;\n            dx += ddx;\n            dy += ddy;\n            ddx += dddx;\n            ddy += dddy;\n            x += dx;\n            y += dy;\n        }\n    }\n\n    getCurvePercent(time: number, frame: number) {\n        const curves = this.curves;\n        let i = curves[frame];\n\n        switch (i) {\n            case 0 /* LINEAR*/:\n                const x = this.frames[frame];\n\n                return (time - x) / (this.frames[frame + this.getFrameEntries()] - x);\n            case 1 /* STEPPED*/:\n                return 0;\n        }\n        i -= 2 /* BEZIER*/;\n        if (curves[i] > time) {\n            const x = this.frames[frame];\n\n            return (curves[i + 1] * (time - x)) / (curves[i] - x);\n        }\n        const n = i + 18; /* BEZIER_SIZE*/\n\n        for (i += 2; i < n; i += 2) {\n            if (curves[i] >= time) {\n                const x = curves[i - 2];\n                const y = curves[i - 1];\n\n                return y + ((time - x) / (curves[i] - x)) * (curves[i + 1] - y);\n            }\n        }\n        const x = curves[n - 2];\n        const y = curves[n - 1];\n\n        return y + ((1 - y) * (time - x)) / (this.frames[frame + this.getFrameEntries()] - x);\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const slot: Slot = skeleton.slots[this.slotIndex];\n\n        if (!slot.bone.active) return;\n        const slotAttachment: Attachment | null = slot.getAttachment();\n\n        if (!slotAttachment) return;\n        if (!(slotAttachment instanceof VertexAttachment) || (<VertexAttachment>slotAttachment).timelineAttachment != this.attachment) return;\n\n        const deform: Array<number> = slot.deform;\n\n        if (deform.length == 0) blend = MixBlend.setup;\n\n        const vertices = this.vertices;\n        const vertexCount = vertices[0].length;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    deform.length = 0;\n\n                    return;\n                case MixBlend.first:\n                    if (alpha == 1) {\n                        deform.length = 0;\n\n                        return;\n                    }\n                    deform.length = vertexCount;\n                    const vertexAttachment = <VertexAttachment>slotAttachment;\n\n                    if (!vertexAttachment.bones) {\n                        // Unweighted vertex positions.\n                        const setupVertices = vertexAttachment.vertices;\n\n                        for (let i = 0; i < vertexCount; i++) deform[i] += (setupVertices[i] - deform[i]) * alpha;\n                    } else {\n                        // Weighted deform offsets.\n                        alpha = 1 - alpha;\n                        for (let i = 0; i < vertexCount; i++) deform[i] *= alpha;\n                    }\n            }\n\n            return;\n        }\n\n        deform.length = vertexCount;\n        if (time >= frames[frames.length - 1]) {\n            // Time is after last frame.\n            const lastVertices = vertices[frames.length - 1];\n\n            if (alpha == 1) {\n                if (blend == MixBlend.add) {\n                    const vertexAttachment = slotAttachment as VertexAttachment;\n\n                    if (!vertexAttachment.bones) {\n                        // Unweighted vertex positions, with alpha.\n                        const setupVertices = vertexAttachment.vertices;\n\n                        for (let i = 0; i < vertexCount; i++) deform[i] += lastVertices[i] - setupVertices[i];\n                    } else {\n                        // Weighted deform offsets, with alpha.\n                        for (let i = 0; i < vertexCount; i++) deform[i] += lastVertices[i];\n                    }\n                } else Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount);\n            } else {\n                switch (blend) {\n                    case MixBlend.setup: {\n                        const vertexAttachment = slotAttachment as VertexAttachment;\n\n                        if (!vertexAttachment.bones) {\n                            // Unweighted vertex positions, with alpha.\n                            const setupVertices = vertexAttachment.vertices;\n\n                            for (let i = 0; i < vertexCount; i++) {\n                                const setup = setupVertices[i];\n\n                                deform[i] = setup + (lastVertices[i] - setup) * alpha;\n                            }\n                        } else {\n                            // Weighted deform offsets, with alpha.\n                            for (let i = 0; i < vertexCount; i++) deform[i] = lastVertices[i] * alpha;\n                        }\n                        break;\n                    }\n                    case MixBlend.first:\n                    case MixBlend.replace:\n                        for (let i = 0; i < vertexCount; i++) deform[i] += (lastVertices[i] - deform[i]) * alpha;\n                        break;\n                    case MixBlend.add:\n                        const vertexAttachment = slotAttachment as VertexAttachment;\n\n                        if (!vertexAttachment.bones) {\n                            // Unweighted vertex positions, with alpha.\n                            const setupVertices = vertexAttachment.vertices;\n\n                            for (let i = 0; i < vertexCount; i++) deform[i] += (lastVertices[i] - setupVertices[i]) * alpha;\n                        } else {\n                            // Weighted deform offsets, with alpha.\n                            for (let i = 0; i < vertexCount; i++) deform[i] += lastVertices[i] * alpha;\n                        }\n                }\n            }\n\n            return;\n        }\n\n        // Interpolate between the previous frame and the current frame.\n        const frame = Timeline.search1(frames, time);\n        const percent = this.getCurvePercent(time, frame);\n        const prevVertices = vertices[frame];\n        const nextVertices = vertices[frame + 1];\n\n        if (alpha == 1) {\n            if (blend == MixBlend.add) {\n                const vertexAttachment = slotAttachment as VertexAttachment;\n\n                if (!vertexAttachment.bones) {\n                    // Unweighted vertex positions, with alpha.\n                    const setupVertices = vertexAttachment.vertices;\n\n                    for (let i = 0; i < vertexCount; i++) {\n                        const prev = prevVertices[i];\n\n                        deform[i] += prev + (nextVertices[i] - prev) * percent - setupVertices[i];\n                    }\n                } else {\n                    // Weighted deform offsets, with alpha.\n                    for (let i = 0; i < vertexCount; i++) {\n                        const prev = prevVertices[i];\n\n                        deform[i] += prev + (nextVertices[i] - prev) * percent;\n                    }\n                }\n            } else {\n                for (let i = 0; i < vertexCount; i++) {\n                    const prev = prevVertices[i];\n\n                    deform[i] = prev + (nextVertices[i] - prev) * percent;\n                }\n            }\n        } else {\n            switch (blend) {\n                case MixBlend.setup: {\n                    const vertexAttachment = slotAttachment as VertexAttachment;\n\n                    if (!vertexAttachment.bones) {\n                        // Unweighted vertex positions, with alpha.\n                        const setupVertices = vertexAttachment.vertices;\n\n                        for (let i = 0; i < vertexCount; i++) {\n                            const prev = prevVertices[i];\n                            const setup = setupVertices[i];\n\n                            deform[i] = setup + (prev + (nextVertices[i] - prev) * percent - setup) * alpha;\n                        }\n                    } else {\n                        // Weighted deform offsets, with alpha.\n                        for (let i = 0; i < vertexCount; i++) {\n                            const prev = prevVertices[i];\n\n                            deform[i] = (prev + (nextVertices[i] - prev) * percent) * alpha;\n                        }\n                    }\n                    break;\n                }\n                case MixBlend.first:\n                case MixBlend.replace:\n                    for (let i = 0; i < vertexCount; i++) {\n                        const prev = prevVertices[i];\n\n                        deform[i] += (prev + (nextVertices[i] - prev) * percent - deform[i]) * alpha;\n                    }\n                    break;\n                case MixBlend.add:\n                    const vertexAttachment = slotAttachment as VertexAttachment;\n\n                    if (!vertexAttachment.bones) {\n                        // Unweighted vertex positions, with alpha.\n                        const setupVertices = vertexAttachment.vertices;\n\n                        for (let i = 0; i < vertexCount; i++) {\n                            const prev = prevVertices[i];\n\n                            deform[i] += (prev + (nextVertices[i] - prev) * percent - setupVertices[i]) * alpha;\n                        }\n                    } else {\n                        // Weighted deform offsets, with alpha.\n                        for (let i = 0; i < vertexCount; i++) {\n                            const prev = prevVertices[i];\n\n                            deform[i] += (prev + (nextVertices[i] - prev) * percent) * alpha;\n                        }\n                    }\n            }\n        }\n    }\n}\n\n/** Fires an {@link Event} when specific animation times are reached.\n * @public\n * */\nexport class EventTimeline extends Timeline {\n    static propertyIds = [`${Property.event}`];\n\n    /** The event for each key frame. */\n    events: Array<Event>;\n\n    constructor(frameCount: number) {\n        super(frameCount, EventTimeline.propertyIds);\n\n        this.events = new Array<Event>(frameCount);\n    }\n\n    getFrameCount() {\n        return this.frames.length;\n    }\n\n    /** Sets the time in seconds and the event for the specified key frame. */\n    setFrame(frame: number, event: Event) {\n        this.frames[frame] = event.time;\n        this.events[frame] = event;\n    }\n\n    /** Fires events for frames > `lastTime` and <= `time`. */\n    apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        if (!firedEvents) return;\n\n        const frames = this.frames;\n        const frameCount = this.frames.length;\n\n        if (lastTime > time) {\n            // Fire events after last time for looped animations.\n            this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction);\n            lastTime = -1;\n        } else if (lastTime >= frames[frameCount - 1])\n            // Last time is after last frame.\n            return;\n        if (time < frames[0]) return; // Time is before first frame.\n\n        let i = 0;\n\n        if (lastTime < frames[0]) i = 0;\n        else {\n            i = Timeline.search1(frames, lastTime) + 1;\n            const frameTime = frames[i];\n\n            while (i > 0) {\n                // Fire multiple events with the same frame.\n                if (frames[i - 1] != frameTime) break;\n                i--;\n            }\n        }\n        for (; i < frameCount && time >= frames[i]; i++) firedEvents.push(this.events[i]);\n    }\n}\n\n/** Changes a skeleton's {@link Skeleton#drawOrder}.\n * @public\n * */\nexport class DrawOrderTimeline extends Timeline {\n    static propertyIds = [`${Property.drawOrder}`];\n\n    /** The draw order for each key frame. See {@link #setFrame(int, float, int[])}. */\n    drawOrders: Array<Array<number> | null>;\n\n    constructor(frameCount: number) {\n        super(frameCount, DrawOrderTimeline.propertyIds);\n        this.drawOrders = new Array<Array<number> | null>(frameCount);\n    }\n\n    getFrameCount() {\n        return this.frames.length;\n    }\n\n    /** Sets the time in seconds and the draw order for the specified key frame.\n     * @param drawOrder For each slot in {@link Skeleton#slots}, the index of the new draw order. May be null to use setup pose\n     *           draw order. */\n    setFrame(frame: number, time: number, drawOrder: Array<number> | null) {\n        this.frames[frame] = time;\n        this.drawOrders[frame] = drawOrder;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        if (direction == MixDirection.mixOut) {\n            if (blend == MixBlend.setup) Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n\n            return;\n        }\n\n        if (time < this.frames[0]) {\n            if (blend == MixBlend.setup || blend == MixBlend.first) Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n\n            return;\n        }\n\n        const idx = Timeline.search1(this.frames, time);\n        const drawOrderToSetupIndex = this.drawOrders[idx];\n\n        if (!drawOrderToSetupIndex) Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n        else {\n            const drawOrder: Array<Slot> = skeleton.drawOrder;\n            const slots: Array<Slot> = skeleton.slots;\n\n            for (let i = 0, n = drawOrderToSetupIndex.length; i < n; i++) drawOrder[i] = slots[drawOrderToSetupIndex[i]];\n        }\n    }\n}\n\n/** Changes an IK constraint's {@link IkConstraint#mix}, {@link IkConstraint#softness},\n * {@link IkConstraint#bendDirection}, {@link IkConstraint#stretch}, and {@link IkConstraint#compress}.\n * @public\n * */\nexport class IkConstraintTimeline extends CurveTimeline {\n    /** The index of the IK constraint slot in {@link Skeleton#ikConstraints} that will be changed. */\n    ikConstraintIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, ikConstraintIndex: number) {\n        super(frameCount, bezierCount, [`${Property.ikConstraint}|${ikConstraintIndex}`]);\n        this.ikConstraintIndex = ikConstraintIndex;\n    }\n\n    getFrameEntries() {\n        return 6 /* ENTRIES*/;\n    }\n\n    /** Sets the time in seconds, mix, softness, bend direction, compress, and stretch for the specified key frame. */\n    setFrame(frame: number, time: number, mix: number, softness: number, bendDirection: number, compress: boolean, stretch: boolean) {\n        frame *= 6 /* ENTRIES*/;\n        this.frames[frame] = time;\n        this.frames[frame + 1 /* MIX*/] = mix;\n        this.frames[frame + 2 /* SOFTNESS*/] = softness;\n        this.frames[frame + 3 /* BEND_DIRECTION*/] = bendDirection;\n        this.frames[frame + 4 /* COMPRESS*/] = compress ? 1 : 0;\n        this.frames[frame + 5 /* STRETCH*/] = stretch ? 1 : 0;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const constraint: IkConstraint = skeleton.ikConstraints[this.ikConstraintIndex];\n\n        if (!constraint.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    constraint.mix = constraint.data.mix;\n                    constraint.softness = constraint.data.softness;\n                    constraint.bendDirection = constraint.data.bendDirection;\n                    constraint.compress = constraint.data.compress;\n                    constraint.stretch = constraint.data.stretch;\n\n                    return;\n                case MixBlend.first:\n                    constraint.mix += (constraint.data.mix - constraint.mix) * alpha;\n                    constraint.softness += (constraint.data.softness - constraint.softness) * alpha;\n                    constraint.bendDirection = constraint.data.bendDirection;\n                    constraint.compress = constraint.data.compress;\n                    constraint.stretch = constraint.data.stretch;\n            }\n\n            return;\n        }\n\n        let mix = 0;\n        let softness = 0;\n        const i = Timeline.search(frames, time, 6 /* ENTRIES*/);\n        const curveType = this.curves[i / 6 /* ENTRIES*/];\n\n        switch (curveType) {\n            case 0 /* LINEAR*/:\n                const before = frames[i];\n\n                mix = frames[i + 1 /* MIX*/];\n                softness = frames[i + 2 /* SOFTNESS*/];\n                const t = (time - before) / (frames[i + 6 /* ENTRIES*/] - before);\n\n                mix += (frames[i + 6 /* ENTRIES*/ + 1 /* MIX*/] - mix) * t;\n                softness += (frames[i + 6 /* ENTRIES*/ + 2 /* SOFTNESS*/] - softness) * t;\n                break;\n            case 1 /* STEPPED*/:\n                mix = frames[i + 1 /* MIX*/];\n                softness = frames[i + 2 /* SOFTNESS*/];\n                break;\n            default:\n                mix = this.getBezierValue(time, i, 1 /* MIX*/, curveType - 2 /* BEZIER*/);\n                softness = this.getBezierValue(time, i, 2 /* SOFTNESS*/, curveType + 18 /* BEZIER_SIZE*/ - 2 /* BEZIER*/);\n        }\n\n        if (blend == MixBlend.setup) {\n            constraint.mix = constraint.data.mix + (mix - constraint.data.mix) * alpha;\n            constraint.softness = constraint.data.softness + (softness - constraint.data.softness) * alpha;\n\n            if (direction == MixDirection.mixOut) {\n                constraint.bendDirection = constraint.data.bendDirection;\n                constraint.compress = constraint.data.compress;\n                constraint.stretch = constraint.data.stretch;\n            } else {\n                constraint.bendDirection = frames[i + 3 /* BEND_DIRECTION*/];\n                constraint.compress = frames[i + 4 /* COMPRESS*/] != 0;\n                constraint.stretch = frames[i + 5 /* STRETCH*/] != 0;\n            }\n        } else {\n            constraint.mix += (mix - constraint.mix) * alpha;\n            constraint.softness += (softness - constraint.softness) * alpha;\n            if (direction == MixDirection.mixIn) {\n                constraint.bendDirection = frames[i + 3 /* BEND_DIRECTION*/];\n                constraint.compress = frames[i + 4 /* COMPRESS*/] != 0;\n                constraint.stretch = frames[i + 5 /* STRETCH*/] != 0;\n            }\n        }\n    }\n}\n\n/** Changes a transform constraint's {@link TransformConstraint#rotateMix}, {@link TransformConstraint#translateMix},\n * {@link TransformConstraint#scaleMix}, and {@link TransformConstraint#shearMix}.\n * @public\n * */\nexport class TransformConstraintTimeline extends CurveTimeline {\n    /** The index of the transform constraint slot in {@link Skeleton#transformConstraints} that will be changed. */\n    transformConstraintIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, transformConstraintIndex: number) {\n        super(frameCount, bezierCount, [`${Property.transformConstraint}|${transformConstraintIndex}`]);\n        this.transformConstraintIndex = transformConstraintIndex;\n    }\n\n    getFrameEntries() {\n        return 7 /* ENTRIES*/;\n    }\n\n    /** The time in seconds, rotate mix, translate mix, scale mix, and shear mix for the specified key frame. */\n    setFrame(frame: number, time: number, mixRotate: number, mixX: number, mixY: number, mixScaleX: number, mixScaleY: number, mixShearY: number) {\n        const frames = this.frames;\n\n        frame *= 7 /* ENTRIES*/;\n        frames[frame] = time;\n        frames[frame + 1 /* ROTATE*/] = mixRotate;\n        frames[frame + 2 /* X*/] = mixX;\n        frames[frame + 3 /* Y*/] = mixY;\n        frames[frame + 4 /* SCALEX*/] = mixScaleX;\n        frames[frame + 5 /* SCALEY*/] = mixScaleY;\n        frames[frame + 6 /* SHEARY*/] = mixShearY;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const constraint: TransformConstraint = skeleton.transformConstraints[this.transformConstraintIndex];\n\n        if (!constraint.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            const data = constraint.data;\n\n            switch (blend) {\n                case MixBlend.setup:\n                    constraint.mixRotate = data.mixRotate;\n                    constraint.mixX = data.mixX;\n                    constraint.mixY = data.mixY;\n                    constraint.mixScaleX = data.mixScaleX;\n                    constraint.mixScaleY = data.mixScaleY;\n                    constraint.mixShearY = data.mixShearY;\n\n                    return;\n                case MixBlend.first:\n                    constraint.mixRotate += (data.mixRotate - constraint.mixRotate) * alpha;\n                    constraint.mixX += (data.mixX - constraint.mixX) * alpha;\n                    constraint.mixY += (data.mixY - constraint.mixY) * alpha;\n                    constraint.mixScaleX += (data.mixScaleX - constraint.mixScaleX) * alpha;\n                    constraint.mixScaleY += (data.mixScaleY - constraint.mixScaleY) * alpha;\n                    constraint.mixShearY += (data.mixShearY - constraint.mixShearY) * alpha;\n            }\n\n            return;\n        }\n\n        let rotate;\n        let x;\n        let y;\n        let scaleX;\n        let scaleY;\n        let shearY;\n        const i = Timeline.search(frames, time, 7 /* ENTRIES*/);\n        const curveType = this.curves[i / 7 /* ENTRIES*/];\n\n        switch (curveType) {\n            case 0 /* LINEAR*/:\n                const before = frames[i];\n\n                rotate = frames[i + 1 /* ROTATE*/];\n                x = frames[i + 2 /* X*/];\n                y = frames[i + 3 /* Y*/];\n                scaleX = frames[i + 4 /* SCALEX*/];\n                scaleY = frames[i + 5 /* SCALEY*/];\n                shearY = frames[i + 6 /* SHEARY*/];\n                const t = (time - before) / (frames[i + 7 /* ENTRIES*/] - before);\n\n                rotate += (frames[i + 7 /* ENTRIES*/ + 1 /* ROTATE*/] - rotate) * t;\n                x += (frames[i + 7 /* ENTRIES*/ + 2 /* X*/] - x) * t;\n                y += (frames[i + 7 /* ENTRIES*/ + 3 /* Y*/] - y) * t;\n                scaleX += (frames[i + 7 /* ENTRIES*/ + 4 /* SCALEX*/] - scaleX) * t;\n                scaleY += (frames[i + 7 /* ENTRIES*/ + 5 /* SCALEY*/] - scaleY) * t;\n                shearY += (frames[i + 7 /* ENTRIES*/ + 6 /* SHEARY*/] - shearY) * t;\n                break;\n            case 1 /* STEPPED*/:\n                rotate = frames[i + 1 /* ROTATE*/];\n                x = frames[i + 2 /* X*/];\n                y = frames[i + 3 /* Y*/];\n                scaleX = frames[i + 4 /* SCALEX*/];\n                scaleY = frames[i + 5 /* SCALEY*/];\n                shearY = frames[i + 6 /* SHEARY*/];\n                break;\n            default:\n                rotate = this.getBezierValue(time, i, 1 /* ROTATE*/, curveType - 2 /* BEZIER*/);\n                x = this.getBezierValue(time, i, 2 /* X*/, curveType + 18 /* BEZIER_SIZE*/ - 2 /* BEZIER*/);\n                y = this.getBezierValue(time, i, 3 /* Y*/, curveType + 18 /* BEZIER_SIZE*/ * 2 - 2 /* BEZIER*/);\n                scaleX = this.getBezierValue(time, i, 4 /* SCALEX*/, curveType + 18 /* BEZIER_SIZE*/ * 3 - 2 /* BEZIER*/);\n                scaleY = this.getBezierValue(time, i, 5 /* SCALEY*/, curveType + 18 /* BEZIER_SIZE*/ * 4 - 2 /* BEZIER*/);\n                shearY = this.getBezierValue(time, i, 6 /* SHEARY*/, curveType + 18 /* BEZIER_SIZE*/ * 5 - 2 /* BEZIER*/);\n        }\n\n        if (blend == MixBlend.setup) {\n            const data = constraint.data;\n\n            constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;\n            constraint.mixX = data.mixX + (x - data.mixX) * alpha;\n            constraint.mixY = data.mixY + (y - data.mixY) * alpha;\n            constraint.mixScaleX = data.mixScaleX + (scaleX - data.mixScaleX) * alpha;\n            constraint.mixScaleY = data.mixScaleY + (scaleY - data.mixScaleY) * alpha;\n            constraint.mixShearY = data.mixShearY + (shearY - data.mixShearY) * alpha;\n        } else {\n            constraint.mixRotate += (rotate - constraint.mixRotate) * alpha;\n            constraint.mixX += (x - constraint.mixX) * alpha;\n            constraint.mixY += (y - constraint.mixY) * alpha;\n            constraint.mixScaleX += (scaleX - constraint.mixScaleX) * alpha;\n            constraint.mixScaleY += (scaleY - constraint.mixScaleY) * alpha;\n            constraint.mixShearY += (shearY - constraint.mixShearY) * alpha;\n        }\n    }\n}\n\n/** Changes a path constraint's {@link PathConstraint#position}.\n * @public\n * */\nexport class PathConstraintPositionTimeline extends CurveTimeline1 {\n    /** The index of the path constraint slot in {@link Skeleton#pathConstraints} that will be changed. */\n    pathConstraintIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, pathConstraintIndex: number) {\n        super(frameCount, bezierCount, `${Property.pathConstraintPosition}|${pathConstraintIndex}`);\n        this.pathConstraintIndex = pathConstraintIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const constraint: PathConstraint = skeleton.pathConstraints[this.pathConstraintIndex];\n\n        if (!constraint.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    constraint.position = constraint.data.position;\n\n                    return;\n                case MixBlend.first:\n                    constraint.position += (constraint.data.position - constraint.position) * alpha;\n            }\n\n            return;\n        }\n\n        const position = this.getCurveValue(time);\n\n        if (blend == MixBlend.setup) constraint.position = constraint.data.position + (position - constraint.data.position) * alpha;\n        else constraint.position += (position - constraint.position) * alpha;\n    }\n}\n\n/** Changes a path constraint's {@link PathConstraint#spacing}.\n * @public\n * */\nexport class PathConstraintSpacingTimeline extends CurveTimeline1 {\n    /** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */\n    pathConstraintIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, pathConstraintIndex: number) {\n        super(frameCount, bezierCount, `${Property.pathConstraintSpacing}|${pathConstraintIndex}`);\n        this.pathConstraintIndex = pathConstraintIndex;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const constraint: PathConstraint = skeleton.pathConstraints[this.pathConstraintIndex];\n\n        if (!constraint.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    constraint.spacing = constraint.data.spacing;\n\n                    return;\n                case MixBlend.first:\n                    constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha;\n            }\n\n            return;\n        }\n\n        const spacing = this.getCurveValue(time);\n\n        if (blend == MixBlend.setup) constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha;\n        else constraint.spacing += (spacing - constraint.spacing) * alpha;\n    }\n}\n\n/** Changes a transform constraint's {@link PathConstraint#getMixRotate()}, {@link PathConstraint#getMixX()}, and\n * {@link PathConstraint#getMixY()}.\n * @public\n * */\nexport class PathConstraintMixTimeline extends CurveTimeline {\n    /** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */\n    pathConstraintIndex = 0;\n\n    constructor(frameCount: number, bezierCount: number, pathConstraintIndex: number) {\n        super(frameCount, bezierCount, [`${Property.pathConstraintMix}|${pathConstraintIndex}`]);\n        this.pathConstraintIndex = pathConstraintIndex;\n    }\n\n    getFrameEntries() {\n        return 4 /* ENTRIES*/;\n    }\n\n    setFrame(frame: number, time: number, mixRotate: number, mixX: number, mixY: number) {\n        const frames = this.frames;\n\n        frame <<= 2;\n        frames[frame] = time;\n        frames[frame + 1 /* ROTATE*/] = mixRotate;\n        frames[frame + 2 /* X*/] = mixX;\n        frames[frame + 3 /* Y*/] = mixY;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const constraint: PathConstraint = skeleton.pathConstraints[this.pathConstraintIndex];\n\n        if (!constraint.active) return;\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            switch (blend) {\n                case MixBlend.setup:\n                    constraint.mixRotate = constraint.data.mixRotate;\n                    constraint.mixX = constraint.data.mixX;\n                    constraint.mixY = constraint.data.mixY;\n\n                    return;\n                case MixBlend.first:\n                    constraint.mixRotate += (constraint.data.mixRotate - constraint.mixRotate) * alpha;\n                    constraint.mixX += (constraint.data.mixX - constraint.mixX) * alpha;\n                    constraint.mixY += (constraint.data.mixY - constraint.mixY) * alpha;\n            }\n\n            return;\n        }\n\n        let rotate;\n        let x;\n        let y;\n        const i = Timeline.search(frames, time, 4 /* ENTRIES*/);\n        const curveType = this.curves[i >> 2];\n\n        switch (curveType) {\n            case 0 /* LINEAR*/:\n                const before = frames[i];\n\n                rotate = frames[i + 1 /* ROTATE*/];\n                x = frames[i + 2 /* X*/];\n                y = frames[i + 3 /* Y*/];\n                const t = (time - before) / (frames[i + 4 /* ENTRIES*/] - before);\n\n                rotate += (frames[i + 4 /* ENTRIES*/ + 1 /* ROTATE*/] - rotate) * t;\n                x += (frames[i + 4 /* ENTRIES*/ + 2 /* X*/] - x) * t;\n                y += (frames[i + 4 /* ENTRIES*/ + 3 /* Y*/] - y) * t;\n                break;\n            case 1 /* STEPPED*/:\n                rotate = frames[i + 1 /* ROTATE*/];\n                x = frames[i + 2 /* X*/];\n                y = frames[i + 3 /* Y*/];\n                break;\n            default:\n                rotate = this.getBezierValue(time, i, 1 /* ROTATE*/, curveType - 2 /* BEZIER*/);\n                x = this.getBezierValue(time, i, 2 /* X*/, curveType + 18 /* BEZIER_SIZE*/ - 2 /* BEZIER*/);\n                y = this.getBezierValue(time, i, 3 /* Y*/, curveType + 18 /* BEZIER_SIZE*/ * 2 - 2 /* BEZIER*/);\n        }\n\n        if (blend == MixBlend.setup) {\n            const data = constraint.data;\n\n            constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;\n            constraint.mixX = data.mixX + (x - data.mixX) * alpha;\n            constraint.mixY = data.mixY + (y - data.mixY) * alpha;\n        } else {\n            constraint.mixRotate += (rotate - constraint.mixRotate) * alpha;\n            constraint.mixX += (x - constraint.mixX) * alpha;\n            constraint.mixY += (y - constraint.mixY) * alpha;\n        }\n    }\n}\n\n/** Changes a slot's {@link Slot#getSequenceIndex()} for an attachment's {@link Sequence}.\n * @public\n * */\nexport class SequenceTimeline extends Timeline implements SlotTimeline {\n    static ENTRIES = 3;\n    static MODE = 1;\n    static DELAY = 2;\n\n    slotIndex: number;\n    attachment: IHasTextureRegion;\n\n    constructor(frameCount: number, slotIndex: number, attachment: IHasTextureRegion) {\n        super(frameCount, [`${Property.sequence}|${slotIndex}|${attachment.sequence.id}`]);\n        this.slotIndex = slotIndex;\n        this.attachment = attachment;\n    }\n\n    getFrameEntries() {\n        return SequenceTimeline.ENTRIES;\n    }\n\n    getSlotIndex() {\n        return this.slotIndex;\n    }\n\n    getAttachment() {\n        return this.attachment as unknown as Attachment;\n    }\n\n    /** Sets the time, mode, index, and frame time for the specified frame.\n     * @param frame Between 0 and <code>frameCount</code>, inclusive.\n     * @param time Seconds between frames. */\n    setFrame(frame: number, time: number, mode: SequenceMode, index: number, delay: number) {\n        const frames = this.frames;\n\n        frame *= SequenceTimeline.ENTRIES;\n        frames[frame] = time;\n        frames[frame + SequenceTimeline.MODE] = mode | (index << 4);\n        frames[frame + SequenceTimeline.DELAY] = delay;\n    }\n\n    apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n        const slot = skeleton.slots[this.slotIndex];\n\n        if (!slot.bone.active) return;\n        const slotAttachment = slot.attachment;\n        const attachment = this.attachment as unknown as Attachment;\n\n        if (slotAttachment != attachment) {\n            if (!(slotAttachment instanceof VertexAttachment) || (slotAttachment as VertexAttachment).timelineAttachment != attachment) return;\n        }\n\n        const frames = this.frames;\n\n        if (time < frames[0]) {\n            // Time is before first frame.\n            if (blend == MixBlend.setup || blend == MixBlend.first) slot.sequenceIndex = -1;\n\n            return;\n        }\n\n        const i = Timeline.search(frames, time, SequenceTimeline.ENTRIES);\n        const before = frames[i];\n        const modeAndIndex = frames[i + SequenceTimeline.MODE];\n        const delay = frames[i + SequenceTimeline.DELAY];\n\n        if (!this.attachment.sequence) return;\n        let index = modeAndIndex >> 4;\n        const count = this.attachment.sequence.regions.length;\n        const mode = SequenceModeValues[modeAndIndex & 0xf];\n\n        if (mode != SequenceMode.hold) {\n            index += ((time - before) / delay + 0.00001) | 0;\n            switch (mode) {\n                case SequenceMode.once:\n                    index = Math.min(count - 1, index);\n                    break;\n                case SequenceMode.loop:\n                    index %= count;\n                    break;\n                case SequenceMode.pingpong: {\n                    const n = (count << 1) - 2;\n\n                    index = n == 0 ? 0 : index % n;\n                    if (index >= count) index = n - index;\n                    break;\n                }\n                case SequenceMode.onceReverse:\n                    index = Math.max(count - 1 - index, 0);\n                    break;\n                case SequenceMode.loopReverse:\n                    index = count - 1 - (index % count);\n                    break;\n                case SequenceMode.pingpongReverse: {\n                    const n = (count << 1) - 2;\n\n                    index = n == 0 ? 0 : (index + count - 1) % n;\n                    if (index >= count) index = n - index;\n                }\n            }\n        }\n        slot.sequenceIndex = index;\n    }\n}\n"],"names":["x","y","vertexAttachment"],"mappings":"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"}