# Spine Runtimes 4.3-beta API Reference

## Animation

Stores a list of timelines to animate a skeleton's pose over time. See Applying Animations in the Spine Runtimes Guide.

Properties:
- bones: int[], readonly -- Skeleton.bones indices that this animation's timelines modify. See setTimelines and BoneTimeline.boneIndex.
- duration: float -- The duration of the animation in seconds, which is usually the highest time of all frames in the timelines. The duration is used to know when the animation has completed and, for animations that repeat, when it should loop back to the start.
- name: string, readonly -- The animation's name, unique across all animations in the skeleton. See SkeletonData.findAnimation.
- timelines: list<Timeline>, readonly -- If this list or the timelines it contains are modified, the timelines must be set again to recompute the animation's bone indices and timeline property IDs. See setTimelines.

Methods:
- Animation(string name): Animation -- Creates a new animation. timelines must be set before use.
- apply(Skeleton skeleton, float lastTime, float time, bool loop, list<Event> events nullable, float alpha, bool fromSetup, bool add, bool out, bool appliedPose): void -- Applies the animation's timelines to the specified skeleton. See Timeline.apply and Applying Animations in the Spine Runtimes Guide.
  - skeleton: The skeleton the animation is applied to. This provides access to the bones, slots, and other skeleton components the timelines may change.
  - lastTime: The last time in seconds this animation was applied. Some timelines trigger only at discrete times, in which case all keys are triggered between `lastTime` (exclusive) and `time` (inclusive). Pass -1 the first time an animation is applied to ensure frame 0 is triggered.
  - time: The time in seconds the skeleton is being posed for. Timelines find the frame before and after this time and interpolate between the frame values.
  - loop: True if `time` beyond the duration repeats the animation, else the last frame is used.
  - events: If any events are fired, they are added to this list. Pass null to ignore fired events or if no timelines fire events.
  - alpha: 0 applies setup or current values (depending on `fromSetup`), 1 uses timeline values, and intermediate values interpolate between them. Adjusting `alpha` over time can mix an animation in or out.
  - fromSetup: If true, `alpha` transitions between setup and timeline values, setup values are used before the first frame (current values are not used). If false, `alpha` transitions between current and timeline values, no change is made before the first frame.
  - add: If true, for timelines that support it, their values are added to the setup or current values (depending on `fromSetup`).
  - out: True when the animation is mixing out, else it is mixing in. Used by timelines that perform instant transitions.
  - appliedPose: True to modify Posed.appliedPose, else Posed.pose is modified.
- hasTimeline(long[] propertyIds): bool -- Returns true if this animation contains a timeline with any of the specified property IDs. See Timeline.propertyIds.
- setTimelines(list<Timeline> timelines, int[] bones): void -- Sets the timelines and bones.

### Timeline

The base class for all timelines. See Applying Animations in the Spine Runtimes Guide.

Properties:
- additive: bool, readonly -- True if this timeline supports additive blending.
- duration: float, readonly -- The duration of the timeline in seconds, which is usually the highest time of all frames in the timeline.
- frameCount: int, readonly -- The number of frames in this timeline.
- frameEntries: int, readonly -- The number of values stored per frame.
- frames: float[], readonly -- The time in seconds and any other values for each frame.
- instant: bool, readonly -- True if this timeline sets values instantaneously and does not support interpolation between frames.
- propertyIds: long[], readonly -- Uniquely encodes both the type of this timeline and the skeleton properties that it affects.

Methods:
- Timeline(int frameCount, long propertyIds): Timeline
  - propertyIds: Unique identifiers for the properties the timeline modifies.
- apply(Skeleton skeleton, float lastTime, float time, list<Event> events nullable, float alpha, bool fromSetup, bool add, bool out, bool appliedPose): void -- Applies this timeline to the skeleton. See Applying Animations in the Spine Runtimes Guide.
  - skeleton: The skeleton the timeline is applied to. This provides access to the bones, slots, and other skeleton components the timelines may change.
  - lastTime: The last time in seconds this timeline was applied. Some timelines trigger only at discrete times, in which case all keys are triggered between `lastTime` (exclusive) and `time` (inclusive). Pass -1 the first time a timeline is applied to ensure frame 0 is triggered.
  - time: The time in seconds the skeleton is being posed for. Timelines find the frame before and after this time and interpolate between the frame values.
  - events: If any events are fired, they are added to this list. Pass null to ignore fired events or if no timelines fire events.
  - alpha: 0 applies setup or current values (depending on `fromSetup`), 1 uses timeline values, and intermediate values interpolate between them. Adjusting `alpha` over time can mix a timeline in or out.
  - fromSetup: If true, `alpha` transitions between setup and timeline values, setup values are used before the first frame (current values are not used). If false, `alpha` transitions between current and timeline values, no change is made before the first frame.
  - add: If true, for timelines that support it, their values are added to the setup or current values (depending on `fromSetup`).
  - out: True when the animation is mixing out, else it is mixing in. Used by timelines that perform instant transitions.
  - appliedPose: True to modify Posed.appliedPose, else Posed.pose is modified.

#### CurveTimeline extends Timeline

The base class for timelines that interpolate between frame values using stepped, linear, or a Bezier curve.

Properties:
- LINEAR = 0: int, static, readonly
- STEPPED = 1: int, static, readonly
- BEZIER = 2: int, static, readonly
- BEZIER_SIZE = 18: int, static, readonly -- The number of values stored for each 10 segment Bezier curve.

Methods:
- CurveTimeline(int frameCount, int bezierCount, long propertyIds): CurveTimeline
  - bezierCount: The maximum number of Bezier curves. See shrink.
  - propertyIds: Unique identifiers for the properties the timeline modifies.
- getBezierValue(float time, int frameIndex, int valueOffset, int i): float -- Returns the Bezier interpolated value for the specified time.
  - frameIndex: The index into frames for the values of the frame before `time`.
  - valueOffset: The offset from `frameIndex` to the value this curve is used for.
  - i: The index of the Bezier segments. See getCurveType.
- getCurveType(int frame): int -- Returns the interpolation type for the specified frame.
  - frame: Between 0 and `frameCount - 1`, inclusive.
  - return: LINEAR, STEPPED, or BEZIER + the index of the Bezier segments.
- setBezier(int bezier, int frame, int value, float time1, float value1, float cx1, float cy1, float cx2, float cy2, float time2, float value2): void -- Stores the segments for the specified Bezier curve. For timelines that modify multiple values, there may be more than one curve per frame.
  - bezier: The ordinal of this Bezier curve for this timeline, between 0 and `bezierCount - 1` (specified in the constructor), inclusive.
  - frame: Between 0 and `frameCount - 1`, inclusive.
  - value: The index of the value for the frame this curve is used for.
  - time1: The time for the first key.
  - value1: The value for the first key.
  - cx1: The time for the first Bezier handle.
  - cy1: The value for the first Bezier handle.
  - cx2: The time of the second Bezier handle.
  - cy2: The value for the second Bezier handle.
  - time2: The time for the second key.
  - value2: The value for the second key.
- setLinear(int frame): void -- Sets the specified frame to linear interpolation.
  - frame: Between 0 and `frameCount - 1`, inclusive.
- setStepped(int frame): void -- Sets the specified frame to stepped interpolation.
  - frame: Between 0 and `frameCount - 1`, inclusive.
- shrink(int bezierCount): void -- Shrinks the storage for Bezier curves, for use when `bezierCount` (specified in the constructor) was larger than the actual number of Bezier curves.

#### CurveTimeline1 extends CurveTimeline

The base class for a CurveTimeline that sets one property with a curve.

Properties:
- ENTRIES = 2: int, static, readonly

Methods:
- CurveTimeline1(int frameCount, int bezierCount, long propertyId): CurveTimeline1
  - bezierCount: The maximum number of Bezier curves. See shrink.
  - propertyId: Unique identifier for the property the timeline modifies.
- getAbsoluteValue(float time, float alpha, bool fromSetup, bool add, float current, float setup, float value): float -- Returns the interpolated value for properties set as absolute values, using the specified timeline value rather than calling getCurveValue. See Timeline.apply.
  - current: The current value for the property.
  - setup: The setup value for the property.
  - value: The timeline value to apply.
- getAbsoluteValue(float time, float alpha, bool fromSetup, bool add, float current, float setup): float -- Returns the interpolated value for properties set as absolute values. The timeline value replaces the setup value, rather than being relative to it. See Timeline.apply.
  - current: The current value for the property.
  - setup: The setup value for the property.
- getCurveValue(float time): float -- Returns the interpolated value for the specified time.
- getRelativeValue(float time, float alpha, bool fromSetup, bool add, float current, float setup): float -- Returns the interpolated value for properties relative to the setup value. The timeline value is added to the setup value, rather than replacing it. See Timeline.apply.
  - current: The current value for the property.
  - setup: The setup value for the property.
- getScaleValue(float time, float alpha, bool fromSetup, bool add, bool out, float current, float setup): float -- Returns the interpolated value for scale properties. The timeline and setup values are multiplied and sign adjusted. See Timeline.apply.
  - current: The current value for the property.
  - setup: The setup value for the property.
- setFrame(int frame, float time, float value): void -- Sets the time and value for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.

### BoneTimeline

An interface for timelines that change a bone's properties.

Properties:
- boneIndex: int, readonly -- The index of the bone in Skeleton.bones that is changed by this timeline.

#### BoneTimeline1 extends CurveTimeline1 implements BoneTimeline

The base class for timelines that change 1 bone property with a curve.

Methods:
- BoneTimeline1(int frameCount, int bezierCount, int boneIndex, long property): BoneTimeline1

#### BoneTimeline2 extends CurveTimeline implements BoneTimeline

The base class for timelines that change two bone properties with a curve.

Properties:
- ENTRIES = 3: int, static, readonly

Methods:
- BoneTimeline2(int frameCount, int bezierCount, int boneIndex, long property1, long property2): BoneTimeline2
  - bezierCount: The maximum number of Bezier curves. See shrink.
- setFrame(int frame, float time, float value1, float value2): void -- Sets the time and values for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.

#### InheritTimeline extends Timeline implements BoneTimeline

Changes BonePose.inherit.

Properties:
- ENTRIES = 2: int, static, readonly

Methods:
- InheritTimeline(int frameCount, int boneIndex): InheritTimeline
- setFrame(int frame, float time, Inherit inherit): void -- Sets the inherit transform mode for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.

#### RotateTimeline extends BoneTimeline1

Changes BonePose.rotation.

Methods:
- RotateTimeline(int frameCount, int bezierCount, int boneIndex): RotateTimeline

#### ScaleTimeline extends BoneTimeline2

Changes BonePose.scaleX and BonePose.scaleY.

Methods:
- ScaleTimeline(int frameCount, int bezierCount, int boneIndex): ScaleTimeline

#### ScaleXTimeline extends BoneTimeline1

Changes BonePose.scaleX.

Methods:
- ScaleXTimeline(int frameCount, int bezierCount, int boneIndex): ScaleXTimeline

#### ScaleYTimeline extends BoneTimeline1

Changes BonePose.scaleY.

Methods:
- ScaleYTimeline(int frameCount, int bezierCount, int boneIndex): ScaleYTimeline

#### ShearTimeline extends BoneTimeline2

Changes BonePose.shearX and BonePose.shearY.

Methods:
- ShearTimeline(int frameCount, int bezierCount, int boneIndex): ShearTimeline

#### ShearXTimeline extends BoneTimeline1

Changes BonePose.shearX.

Methods:
- ShearXTimeline(int frameCount, int bezierCount, int boneIndex): ShearXTimeline

#### ShearYTimeline extends BoneTimeline1

Changes BonePose.shearY.

Methods:
- ShearYTimeline(int frameCount, int bezierCount, int boneIndex): ShearYTimeline

#### TranslateTimeline extends BoneTimeline2

Changes BonePose.x and BonePose.y.

Methods:
- TranslateTimeline(int frameCount, int bezierCount, int boneIndex): TranslateTimeline

#### TranslateXTimeline extends BoneTimeline1

Changes BonePose.x.

Methods:
- TranslateXTimeline(int frameCount, int bezierCount, int boneIndex): TranslateXTimeline

#### TranslateYTimeline extends BoneTimeline1

Changes BonePose.y.

Methods:
- TranslateYTimeline(int frameCount, int bezierCount, int boneIndex): TranslateYTimeline

### ConstraintTimeline

Properties:
- constraintIndex: int, readonly -- The index of the constraint in Skeleton.constraints that will be changed when this timeline is applied, or -1 if a specific constraint will not be changed.

#### ConstraintTimeline1 extends CurveTimeline1 implements ConstraintTimeline

The base class for timelines that change 1 constraint property with a curve.

Methods:
- ConstraintTimeline1(int frameCount, int bezierCount, int constraintIndex, long property): ConstraintTimeline1

#### IkConstraintTimeline extends CurveTimeline implements ConstraintTimeline

Changes IkConstraintPose.mix, IkConstraintPose.softness, IkConstraintPose.bendDirection, IkConstraintPose.stretch, and IkConstraintPose.compress.

Properties:
- ENTRIES = 6: int, static, readonly

Methods:
- IkConstraintTimeline(int frameCount, int bezierCount, int constraintIndex): IkConstraintTimeline
- setFrame(int frame, float time, float mix, float softness, int bendDirection, bool compress, bool stretch): void -- Sets the time, mix, softness, bend direction, compress, and stretch for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.
  - bendDirection: 1 or -1.

#### PathConstraintMixTimeline extends CurveTimeline implements ConstraintTimeline

Changes PathConstraintPose.mixRotate, PathConstraintPose.mixX, and PathConstraintPose.mixY.

Properties:
- ENTRIES = 4: int, static, readonly

Methods:
- PathConstraintMixTimeline(int frameCount, int bezierCount, int constraintIndex): PathConstraintMixTimeline
- setFrame(int frame, float time, float mixRotate, float mixX, float mixY): void -- Sets the time and color for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.

#### PathConstraintPositionTimeline extends ConstraintTimeline1

Changes PathConstraintPose.position.

Methods:
- PathConstraintPositionTimeline(int frameCount, int bezierCount, int constraintIndex): PathConstraintPositionTimeline

#### PathConstraintSpacingTimeline extends ConstraintTimeline1

Changes PathConstraintPose.spacing.

Methods:
- PathConstraintSpacingTimeline(int frameCount, int bezierCount, int constraintIndex): PathConstraintSpacingTimeline

#### PhysicsConstraintTimeline extends ConstraintTimeline1

The base class for most PhysicsConstraint timelines.

Methods:
- PhysicsConstraintTimeline(int frameCount, int bezierCount, int constraintIndex, long property): PhysicsConstraintTimeline
  - constraintIndex: -1 for all physics constraints in the skeleton.

#### PhysicsConstraintDampingTimeline extends PhysicsConstraintTimeline

Changes PhysicsConstraintPose.damping.

Methods:
- PhysicsConstraintDampingTimeline(int frameCount, int bezierCount, int constraintIndex): PhysicsConstraintDampingTimeline

#### PhysicsConstraintGravityTimeline extends PhysicsConstraintTimeline

Changes PhysicsConstraintPose.gravity.

Methods:
- PhysicsConstraintGravityTimeline(int frameCount, int bezierCount, int constraintIndex): PhysicsConstraintGravityTimeline

#### PhysicsConstraintInertiaTimeline extends PhysicsConstraintTimeline

Changes PhysicsConstraintPose.inertia.

Methods:
- PhysicsConstraintInertiaTimeline(int frameCount, int bezierCount, int constraintIndex): PhysicsConstraintInertiaTimeline

#### PhysicsConstraintMassTimeline extends PhysicsConstraintTimeline

Changes PhysicsConstraintPose.massInverse. The timeline values are not inverted.

Methods:
- PhysicsConstraintMassTimeline(int frameCount, int bezierCount, int constraintIndex): PhysicsConstraintMassTimeline

#### PhysicsConstraintMixTimeline extends PhysicsConstraintTimeline

Changes PhysicsConstraintPose.mix.

Methods:
- PhysicsConstraintMixTimeline(int frameCount, int bezierCount, int constraintIndex): PhysicsConstraintMixTimeline

#### PhysicsConstraintResetTimeline extends Timeline implements ConstraintTimeline

Resets a physics constraint when specific animation times are reached.

Methods:
- PhysicsConstraintResetTimeline(int frameCount, int constraintIndex): PhysicsConstraintResetTimeline
  - constraintIndex: -1 for all physics constraints in the skeleton.
- setFrame(int frame, float time): void -- Sets the time for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.

#### PhysicsConstraintStrengthTimeline extends PhysicsConstraintTimeline

Changes PhysicsConstraintPose.strength.

Methods:
- PhysicsConstraintStrengthTimeline(int frameCount, int bezierCount, int constraintIndex): PhysicsConstraintStrengthTimeline

#### PhysicsConstraintWindTimeline extends PhysicsConstraintTimeline

Changes PhysicsConstraintPose.wind.

Methods:
- PhysicsConstraintWindTimeline(int frameCount, int bezierCount, int constraintIndex): PhysicsConstraintWindTimeline

#### SliderTimeline extends ConstraintTimeline1

Changes SliderPose.time.

Methods:
- SliderTimeline(int frameCount, int bezierCount, int constraintIndex): SliderTimeline

#### SliderMixTimeline extends ConstraintTimeline1

Changes SliderPose.mix.

Methods:
- SliderMixTimeline(int frameCount, int bezierCount, int constraintIndex): SliderMixTimeline

#### TransformConstraintTimeline extends CurveTimeline implements ConstraintTimeline

Changes TransformConstraintPose.mixRotate, TransformConstraintPose.mixX, TransformConstraintPose.mixY, TransformConstraintPose.mixScaleX, TransformConstraintPose.mixScaleY, and TransformConstraintPose.mixShearY.

Properties:
- ENTRIES = 7: int, static, readonly

Methods:
- TransformConstraintTimeline(int frameCount, int bezierCount, int constraintIndex): TransformConstraintTimeline
- setFrame(int frame, float time, float mixRotate, float mixX, float mixY, float mixScaleX, float mixScaleY, float mixShearY): void -- Sets the time, rotate mix, translate mix, scale mix, and shear mix for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.

### DrawOrderTimeline extends Timeline

Changes the Skeleton.drawOrder.

Properties:
- drawOrders: int[][], readonly -- The draw order for each frame. See setFrame.

Methods:
- DrawOrderTimeline(int frameCount): DrawOrderTimeline
- setFrame(int frame, float time, int[] drawOrder nullable): void -- Sets the time and draw order for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.
  - drawOrder: Ordered Skeleton.slots indices, or null to use setup pose order.

#### DrawOrderFolderTimeline extends Timeline

Changes a subset of the Skeleton.drawOrder.

Properties:
- drawOrders: int[][], readonly -- The draw order for each frame. See setFrame.
- slots: int[], readonly -- The Skeleton.slots indices that this timeline affects, in setup order.

Methods:
- DrawOrderFolderTimeline(int frameCount, int[] slots, int slotCount): DrawOrderFolderTimeline
  - slots: Skeleton.slots indices controlled by this timeline, in setup order.
  - slotCount: The maximum number of slots in the skeleton.
- setFrame(int frame, float time, int[] drawOrder nullable): void -- Sets the time and draw order for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.
  - drawOrder: Ordered slots indices, or null to use setup pose order.

### EventTimeline extends Timeline

Fires an Event when specific animation times are reached.

Properties:
- events: Event[], readonly -- The event for each frame.

Methods:
- EventTimeline(int frameCount): EventTimeline
- setFrame(int frame, Event event): void -- Sets the time and event for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.

### SlotTimeline

An interface for timelines that change a slot's properties.

Properties:
- slotIndex: int, readonly -- The index of the slot in Skeleton.slots that will be changed when this timeline is applied.

#### AlphaTimeline extends CurveTimeline1 implements SlotTimeline

Changes alpha for a slot's SlotPose.color.

Methods:
- AlphaTimeline(int frameCount, int bezierCount, int slotIndex): AlphaTimeline

#### AttachmentTimeline extends Timeline implements SlotTimeline

Changes SlotPose.attachment.

Properties:
- attachmentNames: string[], readonly -- The attachment name for each frame. May contain null values to clear the attachment.

Methods:
- AttachmentTimeline(int frameCount, int slotIndex): AttachmentTimeline
- setFrame(int frame, float time, string attachmentName nullable): void -- Sets the time and attachment name for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.

#### DeformTimeline extends SlotCurveTimeline

Changes SlotPose.deform to deform a VertexAttachment.

Properties:
- attachment: VertexAttachment, readonly -- The attachment that will be deformed. See VertexAttachment.timelineAttachment.
- vertices: float[][], readonly -- The vertices for each frame.

Methods:
- DeformTimeline(int frameCount, int bezierCount, int slotIndex, VertexAttachment attachment): DeformTimeline
- setFrame(int frame, float time, float[] vertices): void -- Sets the time and vertices for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.
  - vertices: Vertex positions for an unweighted VertexAttachment, or deform offsets if it has weights.

#### RGBATimeline extends SlotCurveTimeline

Changes SlotPose.color.

Properties:
- ENTRIES = 5: int, static, readonly

Methods:
- RGBATimeline(int frameCount, int bezierCount, int slotIndex): RGBATimeline
- setFrame(int frame, float time, float r, float g, float b, float a): void -- Sets the time and color for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.

#### RGBA2Timeline extends SlotCurveTimeline

Changes SlotPose.color and SlotPose.darkColor for two color tinting.

Properties:
- ENTRIES = 8: int, static, readonly

Methods:
- RGBA2Timeline(int frameCount, int bezierCount, int slotIndex): RGBA2Timeline
- setFrame(int frame, float time, float r, float g, float b, float a, float r2, float g2, float b2): void -- Sets the time, light color, and dark color for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.

#### RGBTimeline extends SlotCurveTimeline

Changes RGB for a slot's SlotPose.color.

Properties:
- ENTRIES = 4: int, static, readonly

Methods:
- RGBTimeline(int frameCount, int bezierCount, int slotIndex): RGBTimeline
- setFrame(int frame, float time, float r, float g, float b): void -- Sets the time and color for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.

#### RGB2Timeline extends SlotCurveTimeline

Changes RGB for a slot's SlotPose.color and SlotPose.darkColor for two color tinting.

Properties:
- ENTRIES = 7: int, static, readonly

Methods:
- RGB2Timeline(int frameCount, int bezierCount, int slotIndex): RGB2Timeline
- setFrame(int frame, float time, float r, float g, float b, float r2, float g2, float b2): void -- Sets the time, light color, and dark color for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - time: The frame time in seconds.

#### SequenceTimeline extends Timeline implements SlotTimeline

Changes SlotPose.sequenceIndex for an attachment's Sequence.

Properties:
- ENTRIES = 3: int, static, readonly
- attachment: Attachment, readonly -- The attachment for which SlotPose.sequenceIndex will be set. See VertexAttachment.timelineAttachment.

Methods:
- SequenceTimeline(int frameCount, int slotIndex, Attachment attachment): SequenceTimeline
- setFrame(int frame, float time, SequenceMode mode, int index, float delay): void -- Sets the time, mode, index, and frame time for the specified frame.
  - frame: Between 0 and `frameCount`, inclusive.
  - delay: Seconds between frames.

#### SlotCurveTimeline extends CurveTimeline implements SlotTimeline

The base class for timelines that change any number of slot properties with a curve.

Methods:
- SlotCurveTimeline(int frameCount, int bezierCount, int slotIndex, long propertyIds): SlotCurveTimeline

## AnimationState

Applies animations over time, queues animations for later playback, mixes (crossfading) between animations, and applies multiple animations on top of each other (layering). See Applying Animations in the Spine Runtimes Guide.

Properties:
- data: AnimationStateData -- The AnimationStateData to look up mix durations.
- timeScale: float -- Multiplier for the delta time when the animation state is updated, causing time for all animations and mixes to play slower or faster. Defaults to 1. See TrackEntry.timeScale to affect a single animation.
- tracks: list<TrackEntry>, readonly -- The list of tracks that have had animations. May contain null entries for tracks that currently have no animation.

Methods:
- AnimationState(): AnimationState -- Creates an uninitialized AnimationState. The animation state data must be set before use.
- AnimationState(AnimationStateData data): AnimationState
- addAnimation(int trackIndex, string animationName, bool loop, float delay): TrackEntry -- Queues an animation by name. See addAnimation.
- addAnimation(int trackIndex, Animation animation, bool loop, float delay): TrackEntry -- Adds an animation to be played after the current or last queued animation for a track. If the track has no entries, this is equivalent to calling setAnimation.
  - delay: If > 0, sets TrackEntry.delay. If <= 0, the delay set is the duration of the previous track entry minus any mix duration (from data) plus the specified `delay` (ie the mix ends at (when `delay` = 0) or before (when `delay` < 0) the previous track entry duration). If the previous entry is looping, its next loop completion is used instead of its duration.
  - return: A track entry to allow further customization of animation playback. References to the track entry must not be kept after the AnimationStateListener.dispose event occurs.
- addEmptyAnimation(int trackIndex, float mixDuration, float delay): TrackEntry -- Adds an empty animation to be played after the current or last queued animation for a track, and sets the track entry's TrackEntry.mixDuration. If the track has no entries, it is equivalent to calling setEmptyAnimation. See setEmptyAnimation and Empty animations in the Spine Runtimes Guide.
  - delay: If > 0, sets TrackEntry.delay. If <= 0, the delay set is the duration of the previous track entry minus any mix duration plus the specified `delay` (ie the mix ends at (when `delay` = 0) or before (when `delay` < 0) the previous track entry duration). If the previous entry is looping, its next loop completion is used instead of its duration.
  - return: A track entry to allow further customization of animation playback. References to the track entry must not be kept after the AnimationStateListener.dispose event occurs.
- addListener(AnimationStateListener listener): void -- Adds a listener to receive events for all track entries.
- apply(Skeleton skeleton): bool -- Poses the skeleton using the track entry animations. The animation state is not changed, so can be applied to multiple skeletons to pose them identically.
  - return: True if any animations were applied.
- clearListenerNotifications(): void -- Discards all listener notifications that have not yet been delivered. This can be useful to call from an AnimationStateListener when it is known that further notifications that may have been already queued for delivery are not wanted because new animations are being set.
- clearListeners(): void -- Removes all listeners added with addListener.
- clearNext(TrackEntry entry): void -- Removes TrackEntry.next and all entries after it for the specified entry.
- clearTrack(int trackIndex): void -- Removes all animations from the track, leaving skeletons in their current pose. Usually you want to use setEmptyAnimation to mix the skeletons back to the setup pose, rather than leaving them in their current pose.
- clearTracks(): void -- Removes all animations from all tracks, leaving skeletons in their current pose. Usually you want to use setEmptyAnimations to mix the skeletons back to the setup pose, rather than leaving them in their current pose.
- getCurrent(int trackIndex): TrackEntry nullable -- Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing.
- removeListener(AnimationStateListener listener): void -- Removes the listener added with addListener.
- setAnimation(int trackIndex, string animationName, bool loop): TrackEntry -- Sets an animation by name. See setAnimation.
- setAnimation(int trackIndex, Animation animation, bool loop): TrackEntry -- Sets the current animation for a track, discarding any queued animations. If the formerly current track entry is for the same animation and was never applied to a skeleton, it is replaced (not mixed from).
  - loop: If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its duration. In either case TrackEntry.trackEnd determines when the track is cleared.
  - return: A track entry to allow further customization of animation playback. References to the track entry must not be kept after the AnimationStateListener.dispose event occurs.
- setEmptyAnimation(int trackIndex, float mixDuration): TrackEntry -- Sets an empty animation for a track, discarding any queued animations, and sets the track entry's TrackEntry.mixDuration. An empty animation has no timelines and serves as a placeholder for mixing in or out. Mixing out is done by setting an empty animation with a mix duration using either setEmptyAnimation, setEmptyAnimations, or addEmptyAnimation. Mixing to an empty animation causes the previous animation to be applied less and less over the mix duration. Properties keyed in the previous animation transition to the value from lower tracks or to the setup pose value if no lower tracks key the property. A mix duration of 0 still needs to be applied one more time to mix out, so the properties it was animating are reverted. Mixing in is done by first setting an empty animation, then adding an animation using addAnimation with the desired delay (an empty animation has a duration of 0) and on the returned track entry set TrackEntry.setMixDuration. Mixing from an empty animation causes the new animation to be applied more and more over the mix duration. Properties keyed in the new animation transition from the value from lower tracks or from the setup pose value if no lower tracks key the property to the value keyed in the new animation. See Empty animations in the Spine Runtimes Guide.
- setEmptyAnimations(float mixDuration): void -- Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix duration. See Empty animations in the Spine Runtimes Guide.
- update(float delta): void -- Increments each track entry TrackEntry.trackTime, setting queued animations as current if needed.

### AnimationStateData

Stores mix (crossfade) durations to be applied when AnimationState animations are changed on the same track.

Properties:
- defaultMix: float -- The mix duration to use when no mix duration has been defined between two animations.
- skeletonData: SkeletonData, readonly -- The SkeletonData to look up animations when they are specified by name.

Methods:
- AnimationStateData(SkeletonData skeletonData): AnimationStateData
- getMix(Animation from, Animation to): float -- Returns the mix duration to use when changing from the specified animation to the other on the same track, or the defaultMix if no mix duration has been set.
- setMix(Animation from, Animation to, float duration): void -- Sets the mix duration when changing from the specified animation to the other. See TrackEntry.mixDuration.
- setMix(string fromName, string toName, float duration): void -- Sets a mix duration by animation name. See setMix.

### AnimationStateListener

The interface to implement for receiving TrackEntry events. It is always safe to call AnimationState methods when receiving events. TrackEntry events are collected during AnimationState.update and AnimationState.apply and fired only after those methods are finished. See TrackEntry.listener and AnimationState.addListener.

Methods:
- complete(TrackEntry entry): void -- Invoked every time this entry's animation completes a loop. This may occur during mixing (after interrupt). If this entry's TrackEntry.mixingTo is not null, this entry is mixing out (it is not the current entry). Because this event is triggered at the end of AnimationState.apply, any animations set in response to the event won't be applied until the next time the AnimationState is applied.
- dispose(TrackEntry entry): void -- Invoked when this entry will be disposed. This may occur without the entry ever being set as the current entry. References to the entry should not be kept after `dispose` is called, as it may be destroyed or reused.
- end(TrackEntry entry): void -- Invoked when this entry will never be applied again. This only occurs if this entry has previously been set as the current entry (start was invoked).
- event(TrackEntry entry, Event event): void -- Invoked when this entry's animation triggers an event. This may occur during mixing (after interrupt), see TrackEntry.eventThreshold. Because this event is triggered at the end of AnimationState.apply, any animations set in response to the event won't be applied until the next time the AnimationState is applied.
- interrupt(TrackEntry entry): void -- Invoked when another entry has replaced this entry as the current entry. This entry may continue being applied for mixing.
- start(TrackEntry entry): void -- Invoked when this entry has been set as the current entry. end will occur when this entry will no longer be applied. When this event is triggered by calling AnimationState.setAnimation, take care not to call AnimationState.update until after the TrackEntry has been configured.

### TrackEntry

Stores settings and other state for the playback of an animation on an AnimationState track. References to a track entry must not be kept after the AnimationStateListener.dispose event occurs.

Properties:
- additive: bool -- When true, timelines in this animation that support additive have their values added to the setup or current pose values instead of replacing them. Additive can be set for a new track entry only before AnimationState.apply is next called.
- alpha: float -- Values < 1 mix this animation with the skeleton's current pose (either the setup pose or the pose from lower tracks). Defaults to 1, which overwrites the skeleton's current pose with this animation. Alpha should be 1 on track 0. See alphaAttachmentThreshold.
- alphaAttachmentThreshold: float -- When the computed alpha is greater than `alphaAttachmentThreshold`, attachment timelines are applied. The computed alpha includes alpha and the mix percentage. Defaults to 0, so attachment timelines are always applied.
- animation: Animation -- The animation to apply for this track entry.
- animationEnd: float -- Seconds for the last frame of this animation. Non-looping animations won't play past this time. Looping animations will loop back to animationStart at this time. Defaults to the animation Animation.duration.
- animationLast: float -- The time in seconds this animation was last applied. Some timelines use this for one-time triggers. Eg, when this animation is applied, event timelines will fire all events between the `animationLast` time (exclusive) and `animationTime` (inclusive). Defaults to -1 to ensure triggers on frame 0 happen the first time this animation is applied.
- animationStart: float -- Seconds when this animation starts, both initially and after looping. Defaults to 0. When changing the `animationStart` time, it often makes sense to set animationLast to the same value to prevent timeline keys before the start time from triggering.
- animationTime: float, readonly -- Uses trackTime to compute the `animationTime`. When the `trackTime` is 0, the `animationTime` is equal to the `animationStart` time. The `animationTime` is between animationStart and animationEnd, except if this track entry is non-looping and animationEnd is >= to the Animation.duration, then `animationTime` continues to increase past animationEnd.
- delay: float -- Seconds to postpone playing the animation. Must be >= 0. When this track entry is the current track entry, `delay` postpones incrementing the trackTime. When this track entry is queued, `delay` is the time from the start of the previous animation to when this track entry will become the current track entry (ie when the previous track entry trackTime >= this track entry's `delay`). timeScale affects the delay. When passing `delay` <= 0 to AnimationState.addAnimation this `delay` is set using a mix duration from AnimationStateData. To change the mixDuration afterward, use setMixDuration so this `delay` is adjusted.
- eventThreshold: float -- When the mix percentage (mixTime / mixDuration) is less than the `eventThreshold`, event timelines are applied while this animation is being mixed out. Defaults to 0, so event timelines are not applied while this animation is being mixed out.
- listener: AnimationStateListener, nullable -- The listener for events generated by this track entry, or null. A track entry returned from AnimationState.setAnimation is already the current animation for the track, so the callback for AnimationStateListener.start will not be called.
- loop: bool -- If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its duration.
- mixAttachmentThreshold: float -- When the mix percentage (mixTime / mixDuration) is less than the `mixAttachmentThreshold`, attachment timelines are applied while this animation is being mixed out. Defaults to 0, so attachment timelines are not applied while this animation is being mixed out.
- mixDrawOrderThreshold: float -- When the mix percentage (mixTime / mixDuration) is less than the `mixDrawOrderThreshold`, draw order timelines are applied while this animation is being mixed out. Defaults to 0, so draw order timelines are not applied while this animation is being mixed out.
- mixDuration: float -- Seconds for mixing from the previous animation to this animation. Defaults to the value provided by AnimationStateData.getMix based on the animation before this animation (if any). A mix duration of 0 still needs to be applied one more time to mix out, so the properties it was animating are reverted. A mix duration of 0 can be set at any time to end the mix on the next AnimationState.update. The `mixDuration` can be set manually rather than use the value from AnimationStateData.getMix. In that case, the `mixDuration` can be set for a new track entry only before AnimationState.update is next called. When using AnimationState.addAnimation with a `delay` <= 0, the delay is set using the mix duration from AnimationState.data. If `mixDuration` is set afterward, the delay needs to be adjusted: entry.mixDuration = 0.25;
 entry.delay = entry.previous.getTrackComplete() - entry.mixDuration + 0; Alternatively, use setMixDuration to set both the mix duration and recompute the delay:
 entry.setMixDuration(0.25f, 0); // mixDuration, delay
- mixTime: float -- Seconds elapsed from 0 to the mixDuration when mixing from the previous animation to this animation. May be slightly more than `mixDuration` when the mix is complete.
- mixingFrom: TrackEntry, nullable, readonly -- The track entry for the previous animation when mixing to this animation, or null if no mixing is currently occurring. When mixing from multiple animations, `mixingFrom` makes up a doubly linked list.
- mixingTo: TrackEntry, nullable, readonly -- The track entry for the next animation when mixing from this animation, or null if no mixing is currently occurring. When mixing to multiple animations, `mixingTo` makes up a doubly linked list.
- next: TrackEntry, nullable, readonly -- The animation queued to start after this animation, or null if there is none. `next` makes up a doubly linked list. See AnimationState.clearNext to truncate the list.
- previous: TrackEntry, nullable, readonly -- The animation queued to play before this animation, or null. `previous` makes up a doubly linked list.
- reverse: bool -- If true, the animation will be applied in reverse and events will not be fired.
- shortestRotation: bool -- If true, mixing rotation between tracks always uses the shortest rotation direction. If the rotation is animated, the shortest rotation direction may change during the mix. If false, the shortest rotation direction is remembered when the mix starts and the same direction is used for the rest of the mix. Defaults to false. See resetRotationDirections.
- timeScale: float -- Multiplier for the delta time when this track entry is updated, causing time for this animation to pass slower or faster. Defaults to 1. Values < 0 are not supported. To play an animation in reverse, use reverse. mixTime is not affected by track entry time scale, so mixDuration may need to be adjusted to match the animation speed. When using AnimationState.addAnimation with a `delay` <= 0, the delay is set using the mix duration from AnimationState.data, assuming time scale to be 1. If the time scale is not 1, the delay may need to be adjusted. See AnimationState.timeScale to affect all animations.
- trackComplete: float, readonly -- If this track entry is non-looping, this is the track time in seconds when animationEnd is reached, or the current trackTime if it has already been reached. If this track entry is looping, this is the track time when this animation will reach its next animationEnd (the next loop completion).
- trackEnd: float -- The track time in seconds when this animation will be removed from the track. Defaults to the highest possible float value, meaning the animation will be applied until a new animation is set or the track is cleared. If the track end time is reached, no other animations are queued for playback, and mixing from any previous animations is complete, then the properties keyed by the animation are set to the setup pose and the track is cleared. Usually you want to use AnimationState.addEmptyAnimation rather than have the animation abruptly cease being applied.
- trackIndex: int, readonly -- The index of the track where this track entry is either current or queued. See AnimationState.getCurrent.
- trackTime: float -- Current time in seconds this track entry has been the current track entry. The track time determines animationTime. The track time can be set to start the animation at a time other than 0, without affecting looping.

Methods:
- isComplete(): bool -- Returns true if at least one loop has been completed. See AnimationStateListener.complete.
- isEmptyAnimation(): bool -- Returns true if this entry is for the empty animation. See AnimationState.setEmptyAnimation, AnimationState.addEmptyAnimation, and AnimationState.setEmptyAnimations.
- isNextReady(): bool -- Returns true if there is a next track entry and it will become the current track entry during the next AnimationState.update.
- resetRotationDirections(): void -- When shortestRotation is false, this clears the directions for mixing this entry's rotation. This can be useful to avoid bones rotating the long way around when using alpha and starting animations on other tracks. Mixing involves finding a rotation between two others. There are two possible solutions: the short or the long way around. When the two rotations change over time, which direction is the short or long way can also change. If the short way was always chosen, bones flip to the other side when that direction became the long way. TrackEntry chooses the short way the first time it is applied and remembers that direction. Resetting that direction makes it choose a new short way on the next apply.
- setMixDuration(float mixDuration, float delay): void -- Sets both mixDuration and delay.
  - delay: If > 0, sets delay. If <= 0, the delay set is the duration of the previous track entry minus the specified mix duration plus the specified `delay` (ie the mix ends at (when `delay` = 0) or before (when `delay` < 0) the previous track entry duration). If the previous entry is looping, its next loop completion is used instead of its duration.
- wasApplied(): bool -- Returns true if this track entry has been applied at least once. See AnimationState.apply.

## Attachment

The base class for all attachments. Multiple Skeleton instances, slots, or skins can use the same attachments.

Properties:
- name: string, readonly -- The attachment's name.
- timelineAttachment: Attachment, nullable -- Timelines for the timeline attachment are also applied to this attachment. May be null if no attachment-specific timelines should be applied.

Methods:
- Attachment(string name): Attachment
- copy(): Attachment -- Returns a copy of the attachment.

### BoundingBoxAttachment extends VertexAttachment

An attachment with vertices that make up a polygon. Can be used for hit detection, creating physics bodies, spawning particle effects, and more. See SkeletonBounds and Bounding Boxes in the Spine User Guide.

Properties:
- color: Color -- The color of the bounding box as it was in Spine, or a default color if nonessential data was not exported. Bounding boxes are not usually rendered at runtime.

Methods:
- BoundingBoxAttachment(string name): BoundingBoxAttachment

### ClippingAttachment extends VertexAttachment

An attachment with vertices that make up a polygon used for clipping the rendering of other attachments.

Properties:
- color: Color -- The color of the clipping attachment as it was in Spine, or a default color if nonessential data was not exported. Clipping attachments are not usually rendered at runtime.
- convex: bool -- When true the clipping polygon is treated as convex for more efficient clipping. If the polygon deforms to concave then the convex hull is used. When false the clipping polygon can be concave and if so has an additional CPU cost. Inverse clipping always uses convex.
- endSlot: SlotData, nullable -- Clipping is performed between the clipping attachment's slot and the end slot. If null, clipping is done until the end of the skeleton's rendering.
- inverse: bool -- When false, everything inside the clipping polygon is visible. When true, everything outside the clipping polygon is visible and clipping is convex.

Methods:
- ClippingAttachment(string name): ClippingAttachment

### HasSequence

Interface for an attachment that gets 1 or more texture regions from a Sequence.

Properties:
- color: Color -- The color the attachment is tinted, to be combined with SlotPose.color.
- path: string -- The base path for the attachment's texture region.
- sequence: Sequence, readonly -- The sequence that provides texture regions, UVs, and vertex offsets for rendering this attachment.

Methods:
- updateSequence(): void -- Calls Sequence.update on this attachment's sequence.

### MeshAttachment extends VertexAttachment implements HasSequence

An attachment that displays a textured mesh. A mesh has hull vertices and internal vertices within the hull. Holes are not supported. Each vertex has UVs (texture coordinates) and triangles that are used to map an image on to the mesh. See Mesh attachments in the Spine User Guide.

Properties:
- edges: int[], nullable -- Vertex index pairs describing edges for controlling triangulation, or null if nonessential data was not exported. Mesh triangles do not cross edges. Triangulation is not performed at runtime.
- height: float -- The height of the mesh's image, or zero if nonessential data was not exported.
- hullLength: int -- The number of entries at the beginning of vertices that make up the mesh hull.
- parentMesh: MeshAttachment, nullable -- The parent mesh if this is a linked mesh, else null. A linked mesh shares the bones, vertices, regionUVs, triangles, hullLength, edges, width, and height with the parent mesh, but may have a different name or path, and therefore a different texture region.
- regionUVs: float[] -- The UV pair for each vertex, normalized within the texture region.
- triangles: int[] -- Triplets of vertex indices which describe the mesh's triangulation.
- width: float -- The width of the mesh's image, or zero if nonessential data was not exported.

Methods:
- MeshAttachment(string name, Sequence sequence): MeshAttachment
- newLinkedMesh(): MeshAttachment -- Returns a new mesh with the parentMesh set to this mesh's parent mesh, if any, else to this mesh.

### PathAttachment extends VertexAttachment

An attachment whose vertices make up a composite Bezier curve. See PathConstraint and Paths in the Spine User Guide.

Properties:
- closed: bool -- If true, the start and end knots are connected.
- color: Color -- The color of the path as it was in Spine, or a default color if nonessential data was not exported. Paths are not usually rendered at runtime.
- constantSpeed: bool -- If true, additional calculations are performed to make computing positions along the path more accurate so movement along the path has a constant speed.
- lengths: float[] -- The lengths along the path in the setup pose from the start of the path to the end of each Bezier curve.

Methods:
- PathAttachment(string name): PathAttachment

### PointAttachment extends Attachment

An attachment which is a single point and a rotation. This can be used to spawn projectiles, particles, etc. A bone can be used in similar ways, but a PointAttachment is slightly less expensive to compute and can be hidden, shown, and placed in a skin. See Point Attachments in the Spine User Guide.

Properties:
- color: Color -- The color of the point attachment as it was in Spine, or a default clor if nonessential data was not exported. Point attachments are not usually rendered at runtime.
- rotation: float -- The local rotation in degrees, counter clockwise.
- x: float -- The local x position.
- y: float -- The local y position.

Methods:
- PointAttachment(string name): PointAttachment
- computeWorldPosition(BonePose bone, 2-tuple point): 2-tuple -- Computes the world position from the local position.
- computeWorldRotation(BonePose bone): float -- Computes the world rotation from the local rotation.

### RegionAttachment extends Attachment implements HasSequence

An attachment that displays a textured quadrilateral. See Region attachments in the Spine User Guide.

Properties:
- height: float -- The height of the region attachment in Spine.
- rotation: float -- The local rotation in degrees, counter clockwise.
- scaleX: float -- The local scaleX.
- scaleY: float -- The local scaleY.
- width: float -- The width of the region attachment in Spine.
- x: float -- The local x translation.
- y: float -- The local y translation.

Methods:
- RegionAttachment(string name, Sequence sequence): RegionAttachment
- computeWorldVertices(Slot slot, float[] vertexOffsets, float[] worldVertices, int offset, int stride): void -- Transforms the attachment's four vertices to world coordinates. See World transforms in the Spine Runtimes Guide.
  - vertexOffsets: The vertex Sequence.getOffsets.
  - worldVertices: The output world vertices. Must have a length >= `offset` + 8.
  - offset: The `worldVertices` index to begin writing values.
  - stride: The number of `worldVertices` entries between the value pairs written.
- getOffsets(SlotPose pose): float[] -- Returns the vertex Sequence.getOffsets for the specified slot pose.

### VertexAttachment extends Attachment

Base class for an attachment with vertices that are transformed by one or more bones and can be deformed by SlotPose.deform.

Properties:
- bones: int[], nullable -- The bones that affect the vertices. The entries are, for each vertex, the number of bones affecting the vertex followed by that many bone indices, which is Skeleton.bones index. Null if this attachment has no weights.
- id: int, readonly -- Returns a unique ID for this attachment.
- vertices: float[] -- The vertex positions in the bone's coordinate system. For a non-weighted attachment, the values are `x,y` pairs for each vertex. For a weighted attachment, the values are `x,y,weight` triplets for each bone affecting each vertex.
- worldVerticesLength: int -- The maximum number of world vertex values that can be output by computeWorldVertices using the `count` parameter.

Methods:
- VertexAttachment(string name): VertexAttachment
- VertexAttachment(VertexAttachment other): VertexAttachment -- Copy constructor.
- computeWorldVertices(Skeleton skeleton, Slot slot, int start, int count, float[] worldVertices, int offset, int stride): void -- Transforms the attachment's local vertices to world coordinates. If SlotPose.deform is not empty, it is used to deform the vertices. See World transforms in the Spine Runtimes Guide.
  - start: The index of the first vertices value to transform. Each vertex has 2 values, x and y.
  - count: The number of world vertex values to output. Must be <= worldVerticesLength - `start`.
  - worldVertices: The output world vertices. Must have a length >= `offset` + `count` * `stride` / 2.
  - offset: The `worldVertices` index to begin writing values.
  - stride: The number of `worldVertices` entries between the value pairs written.

## AttachmentLoader

The interface which can be implemented to customize creating and populating attachments. See Loading skeleton data in the Spine Runtimes Guide.

Methods:
- newBoundingBoxAttachment(Skin skin, string name): BoundingBoxAttachment nullable
  - return: May be null to not load the attachment.
- newClippingAttachment(Skin skin, string name): ClippingAttachment nullable
  - return: May be null to not load the attachment.
- newMeshAttachment(Skin skin, string name, string path, Sequence sequence): MeshAttachment nullable
  - return: May be null to not load the attachment. In that case null should also be returned for child meshes.
- newPathAttachment(Skin skin, string name): PathAttachment nullable
  - return: May be null to not load the attachment.
- newPointAttachment(Skin skin, string name): PointAttachment nullable
  - return: May be null to not load the attachment.
- newRegionAttachment(Skin skin, string name, string path, Sequence sequence): RegionAttachment nullable
  - return: May be null to not load the attachment.

### AtlasAttachmentLoader implements AttachmentLoader

An AttachmentLoader that configures attachments using texture regions from an TextureAtlas. See Loading skeleton data in the Spine Runtimes Guide.

Properties:
- allowMissingRegions: bool, readonly -- If true, findRegion may return null. If false, an error is raised if the texture region is not found. Default is false.

Methods:
- AtlasAttachmentLoader(TextureAtlas atlas): AtlasAttachmentLoader
- AtlasAttachmentLoader(TextureAtlas atlas, bool allowMissingRegions): AtlasAttachmentLoader
- findRegion(string name, string path): TextureAtlasRegion -- Looks for the region with the specified path. If not found and allowMissingRegions is false, an error is raised.
- findRegions(string name, string basePath, Sequence sequence): void -- Sets each Sequence.regions by calling findRegion for each texture region using Sequence.getPath.

## BoneData extends PosedData

The setup pose for a bone.

Properties:
- color: Color -- The color of the bone as it was in Spine, or a default color if nonessential data was not exported. Bones are not usually rendered at runtime.
- icon: string, nullable -- The bone icon name as it was in Spine, or null if nonessential data was not exported.
- index: int, readonly -- The Skeleton.bones index.
- length: float -- The bone's length.
- parent: BoneData, nullable, readonly -- The parent bone, or null if this bone is the root.
- visible: bool -- False if the bone was hidden in Spine and nonessential data was exported. Does not affect runtime rendering.

Methods:
- BoneData(int index, string name, BoneData parent nullable): BoneData
- BoneData(BoneData data, BoneData parent nullable): BoneData -- Copy constructor.

### Bone extends PosedActive

A node in a skeleton's hierarchy with a transform that affects its children and their attachments. A bone has a number of poses: 
data: The setup pose. pose: The unconstrained local pose. Set by animations and application code. appliedPose: The local pose to use for rendering. Possibly modified by constraints. World transform: the local pose combined with the parent world transform. Computed on a pose by BonePose.updateWorldTransform and Skeleton.updateWorldTransform.

Properties:
- children: list<Bone>, readonly -- The immediate children of this bone.
- parent: Bone, nullable, readonly -- The parent bone, or null if this is the root bone.

Methods:
- Bone(BoneData data, Bone parent nullable): Bone
- Bone(Bone bone, Bone parent nullable): Bone -- Copy constructor. Does not copy the children bones.

### BonePose implements Pose, Update

The applied local pose and world transform for a bone. This is the Bone.pose with constraints applied and the world transform computed by Skeleton.updateWorldTransform and updateWorldTransform. If the world transform is changed, call updateLocalTransform before using the local transform. The local transform may be needed by other code (eg to apply another constraint). After changing the world transform, call updateWorldTransform on every descendant bone. It may be more convenient to modify the local transform instead, then call Skeleton.updateWorldTransform to update the world transforms for all bones and apply constraints.

Properties:
- a: float -- The world transform `[a b][c d]` x-axis x component.
- b: float -- The world transform `[a b][c d]` y-axis x component.
- c: float -- The world transform `[a b][c d]` x-axis y component.
- d: float -- The world transform `[a b][c d]` y-axis y component.
- inherit: Inherit -- Determines how parent world transforms affect this bone.
- rotation: float -- The local rotation in degrees, counter clockwise.
- scaleX: float -- The local scaleX.
- scaleY: float -- The local scaleY.
- shearX: float -- The local shearX.
- shearY: float -- The local shearY.
- worldRotationX: float, readonly -- The world rotation for the X axis, calculated using a and c. This is the direction the bone is pointing.
- worldRotationY: float, readonly -- The world rotation for the Y axis, calculated using b and d.
- worldScaleX: float, readonly -- The magnitude (always positive) of the world scale X, calculated using a and c.
- worldScaleY: float, readonly -- The magnitude (always positive) of the world scale Y, calculated using b and d.
- worldX: float -- The world X position.
- worldY: float -- The world Y position.
- x: float -- The local x translation.
- y: float -- The local y translation.

Methods:
- localToWorld(2-tuple local): 2-tuple -- Transforms a point from the bone's local coordinates to world coordinates.
- localToWorldRotation(float localRotation): float -- Transforms a local rotation to a world rotation.
- parentToWorld(2-tuple world): 2-tuple -- Transforms a point from the parent bone's coordinates to world coordinates.
- rotateWorld(float degrees): void -- Rotates the world transform the specified amount.
- setPosition(float x, float y): void -- Sets local x and y translation.
- setScale(float scaleX, float scaleY): void -- Sets local scaleX and scaleY.
- setScale(float scale): void -- Sets local scaleX and scaleY to the same value.
- updateLocalTransform(Skeleton skeleton): void -- Computes the local transform values from the world transform. Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The local transform after calling this method is equivalent to the local transform used to compute the world transform, but may not be identical.
- updateWorldTransform(Skeleton skeleton): void -- Computes the world transform using the parent bone's world transform and this applied local pose. Child bones are not updated. See World transforms in the Spine Runtimes Guide.
- validateLocalTransform(Skeleton skeleton): void -- If the world transform has been modified by constraints and the local transform no longer matches, updateLocalTransform is called. Call this after Skeleton.updateWorldTransform before using the applied local transform.
- worldToLocal(2-tuple world): 2-tuple -- Transforms a point from world coordinates to the bone's local coordinates.
- worldToLocalRotation(float worldRotation): float -- Transforms a world rotation to a local rotation.
- worldToParent(2-tuple world): 2-tuple -- Transforms a point from world coordinates to the parent bone's local coordinates.

### Inherit

Determines how a bone inherits world transforms from parent bones.

Values:
- normal
- onlyTranslation
- noRotationOrReflection
- noScale
- noScaleOrReflection

## ConstraintData extends PosedData

Methods:
- ConstraintData(string name, Pose setup): ConstraintData
- create(Skeleton skeleton): Constraint

### Constraint extends PosedActive implements Update

Methods:
- Constraint(ConstraintData data, Pose pose, Pose constrained): Constraint
- copy(Skeleton skeleton): Constraint

### IkConstraintData extends ConstraintData

Stores the setup pose for an IkConstraint. See IK constraints in the Spine User Guide.

Properties:
- bones: list<BoneData>, readonly -- The bones that are constrained by this IK constraint.
- target: BoneData -- The bone that is the IK target.
- uniform: bool -- When true and IkConstraintPose.compress or IkConstraintPose.stretch is used, the bone is scaled on both the X and Y axes.

Methods:
- IkConstraintData(string name): IkConstraintData

#### IkConstraint extends Constraint

Adjusts the local rotation of 1 or 2 constrained bones so the world position of the tip of the last bone is as close to the target bone as possible. See IK constraints in the Spine User Guide.

Properties:
- bones: list<BonePose>, readonly -- The 1 or 2 bones that will be modified by this IK constraint.
- target: Bone -- The bone that is the IK target.

Methods:
- IkConstraint(IkConstraintData data, Skeleton skeleton): IkConstraint
- apply(Skeleton skeleton, BonePose parent, BonePose child, float targetX, float targetY, int bendDir, bool stretch, bool uniform, float softness, float mix): void, static -- Applies 2 bone IK. The target is specified in the world coordinate system.
  - child: A direct descendant of the parent bone.
- apply(Skeleton skeleton, BonePose bone, float targetX, float targetY, bool compress, bool stretch, bool uniform, float mix): void, static -- Applies 1 bone IK. The target is specified in the world coordinate system.

#### IkConstraintPose implements Pose

Stores a pose for an IK constraint.

Properties:
- bendDirection: int -- For two bone IK, controls the bend direction of the IK bones, either 1 or -1.
- compress: bool -- For one bone IK, when true and the target is too close, the bone is scaled to reach it.
- mix: float -- A percentage (0-1) that controls the mix between the constrained and unconstrained rotation. For two bone IK: if the parent bone has local nonuniform scale, the child bone's local Y translation is set to 0.
- softness: float -- For two bone IK, the target bone's distance from the maximum reach of the bones where rotation begins to slow. The bones will not straighten completely until the target is this far out of range.
- stretch: bool -- When true and the target is out of range, the parent bone is scaled to reach it. For two bone IK: 1) the child bone's local Y translation is set to 0, 2) stretch is not applied if softness is > 0, and 3) if the parent bone has local nonuniform scale, stretch is not applied.

### PathConstraintData extends ConstraintData

Stores the setup pose for a PathConstraint. See Path constraints in the Spine User Guide.

Properties:
- bones: list<BoneData>, readonly -- The bones that will be modified by this path constraint.
- offsetRotation: float -- An offset added to the constrained bone rotation.
- positionMode: PositionMode -- The mode for positioning the first bone on the path.
- rotateMode: RotateMode -- The mode for adjusting the rotation of the bones.
- slot: SlotData -- The slot whose path attachment will be used to constrained the bones.
- spacingMode: SpacingMode -- The mode for positioning the bones after the first bone on the path.

Methods:
- PathConstraintData(string name): PathConstraintData

#### PathConstraint extends Constraint

Adjusts the rotation, translation, and scale of the constrained bones so they follow a PathAttachment. See Path constraints in the Spine User Guide.

Properties:
- bones: list<BonePose>, readonly -- The bones that will be modified by this path constraint.
- slot: Slot -- The slot whose path attachment will be used to constrained the bones.

Methods:
- PathConstraint(PathConstraintData data, Skeleton skeleton): PathConstraint

#### PathConstraintPose implements Pose

Stores a pose for a path constraint.

Properties:
- mixRotate: float -- A percentage (0-1) that controls the mix between the constrained and unconstrained rotation.
- mixX: float -- A percentage (0-1) that controls the mix between the constrained and unconstrained translation X.
- mixY: float -- A percentage (0-1) that controls the mix between the constrained and unconstrained translation Y.
- position: float -- The position along the path.
- spacing: float -- The spacing between bones.

#### PositionMode

Controls how the first bone is positioned along the path. See Position mode in the Spine User Guide.

Values:
- fixed
- percent

#### RotateMode

Controls how bones are rotated, translated, and scaled to match the path. See Rotate mode in the Spine User Guide.

Values:
- tangent
- chain
- chainScale: When chain scale, constrained bones should all have the same parent. That way when the path constraint scales a bone, it doesn't affect other constrained bones.

#### SpacingMode

Controls how bones after the first bone are positioned along the path. See Spacing mode in the Spine User Guide.

Values:
- length
- fixed
- percent
- proportional

### PhysicsConstraintData extends ConstraintData

Stores the setup pose for a PhysicsConstraint. See Physics constraints in the Spine User Guide.

Properties:
- bone: BoneData -- The bone constrained by this physics constraint.
- dampingGlobal: bool -- True when this constraint's damping is controlled by global slider timelines.
- gravityGlobal: bool -- True when this constraint's gravity is controlled by global slider timelines.
- inertiaGlobal: bool -- True when this constraint's inertia is controlled by global slider timelines.
- limit: float -- Movement greater than the limit will not have a greater affect on physics.
- massGlobal: bool -- True when this constraint's mass is controlled by global slider timelines.
- mixGlobal: bool -- True when this constraint's mix is controlled by global slider timelines.
- rotate: float -- Physics influence on rotation, 0-1.
- scaleX: float -- Physics influence on scaleX, 0-1.
- shearX: float -- Physics influence on shearX, 0-1.
- step: float -- The time in milliseconds required to advanced the physics simulation one step.
- strengthGlobal: bool -- True when this constraint's strength is controlled by global slider timelines.
- windGlobal: bool -- True when this constraint's wind is controlled by global slider timelines.
- x: float -- Physics influence on x translation, 0-1.
- y: float -- Physics influence on y translation, 0-1.

Methods:
- PhysicsConstraintData(string name): PhysicsConstraintData

#### PhysicsConstraint extends Constraint

Applies physics to a bone. See Physics constraints in the Spine User Guide.

Properties:
- bone: BonePose -- The bone constrained by this physics constraint.

Methods:
- PhysicsConstraint(PhysicsConstraintData data, Skeleton skeleton): PhysicsConstraint
- reset(Skeleton skeleton): void -- Resets all physics state that was the result of previous movement. Use this after moving a bone to prevent physics from reacting to the movement.
- rotate(float x, float y, float degrees): void -- Rotates the physics constraint so the next update forces are applied as if the bone rotated around the specified point in world space.
- translate(float x, float y): void -- Translates the physics constraint so the next update forces are applied as if the bone moved an additional amount in world space.

#### PhysicsConstraintPose implements Pose

Stores a pose for a physics constraint.

Properties:
- damping: float -- Reduces the speed of physics movements, with more of a reduction at higher speeds.
- gravity: float -- Applies a constant force along the Skeleton.gravityX, Skeleton.gravityY vector.
- inertia: float -- Controls how much bone movement is converted into physics movement.
- massInverse: float -- Determines susceptibility to acceleration.
- mix: float -- A percentage (0+) that controls the mix between the constrained and unconstrained poses.
- strength: float -- The amount of force used to return properties to the unconstrained value.
- wind: float -- Applies a constant force along the Skeleton.windX, Skeleton.windY vector.

### SliderData extends ConstraintData

Stores the setup pose for a Slider.

Properties:
- additive: bool -- When true, the animation is applied by adding it to the current pose rather than overwriting it.
- animation: Animation -- The animation the slider will apply.
- bone: BoneData, nullable -- When set, the bone's transform property is used to set the slider's SliderPose.time.
- local: bool -- When true and a bone is set, the bone's local transform property is read instead of its world transform.
- loop: bool -- When true, the animation repeats after its duration, otherwise the last frame is used.
- offset: float -- When a bone is set, the offset is added to the property.
- property: FromProperty, nullable -- When a bone is set, the specified transform property is used to set the slider's SliderPose.time.
- scale: float -- When a bone is set, this is the scale of the property value in relation to the slider time.

Methods:
- SliderData(string name): SliderData

#### Slider extends Constraint

Applies an animation based on either the slider's SliderPose.time or a bone's transform property. See Sliders in the Spine User Guide.

Properties:
- bone: Bone -- When set, the bone's transform property is used to set the slider's SliderPose.time.

Methods:
- Slider(SliderData data, Skeleton skeleton): Slider

#### SliderPose implements Pose

Stores a pose for a slider.

Properties:
- mix: float -- A percentage that controls the mix between the constrained and unconstrained poses.
- time: float -- The time in the SliderData.animation to apply the animation.

### TransformConstraintData extends ConstraintData

Stores the setup pose for a TransformConstraint. See Transform constraints in the Spine User Guide.

Properties:
- ROTATION = 0: int, static, readonly
- X = 1: int, static, readonly
- Y = 2: int, static, readonly
- SCALEX = 3: int, static, readonly
- SCALEY = 4: int, static, readonly
- SHEARY = 5: int, static, readonly
- additive: bool -- Adds the source bone transform to the constrained bones instead of setting it absolutely.
- bones: list<BoneData>, readonly -- The bones that will be modified by this transform constraint.
- clamp: bool -- Prevents constrained bones from exceeding the ranged defined by ToProperty.offset and ToProperty.max.
- localSource: bool -- Reads the source bone's local transform instead of its world transform.
- localTarget: bool -- Sets the constrained bones' local transforms instead of their world transforms.
- offsetRotation: float -- An offset added to the constrained bone rotation.
- offsetScaleX: float -- An offset added to the constrained bone scaleX.
- offsetScaleY: float -- An offset added to the constrained bone scaleY.
- offsetShearY: float -- An offset added to the constrained bone shearY.
- offsetX: float -- An offset added to the constrained bone X translation.
- offsetY: float -- An offset added to the constrained bone Y translation.
- properties: list<FromProperty>, readonly -- The mapping of transform properties to other transform properties.
- source: BoneData -- The bone whose world transform will be copied to the constrained bones.

Methods:
- TransformConstraintData(string name): TransformConstraintData

#### TransformConstraint extends Constraint

Adjusts the world transform of the constrained bones to match that of the source bone. See Transform constraints in the Spine User Guide.

Properties:
- bones: list<BonePose>, readonly -- The bones that will be modified by this transform constraint.
- source: Bone -- The bone whose world transform will be copied to the constrained bones.

Methods:
- TransformConstraint(TransformConstraintData data, Skeleton skeleton): TransformConstraint

#### TransformConstraintPose implements Pose

Stores a pose for a transform constraint.

Properties:
- mixRotate: float -- A percentage that controls the mix between the constrained and unconstrained rotation.
- mixScaleX: float -- A percentage that controls the mix between the constrained and unconstrained scale X.
- mixScaleY: float -- A percentage that controls the mix between the constrained and unconstrained scale X.
- mixShearY: float -- A percentage that controls the mix between the constrained and unconstrained shear Y.
- mixX: float -- A percentage that controls the mix between the constrained and unconstrained translation X.
- mixY: float -- A percentage that controls the mix between the constrained and unconstrained translation Y.

#### FromProperty

Source property for a TransformConstraint.

Properties:
- offset: float, readonly -- The value of this property that corresponds to ToProperty.offset.
- to: list<ToProperty>, readonly -- Constrained properties.

Methods:
- value(Skeleton skeleton, BonePose source, bool local, float[] offsets): float -- Reads this property from the specified bone.

##### FromRotate extends FromProperty

##### FromScaleX extends FromProperty

##### FromScaleY extends FromProperty

##### FromShearY extends FromProperty

##### FromX extends FromProperty

##### FromY extends FromProperty

#### ToProperty

Constrained property for a TransformConstraint.

Properties:
- max: float, readonly -- The maximum value of this property when TransformConstraintData.clamped.
- offset: float, readonly -- The value of this property that corresponds to FromProperty.offset.
- scale: float, readonly -- The scale of the FromProperty value in relation to this property.

Methods:
- apply(Skeleton skeleton, TransformConstraintPose pose, BonePose bone, float value, bool local, bool additive): void -- Applies the value to this property.
- mix(TransformConstraintPose pose): float -- Reads the mix for this property from the specified pose.

##### ToRotate extends ToProperty

##### ToScaleX extends ToProperty

##### ToScaleY extends ToProperty

##### ToShearY extends ToProperty

##### ToX extends ToProperty

##### ToY extends ToProperty

## EventData

Stores the setup pose values for an Event. See Events in the Spine User Guide.

Properties:
- audioPath: string, nullable -- Path to an audio file relative to the audio folder as defined in Spine.
- name: string, readonly -- The name of the event, unique across all events in the skeleton. See SkeletonData.findEvent.
- setupPose: Event, readonly -- The setup values that are shared by all events with this data.

Methods:
- EventData(string name): EventData

### Event

Fired by EventTimeline when specific animation times are reached. See Timeline.apply, AnimationStateListener.event, and Events in the Spine User Guide.

Properties:
- balance: float -- If an audio path is set, the left/right balance for the audio.
- data: EventData, readonly -- The event's setup pose data.
- time: float, readonly -- The animation time this event was keyed, or -1 for the setup pose.
- volume: float -- If an audio path is set, the volume for the audio.

Methods:
- Event(float time, EventData data): Event

## PosedData

The base class for storing setup data for a posed object. May be shared with multiple instances.

Properties:
- name: string, readonly
- setupPose: Pose, readonly -- The setup pose that most animations are relative to.
- skinRequired: bool -- When true, Skeleton.updateWorldTransform only updates this constraint if the Skeleton.skin contains this constraint. See Skin.constraints.

### Pose

An interface for an object representing a pose.

Methods:
- set(Pose pose): void -- Sets this pose to the specified pose.

### Posed

The base class for an object with a number of poses: 
data: The setup pose. pose: The unconstrained pose. Set by animations and application code. appliedPose: The pose to use for rendering. Possibly modified by constraints.

Properties:
- appliedPose: Pose, readonly -- The pose to use for rendering. If no constraints modify this pose, this is the same as pose. Otherwise it is a copy of pose modified by constraints.
- data: PosedData, readonly -- The setup pose data. May be shared with multiple instances.
- pose: Pose, readonly -- The unconstrained pose for this object, set by animations and application code.

Methods:
- setupPose(): void -- Sets the unconstrained pose to the setup pose.

#### PosedActive extends Posed

A posed object that may be active or inactive.

Methods:
- isActive(): bool -- Returns false when this constraint won't be updated by Skeleton.updateWorldTransform because a skin is required and the Skeleton.active skin does not contain this item. See Skin.bones, Skin.constraints, PosedData.skinRequired, and Skeleton.updateCache.

## Sequence

Holds texture regions, UVs, and vertex offsets for rendering a region or mesh attachment. Regions must be populated and update called before use.

Properties:
- digits: int -- The minimum number of digits in the numeric getPath suffix, for zero padding. 0 for no zero padding.
- id: int, readonly -- Returns a unique ID for this attachment.
- regions: TextureRegion[], readonly -- The list of texture regions this sequence will display.
- setupIndex: int -- The index of the region to show for the setup pose.
- start: int -- The starting number for the numeric getPath suffix.

Methods:
- Sequence(int count, bool pathSuffix): Sequence
  - count: The number of texture regions this sequence will display.
  - pathSuffix: If true, the getPath has a numeric suffix. If false, all regions will use the same path, so `count` should be 1.
- getOffsets(int index): float[] -- Returns vertex offsets from the center of a RegionAttachment. Invalid to call for a MeshAttachment.
- getPath(string basePath, int index): string -- Returns the specified base path with an optional numeric suffix for the specified index.
- getRegion(int index): TextureRegion -- Returns the texture region from regions for the specified index.
- getUVs(int index): float[] -- Returns the UVs for the specified index. Regions must be populated and update called before calling this method.
- hasPathSuffix(): bool -- Returns true if the getPath has a numeric suffix.
- resolveIndex(SlotPose pose): int -- Returns the regions index for the SlotPose.sequenceIndex.
- update(HasSequence attachment): void -- Computes UVs and offsets for the specified attachment. Must be called if the regions or attachment properties are changed.

### SequenceMode

Controls how Sequence.regions are displayed over time.

Values:
- hold
- once
- loop
- pingpong
- onceReverse
- loopReverse
- pingpongReverse

## SkeletonBounds

Collects each visible BoundingBoxAttachment and computes the world vertices for its polygon. The polygon vertices are provided along with convenience methods for doing hit detection.

Properties:
- boundingBoxes: list<BoundingBoxAttachment>, readonly -- The visible bounding boxes.
- height: float, readonly -- The height of the axis aligned bounding box.
- maxX: float, readonly -- The right edge of the axis aligned bounding box.
- maxY: float, readonly -- The top edge of the axis aligned bounding box.
- minX: float, readonly -- The left edge of the axis aligned bounding box.
- minY: float, readonly -- The bottom edge of the axis aligned bounding box.
- polygons: list<float[]>, readonly -- The world vertices for the bounding box polygons.
- width: float, readonly -- The width of the axis aligned bounding box.

Methods:
- aabbContainsPoint(float x, float y): bool -- Returns true if the axis aligned bounding box contains the point.
- aabbIntersectsSegment(float x1, float y1, float x2, float y2): bool -- Returns true if the axis aligned bounding box intersects the line segment.
- aabbIntersectsSkeleton(SkeletonBounds bounds): bool -- Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds.
- containsPoint(float[] polygon, float x, float y): bool -- Returns true if the polygon contains the point.
- containsPoint(float x, float y): BoundingBoxAttachment nullable -- Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more efficient to only call this method if aabbContainsPoint returns true.
- getPolygon(BoundingBoxAttachment boundingBox): float[] nullable -- Returns the polygon for the specified bounding box, or null.
- intersectsSegment(float[] polygon, float x1, float y1, float x2, float y2): bool -- Returns true if the polygon contains any part of the line segment.
- intersectsSegment(float x1, float y1, float x2, float y2): BoundingBoxAttachment nullable -- Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it is usually more efficient to only call this method if aabbIntersectsSegment returns true.
- update(Skeleton skeleton, bool updateAabb): void -- Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding box's polygon.
  - updateAabb: If true, the axis aligned bounding box containing all the polygons is computed. If false, the SkeletonBounds AABB methods will always return true.

## SkeletonData

Stores the setup pose and all of the stateless data for a skeleton. See Data objects in the Spine Runtimes Guide.

Properties:
- animations: list<Animation>, readonly -- The skeleton's animations.
- audioPath: string, nullable -- The path to the audio folder as defined in Spine, or null if nonessential data was not exported.
- bones: list<BoneData>, readonly -- The skeleton's bones, sorted parent first. The root bone is always the first bone.
- constraints: list<ConstraintData>, readonly -- The skeleton's constraints.
- defaultSkin: Skin, nullable -- The skeleton's default skin. By default this skin contains all attachments that were not in a skin in Spine. See Skeleton.getAttachment.
- events: list<EventData>, readonly -- The skeleton's events.
- fps: float -- The dopesheet FPS in Spine, or zero if nonessential data was not exported.
- hash: string, nullable -- The skeleton data hash. This value will change if any of the skeleton data has changed.
- height: float -- The height of the skeleton's axis aligned bounding box in the setup pose.
- imagesPath: string, nullable -- The path to the images folder as defined in Spine, or null if nonessential data was not exported.
- name: string, nullable -- The skeleton's name, which by default is the name of the skeleton data file when possible, or null when a name hasn't been set.
- referenceScale: float -- Baseline scale factor for applying physics and other effects based on distance to non-scalable properties, such as angle or scale. Default is 100.
- skins: list<Skin>, readonly -- All skins, including the default skin.
- slots: list<SlotData>, readonly -- The skeleton's slots in the setup pose draw order.
- version: string, nullable -- The Spine version used to export the skeleton data, or null.
- width: float -- The width of the skeleton's axis aligned bounding box in the setup pose.
- x: float -- The X coordinate of the skeleton's axis aligned bounding box in the setup pose.
- y: float -- The Y coordinate of the skeleton's axis aligned bounding box in the setup pose.

Methods:
- SkeletonData(): SkeletonData
- findAnimation(string animationName): Animation nullable -- Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to call it multiple times.
- findBone(string boneName): BoneData nullable -- Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it multiple times.
- findConstraint(string constraintName): ConstraintData nullable -- Finds a constraint of the specified type by comparing each constraints's name. It is more efficient to cache the results of this method than to call it multiple times.
- findEvent(string eventDataName): EventData nullable -- Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it multiple times.
- findSkin(string skinName): Skin nullable -- Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it multiple times.
- findSliderAnimations(list<Animation> animations): list<Animation> -- Collects animations used by slider constraints. Slider animations are designed to be applied by slider constraints rather than on their own. Applications that have a user choose an animation may want to exclude them.
- findSlot(string slotName): SlotData nullable -- Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it multiple times.

### Skeleton

Stores bones and slots to be posed by animations and application code. Multiple skeleton instances can share the same SkeletonData, including animations, attachments, and skins. After posing, call updateWorldTransform to apply constraints and compute world transforms for rendering. See Instance objects in the Spine Runtimes Guide.

Properties:
- bones: list<Bone>, readonly -- The skeleton's bones, sorted parent first. The root bone is always the first bone.
- color: Color -- The color to tint all the skeleton's attachments.
- constraints: list<Constraint>, readonly -- The skeleton's constraints.
- data: SkeletonData, readonly -- The skeleton's setup pose data.
- drawOrder: DrawOrder, readonly -- The skeleton's draw order. Use DrawOrder.appliedPose for rendering and DrawOrder.pose for changing the draw order.
- gravityX: float -- The x component of a vector that defines the direction PhysicsConstraintPose.gravity is applied.
- gravityY: float -- The y component of a vector that defines the direction PhysicsConstraintPose.gravity is applied.
- physicsConstraints: list<PhysicsConstraint>, readonly -- The skeleton's physics constraints.
- rootBone: Bone, readonly -- The root bone, or null if the skeleton has no bones.
- scaleX: float -- Scales the entire skeleton on the X axis. Bones that do not inherit scale are still affected by this property.
- scaleY: float -- Scales the entire skeleton on the Y axis. Bones that do not inherit scale are still affected by this property.
- skin: Skin, nullable -- The skeleton's current skin.
- slots: list<Slot>, readonly -- The skeleton's slots in setup pose order. To change the order use DrawOrder.pose. For rendering use DrawOrder.appliedPose.
- time: float -- The skeleton's time, used for time-based manipulations, such as PhysicsConstraint. See update.
- updateCache: list<Update>, readonly -- The list of bones and constraints, sorted in the order they should be updated, as computed by updateCache.
- windX: float -- The x component of a vector that defines the direction PhysicsConstraintPose.wind is applied.
- windY: float -- The y component of a vector that defines the direction PhysicsConstraintPose.wind is applied.
- x: float -- Sets the skeleton X position, which is added to the root bone worldX position. Bones that do not inherit translation are still affected by this property.
- y: float -- Sets the skeleton Y position, which is added to the root bone worldY position. Bones that do not inherit translation are still affected by this property.

Methods:
- Skeleton(SkeletonData data): Skeleton
- Skeleton(Skeleton skeleton): Skeleton -- Copy constructor.
- findBone(string boneName): Bone nullable -- Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it repeatedly.
- findConstraint(string constraintName): Constraint nullable -- Finds a constraint of the specified type by comparing each constraints's name. It is more efficient to cache the results of this method than to call it multiple times.
- findSlot(string slotName): Slot nullable -- Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it repeatedly.
- getAttachment(int slotIndex, string placeholderName): Attachment nullable -- Finds an attachment by looking in the skin and SkeletonData.defaultSkin using the slot index and skin placeholder name. First the skin is checked and if the attachment was not found, the default skin is checked. See Runtime skins in the Spine Runtimes Guide.
- getAttachment(string slotName, string placeholderName): Attachment nullable -- Finds an attachment by looking in the skin and SkeletonData.defaultSkin using the slot name and attachment name. See getAttachment.
- getBounds(2-tuple offset, 2-tuple size, float[] temp, `SkeletonClipping` clipper): void -- Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the applied pose. Optionally applies clipping.
  - offset: An output value, the distance from the skeleton origin to the bottom left corner of the AABB.
  - size: An output value, the width and height of the AABB.
  - temp: Working memory to temporarily store attachments' computed world vertices.
  - clipper: `SkeletonClipping` to use. If `null`, no clipping is applied.
- getBounds(2-tuple offset, 2-tuple size, float[] temp): void -- Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the applied pose.
  - offset: An output value, the distance from the skeleton origin to the bottom left corner of the AABB.
  - size: An output value, the width and height of the AABB.
  - temp: Working memory to temporarily store attachments' computed world vertices.
- physicsRotate(float x, float y, float degrees): void -- Calls PhysicsConstraint.rotate for each physics constraint.
- physicsTranslate(float x, float y): void -- Calls PhysicsConstraint.translate for each physics constraint.
- setAttachment(string slotName, string placeholderName nullable): void -- A convenience method to set an attachment by finding the slot with findSlot, finding the attachment with getAttachment, then setting the slot's SlotPose.attachment.
  - placeholderName: May be null to clear the slot's attachment.
- setColor(float r, float g, float b, float a): void -- A convenience method for setting the skeleton color. The color can also be set by modifying color.
- setPosition(float x, float y): void -- Sets the skeleton X and Y position, which is added to the root bone worldX and worldY position. Bones that do not inherit translation are still affected by this property.
- setScale(float scaleX, float scaleY): void -- Scales the entire skeleton on the X and Y axes. Bones that do not inherit scale are still affected by this property.
- setSkin(Skin newSkin nullable): void -- Sets the skin used to look up attachments before looking in SkeletonData.defaultSkin. If the skin is changed, updateCache is called. Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no old skin, each slot's setup mode attachment is attached from the new skin. After changing the skin, the visible attachments can be reset to those attached in the setup pose by calling setupPoseSlots. Also, often AnimationState.apply is called before the next time the skeleton is rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin.
- setSkin(string skinName): void -- Sets a skin by name. See setSkin.
- setupPose(): void -- Sets the bones, constraints, slots, and draw order to their setup pose values.
- setupPoseBones(): void -- Sets the bones and constraints to their setup pose values.
- setupPoseSlots(): void -- Sets the slots and draw order to their setup pose values.
- update(float delta): void -- Increments the skeleton's time.
- updateCache(): void -- Caches information about bones and constraints. Must be called if the skin is modified or if bones, constraints, or weighted path attachments are added or removed.
- updateWorldTransform(Physics physics): void -- Updates the world transform for each bone and applies all constraints. See World transforms in the Spine Runtimes Guide.

### Physics

Determines how physics and other non-deterministic updates are applied.

Values:
- none: Physics are not updated or applied.
- reset: Physics are PhysicsConstraint.reset.
- update: Physics are updated and the pose from physics is applied.
- pose: Physics are not updated but the pose from physics is applied.

### Update

The interface for items updated by Skeleton.updateWorldTransform.

Methods:
- update(Skeleton skeleton, Physics physics): void
  - physics: Determines how physics and other non-deterministic updates are applied.

## SkeletonLoader

Base class for loading skeleton data from a file. See JSON and binary data in the Spine Runtimes Guide.

Properties:
- scale: float -- Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at runtime than were used in Spine. See Scaling in the Spine Runtimes Guide.

Methods:
- SkeletonLoader(TextureAtlas atlas): SkeletonLoader -- Creates a skeleton loader that loads attachments using an AtlasAttachmentLoader with the specified atlas.
- SkeletonLoader(AttachmentLoader attachmentLoader): SkeletonLoader -- Creates a skeleton loader that loads attachments using the specified attachment loader. See Loading skeleton data in the Spine Runtimes Guide.
- readSkeletonData(object data): SkeletonData -- Deserializes the Spine skeleton data into a SkeletonData object.

### SkeletonBinary extends SkeletonLoader

Loads skeleton data in the Spine binary format. See Spine binary format and JSON and binary data in the Spine Runtimes Guide.

Properties:
- BONE_ROTATE = 0: int, static, readonly
- BONE_TRANSLATE = 1: int, static, readonly
- BONE_TRANSLATEX = 2: int, static, readonly
- BONE_TRANSLATEY = 3: int, static, readonly
- BONE_SCALE = 4: int, static, readonly
- BONE_SCALEX = 5: int, static, readonly
- BONE_SCALEY = 6: int, static, readonly
- BONE_SHEAR = 7: int, static, readonly
- BONE_SHEARX = 8: int, static, readonly
- BONE_SHEARY = 9: int, static, readonly
- BONE_INHERIT = 10: int, static, readonly
- SLOT_ATTACHMENT = 0: int, static, readonly
- SLOT_RGBA = 1: int, static, readonly
- SLOT_RGB = 2: int, static, readonly
- SLOT_RGBA2 = 3: int, static, readonly
- SLOT_RGB2 = 4: int, static, readonly
- SLOT_ALPHA = 5: int, static, readonly
- CONSTRAINT_IK = 0: int, static, readonly
- CONSTRAINT_PATH = 1: int, static, readonly
- CONSTRAINT_TRANSFORM = 2: int, static, readonly
- CONSTRAINT_PHYSICS = 3: int, static, readonly
- CONSTRAINT_SLIDER = 4: int, static, readonly
- ATTACHMENT_DEFORM = 0: int, static, readonly
- ATTACHMENT_SEQUENCE = 1: int, static, readonly
- PATH_POSITION = 0: int, static, readonly
- PATH_SPACING = 1: int, static, readonly
- PATH_MIX = 2: int, static, readonly
- PHYSICS_INERTIA = 0: int, static, readonly
- PHYSICS_STRENGTH = 1: int, static, readonly
- PHYSICS_DAMPING = 2: int, static, readonly
- PHYSICS_MASS = 4: int, static, readonly
- PHYSICS_WIND = 5: int, static, readonly
- PHYSICS_GRAVITY = 6: int, static, readonly
- PHYSICS_MIX = 7: int, static, readonly
- PHYSICS_RESET = 8: int, static, readonly
- SLIDER_TIME = 0: int, static, readonly
- SLIDER_MIX = 1: int, static, readonly
- CURVE_LINEAR = 0: int, static, readonly
- CURVE_STEPPED = 1: int, static, readonly
- CURVE_BEZIER = 2: int, static, readonly

Methods:
- SkeletonBinary(AttachmentLoader attachmentLoader): SkeletonBinary
- SkeletonBinary(TextureAtlas atlas): SkeletonBinary

### SkeletonJson extends SkeletonLoader

Loads skeleton data in the Spine JSON format. JSON is human readable but the binary format is much smaller on disk and faster to load. See SkeletonBinary. See Spine JSON format and JSON and binary data in the Spine Runtimes Guide.

Methods:
- SkeletonJson(AttachmentLoader attachmentLoader): SkeletonJson
- SkeletonJson(TextureAtlas atlas): SkeletonJson

## Skin

Stores attachments by slot index and placeholder name. Multiple Skeleton instances can use the same skins. See SkeletonData.defaultSkin, Skeleton.skin, and Runtime skins in the Spine Runtimes Guide.

Properties:
- attachments: list<SkinEntry>, readonly -- Returns all attachments in this skin.
- bones: list<BoneData>, readonly
- color: Color -- The color of the skin as it was in Spine, or a default color if nonessential data was not exported.
- constraints: list<ConstraintData>, readonly
- name: string, readonly -- The skin's name, unique across all skins in the skeleton. See SkeletonData.findSkin.

Methods:
- Skin(string name): Skin
- addSkin(Skin skin): void -- Adds all attachments, bones, and constraints from the specified skin to this skin.
- clear(): void -- Clears all attachments, bones, and constraints.
- copySkin(Skin skin): void -- Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals.
- getAttachment(int slotIndex, string placeholderName): Attachment nullable -- Returns the attachment for the specified slot index and placeholder name, or null.
- getAttachments(int slotIndex, list<SkinEntry> attachments): void -- Returns all attachments in this skin for the specified slot index.
- removeAttachment(int slotIndex, string placeholderName): void -- Removes the attachment in the skin for the specified slot index and placeholder name, if any.
- setAttachment(int slotIndex, string placeholderName, Attachment attachment): void -- Adds an attachment to the skin for the specified slot index and placeholder name.

### SkinEntry

Stores an entry in the skin consisting of the slot index and placeholder name.

Properties:
- attachment: Attachment, readonly -- The attachment for this skin entry.
- placeholderName: string, readonly -- The placeholder name that the attachment is associated with.
- slotIndex: int, readonly -- The Skeleton.slots index.

## SlotData extends PosedData

Stores the setup pose for a Slot.

Properties:
- attachmentName: string, nullable -- The name of the attachment that is visible for this slot in the setup pose, or null if no attachment is visible.
- blendMode: BlendMode -- The blend mode for drawing the slot's attachment.
- boneData: BoneData, readonly -- The bone this slot belongs to.
- index: int, readonly -- The Skeleton.slots index.
- visible: bool -- False if the slot was hidden in Spine and nonessential data was exported. Does not affect runtime rendering.

Methods:
- SlotData(int index, string name, BoneData boneData): SlotData

### BlendMode

Determines how images are blended with existing pixels when drawn.

Values:
- normal
- additive
- multiply
- screen

### DrawOrder

Stores the skeleton's draw order, which is the order that each slot's attachment is rendered.

Properties:
- appliedPose: list<Slot>, readonly -- The constrained draw order for rendering. If no constraints modify the draw order, this is the same as pose. Otherwise it is a copy of pose modified by constraints.
- pose: list<Slot>, readonly -- The unconstrained draw order, set by animations and application code.

Methods:
- setupPose(): void -- Sets the unconstrained draw order to the setup pose order.

### Slot extends Posed

Organizes attachments for Skeleton.drawOrder purposes and provide a place to store state for an attachment. State cannot be stored in an attachment itself because attachments are stateless and may be shared across multiple skeletons.

Properties:
- bone: Bone, readonly -- The bone this slot belongs to.

Methods:
- Slot(SlotData data, Skeleton skeleton): Slot
- Slot(Slot slot, Bone bone, Skeleton skeleton): Slot -- Copy constructor.

### SlotPose implements Pose

Stores a slot's pose.

Properties:
- attachment: Attachment, nullable -- The current attachment for the slot, or null if the slot has no attachment.
- color: Color -- The color used to tint the slot's attachment. If darkColor is set, this is used as the light color for two color tinting.
- darkColor: Color, nullable -- The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark color's alpha is not used.
- deform: float[], readonly -- Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions. See VertexAttachment.computeWorldVertices and DeformTimeline.
- sequenceIndex: int -- The index of the texture region to display when the slot's attachment has a Sequence. -1 represents the Sequence.setupIndex.

## TextureAtlas

Stores information about texture regions in one or more texture pages. Creating an atlas takes the atlas data file and a TextureLoader.

Properties:
- pages: list<TextureAtlasPage> -- An atlas page for each texture.
- regions: list<TextureAtlasRegion> -- The atlas regions across all pages.

Methods:
- dispose(): void -- Uses the TextureLoader to unload each TextureAtlasPage.rendererObject.
- findRegion(string name): TextureAtlasRegion -- Returns the first region found with the specified name, or null if it was not found. String comparison is used to find the region so the result should be cached rather than calling this method multiple times.

### TextureAtlasPage

Settings for an atlas backing texture.

Properties:
- format: Format -- The memory format to use for the texture.
- height: int -- The height in pixels of the image file.
- magFilter: TextureFilter -- The texture's magnification filter. Mipmap values are invalid for magnification.
- minFilter: TextureFilter -- The texture's minification filter.
- name: string -- The name of the image file for the texture.
- rendererObject: object -- A game toolkit specific object used by rendering code, usually set by a TextureLoader. See Loading skeleton data.
- uWrap: TextureWrap -- The X axis texture wrap setting.
- vWrap: TextureWrap -- The Y axis texture wrap setting.
- width: int -- The width in pixels of the image file.

### TextureAtlasRegion

A texture region on an atlas page.

Properties:
- height: int -- The height in pixels of the unrotated texture region after whitepace stripping.
- index: int -- The number at the end of the original image file name, or -1 if none. When sprites are packed, if the original file name ends with a number, it is stored as the index and is not considered as part of the region's name. This is useful for keeping animation frames in order.
- name: string -- The name of the region.
- offsetX: float -- Pixels stripped from the left of the unrotated texture region.
- offsetY: float -- Pixels stripped from the bottom of the unrotated texture region.
- originalHeight: int -- The height in pixels of the unrotated texture region before whitespace stripping.
- originalWidth: int -- The width in pixels of the unrotated texture region before whitespace stripping.
- pads: int[] -- The ninepatch padding, or null if not a ninepatch or the ninepatch has no padding. Has 4 entries: left, right, top, bottom.
- page: TextureAtlasPage -- The atlas page this region belongs to.
- rotate: bool -- If true, the texture region is stored in the atlas rotated 90 degrees counterclockwise.
- splits: int[] -- The ninepatch splits, or null if not a ninepatch. Has 4 entries: left, right, top, bottom.
- u: float -- The normalized (0-1) texture coordinate of the left edge of the texture region.
- u2: float -- The normalized (0-1) texture coordinate of the right edge of the texture region.
- v: float -- The normalized (0-1) texture coordinate of the top edge of the texture region.
- v2: float -- The normalized (0-1) texture coordinate of the bottom edge of the texture region.
- width: int -- The width in pixels of the unrotated texture region after whitespace stripping.
- x: int -- Pixels from the left edge of the texture to the left edge of the texture region.
- y: int -- Pixels from the bottom edge of the texture to the bottom edge of the texture region.

### Format

The memory format to use when loading an image into the TextureAtlasPage texture.

Values:
- Alpha
- Intensity
- LuminanceAlpha
- RGB565
- RGBA4444
- RGB888
- RGBA8888

### TextureFilter

The filtering for magnification or minification of the TextureAtlasPage texture.

Values:
- Nearest
- Linear
- MipMap
- MipMapNearestNearest
- MipMapLinearNearest
- MipMapNearestLinear
- MipMapLinearLinear

### TextureLoader

The interface which can be implemented to customize loading of TextureAtlasPage images for an TextureAtlas. See Loading skeleton data.

Methods:
- load(TextureAtlasPage page, string path): void -- Loads a texture using the TextureAtlasPage.name or the image at the specified path and sets the TextureAtlasPage.rendererObject.
- unload(object rendererObject): void -- Unloads the `rendererObject` previously loaded in load.

### TextureWrap

The texture wrapping mode for UVs outside the TextureAtlasPage texture.

Values:
- MirroredRepeat
- ClampToEdge
- Repeat
