Sfoglia il codice sorgente

Added demo page copy for debugging

badlogic 8 anni fa
parent
commit
c6d7af8e96

+ 1534 - 1534
spine-ts/build/spine-webgl.d.ts

@@ -1,1652 +1,1652 @@
 declare module spine {
-	class Animation {
-		name: string;
-		timelines: Array<Timeline>;
-		duration: number;
-		constructor(name: string, timelines: Array<Timeline>, duration: number);
-		apply(skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-		static binarySearch(values: ArrayLike<number>, target: number, step?: number): number;
-		static linearSearch(values: ArrayLike<number>, target: number, step: number): number;
-	}
-	interface Timeline {
-		apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-		getPropertyId(): number;
-	}
-	enum MixPose {
-		setup = 0,
-		current = 1,
-		currentLayered = 2,
-	}
-	enum MixDirection {
-		in = 0,
-		out = 1,
-	}
-	enum TimelineType {
-		rotate = 0,
-		translate = 1,
-		scale = 2,
-		shear = 3,
-		attachment = 4,
-		color = 5,
-		deform = 6,
-		event = 7,
-		drawOrder = 8,
-		ikConstraint = 9,
-		transformConstraint = 10,
-		pathConstraintPosition = 11,
-		pathConstraintSpacing = 12,
-		pathConstraintMix = 13,
-		twoColor = 14,
-	}
-	abstract class CurveTimeline implements Timeline {
-		static LINEAR: number;
-		static STEPPED: number;
-		static BEZIER: number;
-		static BEZIER_SIZE: number;
-		private curves;
-		abstract getPropertyId(): number;
-		constructor(frameCount: number);
-		getFrameCount(): number;
-		setLinear(frameIndex: number): void;
-		setStepped(frameIndex: number): void;
-		getCurveType(frameIndex: number): number;
-		setCurve(frameIndex: number, cx1: number, cy1: number, cx2: number, cy2: number): void;
-		getCurvePercent(frameIndex: number, percent: number): number;
-		abstract apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class RotateTimeline extends CurveTimeline {
-		static ENTRIES: number;
-		static PREV_TIME: number;
-		static PREV_ROTATION: number;
-		static ROTATION: number;
-		boneIndex: number;
-		frames: ArrayLike<number>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		setFrame(frameIndex: number, time: number, degrees: number): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class TranslateTimeline extends CurveTimeline {
-		static ENTRIES: number;
-		static PREV_TIME: number;
-		static PREV_X: number;
-		static PREV_Y: number;
-		static X: number;
-		static Y: number;
-		boneIndex: number;
-		frames: ArrayLike<number>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		setFrame(frameIndex: number, time: number, x: number, y: number): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class ScaleTimeline extends TranslateTimeline {
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class ShearTimeline extends TranslateTimeline {
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class ColorTimeline extends CurveTimeline {
-		static ENTRIES: number;
-		static PREV_TIME: number;
-		static PREV_R: number;
-		static PREV_G: number;
-		static PREV_B: number;
-		static PREV_A: number;
-		static R: number;
-		static G: number;
-		static B: number;
-		static A: number;
-		slotIndex: number;
-		frames: ArrayLike<number>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		setFrame(frameIndex: number, time: number, r: number, g: number, b: number, a: number): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class TwoColorTimeline extends CurveTimeline {
-		static ENTRIES: number;
-		static PREV_TIME: number;
-		static PREV_R: number;
-		static PREV_G: number;
-		static PREV_B: number;
-		static PREV_A: number;
-		static PREV_R2: number;
-		static PREV_G2: number;
-		static PREV_B2: number;
-		static R: number;
-		static G: number;
-		static B: number;
-		static A: number;
-		static R2: number;
-		static G2: number;
-		static B2: number;
-		slotIndex: number;
-		frames: ArrayLike<number>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		setFrame(frameIndex: number, time: number, r: number, g: number, b: number, a: number, r2: number, g2: number, b2: number): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class AttachmentTimeline implements Timeline {
-		slotIndex: number;
-		frames: ArrayLike<number>;
-		attachmentNames: Array<string>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		getFrameCount(): number;
-		setFrame(frameIndex: number, time: number, attachmentName: string): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class DeformTimeline extends CurveTimeline {
-		slotIndex: number;
-		attachment: VertexAttachment;
-		frames: ArrayLike<number>;
-		frameVertices: Array<ArrayLike<number>>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		setFrame(frameIndex: number, time: number, vertices: ArrayLike<number>): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class EventTimeline implements Timeline {
-		frames: ArrayLike<number>;
-		events: Array<Event>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		getFrameCount(): number;
-		setFrame(frameIndex: number, event: Event): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class DrawOrderTimeline implements Timeline {
-		frames: ArrayLike<number>;
-		drawOrders: Array<Array<number>>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		getFrameCount(): number;
-		setFrame(frameIndex: number, time: number, drawOrder: Array<number>): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class IkConstraintTimeline extends CurveTimeline {
-		static ENTRIES: number;
-		static PREV_TIME: number;
-		static PREV_MIX: number;
-		static PREV_BEND_DIRECTION: number;
-		static MIX: number;
-		static BEND_DIRECTION: number;
-		ikConstraintIndex: number;
-		frames: ArrayLike<number>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		setFrame(frameIndex: number, time: number, mix: number, bendDirection: number): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class TransformConstraintTimeline extends CurveTimeline {
-		static ENTRIES: number;
-		static PREV_TIME: number;
-		static PREV_ROTATE: number;
-		static PREV_TRANSLATE: number;
-		static PREV_SCALE: number;
-		static PREV_SHEAR: number;
-		static ROTATE: number;
-		static TRANSLATE: number;
-		static SCALE: number;
-		static SHEAR: number;
-		transformConstraintIndex: number;
-		frames: ArrayLike<number>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		setFrame(frameIndex: number, time: number, rotateMix: number, translateMix: number, scaleMix: number, shearMix: number): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class PathConstraintPositionTimeline extends CurveTimeline {
-		static ENTRIES: number;
-		static PREV_TIME: number;
-		static PREV_VALUE: number;
-		static VALUE: number;
-		pathConstraintIndex: number;
-		frames: ArrayLike<number>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		setFrame(frameIndex: number, time: number, value: number): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class PathConstraintSpacingTimeline extends PathConstraintPositionTimeline {
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
-	class PathConstraintMixTimeline extends CurveTimeline {
-		static ENTRIES: number;
-		static PREV_TIME: number;
-		static PREV_ROTATE: number;
-		static PREV_TRANSLATE: number;
-		static ROTATE: number;
-		static TRANSLATE: number;
-		pathConstraintIndex: number;
-		frames: ArrayLike<number>;
-		constructor(frameCount: number);
-		getPropertyId(): number;
-		setFrame(frameIndex: number, time: number, rotateMix: number, translateMix: number): void;
-		apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
-	}
+    class Animation {
+        name: string;
+        timelines: Array<Timeline>;
+        duration: number;
+        constructor(name: string, timelines: Array<Timeline>, duration: number);
+        apply(skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+        static binarySearch(values: ArrayLike<number>, target: number, step?: number): number;
+        static linearSearch(values: ArrayLike<number>, target: number, step: number): number;
+    }
+    interface Timeline {
+        apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+        getPropertyId(): number;
+    }
+    enum MixPose {
+        setup = 0,
+        current = 1,
+        currentLayered = 2,
+    }
+    enum MixDirection {
+        in = 0,
+        out = 1,
+    }
+    enum TimelineType {
+        rotate = 0,
+        translate = 1,
+        scale = 2,
+        shear = 3,
+        attachment = 4,
+        color = 5,
+        deform = 6,
+        event = 7,
+        drawOrder = 8,
+        ikConstraint = 9,
+        transformConstraint = 10,
+        pathConstraintPosition = 11,
+        pathConstraintSpacing = 12,
+        pathConstraintMix = 13,
+        twoColor = 14,
+    }
+    abstract class CurveTimeline implements Timeline {
+        static LINEAR: number;
+        static STEPPED: number;
+        static BEZIER: number;
+        static BEZIER_SIZE: number;
+        private curves;
+        abstract getPropertyId(): number;
+        constructor(frameCount: number);
+        getFrameCount(): number;
+        setLinear(frameIndex: number): void;
+        setStepped(frameIndex: number): void;
+        getCurveType(frameIndex: number): number;
+        setCurve(frameIndex: number, cx1: number, cy1: number, cx2: number, cy2: number): void;
+        getCurvePercent(frameIndex: number, percent: number): number;
+        abstract apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class RotateTimeline extends CurveTimeline {
+        static ENTRIES: number;
+        static PREV_TIME: number;
+        static PREV_ROTATION: number;
+        static ROTATION: number;
+        boneIndex: number;
+        frames: ArrayLike<number>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        setFrame(frameIndex: number, time: number, degrees: number): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class TranslateTimeline extends CurveTimeline {
+        static ENTRIES: number;
+        static PREV_TIME: number;
+        static PREV_X: number;
+        static PREV_Y: number;
+        static X: number;
+        static Y: number;
+        boneIndex: number;
+        frames: ArrayLike<number>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        setFrame(frameIndex: number, time: number, x: number, y: number): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class ScaleTimeline extends TranslateTimeline {
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class ShearTimeline extends TranslateTimeline {
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class ColorTimeline extends CurveTimeline {
+        static ENTRIES: number;
+        static PREV_TIME: number;
+        static PREV_R: number;
+        static PREV_G: number;
+        static PREV_B: number;
+        static PREV_A: number;
+        static R: number;
+        static G: number;
+        static B: number;
+        static A: number;
+        slotIndex: number;
+        frames: ArrayLike<number>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        setFrame(frameIndex: number, time: number, r: number, g: number, b: number, a: number): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class TwoColorTimeline extends CurveTimeline {
+        static ENTRIES: number;
+        static PREV_TIME: number;
+        static PREV_R: number;
+        static PREV_G: number;
+        static PREV_B: number;
+        static PREV_A: number;
+        static PREV_R2: number;
+        static PREV_G2: number;
+        static PREV_B2: number;
+        static R: number;
+        static G: number;
+        static B: number;
+        static A: number;
+        static R2: number;
+        static G2: number;
+        static B2: number;
+        slotIndex: number;
+        frames: ArrayLike<number>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        setFrame(frameIndex: number, time: number, r: number, g: number, b: number, a: number, r2: number, g2: number, b2: number): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class AttachmentTimeline implements Timeline {
+        slotIndex: number;
+        frames: ArrayLike<number>;
+        attachmentNames: Array<string>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        getFrameCount(): number;
+        setFrame(frameIndex: number, time: number, attachmentName: string): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class DeformTimeline extends CurveTimeline {
+        slotIndex: number;
+        attachment: VertexAttachment;
+        frames: ArrayLike<number>;
+        frameVertices: Array<ArrayLike<number>>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        setFrame(frameIndex: number, time: number, vertices: ArrayLike<number>): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class EventTimeline implements Timeline {
+        frames: ArrayLike<number>;
+        events: Array<Event>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        getFrameCount(): number;
+        setFrame(frameIndex: number, event: Event): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class DrawOrderTimeline implements Timeline {
+        frames: ArrayLike<number>;
+        drawOrders: Array<Array<number>>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        getFrameCount(): number;
+        setFrame(frameIndex: number, time: number, drawOrder: Array<number>): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class IkConstraintTimeline extends CurveTimeline {
+        static ENTRIES: number;
+        static PREV_TIME: number;
+        static PREV_MIX: number;
+        static PREV_BEND_DIRECTION: number;
+        static MIX: number;
+        static BEND_DIRECTION: number;
+        ikConstraintIndex: number;
+        frames: ArrayLike<number>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        setFrame(frameIndex: number, time: number, mix: number, bendDirection: number): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class TransformConstraintTimeline extends CurveTimeline {
+        static ENTRIES: number;
+        static PREV_TIME: number;
+        static PREV_ROTATE: number;
+        static PREV_TRANSLATE: number;
+        static PREV_SCALE: number;
+        static PREV_SHEAR: number;
+        static ROTATE: number;
+        static TRANSLATE: number;
+        static SCALE: number;
+        static SHEAR: number;
+        transformConstraintIndex: number;
+        frames: ArrayLike<number>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        setFrame(frameIndex: number, time: number, rotateMix: number, translateMix: number, scaleMix: number, shearMix: number): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class PathConstraintPositionTimeline extends CurveTimeline {
+        static ENTRIES: number;
+        static PREV_TIME: number;
+        static PREV_VALUE: number;
+        static VALUE: number;
+        pathConstraintIndex: number;
+        frames: ArrayLike<number>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        setFrame(frameIndex: number, time: number, value: number): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class PathConstraintSpacingTimeline extends PathConstraintPositionTimeline {
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
+    class PathConstraintMixTimeline extends CurveTimeline {
+        static ENTRIES: number;
+        static PREV_TIME: number;
+        static PREV_ROTATE: number;
+        static PREV_TRANSLATE: number;
+        static ROTATE: number;
+        static TRANSLATE: number;
+        pathConstraintIndex: number;
+        frames: ArrayLike<number>;
+        constructor(frameCount: number);
+        getPropertyId(): number;
+        setFrame(frameIndex: number, time: number, rotateMix: number, translateMix: number): void;
+        apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, pose: MixPose, direction: MixDirection): void;
+    }
 }
 declare module spine {
-	class AnimationState {
-		static emptyAnimation: Animation;
-		static SUBSEQUENT: number;
-		static FIRST: number;
-		static DIP: number;
-		static DIP_MIX: number;
-		data: AnimationStateData;
-		tracks: TrackEntry[];
-		events: Event[];
-		listeners: AnimationStateListener2[];
-		queue: EventQueue;
-		propertyIDs: IntSet;
-		mixingTo: TrackEntry[];
-		animationsChanged: boolean;
-		timeScale: number;
-		trackEntryPool: Pool<TrackEntry>;
-		constructor(data: AnimationStateData);
-		update(delta: number): void;
-		updateMixingFrom(to: TrackEntry, delta: number): boolean;
-		apply(skeleton: Skeleton): boolean;
-		applyMixingFrom(to: TrackEntry, skeleton: Skeleton, currentPose: MixPose): number;
-		applyRotateTimeline(timeline: Timeline, skeleton: Skeleton, time: number, alpha: number, pose: MixPose, timelinesRotation: Array<number>, i: number, firstFrame: boolean): void;
-		queueEvents(entry: TrackEntry, animationTime: number): void;
-		clearTracks(): void;
-		clearTrack(trackIndex: number): void;
-		setCurrent(index: number, current: TrackEntry, interrupt: boolean): void;
-		setAnimation(trackIndex: number, animationName: string, loop: boolean): TrackEntry;
-		setAnimationWith(trackIndex: number, animation: Animation, loop: boolean): TrackEntry;
-		addAnimation(trackIndex: number, animationName: string, loop: boolean, delay: number): TrackEntry;
-		addAnimationWith(trackIndex: number, animation: Animation, loop: boolean, delay: number): TrackEntry;
-		setEmptyAnimation(trackIndex: number, mixDuration: number): TrackEntry;
-		addEmptyAnimation(trackIndex: number, mixDuration: number, delay: number): TrackEntry;
-		setEmptyAnimations(mixDuration: number): void;
-		expandToIndex(index: number): TrackEntry;
-		trackEntry(trackIndex: number, animation: Animation, loop: boolean, last: TrackEntry): TrackEntry;
-		disposeNext(entry: TrackEntry): void;
-		_animationsChanged(): void;
-		getCurrent(trackIndex: number): TrackEntry;
-		addListener(listener: AnimationStateListener2): void;
-		removeListener(listener: AnimationStateListener2): void;
-		clearListeners(): void;
-		clearListenerNotifications(): void;
-	}
-	class TrackEntry {
-		animation: Animation;
-		next: TrackEntry;
-		mixingFrom: TrackEntry;
-		listener: AnimationStateListener2;
-		trackIndex: number;
-		loop: boolean;
-		eventThreshold: number;
-		attachmentThreshold: number;
-		drawOrderThreshold: number;
-		animationStart: number;
-		animationEnd: number;
-		animationLast: number;
-		nextAnimationLast: number;
-		delay: number;
-		trackTime: number;
-		trackLast: number;
-		nextTrackLast: number;
-		trackEnd: number;
-		timeScale: number;
-		alpha: number;
-		mixTime: number;
-		mixDuration: number;
-		interruptAlpha: number;
-		totalAlpha: number;
-		timelineData: number[];
-		timelineDipMix: TrackEntry[];
-		timelinesRotation: number[];
-		reset(): void;
-		setTimelineData(to: TrackEntry, mixingToArray: Array<TrackEntry>, propertyIDs: IntSet): TrackEntry;
-		hasTimeline(id: number): boolean;
-		getAnimationTime(): number;
-		setAnimationLast(animationLast: number): void;
-		isComplete(): boolean;
-		resetRotationDirections(): void;
-	}
-	class EventQueue {
-		objects: Array<any>;
-		drainDisabled: boolean;
-		animState: AnimationState;
-		constructor(animState: AnimationState);
-		start(entry: TrackEntry): void;
-		interrupt(entry: TrackEntry): void;
-		end(entry: TrackEntry): void;
-		dispose(entry: TrackEntry): void;
-		complete(entry: TrackEntry): void;
-		event(entry: TrackEntry, event: Event): void;
-		drain(): void;
-		clear(): void;
-	}
-	enum EventType {
-		start = 0,
-		interrupt = 1,
-		end = 2,
-		dispose = 3,
-		complete = 4,
-		event = 5,
-	}
-	interface AnimationStateListener2 {
-		start(entry: TrackEntry): void;
-		interrupt(entry: TrackEntry): void;
-		end(entry: TrackEntry): void;
-		dispose(entry: TrackEntry): void;
-		complete(entry: TrackEntry): void;
-		event(entry: TrackEntry, event: Event): void;
-	}
-	abstract class AnimationStateAdapter2 implements AnimationStateListener2 {
-		start(entry: TrackEntry): void;
-		interrupt(entry: TrackEntry): void;
-		end(entry: TrackEntry): void;
-		dispose(entry: TrackEntry): void;
-		complete(entry: TrackEntry): void;
-		event(entry: TrackEntry, event: Event): void;
-	}
+    class AnimationState {
+        static emptyAnimation: Animation;
+        static SUBSEQUENT: number;
+        static FIRST: number;
+        static DIP: number;
+        static DIP_MIX: number;
+        data: AnimationStateData;
+        tracks: TrackEntry[];
+        events: Event[];
+        listeners: AnimationStateListener2[];
+        queue: EventQueue;
+        propertyIDs: IntSet;
+        mixingTo: TrackEntry[];
+        animationsChanged: boolean;
+        timeScale: number;
+        trackEntryPool: Pool<TrackEntry>;
+        constructor(data: AnimationStateData);
+        update(delta: number): void;
+        updateMixingFrom(to: TrackEntry, delta: number): boolean;
+        apply(skeleton: Skeleton): boolean;
+        applyMixingFrom(to: TrackEntry, skeleton: Skeleton, currentPose: MixPose): number;
+        applyRotateTimeline(timeline: Timeline, skeleton: Skeleton, time: number, alpha: number, pose: MixPose, timelinesRotation: Array<number>, i: number, firstFrame: boolean): void;
+        queueEvents(entry: TrackEntry, animationTime: number): void;
+        clearTracks(): void;
+        clearTrack(trackIndex: number): void;
+        setCurrent(index: number, current: TrackEntry, interrupt: boolean): void;
+        setAnimation(trackIndex: number, animationName: string, loop: boolean): TrackEntry;
+        setAnimationWith(trackIndex: number, animation: Animation, loop: boolean): TrackEntry;
+        addAnimation(trackIndex: number, animationName: string, loop: boolean, delay: number): TrackEntry;
+        addAnimationWith(trackIndex: number, animation: Animation, loop: boolean, delay: number): TrackEntry;
+        setEmptyAnimation(trackIndex: number, mixDuration: number): TrackEntry;
+        addEmptyAnimation(trackIndex: number, mixDuration: number, delay: number): TrackEntry;
+        setEmptyAnimations(mixDuration: number): void;
+        expandToIndex(index: number): TrackEntry;
+        trackEntry(trackIndex: number, animation: Animation, loop: boolean, last: TrackEntry): TrackEntry;
+        disposeNext(entry: TrackEntry): void;
+        _animationsChanged(): void;
+        getCurrent(trackIndex: number): TrackEntry;
+        addListener(listener: AnimationStateListener2): void;
+        removeListener(listener: AnimationStateListener2): void;
+        clearListeners(): void;
+        clearListenerNotifications(): void;
+    }
+    class TrackEntry {
+        animation: Animation;
+        next: TrackEntry;
+        mixingFrom: TrackEntry;
+        listener: AnimationStateListener2;
+        trackIndex: number;
+        loop: boolean;
+        eventThreshold: number;
+        attachmentThreshold: number;
+        drawOrderThreshold: number;
+        animationStart: number;
+        animationEnd: number;
+        animationLast: number;
+        nextAnimationLast: number;
+        delay: number;
+        trackTime: number;
+        trackLast: number;
+        nextTrackLast: number;
+        trackEnd: number;
+        timeScale: number;
+        alpha: number;
+        mixTime: number;
+        mixDuration: number;
+        interruptAlpha: number;
+        totalAlpha: number;
+        timelineData: number[];
+        timelineDipMix: TrackEntry[];
+        timelinesRotation: number[];
+        reset(): void;
+        setTimelineData(to: TrackEntry, mixingToArray: Array<TrackEntry>, propertyIDs: IntSet): TrackEntry;
+        hasTimeline(id: number): boolean;
+        getAnimationTime(): number;
+        setAnimationLast(animationLast: number): void;
+        isComplete(): boolean;
+        resetRotationDirections(): void;
+    }
+    class EventQueue {
+        objects: Array<any>;
+        drainDisabled: boolean;
+        animState: AnimationState;
+        constructor(animState: AnimationState);
+        start(entry: TrackEntry): void;
+        interrupt(entry: TrackEntry): void;
+        end(entry: TrackEntry): void;
+        dispose(entry: TrackEntry): void;
+        complete(entry: TrackEntry): void;
+        event(entry: TrackEntry, event: Event): void;
+        drain(): void;
+        clear(): void;
+    }
+    enum EventType {
+        start = 0,
+        interrupt = 1,
+        end = 2,
+        dispose = 3,
+        complete = 4,
+        event = 5,
+    }
+    interface AnimationStateListener2 {
+        start(entry: TrackEntry): void;
+        interrupt(entry: TrackEntry): void;
+        end(entry: TrackEntry): void;
+        dispose(entry: TrackEntry): void;
+        complete(entry: TrackEntry): void;
+        event(entry: TrackEntry, event: Event): void;
+    }
+    abstract class AnimationStateAdapter2 implements AnimationStateListener2 {
+        start(entry: TrackEntry): void;
+        interrupt(entry: TrackEntry): void;
+        end(entry: TrackEntry): void;
+        dispose(entry: TrackEntry): void;
+        complete(entry: TrackEntry): void;
+        event(entry: TrackEntry, event: Event): void;
+    }
 }
 declare module spine {
-	class AnimationStateData {
-		skeletonData: SkeletonData;
-		animationToMixTime: Map<number>;
-		defaultMix: number;
-		constructor(skeletonData: SkeletonData);
-		setMix(fromName: string, toName: string, duration: number): void;
-		setMixWith(from: Animation, to: Animation, duration: number): void;
-		getMix(from: Animation, to: Animation): number;
-	}
+    class AnimationStateData {
+        skeletonData: SkeletonData;
+        animationToMixTime: Map<number>;
+        defaultMix: number;
+        constructor(skeletonData: SkeletonData);
+        setMix(fromName: string, toName: string, duration: number): void;
+        setMixWith(from: Animation, to: Animation, duration: number): void;
+        getMix(from: Animation, to: Animation): number;
+    }
 }
 declare module spine {
-	class AssetManager implements Disposable {
-		private pathPrefix;
-		private textureLoader;
-		private assets;
-		private errors;
-		private toLoad;
-		private loaded;
-		constructor(textureLoader: (image: HTMLImageElement) => any, pathPrefix?: string);
-		loadText(path: string, success?: (path: string, text: string) => void, error?: (path: string, error: string) => void): void;
-		loadTexture(path: string, success?: (path: string, image: HTMLImageElement) => void, error?: (path: string, error: string) => void): void;
-		loadTextureData(path: string, data: string, success?: (path: string, image: HTMLImageElement) => void, error?: (path: string, error: string) => void): void;
-		get(path: string): any;
-		remove(path: string): void;
-		removeAll(): void;
-		isLoadingComplete(): boolean;
-		getToLoad(): number;
-		getLoaded(): number;
-		dispose(): void;
-		hasErrors(): boolean;
-		getErrors(): Map<string>;
-	}
+    class AssetManager implements Disposable {
+        private pathPrefix;
+        private textureLoader;
+        private assets;
+        private errors;
+        private toLoad;
+        private loaded;
+        constructor(textureLoader: (image: HTMLImageElement) => any, pathPrefix?: string);
+        loadText(path: string, success?: (path: string, text: string) => void, error?: (path: string, error: string) => void): void;
+        loadTexture(path: string, success?: (path: string, image: HTMLImageElement) => void, error?: (path: string, error: string) => void): void;
+        loadTextureData(path: string, data: string, success?: (path: string, image: HTMLImageElement) => void, error?: (path: string, error: string) => void): void;
+        get(path: string): any;
+        remove(path: string): void;
+        removeAll(): void;
+        isLoadingComplete(): boolean;
+        getToLoad(): number;
+        getLoaded(): number;
+        dispose(): void;
+        hasErrors(): boolean;
+        getErrors(): Map<string>;
+    }
 }
 declare module spine {
-	class AtlasAttachmentLoader implements AttachmentLoader {
-		atlas: TextureAtlas;
-		constructor(atlas: TextureAtlas);
-		newRegionAttachment(skin: Skin, name: string, path: string): RegionAttachment;
-		newMeshAttachment(skin: Skin, name: string, path: string): MeshAttachment;
-		newBoundingBoxAttachment(skin: Skin, name: string): BoundingBoxAttachment;
-		newPathAttachment(skin: Skin, name: string): PathAttachment;
-		newPointAttachment(skin: Skin, name: string): PointAttachment;
-		newClippingAttachment(skin: Skin, name: string): ClippingAttachment;
-	}
+    class AtlasAttachmentLoader implements AttachmentLoader {
+        atlas: TextureAtlas;
+        constructor(atlas: TextureAtlas);
+        newRegionAttachment(skin: Skin, name: string, path: string): RegionAttachment;
+        newMeshAttachment(skin: Skin, name: string, path: string): MeshAttachment;
+        newBoundingBoxAttachment(skin: Skin, name: string): BoundingBoxAttachment;
+        newPathAttachment(skin: Skin, name: string): PathAttachment;
+        newPointAttachment(skin: Skin, name: string): PointAttachment;
+        newClippingAttachment(skin: Skin, name: string): ClippingAttachment;
+    }
 }
 declare module spine {
-	enum BlendMode {
-		Normal = 0,
-		Additive = 1,
-		Multiply = 2,
-		Screen = 3,
-	}
+    enum BlendMode {
+        Normal = 0,
+        Additive = 1,
+        Multiply = 2,
+        Screen = 3,
+    }
 }
 declare module spine {
-	class Bone implements Updatable {
-		data: BoneData;
-		skeleton: Skeleton;
-		parent: Bone;
-		children: Bone[];
-		x: number;
-		y: number;
-		rotation: number;
-		scaleX: number;
-		scaleY: number;
-		shearX: number;
-		shearY: number;
-		ax: number;
-		ay: number;
-		arotation: number;
-		ascaleX: number;
-		ascaleY: number;
-		ashearX: number;
-		ashearY: number;
-		appliedValid: boolean;
-		a: number;
-		b: number;
-		worldX: number;
-		c: number;
-		d: number;
-		worldY: number;
-		sorted: boolean;
-		constructor(data: BoneData, skeleton: Skeleton, parent: Bone);
-		update(): void;
-		updateWorldTransform(): void;
-		updateWorldTransformWith(x: number, y: number, rotation: number, scaleX: number, scaleY: number, shearX: number, shearY: number): void;
-		setToSetupPose(): void;
-		getWorldRotationX(): number;
-		getWorldRotationY(): number;
-		getWorldScaleX(): number;
-		getWorldScaleY(): number;
-		updateAppliedTransform(): void;
-		worldToLocal(world: Vector2): Vector2;
-		localToWorld(local: Vector2): Vector2;
-		worldToLocalRotation(worldRotation: number): number;
-		localToWorldRotation(localRotation: number): number;
-		rotateWorld(degrees: number): void;
-	}
+    class Bone implements Updatable {
+        data: BoneData;
+        skeleton: Skeleton;
+        parent: Bone;
+        children: Bone[];
+        x: number;
+        y: number;
+        rotation: number;
+        scaleX: number;
+        scaleY: number;
+        shearX: number;
+        shearY: number;
+        ax: number;
+        ay: number;
+        arotation: number;
+        ascaleX: number;
+        ascaleY: number;
+        ashearX: number;
+        ashearY: number;
+        appliedValid: boolean;
+        a: number;
+        b: number;
+        worldX: number;
+        c: number;
+        d: number;
+        worldY: number;
+        sorted: boolean;
+        constructor(data: BoneData, skeleton: Skeleton, parent: Bone);
+        update(): void;
+        updateWorldTransform(): void;
+        updateWorldTransformWith(x: number, y: number, rotation: number, scaleX: number, scaleY: number, shearX: number, shearY: number): void;
+        setToSetupPose(): void;
+        getWorldRotationX(): number;
+        getWorldRotationY(): number;
+        getWorldScaleX(): number;
+        getWorldScaleY(): number;
+        updateAppliedTransform(): void;
+        worldToLocal(world: Vector2): Vector2;
+        localToWorld(local: Vector2): Vector2;
+        worldToLocalRotation(worldRotation: number): number;
+        localToWorldRotation(localRotation: number): number;
+        rotateWorld(degrees: number): void;
+    }
 }
 declare module spine {
-	class BoneData {
-		index: number;
-		name: string;
-		parent: BoneData;
-		length: number;
-		x: number;
-		y: number;
-		rotation: number;
-		scaleX: number;
-		scaleY: number;
-		shearX: number;
-		shearY: number;
-		transformMode: TransformMode;
-		constructor(index: number, name: string, parent: BoneData);
-	}
-	enum TransformMode {
-		Normal = 0,
-		OnlyTranslation = 1,
-		NoRotationOrReflection = 2,
-		NoScale = 3,
-		NoScaleOrReflection = 4,
-	}
+    class BoneData {
+        index: number;
+        name: string;
+        parent: BoneData;
+        length: number;
+        x: number;
+        y: number;
+        rotation: number;
+        scaleX: number;
+        scaleY: number;
+        shearX: number;
+        shearY: number;
+        transformMode: TransformMode;
+        constructor(index: number, name: string, parent: BoneData);
+    }
+    enum TransformMode {
+        Normal = 0,
+        OnlyTranslation = 1,
+        NoRotationOrReflection = 2,
+        NoScale = 3,
+        NoScaleOrReflection = 4,
+    }
 }
 declare module spine {
-	interface Constraint extends Updatable {
-		getOrder(): number;
-	}
+    interface Constraint extends Updatable {
+        getOrder(): number;
+    }
 }
 declare module spine {
-	class Event {
-		data: EventData;
-		intValue: number;
-		floatValue: number;
-		stringValue: string;
-		time: number;
-		constructor(time: number, data: EventData);
-	}
+    class Event {
+        data: EventData;
+        intValue: number;
+        floatValue: number;
+        stringValue: string;
+        time: number;
+        constructor(time: number, data: EventData);
+    }
 }
 declare module spine {
-	class EventData {
-		name: string;
-		intValue: number;
-		floatValue: number;
-		stringValue: string;
-		constructor(name: string);
-	}
+    class EventData {
+        name: string;
+        intValue: number;
+        floatValue: number;
+        stringValue: string;
+        constructor(name: string);
+    }
 }
 declare module spine {
-	class IkConstraint implements Constraint {
-		data: IkConstraintData;
-		bones: Array<Bone>;
-		target: Bone;
-		mix: number;
-		bendDirection: number;
-		constructor(data: IkConstraintData, skeleton: Skeleton);
-		getOrder(): number;
-		apply(): void;
-		update(): void;
-		apply1(bone: Bone, targetX: number, targetY: number, alpha: number): void;
-		apply2(parent: Bone, child: Bone, targetX: number, targetY: number, bendDir: number, alpha: number): void;
-	}
+    class IkConstraint implements Constraint {
+        data: IkConstraintData;
+        bones: Array<Bone>;
+        target: Bone;
+        mix: number;
+        bendDirection: number;
+        constructor(data: IkConstraintData, skeleton: Skeleton);
+        getOrder(): number;
+        apply(): void;
+        update(): void;
+        apply1(bone: Bone, targetX: number, targetY: number, alpha: number): void;
+        apply2(parent: Bone, child: Bone, targetX: number, targetY: number, bendDir: number, alpha: number): void;
+    }
 }
 declare module spine {
-	class IkConstraintData {
-		name: string;
-		order: number;
-		bones: BoneData[];
-		target: BoneData;
-		bendDirection: number;
-		mix: number;
-		constructor(name: string);
-	}
+    class IkConstraintData {
+        name: string;
+        order: number;
+        bones: BoneData[];
+        target: BoneData;
+        bendDirection: number;
+        mix: number;
+        constructor(name: string);
+    }
 }
 declare module spine {
-	class PathConstraint implements Constraint {
-		static NONE: number;
-		static BEFORE: number;
-		static AFTER: number;
-		data: PathConstraintData;
-		bones: Array<Bone>;
-		target: Slot;
-		position: number;
-		spacing: number;
-		rotateMix: number;
-		translateMix: number;
-		spaces: number[];
-		positions: number[];
-		world: number[];
-		curves: number[];
-		lengths: number[];
-		segments: number[];
-		constructor(data: PathConstraintData, skeleton: Skeleton);
-		apply(): void;
-		update(): void;
-		computeWorldPositions(path: PathAttachment, spacesCount: number, tangents: boolean, percentPosition: boolean, percentSpacing: boolean): number[];
-		addBeforePosition(p: number, temp: Array<number>, i: number, out: Array<number>, o: number): void;
-		addAfterPosition(p: number, temp: Array<number>, i: number, out: Array<number>, o: number): void;
-		addCurvePosition(p: number, x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, out: Array<number>, o: number, tangents: boolean): void;
-		getOrder(): number;
-	}
+    class PathConstraint implements Constraint {
+        static NONE: number;
+        static BEFORE: number;
+        static AFTER: number;
+        data: PathConstraintData;
+        bones: Array<Bone>;
+        target: Slot;
+        position: number;
+        spacing: number;
+        rotateMix: number;
+        translateMix: number;
+        spaces: number[];
+        positions: number[];
+        world: number[];
+        curves: number[];
+        lengths: number[];
+        segments: number[];
+        constructor(data: PathConstraintData, skeleton: Skeleton);
+        apply(): void;
+        update(): void;
+        computeWorldPositions(path: PathAttachment, spacesCount: number, tangents: boolean, percentPosition: boolean, percentSpacing: boolean): number[];
+        addBeforePosition(p: number, temp: Array<number>, i: number, out: Array<number>, o: number): void;
+        addAfterPosition(p: number, temp: Array<number>, i: number, out: Array<number>, o: number): void;
+        addCurvePosition(p: number, x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, out: Array<number>, o: number, tangents: boolean): void;
+        getOrder(): number;
+    }
 }
 declare module spine {
-	class PathConstraintData {
-		name: string;
-		order: number;
-		bones: BoneData[];
-		target: SlotData;
-		positionMode: PositionMode;
-		spacingMode: SpacingMode;
-		rotateMode: RotateMode;
-		offsetRotation: number;
-		position: number;
-		spacing: number;
-		rotateMix: number;
-		translateMix: number;
-		constructor(name: string);
-	}
-	enum PositionMode {
-		Fixed = 0,
-		Percent = 1,
-	}
-	enum SpacingMode {
-		Length = 0,
-		Fixed = 1,
-		Percent = 2,
-	}
-	enum RotateMode {
-		Tangent = 0,
-		Chain = 1,
-		ChainScale = 2,
-	}
+    class PathConstraintData {
+        name: string;
+        order: number;
+        bones: BoneData[];
+        target: SlotData;
+        positionMode: PositionMode;
+        spacingMode: SpacingMode;
+        rotateMode: RotateMode;
+        offsetRotation: number;
+        position: number;
+        spacing: number;
+        rotateMix: number;
+        translateMix: number;
+        constructor(name: string);
+    }
+    enum PositionMode {
+        Fixed = 0,
+        Percent = 1,
+    }
+    enum SpacingMode {
+        Length = 0,
+        Fixed = 1,
+        Percent = 2,
+    }
+    enum RotateMode {
+        Tangent = 0,
+        Chain = 1,
+        ChainScale = 2,
+    }
 }
 interface Math {
-	fround(n: number): number;
+    fround(n: number): number;
 }
 declare module spine {
-	class SharedAssetManager implements Disposable {
-		private pathPrefix;
-		private clientAssets;
-		private queuedAssets;
-		private rawAssets;
-		private errors;
-		constructor(pathPrefix?: string);
-		private queueAsset(clientId, textureLoader, path);
-		loadText(clientId: string, path: string): void;
-		loadJson(clientId: string, path: string): void;
-		loadTexture(clientId: string, textureLoader: (image: HTMLImageElement) => any, path: string): void;
-		get(clientId: string, path: string): any;
-		private updateClientAssets(clientAssets);
-		isLoadingComplete(clientId: string): boolean;
-		dispose(): void;
-		hasErrors(): boolean;
-		getErrors(): Map<string>;
-	}
+    class SharedAssetManager implements Disposable {
+        private pathPrefix;
+        private clientAssets;
+        private queuedAssets;
+        private rawAssets;
+        private errors;
+        constructor(pathPrefix?: string);
+        private queueAsset(clientId, textureLoader, path);
+        loadText(clientId: string, path: string): void;
+        loadJson(clientId: string, path: string): void;
+        loadTexture(clientId: string, textureLoader: (image: HTMLImageElement) => any, path: string): void;
+        get(clientId: string, path: string): any;
+        private updateClientAssets(clientAssets);
+        isLoadingComplete(clientId: string): boolean;
+        dispose(): void;
+        hasErrors(): boolean;
+        getErrors(): Map<string>;
+    }
 }
 declare module spine {
-	class Skeleton {
-		data: SkeletonData;
-		bones: Array<Bone>;
-		slots: Array<Slot>;
-		drawOrder: Array<Slot>;
-		ikConstraints: Array<IkConstraint>;
-		transformConstraints: Array<TransformConstraint>;
-		pathConstraints: Array<PathConstraint>;
-		_updateCache: Updatable[];
-		updateCacheReset: Updatable[];
-		skin: Skin;
-		color: Color;
-		time: number;
-		flipX: boolean;
-		flipY: boolean;
-		x: number;
-		y: number;
-		constructor(data: SkeletonData);
-		updateCache(): void;
-		sortIkConstraint(constraint: IkConstraint): void;
-		sortPathConstraint(constraint: PathConstraint): void;
-		sortTransformConstraint(constraint: TransformConstraint): void;
-		sortPathConstraintAttachment(skin: Skin, slotIndex: number, slotBone: Bone): void;
-		sortPathConstraintAttachmentWith(attachment: Attachment, slotBone: Bone): void;
-		sortBone(bone: Bone): void;
-		sortReset(bones: Array<Bone>): void;
-		updateWorldTransform(): void;
-		setToSetupPose(): void;
-		setBonesToSetupPose(): void;
-		setSlotsToSetupPose(): void;
-		getRootBone(): Bone;
-		findBone(boneName: string): Bone;
-		findBoneIndex(boneName: string): number;
-		findSlot(slotName: string): Slot;
-		findSlotIndex(slotName: string): number;
-		setSkinByName(skinName: string): void;
-		setSkin(newSkin: Skin): void;
-		getAttachmentByName(slotName: string, attachmentName: string): Attachment;
-		getAttachment(slotIndex: number, attachmentName: string): Attachment;
-		setAttachment(slotName: string, attachmentName: string): void;
-		findIkConstraint(constraintName: string): IkConstraint;
-		findTransformConstraint(constraintName: string): TransformConstraint;
-		findPathConstraint(constraintName: string): PathConstraint;
-		getBounds(offset: Vector2, size: Vector2, temp: Array<number>): void;
-		update(delta: number): void;
-	}
+    class Skeleton {
+        data: SkeletonData;
+        bones: Array<Bone>;
+        slots: Array<Slot>;
+        drawOrder: Array<Slot>;
+        ikConstraints: Array<IkConstraint>;
+        transformConstraints: Array<TransformConstraint>;
+        pathConstraints: Array<PathConstraint>;
+        _updateCache: Updatable[];
+        updateCacheReset: Updatable[];
+        skin: Skin;
+        color: Color;
+        time: number;
+        flipX: boolean;
+        flipY: boolean;
+        x: number;
+        y: number;
+        constructor(data: SkeletonData);
+        updateCache(): void;
+        sortIkConstraint(constraint: IkConstraint): void;
+        sortPathConstraint(constraint: PathConstraint): void;
+        sortTransformConstraint(constraint: TransformConstraint): void;
+        sortPathConstraintAttachment(skin: Skin, slotIndex: number, slotBone: Bone): void;
+        sortPathConstraintAttachmentWith(attachment: Attachment, slotBone: Bone): void;
+        sortBone(bone: Bone): void;
+        sortReset(bones: Array<Bone>): void;
+        updateWorldTransform(): void;
+        setToSetupPose(): void;
+        setBonesToSetupPose(): void;
+        setSlotsToSetupPose(): void;
+        getRootBone(): Bone;
+        findBone(boneName: string): Bone;
+        findBoneIndex(boneName: string): number;
+        findSlot(slotName: string): Slot;
+        findSlotIndex(slotName: string): number;
+        setSkinByName(skinName: string): void;
+        setSkin(newSkin: Skin): void;
+        getAttachmentByName(slotName: string, attachmentName: string): Attachment;
+        getAttachment(slotIndex: number, attachmentName: string): Attachment;
+        setAttachment(slotName: string, attachmentName: string): void;
+        findIkConstraint(constraintName: string): IkConstraint;
+        findTransformConstraint(constraintName: string): TransformConstraint;
+        findPathConstraint(constraintName: string): PathConstraint;
+        getBounds(offset: Vector2, size: Vector2, temp: Array<number>): void;
+        update(delta: number): void;
+    }
 }
 declare module spine {
-	class SkeletonBounds {
-		minX: number;
-		minY: number;
-		maxX: number;
-		maxY: number;
-		boundingBoxes: BoundingBoxAttachment[];
-		polygons: ArrayLike<number>[];
-		private polygonPool;
-		update(skeleton: Skeleton, updateAabb: boolean): void;
-		aabbCompute(): void;
-		aabbContainsPoint(x: number, y: number): boolean;
-		aabbIntersectsSegment(x1: number, y1: number, x2: number, y2: number): boolean;
-		aabbIntersectsSkeleton(bounds: SkeletonBounds): boolean;
-		containsPoint(x: number, y: number): BoundingBoxAttachment;
-		containsPointPolygon(polygon: ArrayLike<number>, x: number, y: number): boolean;
-		intersectsSegment(x1: number, y1: number, x2: number, y2: number): BoundingBoxAttachment;
-		intersectsSegmentPolygon(polygon: ArrayLike<number>, x1: number, y1: number, x2: number, y2: number): boolean;
-		getPolygon(boundingBox: BoundingBoxAttachment): ArrayLike<number>;
-		getWidth(): number;
-		getHeight(): number;
-	}
+    class SkeletonBounds {
+        minX: number;
+        minY: number;
+        maxX: number;
+        maxY: number;
+        boundingBoxes: BoundingBoxAttachment[];
+        polygons: ArrayLike<number>[];
+        private polygonPool;
+        update(skeleton: Skeleton, updateAabb: boolean): void;
+        aabbCompute(): void;
+        aabbContainsPoint(x: number, y: number): boolean;
+        aabbIntersectsSegment(x1: number, y1: number, x2: number, y2: number): boolean;
+        aabbIntersectsSkeleton(bounds: SkeletonBounds): boolean;
+        containsPoint(x: number, y: number): BoundingBoxAttachment;
+        containsPointPolygon(polygon: ArrayLike<number>, x: number, y: number): boolean;
+        intersectsSegment(x1: number, y1: number, x2: number, y2: number): BoundingBoxAttachment;
+        intersectsSegmentPolygon(polygon: ArrayLike<number>, x1: number, y1: number, x2: number, y2: number): boolean;
+        getPolygon(boundingBox: BoundingBoxAttachment): ArrayLike<number>;
+        getWidth(): number;
+        getHeight(): number;
+    }
 }
 declare module spine {
-	class SkeletonClipping {
-		private triangulator;
-		private clippingPolygon;
-		private clipOutput;
-		clippedVertices: number[];
-		clippedTriangles: number[];
-		private scratch;
-		private clipAttachment;
-		private clippingPolygons;
-		clipStart(slot: Slot, clip: ClippingAttachment): number;
-		clipEndWithSlot(slot: Slot): void;
-		clipEnd(): void;
-		isClipping(): boolean;
-		clipTriangles(vertices: ArrayLike<number>, verticesLength: number, triangles: ArrayLike<number>, trianglesLength: number, uvs: ArrayLike<number>, light: Color, dark: Color, twoColor: boolean): void;
-		clip(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, clippingArea: Array<number>, output: Array<number>): boolean;
-		static makeClockwise(polygon: ArrayLike<number>): void;
-	}
+    class SkeletonClipping {
+        private triangulator;
+        private clippingPolygon;
+        private clipOutput;
+        clippedVertices: number[];
+        clippedTriangles: number[];
+        private scratch;
+        private clipAttachment;
+        private clippingPolygons;
+        clipStart(slot: Slot, clip: ClippingAttachment): number;
+        clipEndWithSlot(slot: Slot): void;
+        clipEnd(): void;
+        isClipping(): boolean;
+        clipTriangles(vertices: ArrayLike<number>, verticesLength: number, triangles: ArrayLike<number>, trianglesLength: number, uvs: ArrayLike<number>, light: Color, dark: Color, twoColor: boolean): void;
+        clip(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, clippingArea: Array<number>, output: Array<number>): boolean;
+        static makeClockwise(polygon: ArrayLike<number>): void;
+    }
 }
 declare module spine {
-	class SkeletonData {
-		name: string;
-		bones: BoneData[];
-		slots: SlotData[];
-		skins: Skin[];
-		defaultSkin: Skin;
-		events: EventData[];
-		animations: Animation[];
-		ikConstraints: IkConstraintData[];
-		transformConstraints: TransformConstraintData[];
-		pathConstraints: PathConstraintData[];
-		width: number;
-		height: number;
-		version: string;
-		hash: string;
-		fps: number;
-		imagesPath: string;
-		findBone(boneName: string): BoneData;
-		findBoneIndex(boneName: string): number;
-		findSlot(slotName: string): SlotData;
-		findSlotIndex(slotName: string): number;
-		findSkin(skinName: string): Skin;
-		findEvent(eventDataName: string): EventData;
-		findAnimation(animationName: string): Animation;
-		findIkConstraint(constraintName: string): IkConstraintData;
-		findTransformConstraint(constraintName: string): TransformConstraintData;
-		findPathConstraint(constraintName: string): PathConstraintData;
-		findPathConstraintIndex(pathConstraintName: string): number;
-	}
+    class SkeletonData {
+        name: string;
+        bones: BoneData[];
+        slots: SlotData[];
+        skins: Skin[];
+        defaultSkin: Skin;
+        events: EventData[];
+        animations: Animation[];
+        ikConstraints: IkConstraintData[];
+        transformConstraints: TransformConstraintData[];
+        pathConstraints: PathConstraintData[];
+        width: number;
+        height: number;
+        version: string;
+        hash: string;
+        fps: number;
+        imagesPath: string;
+        findBone(boneName: string): BoneData;
+        findBoneIndex(boneName: string): number;
+        findSlot(slotName: string): SlotData;
+        findSlotIndex(slotName: string): number;
+        findSkin(skinName: string): Skin;
+        findEvent(eventDataName: string): EventData;
+        findAnimation(animationName: string): Animation;
+        findIkConstraint(constraintName: string): IkConstraintData;
+        findTransformConstraint(constraintName: string): TransformConstraintData;
+        findPathConstraint(constraintName: string): PathConstraintData;
+        findPathConstraintIndex(pathConstraintName: string): number;
+    }
 }
 declare module spine {
-	class SkeletonJson {
-		attachmentLoader: AttachmentLoader;
-		scale: number;
-		private linkedMeshes;
-		constructor(attachmentLoader: AttachmentLoader);
-		readSkeletonData(json: string | any): SkeletonData;
-		readAttachment(map: any, skin: Skin, slotIndex: number, name: string, skeletonData: SkeletonData): Attachment;
-		readVertices(map: any, attachment: VertexAttachment, verticesLength: number): void;
-		readAnimation(map: any, name: string, skeletonData: SkeletonData): void;
-		readCurve(map: any, timeline: CurveTimeline, frameIndex: number): void;
-		getValue(map: any, prop: string, defaultValue: any): any;
-		static blendModeFromString(str: string): BlendMode;
-		static positionModeFromString(str: string): PositionMode;
-		static spacingModeFromString(str: string): SpacingMode;
-		static rotateModeFromString(str: string): RotateMode;
-		static transformModeFromString(str: string): TransformMode;
-	}
+    class SkeletonJson {
+        attachmentLoader: AttachmentLoader;
+        scale: number;
+        private linkedMeshes;
+        constructor(attachmentLoader: AttachmentLoader);
+        readSkeletonData(json: string | any): SkeletonData;
+        readAttachment(map: any, skin: Skin, slotIndex: number, name: string, skeletonData: SkeletonData): Attachment;
+        readVertices(map: any, attachment: VertexAttachment, verticesLength: number): void;
+        readAnimation(map: any, name: string, skeletonData: SkeletonData): void;
+        readCurve(map: any, timeline: CurveTimeline, frameIndex: number): void;
+        getValue(map: any, prop: string, defaultValue: any): any;
+        static blendModeFromString(str: string): BlendMode;
+        static positionModeFromString(str: string): PositionMode;
+        static spacingModeFromString(str: string): SpacingMode;
+        static rotateModeFromString(str: string): RotateMode;
+        static transformModeFromString(str: string): TransformMode;
+    }
 }
 declare module spine {
-	class Skin {
-		name: string;
-		attachments: Map<Attachment>[];
-		constructor(name: string);
-		addAttachment(slotIndex: number, name: string, attachment: Attachment): void;
-		getAttachment(slotIndex: number, name: string): Attachment;
-		attachAll(skeleton: Skeleton, oldSkin: Skin): void;
-	}
+    class Skin {
+        name: string;
+        attachments: Map<Attachment>[];
+        constructor(name: string);
+        addAttachment(slotIndex: number, name: string, attachment: Attachment): void;
+        getAttachment(slotIndex: number, name: string): Attachment;
+        attachAll(skeleton: Skeleton, oldSkin: Skin): void;
+    }
 }
 declare module spine {
-	class Slot {
-		data: SlotData;
-		bone: Bone;
-		color: Color;
-		darkColor: Color;
-		private attachment;
-		private attachmentTime;
-		attachmentVertices: number[];
-		constructor(data: SlotData, bone: Bone);
-		getAttachment(): Attachment;
-		setAttachment(attachment: Attachment): void;
-		setAttachmentTime(time: number): void;
-		getAttachmentTime(): number;
-		setToSetupPose(): void;
-	}
+    class Slot {
+        data: SlotData;
+        bone: Bone;
+        color: Color;
+        darkColor: Color;
+        private attachment;
+        private attachmentTime;
+        attachmentVertices: number[];
+        constructor(data: SlotData, bone: Bone);
+        getAttachment(): Attachment;
+        setAttachment(attachment: Attachment): void;
+        setAttachmentTime(time: number): void;
+        getAttachmentTime(): number;
+        setToSetupPose(): void;
+    }
 }
 declare module spine {
-	class SlotData {
-		index: number;
-		name: string;
-		boneData: BoneData;
-		color: Color;
-		darkColor: Color;
-		attachmentName: string;
-		blendMode: BlendMode;
-		constructor(index: number, name: string, boneData: BoneData);
-	}
+    class SlotData {
+        index: number;
+        name: string;
+        boneData: BoneData;
+        color: Color;
+        darkColor: Color;
+        attachmentName: string;
+        blendMode: BlendMode;
+        constructor(index: number, name: string, boneData: BoneData);
+    }
 }
 declare module spine {
-	abstract class Texture {
-		protected _image: HTMLImageElement;
-		constructor(image: HTMLImageElement);
-		getImage(): HTMLImageElement;
-		abstract setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void;
-		abstract setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void;
-		abstract dispose(): void;
-		static filterFromString(text: string): TextureFilter;
-		static wrapFromString(text: string): TextureWrap;
-	}
-	enum TextureFilter {
-		Nearest = 9728,
-		Linear = 9729,
-		MipMap = 9987,
-		MipMapNearestNearest = 9984,
-		MipMapLinearNearest = 9985,
-		MipMapNearestLinear = 9986,
-		MipMapLinearLinear = 9987,
-	}
-	enum TextureWrap {
-		MirroredRepeat = 33648,
-		ClampToEdge = 33071,
-		Repeat = 10497,
-	}
-	class TextureRegion {
-		renderObject: any;
-		u: number;
-		v: number;
-		u2: number;
-		v2: number;
-		width: number;
-		height: number;
-		rotate: boolean;
-		offsetX: number;
-		offsetY: number;
-		originalWidth: number;
-		originalHeight: number;
-	}
+    abstract class Texture {
+        protected _image: HTMLImageElement;
+        constructor(image: HTMLImageElement);
+        getImage(): HTMLImageElement;
+        abstract setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void;
+        abstract setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void;
+        abstract dispose(): void;
+        static filterFromString(text: string): TextureFilter;
+        static wrapFromString(text: string): TextureWrap;
+    }
+    enum TextureFilter {
+        Nearest = 9728,
+        Linear = 9729,
+        MipMap = 9987,
+        MipMapNearestNearest = 9984,
+        MipMapLinearNearest = 9985,
+        MipMapNearestLinear = 9986,
+        MipMapLinearLinear = 9987,
+    }
+    enum TextureWrap {
+        MirroredRepeat = 33648,
+        ClampToEdge = 33071,
+        Repeat = 10497,
+    }
+    class TextureRegion {
+        renderObject: any;
+        u: number;
+        v: number;
+        u2: number;
+        v2: number;
+        width: number;
+        height: number;
+        rotate: boolean;
+        offsetX: number;
+        offsetY: number;
+        originalWidth: number;
+        originalHeight: number;
+    }
 }
 declare module spine {
-	class TextureAtlas implements Disposable {
-		pages: TextureAtlasPage[];
-		regions: TextureAtlasRegion[];
-		constructor(atlasText: string, textureLoader: (path: string) => any);
-		private load(atlasText, textureLoader);
-		findRegion(name: string): TextureAtlasRegion;
-		dispose(): void;
-	}
-	class TextureAtlasPage {
-		name: string;
-		minFilter: TextureFilter;
-		magFilter: TextureFilter;
-		uWrap: TextureWrap;
-		vWrap: TextureWrap;
-		texture: Texture;
-		width: number;
-		height: number;
-	}
-	class TextureAtlasRegion extends TextureRegion {
-		page: TextureAtlasPage;
-		name: string;
-		x: number;
-		y: number;
-		index: number;
-		rotate: boolean;
-		texture: Texture;
-	}
+    class TextureAtlas implements Disposable {
+        pages: TextureAtlasPage[];
+        regions: TextureAtlasRegion[];
+        constructor(atlasText: string, textureLoader: (path: string) => any);
+        private load(atlasText, textureLoader);
+        findRegion(name: string): TextureAtlasRegion;
+        dispose(): void;
+    }
+    class TextureAtlasPage {
+        name: string;
+        minFilter: TextureFilter;
+        magFilter: TextureFilter;
+        uWrap: TextureWrap;
+        vWrap: TextureWrap;
+        texture: Texture;
+        width: number;
+        height: number;
+    }
+    class TextureAtlasRegion extends TextureRegion {
+        page: TextureAtlasPage;
+        name: string;
+        x: number;
+        y: number;
+        index: number;
+        rotate: boolean;
+        texture: Texture;
+    }
 }
 declare module spine {
-	class TransformConstraint implements Constraint {
-		data: TransformConstraintData;
-		bones: Array<Bone>;
-		target: Bone;
-		rotateMix: number;
-		translateMix: number;
-		scaleMix: number;
-		shearMix: number;
-		temp: Vector2;
-		constructor(data: TransformConstraintData, skeleton: Skeleton);
-		apply(): void;
-		update(): void;
-		applyAbsoluteWorld(): void;
-		applyRelativeWorld(): void;
-		applyAbsoluteLocal(): void;
-		applyRelativeLocal(): void;
-		getOrder(): number;
-	}
+    class TransformConstraint implements Constraint {
+        data: TransformConstraintData;
+        bones: Array<Bone>;
+        target: Bone;
+        rotateMix: number;
+        translateMix: number;
+        scaleMix: number;
+        shearMix: number;
+        temp: Vector2;
+        constructor(data: TransformConstraintData, skeleton: Skeleton);
+        apply(): void;
+        update(): void;
+        applyAbsoluteWorld(): void;
+        applyRelativeWorld(): void;
+        applyAbsoluteLocal(): void;
+        applyRelativeLocal(): void;
+        getOrder(): number;
+    }
 }
 declare module spine {
-	class TransformConstraintData {
-		name: string;
-		order: number;
-		bones: BoneData[];
-		target: BoneData;
-		rotateMix: number;
-		translateMix: number;
-		scaleMix: number;
-		shearMix: number;
-		offsetRotation: number;
-		offsetX: number;
-		offsetY: number;
-		offsetScaleX: number;
-		offsetScaleY: number;
-		offsetShearY: number;
-		relative: boolean;
-		local: boolean;
-		constructor(name: string);
-	}
+    class TransformConstraintData {
+        name: string;
+        order: number;
+        bones: BoneData[];
+        target: BoneData;
+        rotateMix: number;
+        translateMix: number;
+        scaleMix: number;
+        shearMix: number;
+        offsetRotation: number;
+        offsetX: number;
+        offsetY: number;
+        offsetScaleX: number;
+        offsetScaleY: number;
+        offsetShearY: number;
+        relative: boolean;
+        local: boolean;
+        constructor(name: string);
+    }
 }
 declare module spine {
-	class Triangulator {
-		private convexPolygons;
-		private convexPolygonsIndices;
-		private indicesArray;
-		private isConcaveArray;
-		private triangles;
-		private polygonPool;
-		private polygonIndicesPool;
-		triangulate(verticesArray: ArrayLike<number>): Array<number>;
-		decompose(verticesArray: Array<number>, triangles: Array<number>): Array<Array<number>>;
-		private static isConcave(index, vertexCount, vertices, indices);
-		private static positiveArea(p1x, p1y, p2x, p2y, p3x, p3y);
-		private static winding(p1x, p1y, p2x, p2y, p3x, p3y);
-	}
+    class Triangulator {
+        private convexPolygons;
+        private convexPolygonsIndices;
+        private indicesArray;
+        private isConcaveArray;
+        private triangles;
+        private polygonPool;
+        private polygonIndicesPool;
+        triangulate(verticesArray: ArrayLike<number>): Array<number>;
+        decompose(verticesArray: Array<number>, triangles: Array<number>): Array<Array<number>>;
+        private static isConcave(index, vertexCount, vertices, indices);
+        private static positiveArea(p1x, p1y, p2x, p2y, p3x, p3y);
+        private static winding(p1x, p1y, p2x, p2y, p3x, p3y);
+    }
 }
 declare module spine {
-	interface Updatable {
-		update(): void;
-	}
+    interface Updatable {
+        update(): void;
+    }
 }
 declare module spine {
-	interface Map<T> {
-		[key: string]: T;
-	}
-	class IntSet {
-		array: number[];
-		add(value: number): boolean;
-		contains(value: number): boolean;
-		remove(value: number): void;
-		clear(): void;
-	}
-	interface Disposable {
-		dispose(): void;
-	}
-	interface Restorable {
-		restore(): void;
-	}
-	class Color {
-		r: number;
-		g: number;
-		b: number;
-		a: number;
-		static WHITE: Color;
-		static RED: Color;
-		static GREEN: Color;
-		static BLUE: Color;
-		static MAGENTA: Color;
-		constructor(r?: number, g?: number, b?: number, a?: number);
-		set(r: number, g: number, b: number, a: number): this;
-		setFromColor(c: Color): this;
-		setFromString(hex: string): this;
-		add(r: number, g: number, b: number, a: number): this;
-		clamp(): this;
-	}
-	class MathUtils {
-		static PI: number;
-		static PI2: number;
-		static radiansToDegrees: number;
-		static radDeg: number;
-		static degreesToRadians: number;
-		static degRad: number;
-		static clamp(value: number, min: number, max: number): number;
-		static cosDeg(degrees: number): number;
-		static sinDeg(degrees: number): number;
-		static signum(value: number): number;
-		static toInt(x: number): number;
-		static cbrt(x: number): number;
-		static randomTriangular(min: number, max: number): number;
-		static randomTriangularWith(min: number, max: number, mode: number): number;
-	}
-	abstract class Interpolation {
-		protected abstract applyInternal(a: number): number;
-		apply(start: number, end: number, a: number): number;
-	}
-	class Pow extends Interpolation {
-		protected power: number;
-		constructor(power: number);
-		applyInternal(a: number): number;
-	}
-	class PowOut extends Pow {
-		constructor(power: number);
-		applyInternal(a: number): number;
-	}
-	class Utils {
-		static SUPPORTS_TYPED_ARRAYS: boolean;
-		static arrayCopy<T>(source: ArrayLike<T>, sourceStart: number, dest: ArrayLike<T>, destStart: number, numElements: number): void;
-		static setArraySize<T>(array: Array<T>, size: number, value?: any): Array<T>;
-		static ensureArrayCapacity<T>(array: Array<T>, size: number, value?: any): Array<T>;
-		static newArray<T>(size: number, defaultValue: T): Array<T>;
-		static newFloatArray(size: number): ArrayLike<number>;
-		static newShortArray(size: number): ArrayLike<number>;
-		static toFloatArray(array: Array<number>): number[] | Float32Array;
-		static toSinglePrecision(value: number): number;
-	}
-	class DebugUtils {
-		static logBones(skeleton: Skeleton): void;
-	}
-	class Pool<T> {
-		private items;
-		private instantiator;
-		constructor(instantiator: () => T);
-		obtain(): T;
-		free(item: T): void;
-		freeAll(items: ArrayLike<T>): void;
-		clear(): void;
-	}
-	class Vector2 {
-		x: number;
-		y: number;
-		constructor(x?: number, y?: number);
-		set(x: number, y: number): Vector2;
-		length(): number;
-		normalize(): this;
-	}
-	class TimeKeeper {
-		maxDelta: number;
-		framesPerSecond: number;
-		delta: number;
-		totalTime: number;
-		private lastTime;
-		private frameCount;
-		private frameTime;
-		update(): void;
-	}
-	interface ArrayLike<T> {
-		length: number;
-		[n: number]: T;
-	}
-	class WindowedMean {
-		values: Array<number>;
-		addedValues: number;
-		lastValue: number;
-		mean: number;
-		dirty: boolean;
-		constructor(windowSize?: number);
-		hasEnoughData(): boolean;
-		addValue(value: number): void;
-		getMean(): number;
-	}
+    interface Map<T> {
+        [key: string]: T;
+    }
+    class IntSet {
+        array: number[];
+        add(value: number): boolean;
+        contains(value: number): boolean;
+        remove(value: number): void;
+        clear(): void;
+    }
+    interface Disposable {
+        dispose(): void;
+    }
+    interface Restorable {
+        restore(): void;
+    }
+    class Color {
+        r: number;
+        g: number;
+        b: number;
+        a: number;
+        static WHITE: Color;
+        static RED: Color;
+        static GREEN: Color;
+        static BLUE: Color;
+        static MAGENTA: Color;
+        constructor(r?: number, g?: number, b?: number, a?: number);
+        set(r: number, g: number, b: number, a: number): this;
+        setFromColor(c: Color): this;
+        setFromString(hex: string): this;
+        add(r: number, g: number, b: number, a: number): this;
+        clamp(): this;
+    }
+    class MathUtils {
+        static PI: number;
+        static PI2: number;
+        static radiansToDegrees: number;
+        static radDeg: number;
+        static degreesToRadians: number;
+        static degRad: number;
+        static clamp(value: number, min: number, max: number): number;
+        static cosDeg(degrees: number): number;
+        static sinDeg(degrees: number): number;
+        static signum(value: number): number;
+        static toInt(x: number): number;
+        static cbrt(x: number): number;
+        static randomTriangular(min: number, max: number): number;
+        static randomTriangularWith(min: number, max: number, mode: number): number;
+    }
+    abstract class Interpolation {
+        protected abstract applyInternal(a: number): number;
+        apply(start: number, end: number, a: number): number;
+    }
+    class Pow extends Interpolation {
+        protected power: number;
+        constructor(power: number);
+        applyInternal(a: number): number;
+    }
+    class PowOut extends Pow {
+        constructor(power: number);
+        applyInternal(a: number): number;
+    }
+    class Utils {
+        static SUPPORTS_TYPED_ARRAYS: boolean;
+        static arrayCopy<T>(source: ArrayLike<T>, sourceStart: number, dest: ArrayLike<T>, destStart: number, numElements: number): void;
+        static setArraySize<T>(array: Array<T>, size: number, value?: any): Array<T>;
+        static ensureArrayCapacity<T>(array: Array<T>, size: number, value?: any): Array<T>;
+        static newArray<T>(size: number, defaultValue: T): Array<T>;
+        static newFloatArray(size: number): ArrayLike<number>;
+        static newShortArray(size: number): ArrayLike<number>;
+        static toFloatArray(array: Array<number>): number[] | Float32Array;
+        static toSinglePrecision(value: number): number;
+    }
+    class DebugUtils {
+        static logBones(skeleton: Skeleton): void;
+    }
+    class Pool<T> {
+        private items;
+        private instantiator;
+        constructor(instantiator: () => T);
+        obtain(): T;
+        free(item: T): void;
+        freeAll(items: ArrayLike<T>): void;
+        clear(): void;
+    }
+    class Vector2 {
+        x: number;
+        y: number;
+        constructor(x?: number, y?: number);
+        set(x: number, y: number): Vector2;
+        length(): number;
+        normalize(): this;
+    }
+    class TimeKeeper {
+        maxDelta: number;
+        framesPerSecond: number;
+        delta: number;
+        totalTime: number;
+        private lastTime;
+        private frameCount;
+        private frameTime;
+        update(): void;
+    }
+    interface ArrayLike<T> {
+        length: number;
+        [n: number]: T;
+    }
+    class WindowedMean {
+        values: Array<number>;
+        addedValues: number;
+        lastValue: number;
+        mean: number;
+        dirty: boolean;
+        constructor(windowSize?: number);
+        hasEnoughData(): boolean;
+        addValue(value: number): void;
+        getMean(): number;
+    }
 }
 declare module spine {
-	interface VertexEffect {
-		begin(skeleton: Skeleton): void;
-		transform(position: Vector2, uv: Vector2, light: Color, dark: Color): void;
-		end(): void;
-	}
+    interface VertexEffect {
+        begin(skeleton: Skeleton): void;
+        transform(position: Vector2, uv: Vector2, light: Color, dark: Color): void;
+        end(): void;
+    }
 }
 declare module spine {
-	abstract class Attachment {
-		name: string;
-		constructor(name: string);
-	}
-	abstract class VertexAttachment extends Attachment {
-		private static nextID;
-		id: number;
-		bones: Array<number>;
-		vertices: ArrayLike<number>;
-		worldVerticesLength: number;
-		constructor(name: string);
-		computeWorldVertices(slot: Slot, start: number, count: number, worldVertices: ArrayLike<number>, offset: number, stride: number): void;
-		applyDeform(sourceAttachment: VertexAttachment): boolean;
-	}
+    abstract class Attachment {
+        name: string;
+        constructor(name: string);
+    }
+    abstract class VertexAttachment extends Attachment {
+        private static nextID;
+        id: number;
+        bones: Array<number>;
+        vertices: ArrayLike<number>;
+        worldVerticesLength: number;
+        constructor(name: string);
+        computeWorldVertices(slot: Slot, start: number, count: number, worldVertices: ArrayLike<number>, offset: number, stride: number): void;
+        applyDeform(sourceAttachment: VertexAttachment): boolean;
+    }
 }
 declare module spine {
-	interface AttachmentLoader {
-		newRegionAttachment(skin: Skin, name: string, path: string): RegionAttachment;
-		newMeshAttachment(skin: Skin, name: string, path: string): MeshAttachment;
-		newBoundingBoxAttachment(skin: Skin, name: string): BoundingBoxAttachment;
-		newPathAttachment(skin: Skin, name: string): PathAttachment;
-		newPointAttachment(skin: Skin, name: string): PointAttachment;
-		newClippingAttachment(skin: Skin, name: string): ClippingAttachment;
-	}
+    interface AttachmentLoader {
+        newRegionAttachment(skin: Skin, name: string, path: string): RegionAttachment;
+        newMeshAttachment(skin: Skin, name: string, path: string): MeshAttachment;
+        newBoundingBoxAttachment(skin: Skin, name: string): BoundingBoxAttachment;
+        newPathAttachment(skin: Skin, name: string): PathAttachment;
+        newPointAttachment(skin: Skin, name: string): PointAttachment;
+        newClippingAttachment(skin: Skin, name: string): ClippingAttachment;
+    }
 }
 declare module spine {
-	enum AttachmentType {
-		Region = 0,
-		BoundingBox = 1,
-		Mesh = 2,
-		LinkedMesh = 3,
-		Path = 4,
-		Point = 5,
-	}
+    enum AttachmentType {
+        Region = 0,
+        BoundingBox = 1,
+        Mesh = 2,
+        LinkedMesh = 3,
+        Path = 4,
+        Point = 5,
+    }
 }
 declare module spine {
-	class BoundingBoxAttachment extends VertexAttachment {
-		color: Color;
-		constructor(name: string);
-	}
+    class BoundingBoxAttachment extends VertexAttachment {
+        color: Color;
+        constructor(name: string);
+    }
 }
 declare module spine {
-	class ClippingAttachment extends VertexAttachment {
-		endSlot: SlotData;
-		color: Color;
-		constructor(name: string);
-	}
+    class ClippingAttachment extends VertexAttachment {
+        endSlot: SlotData;
+        color: Color;
+        constructor(name: string);
+    }
 }
 declare module spine {
-	class MeshAttachment extends VertexAttachment {
-		region: TextureRegion;
-		path: string;
-		regionUVs: ArrayLike<number>;
-		uvs: ArrayLike<number>;
-		triangles: Array<number>;
-		color: Color;
-		hullLength: number;
-		private parentMesh;
-		inheritDeform: boolean;
-		tempColor: Color;
-		constructor(name: string);
-		updateUVs(): void;
-		applyDeform(sourceAttachment: VertexAttachment): boolean;
-		getParentMesh(): MeshAttachment;
-		setParentMesh(parentMesh: MeshAttachment): void;
-	}
+    class MeshAttachment extends VertexAttachment {
+        region: TextureRegion;
+        path: string;
+        regionUVs: ArrayLike<number>;
+        uvs: ArrayLike<number>;
+        triangles: Array<number>;
+        color: Color;
+        hullLength: number;
+        private parentMesh;
+        inheritDeform: boolean;
+        tempColor: Color;
+        constructor(name: string);
+        updateUVs(): void;
+        applyDeform(sourceAttachment: VertexAttachment): boolean;
+        getParentMesh(): MeshAttachment;
+        setParentMesh(parentMesh: MeshAttachment): void;
+    }
 }
 declare module spine {
-	class PathAttachment extends VertexAttachment {
-		lengths: Array<number>;
-		closed: boolean;
-		constantSpeed: boolean;
-		color: Color;
-		constructor(name: string);
-	}
+    class PathAttachment extends VertexAttachment {
+        lengths: Array<number>;
+        closed: boolean;
+        constantSpeed: boolean;
+        color: Color;
+        constructor(name: string);
+    }
 }
 declare module spine {
-	class PointAttachment extends VertexAttachment {
-		x: number;
-		y: number;
-		rotation: number;
-		color: Color;
-		constructor(name: string);
-		computeWorldPosition(bone: Bone, point: Vector2): Vector2;
-		computeWorldRotation(bone: Bone): number;
-	}
+    class PointAttachment extends VertexAttachment {
+        x: number;
+        y: number;
+        rotation: number;
+        color: Color;
+        constructor(name: string);
+        computeWorldPosition(bone: Bone, point: Vector2): Vector2;
+        computeWorldRotation(bone: Bone): number;
+    }
 }
 declare module spine {
-	class RegionAttachment extends Attachment {
-		static OX1: number;
-		static OY1: number;
-		static OX2: number;
-		static OY2: number;
-		static OX3: number;
-		static OY3: number;
-		static OX4: number;
-		static OY4: number;
-		static X1: number;
-		static Y1: number;
-		static C1R: number;
-		static C1G: number;
-		static C1B: number;
-		static C1A: number;
-		static U1: number;
-		static V1: number;
-		static X2: number;
-		static Y2: number;
-		static C2R: number;
-		static C2G: number;
-		static C2B: number;
-		static C2A: number;
-		static U2: number;
-		static V2: number;
-		static X3: number;
-		static Y3: number;
-		static C3R: number;
-		static C3G: number;
-		static C3B: number;
-		static C3A: number;
-		static U3: number;
-		static V3: number;
-		static X4: number;
-		static Y4: number;
-		static C4R: number;
-		static C4G: number;
-		static C4B: number;
-		static C4A: number;
-		static U4: number;
-		static V4: number;
-		x: number;
-		y: number;
-		scaleX: number;
-		scaleY: number;
-		rotation: number;
-		width: number;
-		height: number;
-		color: Color;
-		path: string;
-		rendererObject: any;
-		region: TextureRegion;
-		offset: ArrayLike<number>;
-		uvs: ArrayLike<number>;
-		tempColor: Color;
-		constructor(name: string);
-		updateOffset(): void;
-		setRegion(region: TextureRegion): void;
-		computeWorldVertices(bone: Bone, worldVertices: ArrayLike<number>, offset: number, stride: number): void;
-	}
+    class RegionAttachment extends Attachment {
+        static OX1: number;
+        static OY1: number;
+        static OX2: number;
+        static OY2: number;
+        static OX3: number;
+        static OY3: number;
+        static OX4: number;
+        static OY4: number;
+        static X1: number;
+        static Y1: number;
+        static C1R: number;
+        static C1G: number;
+        static C1B: number;
+        static C1A: number;
+        static U1: number;
+        static V1: number;
+        static X2: number;
+        static Y2: number;
+        static C2R: number;
+        static C2G: number;
+        static C2B: number;
+        static C2A: number;
+        static U2: number;
+        static V2: number;
+        static X3: number;
+        static Y3: number;
+        static C3R: number;
+        static C3G: number;
+        static C3B: number;
+        static C3A: number;
+        static U3: number;
+        static V3: number;
+        static X4: number;
+        static Y4: number;
+        static C4R: number;
+        static C4G: number;
+        static C4B: number;
+        static C4A: number;
+        static U4: number;
+        static V4: number;
+        x: number;
+        y: number;
+        scaleX: number;
+        scaleY: number;
+        rotation: number;
+        width: number;
+        height: number;
+        color: Color;
+        path: string;
+        rendererObject: any;
+        region: TextureRegion;
+        offset: ArrayLike<number>;
+        uvs: ArrayLike<number>;
+        tempColor: Color;
+        constructor(name: string);
+        updateOffset(): void;
+        setRegion(region: TextureRegion): void;
+        computeWorldVertices(bone: Bone, worldVertices: ArrayLike<number>, offset: number, stride: number): void;
+    }
 }
 declare module spine {
-	class JitterEffect implements VertexEffect {
-		jitterX: number;
-		jitterY: number;
-		constructor(jitterX: number, jitterY: number);
-		begin(skeleton: Skeleton): void;
-		transform(position: Vector2, uv: Vector2, light: Color, dark: Color): void;
-		end(): void;
-	}
+    class JitterEffect implements VertexEffect {
+        jitterX: number;
+        jitterY: number;
+        constructor(jitterX: number, jitterY: number);
+        begin(skeleton: Skeleton): void;
+        transform(position: Vector2, uv: Vector2, light: Color, dark: Color): void;
+        end(): void;
+    }
 }
 declare module spine {
-	class SwirlEffect implements VertexEffect {
-		static interpolation: PowOut;
-		centerX: number;
-		centerY: number;
-		radius: number;
-		angle: number;
-		private worldX;
-		private worldY;
-		constructor(radius: number);
-		begin(skeleton: Skeleton): void;
-		transform(position: Vector2, uv: Vector2, light: Color, dark: Color): void;
-		end(): void;
-	}
+    class SwirlEffect implements VertexEffect {
+        static interpolation: PowOut;
+        centerX: number;
+        centerY: number;
+        radius: number;
+        angle: number;
+        private worldX;
+        private worldY;
+        constructor(radius: number);
+        begin(skeleton: Skeleton): void;
+        transform(position: Vector2, uv: Vector2, light: Color, dark: Color): void;
+        end(): void;
+    }
 }
 declare module spine.webgl {
-	class AssetManager extends spine.AssetManager {
-		constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, pathPrefix?: string);
-	}
+    class AssetManager extends spine.AssetManager {
+        constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, pathPrefix?: string);
+    }
 }
 declare module spine.webgl {
-	class OrthoCamera {
-		position: Vector3;
-		direction: Vector3;
-		up: Vector3;
-		near: number;
-		far: number;
-		zoom: number;
-		viewportWidth: number;
-		viewportHeight: number;
-		projectionView: Matrix4;
-		inverseProjectionView: Matrix4;
-		projection: Matrix4;
-		view: Matrix4;
-		private tmp;
-		constructor(viewportWidth: number, viewportHeight: number);
-		update(): void;
-		screenToWorld(screenCoords: Vector3, screenWidth: number, screenHeight: number): Vector3;
-		setViewport(viewportWidth: number, viewportHeight: number): void;
-	}
+    class OrthoCamera {
+        position: Vector3;
+        direction: Vector3;
+        up: Vector3;
+        near: number;
+        far: number;
+        zoom: number;
+        viewportWidth: number;
+        viewportHeight: number;
+        projectionView: Matrix4;
+        inverseProjectionView: Matrix4;
+        projection: Matrix4;
+        view: Matrix4;
+        private tmp;
+        constructor(viewportWidth: number, viewportHeight: number);
+        update(): void;
+        screenToWorld(screenCoords: Vector3, screenWidth: number, screenHeight: number): Vector3;
+        setViewport(viewportWidth: number, viewportHeight: number): void;
+    }
 }
 declare module spine.webgl {
-	class GLTexture extends Texture implements Disposable, Restorable {
-		private context;
-		private texture;
-		private boundUnit;
-		private useMipMaps;
-		constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, image: HTMLImageElement, useMipMaps?: boolean);
-		setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void;
-		setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void;
-		update(useMipMaps: boolean): void;
-		restore(): void;
-		bind(unit?: number): void;
-		unbind(): void;
-		dispose(): void;
-	}
+    class GLTexture extends Texture implements Disposable, Restorable {
+        private context;
+        private texture;
+        private boundUnit;
+        private useMipMaps;
+        constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, image: HTMLImageElement, useMipMaps?: boolean);
+        setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void;
+        setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void;
+        update(useMipMaps: boolean): void;
+        restore(): void;
+        bind(unit?: number): void;
+        unbind(): void;
+        dispose(): void;
+    }
 }
 declare module spine.webgl {
-	class Input {
-		element: HTMLElement;
-		lastX: number;
-		lastY: number;
-		buttonDown: boolean;
-		currTouch: Touch;
-		touchesPool: Pool<Touch>;
-		private listeners;
-		constructor(element: HTMLElement);
-		private setupCallbacks(element);
-		addListener(listener: InputListener): void;
-		removeListener(listener: InputListener): void;
-	}
-	class Touch {
-		identifier: number;
-		x: number;
-		y: number;
-		constructor(identifier: number, x: number, y: number);
-	}
-	interface InputListener {
-		down(x: number, y: number): void;
-		up(x: number, y: number): void;
-		moved(x: number, y: number): void;
-		dragged(x: number, y: number): void;
-	}
+    class Input {
+        element: HTMLElement;
+        lastX: number;
+        lastY: number;
+        buttonDown: boolean;
+        currTouch: Touch;
+        touchesPool: Pool<Touch>;
+        private listeners;
+        constructor(element: HTMLElement);
+        private setupCallbacks(element);
+        addListener(listener: InputListener): void;
+        removeListener(listener: InputListener): void;
+    }
+    class Touch {
+        identifier: number;
+        x: number;
+        y: number;
+        constructor(identifier: number, x: number, y: number);
+    }
+    interface InputListener {
+        down(x: number, y: number): void;
+        up(x: number, y: number): void;
+        moved(x: number, y: number): void;
+        dragged(x: number, y: number): void;
+    }
 }
 declare module spine.webgl {
-	class LoadingScreen {
-		static FADE_SECONDS: number;
-		private static loaded;
-		private static spinnerImg;
-		private static logoImg;
-		private renderer;
-		private logo;
-		private spinner;
-		private angle;
-		private fadeOut;
-		private timeKeeper;
-		backgroundColor: Color;
-		private tempColor;
-		private firstDraw;
-		private static SPINNER_DATA;
-		private static SPINE_LOGO_DATA;
-		constructor(renderer: SceneRenderer);
-		draw(complete?: boolean): void;
-	}
+    class LoadingScreen {
+        static FADE_SECONDS: number;
+        private static loaded;
+        private static spinnerImg;
+        private static logoImg;
+        private renderer;
+        private logo;
+        private spinner;
+        private angle;
+        private fadeOut;
+        private timeKeeper;
+        backgroundColor: Color;
+        private tempColor;
+        private firstDraw;
+        private static SPINNER_DATA;
+        private static SPINE_LOGO_DATA;
+        constructor(renderer: SceneRenderer);
+        draw(complete?: boolean): void;
+    }
 }
 declare module spine.webgl {
-	const M00 = 0;
-	const M01 = 4;
-	const M02 = 8;
-	const M03 = 12;
-	const M10 = 1;
-	const M11 = 5;
-	const M12 = 9;
-	const M13 = 13;
-	const M20 = 2;
-	const M21 = 6;
-	const M22 = 10;
-	const M23 = 14;
-	const M30 = 3;
-	const M31 = 7;
-	const M32 = 11;
-	const M33 = 15;
-	class Matrix4 {
-		temp: Float32Array;
-		values: Float32Array;
-		private static xAxis;
-		private static yAxis;
-		private static zAxis;
-		private static tmpMatrix;
-		constructor();
-		set(values: ArrayLike<number>): Matrix4;
-		transpose(): Matrix4;
-		identity(): Matrix4;
-		invert(): Matrix4;
-		determinant(): number;
-		translate(x: number, y: number, z: number): Matrix4;
-		copy(): Matrix4;
-		projection(near: number, far: number, fovy: number, aspectRatio: number): Matrix4;
-		ortho2d(x: number, y: number, width: number, height: number): Matrix4;
-		ortho(left: number, right: number, bottom: number, top: number, near: number, far: number): Matrix4;
-		multiply(matrix: Matrix4): Matrix4;
-		multiplyLeft(matrix: Matrix4): Matrix4;
-		lookAt(position: Vector3, direction: Vector3, up: Vector3): this;
-		static initTemps(): void;
-	}
+    const M00 = 0;
+    const M01 = 4;
+    const M02 = 8;
+    const M03 = 12;
+    const M10 = 1;
+    const M11 = 5;
+    const M12 = 9;
+    const M13 = 13;
+    const M20 = 2;
+    const M21 = 6;
+    const M22 = 10;
+    const M23 = 14;
+    const M30 = 3;
+    const M31 = 7;
+    const M32 = 11;
+    const M33 = 15;
+    class Matrix4 {
+        temp: Float32Array;
+        values: Float32Array;
+        private static xAxis;
+        private static yAxis;
+        private static zAxis;
+        private static tmpMatrix;
+        constructor();
+        set(values: ArrayLike<number>): Matrix4;
+        transpose(): Matrix4;
+        identity(): Matrix4;
+        invert(): Matrix4;
+        determinant(): number;
+        translate(x: number, y: number, z: number): Matrix4;
+        copy(): Matrix4;
+        projection(near: number, far: number, fovy: number, aspectRatio: number): Matrix4;
+        ortho2d(x: number, y: number, width: number, height: number): Matrix4;
+        ortho(left: number, right: number, bottom: number, top: number, near: number, far: number): Matrix4;
+        multiply(matrix: Matrix4): Matrix4;
+        multiplyLeft(matrix: Matrix4): Matrix4;
+        lookAt(position: Vector3, direction: Vector3, up: Vector3): this;
+        static initTemps(): void;
+    }
 }
 declare module spine.webgl {
-	class Mesh implements Disposable, Restorable {
-		private attributes;
-		private context;
-		private vertices;
-		private verticesBuffer;
-		private verticesLength;
-		private dirtyVertices;
-		private indices;
-		private indicesBuffer;
-		private indicesLength;
-		private dirtyIndices;
-		private elementsPerVertex;
-		getAttributes(): VertexAttribute[];
-		maxVertices(): number;
-		numVertices(): number;
-		setVerticesLength(length: number): void;
-		getVertices(): Float32Array;
-		maxIndices(): number;
-		numIndices(): number;
-		setIndicesLength(length: number): void;
-		getIndices(): Uint16Array;
-		getVertexSizeInFloats(): number;
-		constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, attributes: VertexAttribute[], maxVertices: number, maxIndices: number);
-		setVertices(vertices: Array<number>): void;
-		setIndices(indices: Array<number>): void;
-		draw(shader: Shader, primitiveType: number): void;
-		drawWithOffset(shader: Shader, primitiveType: number, offset: number, count: number): void;
-		bind(shader: Shader): void;
-		unbind(shader: Shader): void;
-		private update();
-		restore(): void;
-		dispose(): void;
-	}
-	class VertexAttribute {
-		name: string;
-		type: VertexAttributeType;
-		numElements: number;
-		constructor(name: string, type: VertexAttributeType, numElements: number);
-	}
-	class Position2Attribute extends VertexAttribute {
-		constructor();
-	}
-	class Position3Attribute extends VertexAttribute {
-		constructor();
-	}
-	class TexCoordAttribute extends VertexAttribute {
-		constructor(unit?: number);
-	}
-	class ColorAttribute extends VertexAttribute {
-		constructor();
-	}
-	class Color2Attribute extends VertexAttribute {
-		constructor();
-	}
-	enum VertexAttributeType {
-		Float = 0,
-	}
+    class Mesh implements Disposable, Restorable {
+        private attributes;
+        private context;
+        private vertices;
+        private verticesBuffer;
+        private verticesLength;
+        private dirtyVertices;
+        private indices;
+        private indicesBuffer;
+        private indicesLength;
+        private dirtyIndices;
+        private elementsPerVertex;
+        getAttributes(): VertexAttribute[];
+        maxVertices(): number;
+        numVertices(): number;
+        setVerticesLength(length: number): void;
+        getVertices(): Float32Array;
+        maxIndices(): number;
+        numIndices(): number;
+        setIndicesLength(length: number): void;
+        getIndices(): Uint16Array;
+        getVertexSizeInFloats(): number;
+        constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, attributes: VertexAttribute[], maxVertices: number, maxIndices: number);
+        setVertices(vertices: Array<number>): void;
+        setIndices(indices: Array<number>): void;
+        draw(shader: Shader, primitiveType: number): void;
+        drawWithOffset(shader: Shader, primitiveType: number, offset: number, count: number): void;
+        bind(shader: Shader): void;
+        unbind(shader: Shader): void;
+        private update();
+        restore(): void;
+        dispose(): void;
+    }
+    class VertexAttribute {
+        name: string;
+        type: VertexAttributeType;
+        numElements: number;
+        constructor(name: string, type: VertexAttributeType, numElements: number);
+    }
+    class Position2Attribute extends VertexAttribute {
+        constructor();
+    }
+    class Position3Attribute extends VertexAttribute {
+        constructor();
+    }
+    class TexCoordAttribute extends VertexAttribute {
+        constructor(unit?: number);
+    }
+    class ColorAttribute extends VertexAttribute {
+        constructor();
+    }
+    class Color2Attribute extends VertexAttribute {
+        constructor();
+    }
+    enum VertexAttributeType {
+        Float = 0,
+    }
 }
 declare module spine.webgl {
-	class PolygonBatcher implements Disposable {
-		private context;
-		private drawCalls;
-		private isDrawing;
-		private mesh;
-		private shader;
-		private lastTexture;
-		private verticesLength;
-		private indicesLength;
-		private srcBlend;
-		private dstBlend;
-		constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean, maxVertices?: number);
-		begin(shader: Shader): void;
-		setBlendMode(srcBlend: number, dstBlend: number): void;
-		draw(texture: GLTexture, vertices: ArrayLike<number>, indices: Array<number>): void;
-		private flush();
-		end(): void;
-		getDrawCalls(): number;
-		dispose(): void;
-	}
+    class PolygonBatcher implements Disposable {
+        private context;
+        private drawCalls;
+        private isDrawing;
+        private mesh;
+        private shader;
+        private lastTexture;
+        private verticesLength;
+        private indicesLength;
+        private srcBlend;
+        private dstBlend;
+        constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean, maxVertices?: number);
+        begin(shader: Shader): void;
+        setBlendMode(srcBlend: number, dstBlend: number): void;
+        draw(texture: GLTexture, vertices: ArrayLike<number>, indices: Array<number>): void;
+        private flush();
+        end(): void;
+        getDrawCalls(): number;
+        dispose(): void;
+    }
 }
 declare module spine.webgl {
-	class SceneRenderer implements Disposable {
-		context: ManagedWebGLRenderingContext;
-		canvas: HTMLCanvasElement;
-		camera: OrthoCamera;
-		batcher: PolygonBatcher;
-		private twoColorTint;
-		private batcherShader;
-		private shapes;
-		private shapesShader;
-		private activeRenderer;
-		private skeletonRenderer;
-		private skeletonDebugRenderer;
-		private QUAD;
-		private QUAD_TRIANGLES;
-		private WHITE;
-		constructor(canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean);
-		begin(): void;
-		drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean): void;
-		drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
-		drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
-		drawTextureRotated(texture: GLTexture, x: number, y: number, width: number, height: number, pivotX: number, pivotY: number, angle: number, color?: Color, premultipliedAlpha?: boolean): void;
-		drawRegion(region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color?: Color, premultipliedAlpha?: boolean): void;
-		line(x: number, y: number, x2: number, y2: number, color?: Color, color2?: Color): void;
-		triangle(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color): void;
-		quad(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number, color?: Color, color2?: Color, color3?: Color, color4?: Color): void;
-		rect(filled: boolean, x: number, y: number, width: number, height: number, color?: Color): void;
-		rectLine(filled: boolean, x1: number, y1: number, x2: number, y2: number, width: number, color?: Color): void;
-		polygon(polygonVertices: ArrayLike<number>, offset: number, count: number, color?: Color): void;
-		circle(filled: boolean, x: number, y: number, radius: number, color?: Color, segments?: number): void;
-		curve(x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, segments: number, color?: Color): void;
-		end(): void;
-		resize(resizeMode: ResizeMode): void;
-		private enableRenderer(renderer);
-		dispose(): void;
-	}
-	enum ResizeMode {
-		Stretch = 0,
-		Expand = 1,
-		Fit = 2,
-	}
+    class SceneRenderer implements Disposable {
+        context: ManagedWebGLRenderingContext;
+        canvas: HTMLCanvasElement;
+        camera: OrthoCamera;
+        batcher: PolygonBatcher;
+        private twoColorTint;
+        private batcherShader;
+        private shapes;
+        private shapesShader;
+        private activeRenderer;
+        private skeletonRenderer;
+        private skeletonDebugRenderer;
+        private QUAD;
+        private QUAD_TRIANGLES;
+        private WHITE;
+        constructor(canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean);
+        begin(): void;
+        drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean): void;
+        drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
+        drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
+        drawTextureRotated(texture: GLTexture, x: number, y: number, width: number, height: number, pivotX: number, pivotY: number, angle: number, color?: Color, premultipliedAlpha?: boolean): void;
+        drawRegion(region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color?: Color, premultipliedAlpha?: boolean): void;
+        line(x: number, y: number, x2: number, y2: number, color?: Color, color2?: Color): void;
+        triangle(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color): void;
+        quad(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number, color?: Color, color2?: Color, color3?: Color, color4?: Color): void;
+        rect(filled: boolean, x: number, y: number, width: number, height: number, color?: Color): void;
+        rectLine(filled: boolean, x1: number, y1: number, x2: number, y2: number, width: number, color?: Color): void;
+        polygon(polygonVertices: ArrayLike<number>, offset: number, count: number, color?: Color): void;
+        circle(filled: boolean, x: number, y: number, radius: number, color?: Color, segments?: number): void;
+        curve(x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, segments: number, color?: Color): void;
+        end(): void;
+        resize(resizeMode: ResizeMode): void;
+        private enableRenderer(renderer);
+        dispose(): void;
+    }
+    enum ResizeMode {
+        Stretch = 0,
+        Expand = 1,
+        Fit = 2,
+    }
 }
 declare module spine.webgl {
-	class Shader implements Disposable, Restorable {
-		private vertexShader;
-		private fragmentShader;
-		static MVP_MATRIX: string;
-		static POSITION: string;
-		static COLOR: string;
-		static COLOR2: string;
-		static TEXCOORDS: string;
-		static SAMPLER: string;
-		private context;
-		private vs;
-		private fs;
-		private program;
-		private tmp2x2;
-		private tmp3x3;
-		private tmp4x4;
-		getProgram(): WebGLProgram;
-		getVertexShader(): string;
-		getFragmentShader(): string;
-		constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, vertexShader: string, fragmentShader: string);
-		private compile();
-		private compileShader(type, source);
-		private compileProgram(vs, fs);
-		restore(): void;
-		bind(): void;
-		unbind(): void;
-		setUniformi(uniform: string, value: number): void;
-		setUniformf(uniform: string, value: number): void;
-		setUniform2f(uniform: string, value: number, value2: number): void;
-		setUniform3f(uniform: string, value: number, value2: number, value3: number): void;
-		setUniform4f(uniform: string, value: number, value2: number, value3: number, value4: number): void;
-		setUniform2x2f(uniform: string, value: ArrayLike<number>): void;
-		setUniform3x3f(uniform: string, value: ArrayLike<number>): void;
-		setUniform4x4f(uniform: string, value: ArrayLike<number>): void;
-		getUniformLocation(uniform: string): WebGLUniformLocation;
-		getAttributeLocation(attribute: string): number;
-		dispose(): void;
-		static newColoredTextured(context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader;
-		static newTwoColoredTextured(context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader;
-		static newColored(context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader;
-	}
+    class Shader implements Disposable, Restorable {
+        private vertexShader;
+        private fragmentShader;
+        static MVP_MATRIX: string;
+        static POSITION: string;
+        static COLOR: string;
+        static COLOR2: string;
+        static TEXCOORDS: string;
+        static SAMPLER: string;
+        private context;
+        private vs;
+        private fs;
+        private program;
+        private tmp2x2;
+        private tmp3x3;
+        private tmp4x4;
+        getProgram(): WebGLProgram;
+        getVertexShader(): string;
+        getFragmentShader(): string;
+        constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, vertexShader: string, fragmentShader: string);
+        private compile();
+        private compileShader(type, source);
+        private compileProgram(vs, fs);
+        restore(): void;
+        bind(): void;
+        unbind(): void;
+        setUniformi(uniform: string, value: number): void;
+        setUniformf(uniform: string, value: number): void;
+        setUniform2f(uniform: string, value: number, value2: number): void;
+        setUniform3f(uniform: string, value: number, value2: number, value3: number): void;
+        setUniform4f(uniform: string, value: number, value2: number, value3: number, value4: number): void;
+        setUniform2x2f(uniform: string, value: ArrayLike<number>): void;
+        setUniform3x3f(uniform: string, value: ArrayLike<number>): void;
+        setUniform4x4f(uniform: string, value: ArrayLike<number>): void;
+        getUniformLocation(uniform: string): WebGLUniformLocation;
+        getAttributeLocation(attribute: string): number;
+        dispose(): void;
+        static newColoredTextured(context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader;
+        static newTwoColoredTextured(context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader;
+        static newColored(context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader;
+    }
 }
 declare module spine.webgl {
-	class ShapeRenderer implements Disposable {
-		private context;
-		private isDrawing;
-		private mesh;
-		private shapeType;
-		private color;
-		private shader;
-		private vertexIndex;
-		private tmp;
-		private srcBlend;
-		private dstBlend;
-		constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, maxVertices?: number);
-		begin(shader: Shader): void;
-		setBlendMode(srcBlend: number, dstBlend: number): void;
-		setColor(color: Color): void;
-		setColorWith(r: number, g: number, b: number, a: number): void;
-		point(x: number, y: number, color?: Color): void;
-		line(x: number, y: number, x2: number, y2: number, color?: Color): void;
-		triangle(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color): void;
-		quad(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number, color?: Color, color2?: Color, color3?: Color, color4?: Color): void;
-		rect(filled: boolean, x: number, y: number, width: number, height: number, color?: Color): void;
-		rectLine(filled: boolean, x1: number, y1: number, x2: number, y2: number, width: number, color?: Color): void;
-		x(x: number, y: number, size: number): void;
-		polygon(polygonVertices: ArrayLike<number>, offset: number, count: number, color?: Color): void;
-		circle(filled: boolean, x: number, y: number, radius: number, color?: Color, segments?: number): void;
-		curve(x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, segments: number, color?: Color): void;
-		private vertex(x, y, color);
-		end(): void;
-		private flush();
-		private check(shapeType, numVertices);
-		dispose(): void;
-	}
-	enum ShapeType {
-		Point = 0,
-		Line = 1,
-		Filled = 4,
-	}
+    class ShapeRenderer implements Disposable {
+        private context;
+        private isDrawing;
+        private mesh;
+        private shapeType;
+        private color;
+        private shader;
+        private vertexIndex;
+        private tmp;
+        private srcBlend;
+        private dstBlend;
+        constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, maxVertices?: number);
+        begin(shader: Shader): void;
+        setBlendMode(srcBlend: number, dstBlend: number): void;
+        setColor(color: Color): void;
+        setColorWith(r: number, g: number, b: number, a: number): void;
+        point(x: number, y: number, color?: Color): void;
+        line(x: number, y: number, x2: number, y2: number, color?: Color): void;
+        triangle(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color): void;
+        quad(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number, color?: Color, color2?: Color, color3?: Color, color4?: Color): void;
+        rect(filled: boolean, x: number, y: number, width: number, height: number, color?: Color): void;
+        rectLine(filled: boolean, x1: number, y1: number, x2: number, y2: number, width: number, color?: Color): void;
+        x(x: number, y: number, size: number): void;
+        polygon(polygonVertices: ArrayLike<number>, offset: number, count: number, color?: Color): void;
+        circle(filled: boolean, x: number, y: number, radius: number, color?: Color, segments?: number): void;
+        curve(x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, segments: number, color?: Color): void;
+        private vertex(x, y, color);
+        end(): void;
+        private flush();
+        private check(shapeType, numVertices);
+        dispose(): void;
+    }
+    enum ShapeType {
+        Point = 0,
+        Line = 1,
+        Filled = 4,
+    }
 }
 declare module spine.webgl {
-	class SkeletonDebugRenderer implements Disposable {
-		boneLineColor: Color;
-		boneOriginColor: Color;
-		attachmentLineColor: Color;
-		triangleLineColor: Color;
-		pathColor: Color;
-		clipColor: Color;
-		aabbColor: Color;
-		drawBones: boolean;
-		drawRegionAttachments: boolean;
-		drawBoundingBoxes: boolean;
-		drawMeshHull: boolean;
-		drawMeshTriangles: boolean;
-		drawPaths: boolean;
-		drawSkeletonXY: boolean;
-		drawClipping: boolean;
-		premultipliedAlpha: boolean;
-		scale: number;
-		boneWidth: number;
-		private context;
-		private bounds;
-		private temp;
-		private vertices;
-		private static LIGHT_GRAY;
-		private static GREEN;
-		constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext);
-		draw(shapes: ShapeRenderer, skeleton: Skeleton, ignoredBones?: Array<string>): void;
-		dispose(): void;
-	}
+    class SkeletonDebugRenderer implements Disposable {
+        boneLineColor: Color;
+        boneOriginColor: Color;
+        attachmentLineColor: Color;
+        triangleLineColor: Color;
+        pathColor: Color;
+        clipColor: Color;
+        aabbColor: Color;
+        drawBones: boolean;
+        drawRegionAttachments: boolean;
+        drawBoundingBoxes: boolean;
+        drawMeshHull: boolean;
+        drawMeshTriangles: boolean;
+        drawPaths: boolean;
+        drawSkeletonXY: boolean;
+        drawClipping: boolean;
+        premultipliedAlpha: boolean;
+        scale: number;
+        boneWidth: number;
+        private context;
+        private bounds;
+        private temp;
+        private vertices;
+        private static LIGHT_GRAY;
+        private static GREEN;
+        constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext);
+        draw(shapes: ShapeRenderer, skeleton: Skeleton, ignoredBones?: Array<string>): void;
+        dispose(): void;
+    }
 }
 declare module spine.webgl {
-	class SkeletonRenderer {
-		static QUAD_TRIANGLES: number[];
-		premultipliedAlpha: boolean;
-		vertexEffect: VertexEffect;
-		private tempColor;
-		private tempColor2;
-		private vertices;
-		private vertexSize;
-		private twoColorTint;
-		private renderable;
-		private clipper;
-		private temp;
-		private temp2;
-		private temp3;
-		private temp4;
-		constructor(context: ManagedWebGLRenderingContext, twoColorTint?: boolean);
-		draw(batcher: PolygonBatcher, skeleton: Skeleton): void;
-	}
+    class SkeletonRenderer {
+        static QUAD_TRIANGLES: number[];
+        premultipliedAlpha: boolean;
+        vertexEffect: VertexEffect;
+        private tempColor;
+        private tempColor2;
+        private vertices;
+        private vertexSize;
+        private twoColorTint;
+        private renderable;
+        private clipper;
+        private temp;
+        private temp2;
+        private temp3;
+        private temp4;
+        constructor(context: ManagedWebGLRenderingContext, twoColorTint?: boolean);
+        draw(batcher: PolygonBatcher, skeleton: Skeleton): void;
+    }
 }
 declare module spine.webgl {
-	class Vector3 {
-		x: number;
-		y: number;
-		z: number;
-		constructor(x?: number, y?: number, z?: number);
-		setFrom(v: Vector3): Vector3;
-		set(x: number, y: number, z: number): Vector3;
-		add(v: Vector3): Vector3;
-		sub(v: Vector3): Vector3;
-		scale(s: number): Vector3;
-		normalize(): Vector3;
-		cross(v: Vector3): Vector3;
-		multiply(matrix: Matrix4): Vector3;
-		project(matrix: Matrix4): Vector3;
-		dot(v: Vector3): number;
-		length(): number;
-		distance(v: Vector3): number;
-	}
+    class Vector3 {
+        x: number;
+        y: number;
+        z: number;
+        constructor(x?: number, y?: number, z?: number);
+        setFrom(v: Vector3): Vector3;
+        set(x: number, y: number, z: number): Vector3;
+        add(v: Vector3): Vector3;
+        sub(v: Vector3): Vector3;
+        scale(s: number): Vector3;
+        normalize(): Vector3;
+        cross(v: Vector3): Vector3;
+        multiply(matrix: Matrix4): Vector3;
+        project(matrix: Matrix4): Vector3;
+        dot(v: Vector3): number;
+        length(): number;
+        distance(v: Vector3): number;
+    }
 }
 declare module spine.webgl {
-	class ManagedWebGLRenderingContext {
-		canvas: HTMLCanvasElement;
-		gl: WebGLRenderingContext;
-		private restorables;
-		constructor(canvasOrContext: HTMLCanvasElement | WebGLRenderingContext, contextConfig?: any);
-		addRestorable(restorable: Restorable): void;
-		removeRestorable(restorable: Restorable): void;
-	}
-	class WebGLBlendModeConverter {
-		static ZERO: number;
-		static ONE: number;
-		static SRC_COLOR: number;
-		static ONE_MINUS_SRC_COLOR: number;
-		static SRC_ALPHA: number;
-		static ONE_MINUS_SRC_ALPHA: number;
-		static DST_ALPHA: number;
-		static ONE_MINUS_DST_ALPHA: number;
-		static DST_COLOR: number;
-		static getDestGLBlendMode(blendMode: BlendMode): number;
-		static getSourceGLBlendMode(blendMode: BlendMode, premultipliedAlpha?: boolean): number;
-	}
+    class ManagedWebGLRenderingContext {
+        canvas: HTMLCanvasElement;
+        gl: WebGLRenderingContext;
+        private restorables;
+        constructor(canvasOrContext: HTMLCanvasElement | WebGLRenderingContext, contextConfig?: any);
+        addRestorable(restorable: Restorable): void;
+        removeRestorable(restorable: Restorable): void;
+    }
+    class WebGLBlendModeConverter {
+        static ZERO: number;
+        static ONE: number;
+        static SRC_COLOR: number;
+        static ONE_MINUS_SRC_COLOR: number;
+        static SRC_ALPHA: number;
+        static ONE_MINUS_SRC_ALPHA: number;
+        static DST_ALPHA: number;
+        static ONE_MINUS_DST_ALPHA: number;
+        static DST_COLOR: number;
+        static getDestGLBlendMode(blendMode: BlendMode): number;
+        static getSourceGLBlendMode(blendMode: BlendMode, premultipliedAlpha?: boolean): number;
+    }
 }

File diff suppressed because it is too large
+ 6643 - 6734
spine-ts/build/spine-webgl.js


+ 1042 - 0
spine-ts/webgl/demos/assets/atlas1.atlas

@@ -0,0 +1,1042 @@
+
+atlas1.png
+size: 1024,1024
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+alien/back-foot
+  rotate: false
+  xy: 686, 829
+  size: 5, 3
+  orig: 5, 3
+  offset: 0, 0
+  index: -1
+alien/back-shin
+  rotate: false
+  xy: 443, 2
+  size: 13, 15
+  orig: 13, 15
+  offset: 0, 0
+  index: -1
+alien/back-thigh
+  rotate: false
+  xy: 426, 2
+  size: 15, 15
+  orig: 15, 15
+  offset: 0, 0
+  index: -1
+alien/backarmor
+  rotate: false
+  xy: 932, 193
+  size: 50, 56
+  orig: 50, 56
+  offset: 0, 0
+  index: -1
+alien/blown-up-neck
+  rotate: false
+  xy: 904, 55
+  size: 47, 32
+  orig: 47, 32
+  offset: 0, 0
+  index: -1
+alien/body
+  rotate: false
+  xy: 929, 251
+  size: 61, 73
+  orig: 61, 73
+  offset: 0, 0
+  index: -1
+alien/burst01
+  rotate: false
+  xy: 326, 200
+  size: 89, 96
+  orig: 89, 96
+  offset: 0, 0
+  index: -1
+alien/burst02
+  rotate: true
+  xy: 463, 300
+  size: 96, 112
+  orig: 96, 112
+  offset: 0, 0
+  index: -1
+alien/burst03-bg
+  rotate: false
+  xy: 175, 356
+  size: 171, 140
+  orig: 171, 140
+  offset: 0, 0
+  index: -1
+alien/burst03-fg
+  rotate: false
+  xy: 359, 558
+  size: 210, 185
+  orig: 210, 185
+  offset: 0, 0
+  index: -1
+alien/eye
+  rotate: false
+  xy: 975, 491
+  size: 47, 47
+  orig: 47, 47
+  offset: 0, 0
+  index: -1
+alien/eye-highlight
+  rotate: false
+  xy: 810, 2
+  size: 13, 13
+  orig: 13, 13
+  offset: 0, 0
+  index: -1
+alien/eye-pupil
+  rotate: false
+  xy: 881, 29
+  size: 11, 11
+  orig: 11, 11
+  offset: 0, 0
+  index: -1
+alien/eye-stalk
+  rotate: true
+  xy: 953, 42
+  size: 49, 41
+  orig: 49, 41
+  offset: 0, 0
+  index: -1
+alien/front-foot
+  rotate: true
+  xy: 222, 140
+  size: 6, 4
+  orig: 6, 4
+  offset: 0, 0
+  index: -1
+alien/front-lower-arm
+  rotate: true
+  xy: 714, 2
+  size: 34, 39
+  orig: 34, 39
+  offset: 0, 0
+  index: -1
+alien/front-shin
+  rotate: true
+  xy: 407, 2
+  size: 15, 17
+  orig: 15, 17
+  offset: 0, 0
+  index: -1
+alien/front-thigh
+  rotate: false
+  xy: 793, 17
+  size: 17, 17
+  orig: 17, 17
+  offset: 0, 0
+  index: -1
+alien/front-upper-arm
+  rotate: true
+  xy: 774, 2
+  size: 35, 17
+  orig: 35, 17
+  offset: 0, 0
+  index: -1
+alien/head
+  rotate: false
+  xy: 463, 214
+  size: 92, 84
+  orig: 92, 84
+  offset: 0, 0
+  index: -1
+alien/lower-back-arm
+  rotate: false
+  xy: 930, 326
+  size: 31, 28
+  orig: 31, 28
+  offset: 0, 0
+  index: -1
+alien/metaljaw
+  rotate: false
+  xy: 648, 192
+  size: 75, 53
+  orig: 75, 53
+  offset: 0, 0
+  index: -1
+alien/splat01
+  rotate: false
+  xy: 165, 198
+  size: 159, 156
+  orig: 159, 156
+  offset: 0, 0
+  index: -1
+alien/splat01-fg
+  rotate: false
+  xy: 630, 745
+  size: 126, 82
+  orig: 126, 82
+  offset: 0, 0
+  index: -1
+alien/splat02
+  rotate: false
+  xy: 359, 398
+  size: 228, 158
+  orig: 228, 158
+  offset: 0, 0
+  index: -1
+alien/splat03
+  rotate: false
+  xy: 2, 11
+  size: 224, 105
+  orig: 224, 105
+  offset: 0, 0
+  index: -1
+alien/upper-back-arm
+  rotate: true
+  xy: 800, 40
+  size: 19, 27
+  orig: 19, 27
+  offset: 0, 0
+  index: -1
+dragon/L_front_leg
+  rotate: false
+  xy: 881, 42
+  size: 21, 14
+  orig: 21, 14
+  offset: 0, 0
+  index: -1
+dragon/L_front_thigh
+  rotate: false
+  xy: 829, 41
+  size: 21, 18
+  orig: 21, 18
+  offset: 0, 0
+  index: -1
+dragon/L_rear_leg
+  rotate: false
+  xy: 573, 83
+  size: 52, 44
+  orig: 52, 44
+  offset: 0, 0
+  index: -1
+dragon/L_rear_thigh
+  rotate: true
+  xy: 719, 720
+  size: 23, 37
+  orig: 23, 37
+  offset: 0, 0
+  index: -1
+dragon/L_wing01
+  rotate: true
+  xy: 638, 103
+  size: 48, 64
+  orig: 48, 64
+  offset: 0, 0
+  index: -1
+dragon/L_wing02
+  rotate: true
+  xy: 401, 150
+  size: 45, 67
+  orig: 45, 67
+  offset: 0, 0
+  index: -1
+dragon/L_wing03
+  rotate: false
+  xy: 975, 540
+  size: 47, 52
+  orig: 47, 52
+  offset: 0, 0
+  index: -1
+dragon/L_wing04
+  rotate: true
+  xy: 774, 142
+  size: 47, 34
+  orig: 47, 34
+  offset: 0, 0
+  index: -1
+dragon/L_wing05
+  rotate: false
+  xy: 841, 179
+  size: 55, 53
+  orig: 55, 53
+  offset: 0, 0
+  index: -1
+dragon/L_wing06
+  rotate: true
+  xy: 725, 191
+  size: 48, 83
+  orig: 48, 83
+  offset: 0, 0
+  index: -1
+dragon/L_wing07
+  rotate: true
+  xy: 708, 149
+  size: 40, 64
+  orig: 40, 64
+  offset: 0, 0
+  index: -1
+dragon/L_wing08
+  rotate: true
+  xy: 765, 99
+  size: 41, 45
+  orig: 41, 45
+  offset: 0, 0
+  index: -1
+dragon/L_wing09
+  rotate: true
+  xy: 864, 92
+  size: 51, 42
+  orig: 51, 42
+  offset: 0, 0
+  index: -1
+dragon/R_front_leg
+  rotate: false
+  xy: 676, 9
+  size: 25, 22
+  orig: 25, 22
+  offset: 0, 0
+  index: -1
+dragon/R_front_thigh
+  rotate: false
+  xy: 714, 38
+  size: 27, 27
+  orig: 27, 27
+  offset: 0, 0
+  index: -1
+dragon/R_rear_leg
+  rotate: true
+  xy: 997, 89
+  size: 29, 25
+  orig: 29, 25
+  offset: 0, 0
+  index: -1
+dragon/R_rear_thigh
+  rotate: true
+  xy: 533, 25
+  size: 23, 37
+  orig: 23, 37
+  offset: 0, 0
+  index: -1
+dragon/R_wing01
+  rotate: false
+  xy: 165, 118
+  size: 55, 78
+  orig: 55, 78
+  offset: 0, 0
+  index: -1
+dragon/R_wing02
+  rotate: true
+  xy: 648, 247
+  size: 51, 76
+  orig: 51, 76
+  offset: 0, 0
+  index: -1
+dragon/R_wing03
+  rotate: true
+  xy: 343, 2
+  size: 68, 62
+  orig: 68, 62
+  offset: 0, 0
+  index: -1
+dragon/R_wing04
+  rotate: true
+  xy: 536, 142
+  size: 70, 36
+  orig: 70, 36
+  offset: 0, 0
+  index: -1
+dragon/R_wing05
+  rotate: false
+  xy: 471, 94
+  size: 63, 57
+  orig: 63, 57
+  offset: 0, 0
+  index: -1
+dragon/R_wing06
+  rotate: true
+  xy: 881, 454
+  size: 50, 92
+  orig: 50, 92
+  offset: 0, 0
+  index: -1
+dragon/R_wing07
+  rotate: true
+  xy: 333, 148
+  size: 50, 66
+  orig: 50, 66
+  offset: 0, 0
+  index: -1
+dragon/R_wing08
+  rotate: true
+  xy: 470, 153
+  size: 59, 64
+  orig: 59, 64
+  offset: 0, 0
+  index: -1
+dragon/R_wing09
+  rotate: false
+  xy: 574, 164
+  size: 62, 51
+  orig: 62, 51
+  offset: 0, 0
+  index: -1
+dragon/back
+  rotate: false
+  xy: 943, 145
+  size: 48, 46
+  orig: 48, 46
+  offset: 0, 0
+  index: -1
+dragon/chest
+  rotate: true
+  xy: 881, 601
+  size: 34, 31
+  orig: 34, 31
+  offset: 0, 0
+  index: -1
+dragon/chin
+  rotate: true
+  xy: 908, 89
+  size: 54, 37
+  orig: 54, 37
+  offset: 0, 0
+  index: -1
+dragon/front_toeA
+  rotate: false
+  xy: 726, 421
+  size: 7, 13
+  orig: 7, 13
+  offset: 0, 0
+  index: -1
+dragon/front_toeB
+  rotate: false
+  xy: 719, 584
+  size: 14, 14
+  orig: 14, 14
+  offset: 0, 0
+  index: -1
+dragon/head
+  rotate: true
+  xy: 340, 72
+  size: 74, 65
+  orig: 74, 65
+  offset: 0, 0
+  index: -1
+dragon/rear-toe
+  rotate: true
+  xy: 326, 303
+  size: 27, 19
+  orig: 27, 19
+  offset: 0, 0
+  index: -1
+dragon/tail01
+  rotate: false
+  xy: 981, 834
+  size: 30, 38
+  orig: 30, 38
+  offset: 0, 0
+  index: -1
+dragon/tail02
+  rotate: true
+  xy: 768, 39
+  size: 24, 30
+  orig: 24, 30
+  offset: 0, 0
+  index: -1
+dragon/tail03
+  rotate: true
+  xy: 996, 13
+  size: 18, 23
+  orig: 18, 23
+  offset: 0, 0
+  index: -1
+dragon/tail04
+  rotate: false
+  xy: 812, 20
+  size: 14, 18
+  orig: 14, 18
+  offset: 0, 0
+  index: -1
+dragon/tail05
+  rotate: true
+  xy: 793, 2
+  size: 13, 15
+  orig: 13, 15
+  offset: 0, 0
+  index: -1
+dragon/tail06
+  rotate: false
+  xy: 951, 23
+  size: 24, 17
+  orig: 24, 17
+  offset: 0, 0
+  index: -1
+raptor/back-arm
+  rotate: false
+  xy: 852, 39
+  size: 27, 17
+  orig: 27, 17
+  offset: 0, 0
+  index: -1
+raptor/back-bracer
+  rotate: true
+  xy: 977, 17
+  size: 23, 17
+  orig: 23, 17
+  offset: 0, 0
+  index: -1
+raptor/back-hand
+  rotate: true
+  xy: 326, 332
+  size: 22, 20
+  orig: 22, 20
+  offset: 0, 0
+  index: -1
+raptor/back-knee
+  rotate: false
+  xy: 810, 145
+  size: 29, 40
+  orig: 29, 40
+  offset: 0, 0
+  index: -1
+raptor/back-thigh
+  rotate: true
+  xy: 719, 600
+  size: 23, 14
+  orig: 23, 14
+  offset: 0, 0
+  index: -1
+raptor/dust01
+  rotate: false
+  xy: 470, 2
+  size: 29, 22
+  orig: 29, 22
+  offset: 0, 0
+  index: -1
+raptor/dust02
+  rotate: false
+  xy: 996, 61
+  size: 26, 26
+  orig: 26, 26
+  offset: 0, 0
+  index: -1
+raptor/dust03
+  rotate: true
+  xy: 571, 561
+  size: 19, 16
+  orig: 19, 16
+  offset: 0, 0
+  index: -1
+raptor/eyes-open
+  rotate: true
+  xy: 607, 2
+  size: 28, 27
+  orig: 28, 27
+  offset: 0, 0
+  index: -1
+raptor/front-arm
+  rotate: true
+  xy: 587, 2
+  size: 29, 18
+  orig: 29, 18
+  offset: 0, 0
+  index: -1
+raptor/front-bracer
+  rotate: false
+  xy: 904, 36
+  size: 24, 17
+  orig: 24, 17
+  offset: 0, 0
+  index: -1
+raptor/front-hand
+  rotate: true
+  xy: 743, 38
+  size: 25, 23
+  orig: 25, 23
+  offset: 0, 0
+  index: -1
+raptor/front-open-hand
+  rotate: false
+  xy: 996, 33
+  size: 26, 26
+  orig: 26, 26
+  offset: 0, 0
+  index: -1
+raptor/front-thigh
+  rotate: true
+  xy: 755, 2
+  size: 34, 17
+  orig: 34, 17
+  offset: 0, 0
+  index: -1
+raptor/gun
+  rotate: true
+  xy: 407, 84
+  size: 64, 62
+  orig: 64, 62
+  offset: 0, 0
+  index: -1
+raptor/gun-nohand
+  rotate: true
+  xy: 407, 19
+  size: 63, 61
+  orig: 63, 61
+  offset: 0, 0
+  index: -1
+raptor/head
+  rotate: true
+  xy: 557, 217
+  size: 81, 89
+  orig: 81, 89
+  offset: 0, 0
+  index: -1
+raptor/lower-leg
+  rotate: true
+  xy: 704, 103
+  size: 44, 59
+  orig: 44, 59
+  offset: 0, 0
+  index: -1
+raptor/mouth-grind
+  rotate: true
+  xy: 636, 2
+  size: 28, 18
+  orig: 28, 18
+  offset: 0, 0
+  index: -1
+raptor/mouth-smile
+  rotate: true
+  xy: 656, 2
+  size: 28, 18
+  orig: 28, 18
+  offset: 0, 0
+  index: -1
+raptor/neck
+  rotate: false
+  xy: 875, 341
+  size: 11, 12
+  orig: 11, 12
+  offset: 0, 0
+  index: -1
+raptor/raptor-arm-back
+  rotate: false
+  xy: 973, 326
+  size: 49, 52
+  orig: 49, 52
+  offset: 0, 0
+  index: -1
+raptor/raptor-body
+  rotate: true
+  xy: 2, 411
+  size: 379, 171
+  orig: 379, 171
+  offset: 0, 0
+  index: -1
+raptor/raptor-front-arm
+  rotate: false
+  xy: 973, 380
+  size: 49, 61
+  orig: 49, 61
+  offset: 0, 0
+  index: -1
+raptor/raptor-front-leg
+  rotate: true
+  xy: 758, 717
+  size: 115, 154
+  orig: 115, 154
+  offset: 0, 0
+  index: -1
+raptor/raptor-hindleg-back
+  rotate: false
+  xy: 914, 703
+  size: 101, 129
+  orig: 101, 129
+  offset: 0, 0
+  index: -1
+raptor/raptor-horn
+  rotate: false
+  xy: 222, 148
+  size: 109, 48
+  orig: 109, 48
+  offset: 0, 0
+  index: -1
+raptor/raptor-horn-back
+  rotate: true
+  xy: 841, 234
+  size: 105, 46
+  orig: 105, 46
+  offset: 0, 0
+  index: -1
+raptor/raptor-jaw
+  rotate: false
+  xy: 881, 506
+  size: 92, 86
+  orig: 92, 86
+  offset: 0, 0
+  index: -1
+raptor/raptor-jaw-tooth
+  rotate: true
+  xy: 501, 2
+  size: 22, 29
+  orig: 22, 29
+  offset: 0, 0
+  index: -1
+raptor/raptor-mouth-inside
+  rotate: true
+  xy: 560, 2
+  size: 21, 25
+  orig: 21, 25
+  offset: 0, 0
+  index: -1
+raptor/raptor-saddle-noshadow
+  rotate: true
+  xy: 726, 241
+  size: 98, 113
+  orig: 98, 113
+  offset: 0, 0
+  index: -1
+raptor/raptor-saddle-strap-front
+  rotate: true
+  xy: 689, 67
+  size: 34, 57
+  orig: 34, 57
+  offset: 0, 0
+  index: -1
+raptor/raptor-saddle-strap-rear
+  rotate: true
+  xy: 668, 33
+  size: 32, 44
+  orig: 32, 44
+  offset: 0, 0
+  index: -1
+raptor/raptor-saddle-w-shadow
+  rotate: true
+  xy: 348, 298
+  size: 98, 113
+  orig: 98, 113
+  offset: 0, 0
+  index: -1
+raptor/raptor-tail-shadow
+  rotate: true
+  xy: 889, 240
+  size: 113, 38
+  orig: 113, 38
+  offset: 0, 0
+  index: -1
+raptor/raptor-tongue
+  rotate: true
+  xy: 984, 198
+  size: 51, 38
+  orig: 51, 38
+  offset: 0, 0
+  index: -1
+raptor/stirrup-back
+  rotate: false
+  xy: 532, 2
+  size: 26, 21
+  orig: 26, 21
+  offset: 0, 0
+  index: -1
+raptor/stirrup-front
+  rotate: true
+  xy: 992, 256
+  size: 27, 30
+  orig: 27, 30
+  offset: 0, 0
+  index: -1
+raptor/stirrup-strap
+  rotate: false
+  xy: 993, 169
+  size: 29, 27
+  orig: 29, 27
+  offset: 0, 0
+  index: -1
+raptor/torso
+  rotate: true
+  xy: 841, 145
+  size: 32, 55
+  orig: 32, 55
+  offset: 0, 0
+  index: -1
+raptor/visor
+  rotate: true
+  xy: 862, 637
+  size: 78, 50
+  orig: 78, 50
+  offset: 0, 0
+  index: -1
+spineboy/crosshair
+  rotate: false
+  xy: 572, 33
+  size: 48, 48
+  orig: 48, 48
+  offset: 0, 0
+  index: -1
+spineboy/eye-indifferent
+  rotate: false
+  xy: 812, 95
+  size: 50, 48
+  orig: 50, 48
+  offset: 0, 0
+  index: -1
+spineboy/eye-surprised
+  rotate: true
+  xy: 947, 93
+  size: 50, 48
+  orig: 50, 48
+  offset: 0, 0
+  index: -1
+spineboy/front-bracer
+  rotate: true
+  xy: 898, 145
+  size: 31, 43
+  orig: 31, 43
+  offset: 0, 0
+  index: -1
+spineboy/front-fist-closed
+  rotate: true
+  xy: 622, 32
+  size: 41, 44
+  orig: 41, 44
+  offset: 0, 0
+  index: -1
+spineboy/front-fist-open
+  rotate: true
+  xy: 975, 443
+  size: 46, 47
+  orig: 46, 47
+  offset: 0, 0
+  index: -1
+spineboy/front-foot
+  rotate: false
+  xy: 638, 153
+  size: 68, 37
+  orig: 68, 37
+  offset: 0, 0
+  index: -1
+spineboy/front-shin
+  rotate: false
+  xy: 417, 197
+  size: 44, 99
+  orig: 44, 99
+  offset: 0, 0
+  index: -1
+spineboy/front-thigh
+  rotate: true
+  xy: 627, 75
+  size: 26, 60
+  orig: 26, 60
+  offset: 0, 0
+  index: -1
+spineboy/front-upper-arm
+  rotate: false
+  xy: 810, 187
+  size: 29, 52
+  orig: 29, 52
+  offset: 0, 0
+  index: -1
+spineboy/goggles
+  rotate: false
+  xy: 719, 625
+  size: 141, 90
+  orig: 141, 90
+  offset: 0, 0
+  index: -1
+spineboy/gun
+  rotate: true
+  xy: 228, 33
+  size: 113, 110
+  orig: 113, 110
+  offset: 0, 0
+  index: -1
+spineboy/head
+  rotate: false
+  xy: 571, 582
+  size: 146, 161
+  orig: 146, 161
+  offset: 0, 0
+  index: -1
+spineboy/hoverboard-board
+  rotate: false
+  xy: 362, 745
+  size: 266, 82
+  orig: 266, 82
+  offset: 0, 0
+  index: -1
+spineboy/hoverboard-thruster
+  rotate: true
+  xy: 535, 50
+  size: 32, 35
+  orig: 32, 35
+  offset: 0, 0
+  index: -1
+spineboy/hoverglow-small
+  rotate: true
+  xy: 981, 874
+  size: 148, 41
+  orig: 148, 41
+  offset: 0, 0
+  index: -1
+spineboy/mouth-grind
+  rotate: false
+  xy: 748, 65
+  size: 50, 32
+  orig: 50, 32
+  offset: 0, 0
+  index: -1
+spineboy/mouth-oooo
+  rotate: false
+  xy: 800, 61
+  size: 50, 32
+  orig: 50, 32
+  offset: 0, 0
+  index: -1
+spineboy/mouth-smile
+  rotate: false
+  xy: 852, 58
+  size: 50, 32
+  orig: 50, 32
+  offset: 0, 0
+  index: -1
+spineboy/muzzle-glow
+  rotate: false
+  xy: 914, 594
+  size: 107, 107
+  orig: 107, 107
+  offset: 0, 0
+  index: -1
+spineboy/muzzle-ring
+  rotate: true
+  xy: 228, 5
+  size: 26, 113
+  orig: 26, 113
+  offset: 0, 0
+  index: -1
+spineboy/muzzle01
+  rotate: false
+  xy: 686, 834
+  size: 293, 188
+  orig: 293, 188
+  offset: 0, 0
+  index: -1
+spineboy/muzzle02
+  rotate: true
+  xy: 175, 498
+  size: 292, 182
+  orig: 292, 182
+  offset: 0, 0
+  index: -1
+spineboy/muzzle03
+  rotate: false
+  xy: 2, 792
+  size: 358, 230
+  orig: 358, 230
+  offset: 0, 0
+  index: -1
+spineboy/muzzle04
+  rotate: false
+  xy: 362, 829
+  size: 322, 193
+  orig: 322, 193
+  offset: 0, 0
+  index: -1
+spineboy/muzzle05
+  rotate: true
+  xy: 2, 118
+  size: 291, 161
+  orig: 291, 161
+  offset: 0, 0
+  index: -1
+spineboy/neck
+  rotate: false
+  xy: 930, 31
+  size: 19, 22
+  orig: 19, 22
+  offset: 0, 0
+  index: -1
+spineboy/portal-bg
+  rotate: false
+  xy: 589, 436
+  size: 144, 144
+  orig: 144, 144
+  offset: 0, 0
+  index: -1
+spineboy/portal-flare1
+  rotate: true
+  xy: 898, 178
+  size: 60, 32
+  orig: 60, 32
+  offset: 0, 0
+  index: -1
+spineboy/portal-flare2
+  rotate: false
+  xy: 574, 129
+  size: 62, 33
+  orig: 62, 33
+  offset: 0, 0
+  index: -1
+spineboy/portal-flare3
+  rotate: false
+  xy: 471, 60
+  size: 62, 32
+  orig: 62, 32
+  offset: 0, 0
+  index: -1
+spineboy/portal-shade
+  rotate: false
+  xy: 735, 479
+  size: 144, 144
+  orig: 144, 144
+  offset: 0, 0
+  index: -1
+spineboy/portal-streaks1
+  rotate: true
+  xy: 735, 341
+  size: 136, 138
+  orig: 136, 138
+  offset: 0, 0
+  index: -1
+spineboy/portsl-streaks2
+  rotate: false
+  xy: 589, 300
+  size: 135, 134
+  orig: 135, 134
+  offset: 0, 0
+  index: -1
+spineboy/rear-bracer
+  rotate: false
+  xy: 992, 285
+  size: 30, 39
+  orig: 30, 39
+  offset: 0, 0
+  index: -1
+spineboy/rear-foot
+  rotate: false
+  xy: 470, 26
+  size: 61, 32
+  orig: 61, 32
+  offset: 0, 0
+  index: -1
+spineboy/rear-shin
+  rotate: false
+  xy: 930, 356
+  size: 41, 96
+  orig: 41, 96
+  offset: 0, 0
+  index: -1
+spineboy/rear-thigh
+  rotate: false
+  xy: 536, 84
+  size: 35, 56
+  orig: 35, 56
+  offset: 0, 0
+  index: -1
+spineboy/rear-upper-arm
+  rotate: false
+  xy: 997, 120
+  size: 25, 47
+  orig: 25, 47
+  offset: 0, 0
+  index: -1
+spineboy/torso
+  rotate: false
+  xy: 875, 355
+  size: 53, 97
+  orig: 53, 97
+  offset: 0, 0
+  index: -1

BIN
spine-ts/webgl/demos/assets/atlas1.png


+ 1063 - 0
spine-ts/webgl/demos/assets/atlas2.atlas

@@ -0,0 +1,1063 @@
+
+atlas2.png
+size: 1024,1024
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+armorgirl/Layer 100
+  rotate: true
+  xy: 588, 198
+  size: 31, 40
+  orig: 31, 40
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 101
+  rotate: true
+  xy: 604, 272
+  size: 53, 24
+  orig: 53, 24
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 102
+  rotate: false
+  xy: 730, 581
+  size: 60, 33
+  orig: 60, 33
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 103
+  rotate: false
+  xy: 934, 596
+  size: 57, 93
+  orig: 57, 93
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 104
+  rotate: false
+  xy: 991, 846
+  size: 31, 42
+  orig: 31, 42
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 106
+  rotate: false
+  xy: 688, 321
+  size: 38, 53
+  orig: 38, 53
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 107
+  rotate: false
+  xy: 416, 196
+  size: 70, 127
+  orig: 70, 127
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 108
+  rotate: true
+  xy: 2, 2
+  size: 92, 94
+  orig: 92, 94
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 109
+  rotate: false
+  xy: 720, 187
+  size: 20, 32
+  orig: 20, 32
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 110
+  rotate: true
+  xy: 993, 605
+  size: 84, 29
+  orig: 84, 29
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 111
+  rotate: true
+  xy: 351, 113
+  size: 87, 62
+  orig: 87, 62
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 112
+  rotate: false
+  xy: 991, 890
+  size: 31, 46
+  orig: 31, 46
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 113
+  rotate: false
+  xy: 657, 116
+  size: 33, 32
+  orig: 33, 32
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 114
+  rotate: true
+  xy: 839, 542
+  size: 20, 26
+  orig: 20, 26
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 115
+  rotate: false
+  xy: 131, 70
+  size: 26, 25
+  orig: 26, 25
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 116
+  rotate: true
+  xy: 792, 574
+  size: 40, 45
+  orig: 40, 45
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 117
+  rotate: false
+  xy: 999, 692
+  size: 23, 31
+  orig: 23, 31
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 118
+  rotate: false
+  xy: 680, 269
+  size: 40, 49
+  orig: 40, 49
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 66
+  rotate: true
+  xy: 388, 472
+  size: 118, 84
+  orig: 118, 84
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 68
+  rotate: false
+  xy: 567, 83
+  size: 31, 35
+  orig: 31, 35
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 69
+  rotate: true
+  xy: 488, 201
+  size: 40, 59
+  orig: 40, 59
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 70
+  rotate: true
+  xy: 576, 265
+  size: 57, 26
+  orig: 57, 26
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 72
+  rotate: false
+  xy: 98, 70
+  size: 31, 25
+  orig: 31, 25
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 73
+  rotate: true
+  xy: 489, 324
+  size: 43, 90
+  orig: 43, 90
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 74
+  rotate: false
+  xy: 335, 2
+  size: 51, 66
+  orig: 51, 66
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 75
+  rotate: false
+  xy: 567, 164
+  size: 41, 32
+  orig: 41, 32
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 76
+  rotate: true
+  xy: 714, 116
+  size: 33, 15
+  orig: 33, 15
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 77
+  rotate: false
+  xy: 619, 90
+  size: 35, 27
+  orig: 35, 27
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 78
+  rotate: true
+  xy: 561, 2
+  size: 23, 46
+  orig: 23, 46
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 79
+  rotate: true
+  xy: 76, 97
+  size: 17, 82
+  orig: 17, 82
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 80
+  rotate: true
+  xy: 630, 155
+  size: 30, 41
+  orig: 30, 41
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 81
+  rotate: false
+  xy: 409, 461
+  size: 8, 9
+  orig: 8, 9
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 82
+  rotate: true
+  xy: 746, 159
+  size: 29, 15
+  orig: 29, 15
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 84
+  rotate: false
+  xy: 761, 563
+  size: 29, 16
+  orig: 29, 16
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 85
+  rotate: true
+  xy: 1010, 811
+  size: 15, 12
+  orig: 15, 12
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 851
+  rotate: true
+  xy: 1010, 794
+  size: 15, 12
+  orig: 15, 12
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 86
+  rotate: true
+  xy: 846, 810
+  size: 13, 4
+  orig: 13, 4
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 87
+  rotate: false
+  xy: 549, 231
+  size: 9, 10
+  orig: 9, 10
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 871
+  rotate: false
+  xy: 340, 116
+  size: 9, 10
+  orig: 9, 10
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 88
+  rotate: false
+  xy: 813, 616
+  size: 7, 6
+  orig: 7, 6
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 89
+  rotate: false
+  xy: 1010, 784
+  size: 9, 8
+  orig: 9, 8
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 90
+  rotate: true
+  xy: 98, 2
+  size: 66, 111
+  orig: 66, 111
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 91
+  rotate: false
+  xy: 733, 92
+  size: 20, 29
+  orig: 20, 29
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 92
+  rotate: false
+  xy: 166, 202
+  size: 134, 130
+  orig: 134, 130
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 93
+  rotate: false
+  xy: 578, 380
+  size: 56, 98
+  orig: 56, 98
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 94
+  rotate: false
+  xy: 820, 549
+  size: 17, 23
+  orig: 17, 23
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 95
+  rotate: false
+  xy: 567, 120
+  size: 30, 42
+  orig: 30, 42
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 96
+  rotate: true
+  xy: 549, 201
+  size: 28, 37
+  orig: 28, 37
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 97
+  rotate: false
+  xy: 720, 221
+  size: 27, 32
+  orig: 27, 32
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 98
+  rotate: true
+  xy: 733, 73
+  size: 17, 20
+  orig: 17, 20
+  offset: 0, 0
+  index: -1
+armorgirl/Layer 99
+  rotate: true
+  xy: 516, 2
+  size: 19, 35
+  orig: 19, 35
+  offset: 0, 0
+  index: -1
+greengirl/Layer 17
+  rotate: false
+  xy: 202, 334
+  size: 222, 120
+  orig: 222, 120
+  offset: 0, 0
+  index: -1
+greengirl/Layer 20
+  rotate: false
+  xy: 198, 645
+  size: 190, 377
+  orig: 190, 377
+  offset: 0, 0
+  index: -1
+greengirl/Layer 21
+  rotate: false
+  xy: 516, 23
+  size: 43, 55
+  orig: 43, 55
+  offset: 0, 0
+  index: -1
+greengirl/Layer 22
+  rotate: false
+  xy: 710, 579
+  size: 18, 38
+  orig: 18, 38
+  offset: 0, 0
+  index: -1
+greengirl/Layer 23
+  rotate: false
+  xy: 609, 2
+  size: 23, 23
+  orig: 23, 23
+  offset: 0, 0
+  index: -1
+greengirl/Layer 24
+  rotate: false
+  xy: 692, 111
+  size: 20, 37
+  orig: 20, 37
+  offset: 0, 0
+  index: -1
+greengirl/Layer 25
+  rotate: false
+  xy: 742, 190
+  size: 17, 29
+  orig: 17, 29
+  offset: 0, 0
+  index: -1
+greengirl/Layer 26
+  rotate: true
+  xy: 792, 553
+  size: 19, 26
+  orig: 19, 26
+  offset: 0, 0
+  index: -1
+greengirl/Layer 27
+  rotate: true
+  xy: 893, 541
+  size: 18, 25
+  orig: 18, 25
+  offset: 0, 0
+  index: -1
+greengirl/Layer 28
+  rotate: false
+  xy: 610, 166
+  size: 18, 30
+  orig: 18, 30
+  offset: 0, 0
+  index: -1
+greengirl/Layer 29
+  rotate: false
+  xy: 714, 84
+  size: 17, 30
+  orig: 17, 30
+  offset: 0, 0
+  index: -1
+greengirl/Layer 30
+  rotate: false
+  xy: 600, 88
+  size: 17, 33
+  orig: 17, 33
+  offset: 0, 0
+  index: -1
+greengirl/Layer 32
+  rotate: false
+  xy: 55, 302
+  size: 19, 43
+  orig: 19, 43
+  offset: 0, 0
+  index: -1
+greengirl/Layer 33
+  rotate: true
+  xy: 991, 828
+  size: 16, 31
+  orig: 16, 31
+  offset: 0, 0
+  index: -1
+greengirl/Layer 34
+  rotate: false
+  xy: 709, 151
+  size: 17, 33
+  orig: 17, 33
+  offset: 0, 0
+  index: -1
+greengirl/Layer 35
+  rotate: false
+  xy: 728, 155
+  size: 16, 30
+  orig: 16, 30
+  offset: 0, 0
+  index: -1
+greengirl/Layer 36
+  rotate: true
+  xy: 592, 27
+  size: 20, 31
+  orig: 20, 31
+  offset: 0, 0
+  index: -1
+greengirl/Layer 37
+  rotate: false
+  xy: 606, 231
+  size: 22, 39
+  orig: 22, 39
+  offset: 0, 0
+  index: -1
+greengirl/Layer 38
+  rotate: true
+  xy: 390, 592
+  size: 110, 100
+  orig: 110, 100
+  offset: 0, 0
+  index: -1
+greengirl/Layer 39
+  rotate: false
+  xy: 697, 514
+  size: 30, 63
+  orig: 30, 63
+  offset: 0, 0
+  index: -1
+greengirl/Layer 40
+  rotate: false
+  xy: 839, 564
+  size: 60, 30
+  orig: 60, 30
+  offset: 0, 0
+  index: -1
+greengirl/Layer 41
+  rotate: true
+  xy: 817, 866
+  size: 70, 27
+  orig: 70, 27
+  offset: 0, 0
+  index: -1
+greengirl/Layer 42
+  rotate: false
+  xy: 630, 320
+  size: 56, 54
+  orig: 56, 54
+  offset: 0, 0
+  index: -1
+greengirl/Layer 43
+  rotate: false
+  xy: 166, 335
+  size: 27, 10
+  orig: 27, 10
+  offset: 0, 0
+  index: -1
+greengirl/Layer 44
+  rotate: false
+  xy: 501, 70
+  size: 9, 8
+  orig: 9, 8
+  offset: 0, 0
+  index: -1
+greengirl/Layer 45
+  rotate: true
+  xy: 592, 49
+  size: 32, 20
+  orig: 32, 20
+  offset: 0, 0
+  index: -1
+greengirl/Layer 46
+  rotate: false
+  xy: 474, 571
+  size: 16, 19
+  orig: 16, 19
+  offset: 0, 0
+  index: -1
+greengirl/Layer 47
+  rotate: true
+  xy: 749, 234
+  size: 19, 13
+  orig: 19, 13
+  offset: 0, 0
+  index: -1
+greengirl/Layer 48
+  rotate: false
+  xy: 722, 255
+  size: 31, 30
+  orig: 31, 30
+  offset: 0, 0
+  index: -1
+greengirl/Layer 49
+  rotate: false
+  xy: 488, 243
+  size: 70, 79
+  orig: 70, 79
+  offset: 0, 0
+  index: -1
+greengirl/Layer 50
+  rotate: true
+  xy: 388, 2
+  size: 57, 42
+  orig: 57, 42
+  offset: 0, 0
+  index: -1
+greengirl/Layer 51
+  rotate: false
+  xy: 76, 116
+  size: 88, 60
+  orig: 88, 60
+  offset: 0, 0
+  index: -1
+greengirl/Layer 52
+  rotate: true
+  xy: 852, 725
+  size: 98, 156
+  orig: 98, 156
+  offset: 0, 0
+  index: -1
+greengirl/Layer 53
+  rotate: false
+  xy: 492, 621
+  size: 140, 78
+  orig: 140, 78
+  offset: 0, 0
+  index: -1
+greengirl/Layer 54
+  rotate: true
+  xy: 415, 113
+  size: 81, 80
+  orig: 81, 80
+  offset: 0, 0
+  index: -1
+greengirl/Layer 55
+  rotate: false
+  xy: 731, 123
+  size: 20, 30
+  orig: 20, 30
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 14
+  rotate: true
+  xy: 202, 456
+  size: 187, 184
+  orig: 187, 184
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 15
+  rotate: true
+  xy: 750, 717
+  size: 89, 100
+  orig: 89, 100
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 16
+  rotate: false
+  xy: 576, 231
+  size: 28, 32
+  orig: 28, 32
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 17
+  rotate: false
+  xy: 692, 84
+  size: 20, 25
+  orig: 20, 25
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 18
+  rotate: false
+  xy: 388, 456
+  size: 19, 14
+  orig: 19, 14
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 19
+  rotate: false
+  xy: 388, 61
+  size: 13, 7
+  orig: 13, 7
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 20
+  rotate: false
+  xy: 867, 543
+  size: 24, 19
+  orig: 24, 19
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 21
+  rotate: false
+  xy: 634, 619
+  size: 99, 80
+  orig: 99, 80
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 22
+  rotate: true
+  xy: 417, 61
+  size: 50, 82
+  orig: 50, 82
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 23
+  rotate: false
+  xy: 572, 480
+  size: 53, 89
+  orig: 53, 89
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 24
+  rotate: true
+  xy: 958, 559
+  size: 35, 33
+  orig: 35, 33
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 25
+  rotate: true
+  xy: 993, 543
+  size: 60, 29
+  orig: 60, 29
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 26
+  rotate: true
+  xy: 561, 27
+  size: 51, 29
+  orig: 51, 29
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 27
+  rotate: true
+  xy: 432, 3
+  size: 56, 82
+  orig: 56, 82
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 28
+  rotate: true
+  xy: 340, 70
+  size: 41, 75
+  orig: 41, 75
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 29
+  rotate: false
+  xy: 901, 561
+  size: 55, 33
+  orig: 55, 33
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 30
+  rotate: false
+  xy: 636, 429
+  size: 56, 78
+  orig: 56, 78
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 31
+  rotate: false
+  xy: 76, 178
+  size: 88, 167
+  orig: 88, 167
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 32
+  rotate: true
+  xy: 630, 187
+  size: 32, 47
+  orig: 32, 47
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 33
+  rotate: true
+  xy: 846, 825
+  size: 111, 143
+  orig: 111, 143
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 34
+  rotate: false
+  xy: 636, 376
+  size: 56, 51
+  orig: 56, 51
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 35
+  rotate: true
+  xy: 211, 2
+  size: 66, 69
+  orig: 66, 69
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 36
+  rotate: true
+  xy: 735, 624
+  size: 91, 102
+  orig: 91, 102
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 37
+  rotate: true
+  xy: 166, 70
+  size: 56, 172
+  orig: 56, 172
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 38
+  rotate: true
+  xy: 623, 579
+  size: 38, 85
+  orig: 38, 85
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 39
+  rotate: false
+  xy: 581, 327
+  size: 47, 51
+  orig: 47, 51
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 40
+  rotate: true
+  xy: 679, 225
+  size: 42, 39
+  orig: 42, 39
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 41
+  rotate: true
+  xy: 817, 938
+  size: 84, 199
+  orig: 84, 199
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 42
+  rotate: true
+  xy: 492, 571
+  size: 48, 129
+  orig: 48, 129
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 43
+  rotate: false
+  xy: 599, 123
+  size: 20, 39
+  orig: 20, 39
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 44
+  rotate: false
+  xy: 426, 325
+  size: 61, 145
+  orig: 61, 145
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 45
+  rotate: false
+  xy: 501, 80
+  size: 64, 49
+  orig: 64, 49
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 46
+  rotate: false
+  xy: 679, 186
+  size: 39, 37
+  orig: 39, 37
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 47
+  rotate: true
+  xy: 722, 287
+  size: 32, 31
+  orig: 32, 31
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 48
+  rotate: false
+  xy: 282, 2
+  size: 51, 66
+  orig: 51, 66
+  offset: 0, 0
+  index: -1
+orangegirl/Layer 49
+  rotate: false
+  xy: 302, 202
+  size: 112, 130
+  orig: 112, 130
+  offset: 0, 0
+  index: -1
+stretchyman/back arm
+  rotate: false
+  xy: 2, 96
+  size: 72, 202
+  orig: 72, 202
+  offset: 0, 0
+  index: -1
+stretchyman/back leg
+  rotate: false
+  xy: 390, 704
+  size: 100, 318
+  orig: 100, 318
+  offset: 0, 0
+  index: -1
+stretchyman/body
+  rotate: false
+  xy: 55, 570
+  size: 141, 452
+  orig: 141, 452
+  offset: 0, 0
+  index: -1
+stretchyman/front arm
+  rotate: false
+  xy: 55, 347
+  size: 145, 221
+  orig: 145, 221
+  offset: 0, 0
+  index: -1
+stretchyman/head
+  rotate: false
+  xy: 489, 369
+  size: 87, 102
+  orig: 87, 102
+  offset: 0, 0
+  index: -1
+tank/antenna
+  rotate: true
+  xy: 735, 616
+  size: 6, 76
+  orig: 6, 76
+  offset: 0, 0
+  index: -1
+tank/cannon
+  rotate: false
+  xy: 492, 701
+  size: 233, 15
+  orig: 233, 15
+  offset: 0, 0
+  index: -1
+tank/cannonConnector
+  rotate: true
+  xy: 656, 86
+  size: 28, 34
+  orig: 28, 34
+  offset: 0, 0
+  index: -1
+tank/ground
+  rotate: false
+  xy: 492, 718
+  size: 256, 88
+  orig: 256, 88
+  offset: 0, 0
+  index: -1
+tank/guntower
+  rotate: false
+  xy: 166, 128
+  size: 183, 72
+  orig: 183, 72
+  offset: 0, 0
+  index: -1
+tank/machinegun
+  rotate: true
+  xy: 560, 239
+  size: 83, 14
+  orig: 83, 14
+  offset: 0, 0
+  index: -1
+tank/machinegun-mount
+  rotate: true
+  xy: 920, 541
+  size: 18, 24
+  orig: 18, 24
+  offset: 0, 0
+  index: -1
+tank/rock
+  rotate: false
+  xy: 852, 691
+  size: 145, 32
+  orig: 145, 32
+  offset: 0, 0
+  index: -1
+tank/tankBottom
+  rotate: false
+  xy: 492, 866
+  size: 321, 69
+  orig: 321, 69
+  offset: 0, 0
+  index: -1
+tank/tankBottom-shadow
+  rotate: false
+  xy: 492, 937
+  size: 323, 85
+  orig: 323, 85
+  offset: 0, 0
+  index: -1
+tank/tankTop
+  rotate: false
+  xy: 492, 808
+  size: 352, 56
+  orig: 352, 56
+  offset: 0, 0
+  index: -1
+tank/tread
+  rotate: true
+  xy: 839, 691
+  size: 24, 8
+  orig: 24, 8
+  offset: 0, 0
+  index: -1
+tank/tread-inside
+  rotate: false
+  xy: 553, 14
+  size: 6, 7
+  orig: 6, 7
+  offset: 0, 0
+  index: -1
+tank/wheel-big
+  rotate: false
+  xy: 630, 270
+  size: 48, 48
+  orig: 48, 48
+  offset: 0, 0
+  index: -1
+tank/wheel-big-overlay
+  rotate: false
+  xy: 630, 221
+  size: 47, 47
+  orig: 47, 47
+  offset: 0, 0
+  index: -1
+tank/wheel-mid
+  rotate: false
+  xy: 673, 150
+  size: 34, 34
+  orig: 34, 34
+  offset: 0, 0
+  index: -1
+tank/wheel-mid-overlay
+  rotate: false
+  xy: 621, 119
+  size: 34, 34
+  orig: 34, 34
+  offset: 0, 0
+  index: -1
+tank/wheel-small
+  rotate: false
+  xy: 753, 139
+  size: 18, 18
+  orig: 18, 18
+  offset: 0, 0
+  index: -1
+transforms/wheel-big
+  rotate: false
+  xy: 474, 473
+  size: 96, 96
+  orig: 96, 96
+  offset: 0, 0
+  index: -1
+transforms/wheel-big-overlay
+  rotate: false
+  xy: 839, 596
+  size: 93, 93
+  orig: 93, 93
+  offset: 0, 0
+  index: -1
+transforms/wheel-mid
+  rotate: false
+  xy: 627, 509
+  size: 68, 68
+  orig: 68, 68
+  offset: 0, 0
+  index: -1
+transforms/wheel-mid-overlay
+  rotate: false
+  xy: 497, 131
+  size: 68, 68
+  orig: 68, 68
+  offset: 0, 0
+  index: -1
+vine/vine
+  rotate: false
+  xy: 2, 300
+  size: 51, 722
+  orig: 51, 722
+  offset: 0, 0
+  index: -1

BIN
spine-ts/webgl/demos/assets/atlas2.png


File diff suppressed because it is too large
+ 0 - 0
spine-ts/webgl/demos/assets/demos.json


+ 2911 - 0
spine-ts/webgl/demos/assets/heroes.atlas

@@ -0,0 +1,2911 @@
+
+heroes.png
+size: 1024,1024
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+Assassin/Assassin_arm_lower_far
+  rotate: false
+  xy: 706, 337
+  size: 40, 43
+  orig: 85, 69
+  offset: 22, 13
+  index: -1
+Assassin/Assassin_arm_lower_near
+  rotate: false
+  xy: 842, 289
+  size: 40, 43
+  orig: 85, 69
+  offset: 23, 15
+  index: -1
+Assassin/Assassin_arm_upper_far
+  rotate: false
+  xy: 108, 550
+  size: 31, 60
+  orig: 99, 93
+  offset: 33, 16
+  index: -1
+Assassin/Assassin_arm_upper_near
+  rotate: false
+  xy: 404, 483
+  size: 32, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+Assassin/Assassin_foot_far_1
+  rotate: false
+  xy: 335, 776
+  size: 63, 28
+  orig: 107, 58
+  offset: 24, 14
+  index: -1
+Assassin/Assassin_foot_far_2_bent
+  rotate: true
+  xy: 822, 565
+  size: 56, 36
+  orig: 101, 64
+  offset: 21, 13
+  index: -1
+Assassin/Assassin_foot_near_1
+  rotate: true
+  xy: 281, 109
+  size: 62, 28
+  orig: 107, 58
+  offset: 25, 14
+  index: -1
+Assassin/Assassin_foot_near_2_bent
+  rotate: true
+  xy: 495, 230
+  size: 56, 36
+  orig: 101, 64
+  offset: 21, 14
+  index: -1
+Assassin/Assassin_hand_far_1_fistBack
+  rotate: false
+  xy: 804, 304
+  size: 36, 35
+  orig: 67, 53
+  offset: 15, 8
+  index: -1
+Assassin/Assassin_hand_far_2_fistPalm
+  rotate: false
+  xy: 668, 343
+  size: 36, 33
+  orig: 67, 53
+  offset: 16, 9
+  index: -1
+Assassin/Assassin_hand_near_1_fistBack
+  rotate: false
+  xy: 681, 140
+  size: 36, 35
+  orig: 67, 53
+  offset: 17, 7
+  index: -1
+Assassin/Assassin_hand_near_2_fistPalm
+  rotate: false
+  xy: 725, 2
+  size: 36, 33
+  orig: 67, 53
+  offset: 15, 11
+  index: -1
+Assassin/Assassin_head_1
+  rotate: true
+  xy: 2, 330
+  size: 136, 108
+  orig: 179, 179
+  offset: 18, 13
+  index: -1
+Assassin/Assassin_head_2_injured
+  rotate: true
+  xy: 2, 192
+  size: 136, 108
+  orig: 179, 179
+  offset: 18, 11
+  index: -1
+Assassin/Assassin_leg_lower_far
+  rotate: true
+  xy: 242, 2
+  size: 37, 63
+  orig: 64, 107
+  offset: 17, 22
+  index: -1
+Assassin/Assassin_leg_lower_near_1
+  rotate: true
+  xy: 299, 546
+  size: 37, 63
+  orig: 64, 107
+  offset: 17, 22
+  index: -1
+Assassin/Assassin_leg_lower_near_2
+  rotate: false
+  xy: 408, 418
+  size: 38, 63
+  orig: 64, 107
+  offset: 16, 23
+  index: -1
+Assassin/Assassin_leg_upper_far
+  rotate: false
+  xy: 433, 2
+  size: 25, 49
+  orig: 58, 89
+  offset: 17, 17
+  index: -1
+Assassin/Assassin_leg_upper_near
+  rotate: false
+  xy: 405, 2
+  size: 26, 49
+  orig: 58, 89
+  offset: 16, 17
+  index: -1
+Assassin/Assassin_neck
+  rotate: false
+  xy: 936, 88
+  size: 22, 20
+  orig: 43, 36
+  offset: 11, 8
+  index: -1
+Assassin/Assassin_torso
+  rotate: false
+  xy: 904, 630
+  size: 73, 70
+  orig: 169, 149
+  offset: 50, 36
+  index: -1
+Assassin/Assassin_waist
+  rotate: false
+  xy: 357, 2
+  size: 46, 49
+  orig: 93, 71
+  offset: 25, 12
+  index: -1
+BeardyBuck/BeardyBuck_arm_lower_far
+  rotate: false
+  xy: 735, 80
+  size: 24, 38
+  orig: 85, 69
+  offset: 29, 16
+  index: -1
+YoungBuck/YoungBuck_arm_lower_far
+  rotate: false
+  xy: 735, 80
+  size: 24, 38
+  orig: 85, 69
+  offset: 29, 16
+  index: -1
+BeardyBuck/BeardyBuck_arm_lower_near
+  rotate: false
+  xy: 893, 249
+  size: 27, 42
+  orig: 85, 69
+  offset: 28, 14
+  index: -1
+BeardyBuck/BeardyBuck_arm_upper_far
+  rotate: false
+  xy: 407, 115
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+Buck/BuckMatthews_arm_upper_far
+  rotate: false
+  xy: 407, 115
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+BeardyBuck/BeardyBuck_arm_upper_near
+  rotate: false
+  xy: 412, 53
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+BeardyBuck/BeardyBuck_foot_far_1
+  rotate: true
+  xy: 639, 244
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+BeardyBuck/BeardyBuck_foot_near_1
+  rotate: true
+  xy: 639, 244
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+Buck/BuckMatthews_foot_far_1
+  rotate: true
+  xy: 639, 244
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+Buck/BuckMatthews_foot_near_1
+  rotate: true
+  xy: 639, 244
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+Duck/DuckMatthews_foot_far_1
+  rotate: true
+  xy: 639, 244
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+Duck/DuckMatthews_foot_near_1
+  rotate: true
+  xy: 639, 244
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+Truck/TruckMatthews_foot_far_1
+  rotate: true
+  xy: 639, 244
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+Truck/TruckMatthews_foot_near_1
+  rotate: true
+  xy: 639, 244
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+YoungBuck/YoungBuck_foot_far_1
+  rotate: true
+  xy: 639, 244
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+YoungBuck/YoungBuck_foot_near_1
+  rotate: true
+  xy: 639, 244
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+BeardyBuck/BeardyBuck_foot_far_2_bent
+  rotate: false
+  xy: 805, 525
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+BeardyBuck/BeardyBuck_foot_near_2_bent
+  rotate: false
+  xy: 805, 525
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+Buck/BuckMatthews_foot_far_2_bent
+  rotate: false
+  xy: 805, 525
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+Buck/BuckMatthews_foot_near_2_bent
+  rotate: false
+  xy: 805, 525
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+Chuck/ChuckMatthews_foot_far_2_bent
+  rotate: false
+  xy: 805, 525
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+Chuck/ChuckMatthews_foot_near_2_bent
+  rotate: false
+  xy: 805, 525
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+Duck/DuckMatthews_foot_far_2_bent
+  rotate: false
+  xy: 805, 525
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+Duck/DuckMatthews_foot_near_2_bent
+  rotate: false
+  xy: 805, 525
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+YoungBuck/YoungBuck_foot_far_2_bent
+  rotate: false
+  xy: 805, 525
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+YoungBuck/YoungBuck_foot_near_2_bent
+  rotate: false
+  xy: 805, 525
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+BeardyBuck/BeardyBuck_hand_far_1_fistBack
+  rotate: true
+  xy: 657, 302
+  size: 39, 31
+  orig: 67, 53
+  offset: 15, 13
+  index: -1
+BeardyBuck/BeardyBuck_hand_far_2_fistPalm
+  rotate: true
+  xy: 864, 532
+  size: 34, 32
+  orig: 67, 53
+  offset: 17, 12
+  index: -1
+BeardyBuck/BeardyBuck_hand_near_1_fistBack
+  rotate: true
+  xy: 986, 485
+  size: 39, 36
+  orig: 67, 53
+  offset: 15, 13
+  index: -1
+BeardyBuck/BeardyBuck_hand_near_2_fistPalm
+  rotate: true
+  xy: 857, 388
+  size: 34, 32
+  orig: 67, 53
+  offset: 17, 10
+  index: -1
+BeardyBuck/BeardyBuck_head_1
+  rotate: true
+  xy: 141, 548
+  size: 100, 118
+  orig: 179, 179
+  offset: 39, 6
+  index: -1
+BeardyBuck/BeardyBuck_head_2_injured
+  rotate: false
+  xy: 268, 652
+  size: 100, 122
+  orig: 179, 179
+  offset: 38, 6
+  index: -1
+BeardyBuck/BeardyBuck_leg_lower_far
+  rotate: false
+  xy: 432, 580
+  size: 36, 60
+  orig: 64, 107
+  offset: 16, 26
+  index: -1
+BeardyBuck/BeardyBuck_leg_lower_near_1
+  rotate: false
+  xy: 311, 108
+  size: 38, 63
+  orig: 64, 107
+  offset: 15, 22
+  index: -1
+BeardyBuck/BeardyBuck_leg_lower_near_2
+  rotate: true
+  xy: 898, 557
+  size: 34, 62
+  orig: 34, 62
+  offset: 0, 0
+  index: -1
+BeardyBuck/BeardyBuck_leg_upper_far
+  rotate: true
+  xy: 615, 378
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+BeardyBuck/BeardyBuck_leg_upper_near
+  rotate: false
+  xy: 568, 293
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+BeardyBuck/BeardyBuck_neck
+  rotate: true
+  xy: 906, 197
+  size: 24, 21
+  orig: 43, 36
+  offset: 10, 8
+  index: -1
+GabrielCaine/GabrielCaine_neck
+  rotate: true
+  xy: 906, 197
+  size: 24, 21
+  orig: 43, 36
+  offset: 10, 8
+  index: -1
+YoungBuck/YoungBuck_neck
+  rotate: true
+  xy: 906, 197
+  size: 24, 21
+  orig: 43, 36
+  offset: 10, 8
+  index: -1
+BeardyBuck/BeardyBuck_torso
+  rotate: false
+  xy: 419, 776
+  size: 56, 61
+  orig: 169, 149
+  offset: 56, 38
+  index: -1
+BeardyBuck/BeardyBuck_waist
+  rotate: true
+  xy: 445, 238
+  size: 46, 48
+  orig: 93, 71
+  offset: 24, 12
+  index: -1
+Buck/BuckMatthews_arm_lower_far
+  rotate: false
+  xy: 736, 40
+  size: 24, 38
+  orig: 85, 69
+  offset: 29, 16
+  index: -1
+Buck/BuckMatthews_arm_lower_near
+  rotate: true
+  xy: 652, 177
+  size: 27, 42
+  orig: 85, 69
+  offset: 28, 14
+  index: -1
+Buck/BuckMatthews_arm_upper_near
+  rotate: false
+  xy: 448, 53
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+Buck/BuckMatthews_hand_far_1_fistBack
+  rotate: false
+  xy: 633, 439
+  size: 37, 29
+  orig: 67, 53
+  offset: 16, 14
+  index: -1
+Buck/BuckMatthews_hand_far_2_fistPalm
+  rotate: true
+  xy: 791, 168
+  size: 32, 30
+  orig: 67, 53
+  offset: 18, 13
+  index: -1
+Buck/BuckMatthews_hand_near_1_fistBack
+  rotate: true
+  xy: 986, 444
+  size: 39, 36
+  orig: 67, 53
+  offset: 15, 13
+  index: -1
+Buck/BuckMatthews_hand_near_2_fistPalm
+  rotate: true
+  xy: 891, 388
+  size: 34, 32
+  orig: 67, 53
+  offset: 17, 12
+  index: -1
+YoungBuck/YoungBuck_hand_far_2_fistPalm
+  rotate: true
+  xy: 891, 388
+  size: 34, 32
+  orig: 67, 53
+  offset: 17, 12
+  index: -1
+Buck/BuckMatthews_head_1
+  rotate: true
+  xy: 127, 10
+  size: 97, 113
+  orig: 179, 179
+  offset: 40, 16
+  index: -1
+Buck/BuckMatthews_head_2_injured
+  rotate: false
+  xy: 127, 109
+  size: 94, 117
+  orig: 179, 179
+  offset: 42, 14
+  index: -1
+Buck/BuckMatthews_leg_lower_far
+  rotate: true
+  xy: 898, 593
+  size: 35, 62
+  orig: 64, 107
+  offset: 15, 25
+  index: -1
+Buck/BuckMatthews_leg_lower_near_2
+  rotate: true
+  xy: 898, 593
+  size: 35, 62
+  orig: 64, 107
+  offset: 15, 25
+  index: -1
+Duck/DuckMatthews_leg_lower_far
+  rotate: true
+  xy: 898, 593
+  size: 35, 62
+  orig: 64, 107
+  offset: 15, 25
+  index: -1
+Duck/DuckMatthews_leg_lower_near_2
+  rotate: true
+  xy: 898, 593
+  size: 35, 62
+  orig: 64, 107
+  offset: 15, 25
+  index: -1
+Buck/BuckMatthews_leg_lower_near_1
+  rotate: false
+  xy: 518, 444
+  size: 36, 59
+  orig: 64, 107
+  offset: 14, 24
+  index: -1
+Buck/BuckMatthews_leg_upper_far
+  rotate: false
+  xy: 569, 234
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+Duck/DuckMatthews_leg_upper_far
+  rotate: false
+  xy: 569, 234
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+Truck/TruckMatthews_leg_upper_far
+  rotate: false
+  xy: 569, 234
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+YoungBuck/YoungBuck_leg_upper_far
+  rotate: false
+  xy: 569, 234
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+Buck/BuckMatthews_leg_upper_near
+  rotate: true
+  xy: 609, 343
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+Duck/DuckMatthews_leg_upper_near
+  rotate: true
+  xy: 609, 343
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+Truck/TruckMatthews_leg_upper_near
+  rotate: true
+  xy: 609, 343
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+YoungBuck/YoungBuck_leg_upper_near
+  rotate: true
+  xy: 609, 343
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+Buck/BuckMatthews_neck
+  rotate: false
+  xy: 789, 2
+  size: 22, 19
+  orig: 22, 19
+  offset: 0, 0
+  index: -1
+Buck/BuckMatthews_torso
+  rotate: false
+  xy: 242, 41
+  size: 60, 66
+  orig: 169, 149
+  offset: 55, 36
+  index: -1
+Buck/BuckMatthews_waist
+  rotate: false
+  xy: 486, 180
+  size: 46, 48
+  orig: 93, 71
+  offset: 24, 12
+  index: -1
+Chuck/ChuckMatthews_waist
+  rotate: false
+  xy: 486, 180
+  size: 46, 48
+  orig: 93, 71
+  offset: 24, 12
+  index: -1
+Duck/DuckMatthews_waist
+  rotate: false
+  xy: 486, 180
+  size: 46, 48
+  orig: 93, 71
+  offset: 24, 12
+  index: -1
+Truck/TruckMatthews_waist
+  rotate: false
+  xy: 486, 180
+  size: 46, 48
+  orig: 93, 71
+  offset: 24, 12
+  index: -1
+YoungBuck/YoungBuck_waist
+  rotate: false
+  xy: 486, 180
+  size: 46, 48
+  orig: 93, 71
+  offset: 24, 12
+  index: -1
+Chuck/ChuckMatthews_arm_lower_far
+  rotate: true
+  xy: 761, 202
+  size: 24, 38
+  orig: 85, 69
+  offset: 29, 16
+  index: -1
+Truck/TruckMatthews_arm_lower_far
+  rotate: true
+  xy: 761, 202
+  size: 24, 38
+  orig: 85, 69
+  offset: 29, 16
+  index: -1
+Chuck/ChuckMatthews_arm_lower_near
+  rotate: false
+  xy: 648, 35
+  size: 27, 42
+  orig: 85, 69
+  offset: 28, 14
+  index: -1
+Truck/TruckMatthews_arm_lower_near
+  rotate: false
+  xy: 648, 35
+  size: 27, 42
+  orig: 85, 69
+  offset: 28, 14
+  index: -1
+Chuck/ChuckMatthews_arm_upper_far
+  rotate: false
+  xy: 481, 115
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+Chuck/ChuckMatthews_arm_upper_near
+  rotate: false
+  xy: 484, 53
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+Chuck/ChuckMatthews_foot_far_1
+  rotate: true
+  xy: 584, 123
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+Chuck/ChuckMatthews_foot_near_1
+  rotate: true
+  xy: 584, 123
+  size: 56, 28
+  orig: 107, 58
+  offset: 24, 15
+  index: -1
+Chuck/ChuckMatthews_hand_far_1_fistBack
+  rotate: false
+  xy: 860, 167
+  size: 34, 28
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+Chuck/ChuckMatthews_hand_far_2_fistPalm
+  rotate: false
+  xy: 896, 166
+  size: 32, 29
+  orig: 67, 53
+  offset: 18, 14
+  index: -1
+Chuck/ChuckMatthews_hand_near_1_fistBack
+  rotate: true
+  xy: 986, 403
+  size: 39, 36
+  orig: 67, 53
+  offset: 15, 13
+  index: -1
+Truck/TruckMatthews_hand_near_1_fistBack
+  rotate: true
+  xy: 986, 403
+  size: 39, 36
+  orig: 67, 53
+  offset: 15, 13
+  index: -1
+Chuck/ChuckMatthews_hand_near_2_fistPalm
+  rotate: false
+  xy: 719, 187
+  size: 34, 32
+  orig: 67, 53
+  offset: 17, 12
+  index: -1
+Chuck/ChuckMatthews_head_1
+  rotate: false
+  xy: 335, 806
+  size: 82, 95
+  orig: 179, 179
+  offset: 52, 11
+  index: -1
+Chuck/ChuckMatthews_head_2_injured
+  rotate: false
+  xy: 818, 796
+  size: 86, 99
+  orig: 179, 179
+  offset: 52, 7
+  index: -1
+Chuck/ChuckMatthews_leg_lower_far
+  rotate: false
+  xy: 438, 483
+  size: 36, 63
+  orig: 64, 107
+  offset: 13, 24
+  index: -1
+Chuck/ChuckMatthews_leg_lower_near_2
+  rotate: false
+  xy: 438, 483
+  size: 36, 63
+  orig: 64, 107
+  offset: 13, 24
+  index: -1
+Chuck/ChuckMatthews_leg_lower_near_1
+  rotate: false
+  xy: 595, 450
+  size: 36, 59
+  orig: 64, 107
+  offset: 15, 25
+  index: -1
+Chuck/ChuckMatthews_leg_upper_far
+  rotate: false
+  xy: 604, 243
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+Chuck/ChuckMatthews_leg_upper_near
+  rotate: false
+  xy: 604, 243
+  size: 33, 57
+  orig: 58, 89
+  offset: 12, 16
+  index: -1
+Chuck/ChuckMatthews_neck
+  rotate: true
+  xy: 962, 197
+  size: 24, 21
+  orig: 43, 36
+  offset: 10, 8
+  index: -1
+Chuck/ChuckMatthews_torso
+  rotate: false
+  xy: 223, 109
+  size: 56, 62
+  orig: 169, 149
+  offset: 56, 38
+  index: -1
+Commander/Commander-Firestrike_arm_lower_far
+  rotate: true
+  xy: 640, 123
+  size: 16, 36
+  orig: 84, 68
+  offset: 32, 19
+  index: -1
+Commander/Commander-Firestrike_arm_lower_near
+  rotate: true
+  xy: 678, 120
+  size: 18, 40
+  orig: 18, 40
+  offset: 0, 0
+  index: -1
+Commander/Commander-Firestrike_arm_upper_far
+  rotate: false
+  xy: 586, 2
+  size: 22, 53
+  orig: 97, 92
+  offset: 36, 19
+  index: -1
+Commander/Commander-Firestrike_arm_upper_near
+  rotate: false
+  xy: 617, 566
+  size: 23, 53
+  orig: 97, 92
+  offset: 35, 18
+  index: -1
+Commander/Commander-Firestrike_foot_far_1
+  rotate: true
+  xy: 628, 181
+  size: 41, 22
+  orig: 106, 57
+  offset: 32, 17
+  index: -1
+Commander/Commander-Firestrike_foot_near_1
+  rotate: true
+  xy: 628, 181
+  size: 41, 22
+  orig: 106, 57
+  offset: 32, 17
+  index: -1
+Commander/Commander-Firestrike_foot_far_2_bent
+  rotate: true
+  xy: 761, 89
+  size: 38, 25
+  orig: 99, 63
+  offset: 19, 19
+  index: -1
+Commander/Commander-Firestrike_foot_near_2_bent
+  rotate: true
+  xy: 761, 89
+  size: 38, 25
+  orig: 99, 63
+  offset: 19, 19
+  index: -1
+Commander/Commander-Firestrike_hand_far_1_fistBack
+  rotate: false
+  xy: 550, 713
+  size: 21, 25
+  orig: 66, 51
+  offset: 21, 15
+  index: -1
+Commander/Commander-Firestrike_hand_near_1_fistBack
+  rotate: false
+  xy: 550, 713
+  size: 21, 25
+  orig: 66, 51
+  offset: 21, 15
+  index: -1
+Commander/Commander-Firestrike_hand_far_2_fistPalm
+  rotate: true
+  xy: 1004, 172
+  size: 20, 18
+  orig: 66, 51
+  offset: 21, 20
+  index: -1
+Commander/Commander-Firestrike_hand_near_2_fistPalm
+  rotate: true
+  xy: 1004, 172
+  size: 20, 18
+  orig: 66, 51
+  offset: 21, 20
+  index: -1
+Commander/Commander-Firestrike_head_1
+  rotate: false
+  xy: 2, 2
+  size: 39, 55
+  orig: 178, 178
+  offset: 66, 20
+  index: -1
+Commander/Commander-Firestrike_head_2_injured
+  rotate: false
+  xy: 2, 2
+  size: 39, 55
+  orig: 178, 178
+  offset: 66, 20
+  index: -1
+Commander/Commander-Firestrike_leg_lower_far
+  rotate: false
+  xy: 526, 585
+  size: 22, 68
+  orig: 63, 106
+  offset: 20, 16
+  index: -1
+Commander/Commander-Firestrike_leg_lower_near_2
+  rotate: false
+  xy: 526, 585
+  size: 22, 68
+  orig: 63, 106
+  offset: 20, 16
+  index: -1
+Commander/Commander-Firestrike_leg_lower_near_1
+  rotate: false
+  xy: 304, 173
+  size: 23, 65
+  orig: 63, 106
+  offset: 22, 19
+  index: -1
+Commander/Commander-Firestrike_leg_upper_far
+  rotate: true
+  xy: 618, 413
+  size: 24, 52
+  orig: 57, 88
+  offset: 17, 19
+  index: -1
+Commander/Commander-Firestrike_leg_upper_near
+  rotate: false
+  xy: 486, 2
+  size: 23, 49
+  orig: 57, 88
+  offset: 15, 18
+  index: -1
+Commander/Commander-Firestrike_neck
+  rotate: true
+  xy: 307, 2
+  size: 42, 48
+  orig: 56, 75
+  offset: 8, 26
+  index: -1
+Commander/Commander-Firestrike_torso
+  rotate: true
+  xy: 43, 8
+  size: 49, 66
+  orig: 49, 66
+  offset: 0, 0
+  index: -1
+Commander/Commander-Firestrike_waist
+  rotate: false
+  xy: 261, 612
+  size: 36, 36
+  orig: 92, 70
+  offset: 29, 15
+  index: -1
+Duck/DuckMatthews_arm_lower_far
+  rotate: false
+  xy: 762, 49
+  size: 25, 38
+  orig: 85, 69
+  offset: 28, 16
+  index: -1
+Duck/DuckMatthews_arm_lower_near
+  rotate: false
+  xy: 645, 79
+  size: 29, 42
+  orig: 85, 69
+  offset: 27, 14
+  index: -1
+Duck/DuckMatthews_arm_upper_far
+  rotate: true
+  xy: 555, 550
+  size: 32, 60
+  orig: 99, 93
+  offset: 34, 16
+  index: -1
+Duck/DuckMatthews_arm_upper_near
+  rotate: false
+  xy: 521, 505
+  size: 32, 60
+  orig: 99, 93
+  offset: 34, 16
+  index: -1
+Duck/DuckMatthews_hand_far_1_fistBack
+  rotate: true
+  xy: 925, 386
+  size: 39, 31
+  orig: 67, 53
+  offset: 15, 13
+  index: -1
+Duck/DuckMatthews_hand_far_2_fistPalm
+  rotate: false
+  xy: 719, 153
+  size: 34, 32
+  orig: 67, 53
+  offset: 17, 12
+  index: -1
+Duck/DuckMatthews_hand_near_1_fistBack
+  rotate: true
+  xy: 986, 362
+  size: 39, 36
+  orig: 67, 53
+  offset: 15, 13
+  index: -1
+Duck/DuckMatthews_hand_near_2_fistPalm
+  rotate: false
+  xy: 755, 168
+  size: 34, 32
+  orig: 67, 53
+  offset: 17, 12
+  index: -1
+Duck/DuckMatthews_head_1
+  rotate: true
+  xy: 112, 348
+  size: 118, 112
+  orig: 179, 179
+  offset: 40, 17
+  index: -1
+Duck/DuckMatthews_head_2_injured
+  rotate: true
+  xy: 112, 228
+  size: 118, 114
+  orig: 179, 179
+  offset: 41, 17
+  index: -1
+Duck/DuckMatthews_leg_lower_near_1
+  rotate: true
+  xy: 733, 492
+  size: 36, 59
+  orig: 64, 107
+  offset: 14, 24
+  index: -1
+Duck/DuckMatthews_neck
+  rotate: true
+  xy: 455, 751
+  size: 23, 20
+  orig: 43, 36
+  offset: 11, 9
+  index: -1
+Duck/DuckMatthews_torso
+  rotate: true
+  xy: 364, 580
+  size: 60, 66
+  orig: 169, 149
+  offset: 55, 36
+  index: -1
+Dummy/Dummy_arm_lower_far
+  rotate: false
+  xy: 763, 9
+  size: 24, 38
+  orig: 24, 38
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_arm_lower_near
+  rotate: false
+  xy: 958, 424
+  size: 26, 42
+  orig: 26, 42
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_arm_upper_far
+  rotate: true
+  xy: 672, 456
+  size: 33, 59
+  orig: 33, 59
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_arm_upper_near
+  rotate: false
+  xy: 832, 464
+  size: 33, 59
+  orig: 33, 59
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_foot_far_1
+  rotate: false
+  xy: 690, 308
+  size: 55, 27
+  orig: 55, 27
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_foot_far_2_bent
+  rotate: true
+  xy: 842, 334
+  size: 52, 36
+  orig: 52, 36
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_foot_near_1
+  rotate: true
+  xy: 733, 251
+  size: 55, 26
+  orig: 55, 26
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_foot_near_2_bent
+  rotate: true
+  xy: 761, 254
+  size: 52, 36
+  orig: 52, 36
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_hand_1_fistBack
+  rotate: false
+  xy: 929, 197
+  size: 31, 24
+  orig: 31, 24
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_hand_2_fistPalm
+  rotate: false
+  xy: 884, 45
+  size: 27, 25
+  orig: 27, 25
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_head_1
+  rotate: false
+  xy: 668, 700
+  size: 87, 87
+  orig: 87, 87
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_head_2_injured
+  rotate: false
+  xy: 757, 700
+  size: 87, 87
+  orig: 87, 87
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_leg_lower_far
+  rotate: false
+  xy: 441, 177
+  size: 43, 59
+  orig: 43, 59
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_leg_lower_near_1
+  rotate: false
+  xy: 979, 633
+  size: 43, 67
+  orig: 43, 67
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_leg_lower_near_2
+  rotate: false
+  xy: 476, 506
+  size: 43, 59
+  orig: 43, 59
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_leg_upper_far
+  rotate: true
+  xy: 470, 567
+  size: 25, 54
+  orig: 25, 54
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_leg_upper_near
+  rotate: true
+  xy: 470, 567
+  size: 25, 54
+  orig: 25, 54
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_neck
+  rotate: false
+  xy: 801, 202
+  size: 23, 20
+  orig: 23, 20
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_torso
+  rotate: false
+  xy: 346, 483
+  size: 56, 60
+  orig: 56, 60
+  offset: 0, 0
+  index: -1
+Dummy/Dummy_waist
+  rotate: false
+  xy: 748, 338
+  size: 45, 45
+  orig: 45, 45
+  offset: 0, 0
+  index: -1
+Fletch/Fletch_arm_lower_far
+  rotate: true
+  xy: 826, 199
+  size: 23, 38
+  orig: 84, 67
+  offset: 30, 16
+  index: -1
+Fletch/Fletch_arm_lower_near
+  rotate: false
+  xy: 709, 79
+  size: 24, 39
+  orig: 84, 67
+  offset: 29, 15
+  index: -1
+Fletch/Fletch_arm_upper_far
+  rotate: false
+  xy: 867, 471
+  size: 28, 59
+  orig: 97, 92
+  offset: 34, 15
+  index: -1
+Fletch/Fletch_arm_upper_near
+  rotate: true
+  xy: 897, 457
+  size: 28, 59
+  orig: 97, 92
+  offset: 34, 15
+  index: -1
+Fletch/Fletch_foot_far_1
+  rotate: true
+  xy: 559, 2
+  size: 53, 25
+  orig: 106, 57
+  offset: 27, 13
+  index: -1
+Fletch/Fletch_foot_near_1
+  rotate: true
+  xy: 559, 2
+  size: 53, 25
+  orig: 106, 57
+  offset: 27, 13
+  index: -1
+Fletch/Fletch_foot_far_2_bent
+  rotate: true
+  xy: 993, 727
+  size: 44, 29
+  orig: 99, 63
+  offset: 27, 15
+  index: -1
+Fletch/Fletch_foot_near_2_bent
+  rotate: true
+  xy: 993, 727
+  size: 44, 29
+  orig: 99, 63
+  offset: 27, 15
+  index: -1
+Fletch/Fletch_hand_far_1_fistBack
+  rotate: false
+  xy: 580, 352
+  size: 27, 26
+  orig: 66, 51
+  offset: 20, 15
+  index: -1
+Fletch/Fletch_hand_near_1_fistBack
+  rotate: false
+  xy: 580, 352
+  size: 27, 26
+  orig: 66, 51
+  offset: 20, 15
+  index: -1
+Fletch/Fletch_hand_far_2_fistPalm
+  rotate: false
+  xy: 930, 166
+  size: 32, 29
+  orig: 66, 51
+  offset: 17, 12
+  index: -1
+Fletch/Fletch_hand_near_2_fistPalm
+  rotate: false
+  xy: 930, 166
+  size: 32, 29
+  orig: 66, 51
+  offset: 17, 12
+  index: -1
+Fletch/Fletch_head_1
+  rotate: false
+  xy: 550, 621
+  size: 90, 79
+  orig: 178, 178
+  offset: 38, 20
+  index: -1
+Fletch/Fletch_head_2_injured
+  rotate: false
+  xy: 108, 468
+  size: 90, 78
+  orig: 179, 179
+  offset: 38, 21
+  index: -1
+Fletch/Fletch_leg_lower_far
+  rotate: false
+  xy: 858, 633
+  size: 44, 70
+  orig: 63, 106
+  offset: 14, 15
+  index: -1
+Fletch/Fletch_leg_lower_near_2
+  rotate: false
+  xy: 858, 633
+  size: 44, 70
+  orig: 63, 106
+  offset: 14, 15
+  index: -1
+Fletch/Fletch_leg_lower_near_1
+  rotate: true
+  xy: 364, 545
+  size: 33, 67
+  orig: 63, 106
+  offset: 17, 19
+  index: -1
+Fletch/Fletch_leg_upper_far
+  rotate: true
+  xy: 603, 302
+  size: 39, 52
+  orig: 57, 88
+  offset: 14, 18
+  index: -1
+Fletch/Fletch_leg_upper_near
+  rotate: false
+  xy: 317, 354
+  size: 42, 51
+  orig: 57, 88
+  offset: 1, 19
+  index: -1
+Fletch/Fletch_neck
+  rotate: true
+  xy: 573, 794
+  size: 28, 21
+  orig: 42, 35
+  offset: 7, 7
+  index: -1
+Fletch/Fletch_torso
+  rotate: false
+  xy: 200, 469
+  size: 82, 77
+  orig: 168, 148
+  offset: 32, 36
+  index: -1
+Fletch/Fletch_waist
+  rotate: true
+  xy: 226, 354
+  size: 113, 89
+  orig: 192, 146
+  offset: 5, 48
+  index: -1
+GabrielCaine/GabrielCaine_arm_lower_far
+  rotate: true
+  xy: 866, 197
+  size: 24, 38
+  orig: 85, 69
+  offset: 29, 16
+  index: -1
+GabrielCaine/GabrielCaine_arm_lower_near
+  rotate: false
+  xy: 948, 260
+  size: 27, 42
+  orig: 85, 69
+  offset: 28, 14
+  index: -1
+GabrielCaine/GabrielCaine_arm_upper_far
+  rotate: true
+  xy: 681, 530
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+GabrielCaine/GabrielCaine_arm_upper_near
+  rotate: true
+  xy: 743, 530
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+GabrielCaine/GabrielCaine_foot_far_1
+  rotate: true
+  xy: 448, 418
+  size: 63, 28
+  orig: 107, 58
+  offset: 24, 14
+  index: -1
+GabrielCaine/GabrielCaine_foot_near_1
+  rotate: true
+  xy: 448, 418
+  size: 63, 28
+  orig: 107, 58
+  offset: 24, 14
+  index: -1
+GabrielCaine/GabrielCaine_foot_far_2_bent
+  rotate: true
+  xy: 261, 548
+  size: 61, 36
+  orig: 101, 64
+  offset: 19, 13
+  index: -1
+GabrielCaine/GabrielCaine_foot_near_2_bent
+  rotate: true
+  xy: 261, 548
+  size: 61, 36
+  orig: 101, 64
+  offset: 19, 13
+  index: -1
+GabrielCaine/GabrielCaine_hand_far_1_fistBack
+  rotate: false
+  xy: 433, 548
+  size: 35, 30
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+GabrielCaine/GabrielCaine_hand_far_2_fistPalm
+  rotate: false
+  xy: 931, 133
+  size: 32, 31
+  orig: 67, 53
+  offset: 18, 14
+  index: -1
+GabrielCaine/GabrielCaine_hand_near_1_fistBack
+  rotate: false
+  xy: 640, 141
+  size: 39, 34
+  orig: 67, 53
+  offset: 15, 13
+  index: -1
+GabrielCaine/GabrielCaine_hand_near_2_fistPalm
+  rotate: false
+  xy: 985, 226
+  size: 32, 31
+  orig: 67, 53
+  offset: 18, 14
+  index: -1
+GabrielCaine/GabrielCaine_head_1
+  rotate: false
+  xy: 370, 680
+  size: 83, 94
+  orig: 179, 179
+  offset: 48, 15
+  index: -1
+GabrielCaine/GabrielCaine_head_2_injured
+  rotate: false
+  xy: 906, 702
+  size: 85, 93
+  orig: 179, 179
+  offset: 48, 16
+  index: -1
+GabrielCaine/GabrielCaine_leg_lower_far
+  rotate: false
+  xy: 478, 442
+  size: 38, 62
+  orig: 64, 107
+  offset: 10, 22
+  index: -1
+GabrielCaine/GabrielCaine_leg_lower_near_2
+  rotate: false
+  xy: 478, 442
+  size: 38, 62
+  orig: 64, 107
+  offset: 10, 22
+  index: -1
+GabrielCaine/GabrielCaine_leg_lower_near_1
+  rotate: true
+  xy: 141, 785
+  size: 38, 64
+  orig: 64, 107
+  offset: 13, 21
+  index: -1
+GabrielCaine/GabrielCaine_leg_upper_far
+  rotate: false
+  xy: 846, 705
+  size: 58, 89
+  orig: 58, 89
+  offset: 0, 0
+  index: -1
+GabrielCaine/GabrielCaine_leg_upper_near
+  rotate: false
+  xy: 958, 368
+  size: 26, 54
+  orig: 58, 89
+  offset: 16, 17
+  index: -1
+GabrielCaine/GabrielCaine_torso
+  rotate: false
+  xy: 299, 585
+  size: 63, 65
+  orig: 169, 149
+  offset: 54, 36
+  index: -1
+GabrielCaine/GabrielCaine_waist
+  rotate: false
+  xy: 511, 2
+  size: 46, 48
+  orig: 93, 71
+  offset: 24, 12
+  index: -1
+MetalMan-Blue/MetalMan-Blue_arm_lower_far
+  rotate: true
+  xy: 964, 168
+  size: 24, 38
+  orig: 24, 38
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_arm_lower_near
+  rotate: false
+  xy: 996, 318
+  size: 26, 42
+  orig: 26, 42
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_arm_upper_far
+  rotate: true
+  xy: 672, 421
+  size: 33, 59
+  orig: 33, 59
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_arm_upper_near
+  rotate: true
+  xy: 672, 421
+  size: 33, 59
+  orig: 33, 59
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_foot_far_1
+  rotate: true
+  xy: 958, 468
+  size: 55, 26
+  orig: 55, 26
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_foot_far_2_bent
+  rotate: false
+  xy: 839, 251
+  size: 52, 36
+  orig: 52, 36
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_foot_near_2_bent
+  rotate: false
+  xy: 839, 251
+  size: 52, 36
+  orig: 52, 36
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_foot_near_1
+  rotate: true
+  xy: 914, 303
+  size: 55, 26
+  orig: 55, 26
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_hand_1_fistBack
+  rotate: true
+  xy: 820, 101
+  size: 31, 24
+  orig: 31, 24
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_hand_2_fistPalm
+  rotate: false
+  xy: 884, 18
+  size: 27, 25
+  orig: 27, 25
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_head_1
+  rotate: false
+  xy: 642, 611
+  size: 87, 87
+  orig: 87, 87
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_head_2_injured
+  rotate: false
+  xy: 731, 611
+  size: 87, 87
+  orig: 87, 87
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_leg_lower_far
+  rotate: true
+  xy: 642, 566
+  size: 43, 59
+  orig: 43, 59
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_leg_lower_near_1
+  rotate: false
+  xy: 979, 564
+  size: 43, 67
+  orig: 43, 67
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_leg_lower_near_2
+  rotate: true
+  xy: 703, 566
+  size: 43, 59
+  orig: 43, 59
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_leg_upper_far
+  rotate: false
+  xy: 942, 304
+  size: 25, 54
+  orig: 25, 54
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_leg_upper_near
+  rotate: false
+  xy: 942, 304
+  size: 25, 54
+  orig: 25, 54
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_neck
+  rotate: true
+  xy: 914, 82
+  size: 23, 20
+  orig: 23, 20
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_torso
+  rotate: false
+  xy: 350, 421
+  size: 56, 60
+  orig: 56, 60
+  offset: 0, 0
+  index: -1
+MetalMan-Blue/MetalMan-Blue_waist
+  rotate: false
+  xy: 795, 341
+  size: 45, 45
+  orig: 45, 45
+  offset: 0, 0
+  index: -1
+PamelaFrost-02/PamelaFrost-02_arm_lower_far
+  rotate: true
+  xy: 482, 352
+  size: 21, 38
+  orig: 85, 69
+  offset: 31, 16
+  index: -1
+PamelaFrost-05/PamelaFrost-05_arm_lower_far
+  rotate: true
+  xy: 482, 352
+  size: 21, 38
+  orig: 85, 69
+  offset: 31, 16
+  index: -1
+PamelaFrost-02/PamelaFrost-02_arm_lower_near
+  rotate: true
+  xy: 913, 360
+  size: 24, 43
+  orig: 85, 69
+  offset: 30, 13
+  index: -1
+PamelaFrost-05/PamelaFrost-05_arm_lower_near
+  rotate: true
+  xy: 913, 360
+  size: 24, 43
+  orig: 85, 69
+  offset: 30, 13
+  index: -1
+PamelaFrost-02/PamelaFrost-02_arm_upper_far
+  rotate: false
+  xy: 591, 65
+  size: 24, 56
+  orig: 99, 93
+  offset: 37, 17
+  index: -1
+PamelaFrost-02/PamelaFrost-02_arm_upper_near
+  rotate: false
+  xy: 614, 123
+  size: 24, 56
+  orig: 99, 93
+  offset: 37, 17
+  index: -1
+PamelaFrost-02/PamelaFrost-02_foot_far_1
+  rotate: false
+  xy: 748, 308
+  size: 54, 28
+  orig: 107, 58
+  offset: 26, 15
+  index: -1
+PamelaFrost-02/PamelaFrost-02_foot_near_1
+  rotate: false
+  xy: 748, 308
+  size: 54, 28
+  orig: 107, 58
+  offset: 26, 15
+  index: -1
+PamelaFrost-03/PamelaFrost-03_foot_far_1
+  rotate: false
+  xy: 748, 308
+  size: 54, 28
+  orig: 107, 58
+  offset: 26, 15
+  index: -1
+PamelaFrost-03/PamelaFrost-03_foot_near_1
+  rotate: false
+  xy: 748, 308
+  size: 54, 28
+  orig: 107, 58
+  offset: 26, 15
+  index: -1
+PamelaFrost-04/PamelaFrost-04_foot_far_1
+  rotate: false
+  xy: 748, 308
+  size: 54, 28
+  orig: 107, 58
+  offset: 26, 15
+  index: -1
+PamelaFrost-04/PamelaFrost-04_foot_near_1
+  rotate: false
+  xy: 748, 308
+  size: 54, 28
+  orig: 107, 58
+  offset: 26, 15
+  index: -1
+PamelaFrost-05/PamelaFrost-05_foot_far_1
+  rotate: false
+  xy: 748, 308
+  size: 54, 28
+  orig: 107, 58
+  offset: 26, 15
+  index: -1
+PamelaFrost-05/PamelaFrost-05_foot_near_1
+  rotate: false
+  xy: 748, 308
+  size: 54, 28
+  orig: 107, 58
+  offset: 26, 15
+  index: -1
+PamelaFrost/PamelaFrost_foot_far_1
+  rotate: false
+  xy: 748, 308
+  size: 54, 28
+  orig: 107, 58
+  offset: 26, 15
+  index: -1
+PamelaFrost-02/PamelaFrost-02_foot_far_2_bent
+  rotate: true
+  xy: 610, 9
+  size: 54, 36
+  orig: 101, 64
+  offset: 20, 12
+  index: -1
+PamelaFrost-02/PamelaFrost-02_foot_near_2_bent
+  rotate: true
+  xy: 610, 9
+  size: 54, 36
+  orig: 101, 64
+  offset: 20, 12
+  index: -1
+PamelaFrost-03/PamelaFrost-03_foot_far_2_bent
+  rotate: true
+  xy: 610, 9
+  size: 54, 36
+  orig: 101, 64
+  offset: 20, 12
+  index: -1
+PamelaFrost-03/PamelaFrost-03_foot_near_2_bent
+  rotate: true
+  xy: 610, 9
+  size: 54, 36
+  orig: 101, 64
+  offset: 20, 12
+  index: -1
+PamelaFrost-04/PamelaFrost-04_foot_far_2_bent
+  rotate: true
+  xy: 610, 9
+  size: 54, 36
+  orig: 101, 64
+  offset: 20, 12
+  index: -1
+PamelaFrost-04/PamelaFrost-04_foot_near_2_bent
+  rotate: true
+  xy: 610, 9
+  size: 54, 36
+  orig: 101, 64
+  offset: 20, 12
+  index: -1
+PamelaFrost/PamelaFrost_foot_far_2_bent
+  rotate: true
+  xy: 610, 9
+  size: 54, 36
+  orig: 101, 64
+  offset: 20, 12
+  index: -1
+PamelaFrost/PamelaFrost_foot_near_2_bent
+  rotate: true
+  xy: 610, 9
+  size: 54, 36
+  orig: 101, 64
+  offset: 20, 12
+  index: -1
+PamelaFrost-02/PamelaFrost-02_hand_far_1_fistBack
+  rotate: true
+  xy: 788, 97
+  size: 35, 30
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+PamelaFrost-02/PamelaFrost-02_hand_far_2_fistPalm
+  rotate: false
+  xy: 846, 104
+  size: 31, 29
+  orig: 67, 53
+  offset: 18, 14
+  index: -1
+PamelaFrost-02/PamelaFrost-02_hand_near_2_fistPalm
+  rotate: false
+  xy: 846, 104
+  size: 31, 29
+  orig: 67, 53
+  offset: 18, 14
+  index: -1
+PamelaFrost-02/PamelaFrost-02_hand_near_1_fistBack
+  rotate: true
+  xy: 789, 60
+  size: 35, 30
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+PamelaFrost-02/PamelaFrost-02_head_1
+  rotate: true
+  xy: 2, 468
+  size: 142, 104
+  orig: 179, 179
+  offset: 22, 14
+  index: -1
+PamelaFrost-02/PamelaFrost-02_head_2_injured
+  rotate: false
+  xy: 484, 918
+  size: 142, 104
+  orig: 179, 179
+  offset: 23, 14
+  index: -1
+PamelaFrost-02/PamelaFrost-02_leg_lower_far
+  rotate: false
+  xy: 424, 286
+  size: 33, 64
+  orig: 64, 107
+  offset: 17, 21
+  index: -1
+PamelaFrost-02/PamelaFrost-02_leg_lower_near_1
+  rotate: false
+  xy: 450, 352
+  size: 30, 64
+  orig: 64, 107
+  offset: 17, 22
+  index: -1
+PamelaFrost-02/PamelaFrost-02_leg_lower_near_2
+  rotate: false
+  xy: 459, 286
+  size: 33, 64
+  orig: 64, 107
+  offset: 17, 21
+  index: -1
+PamelaFrost-02/PamelaFrost-02_leg_upper_far
+  rotate: true
+  xy: 555, 511
+  size: 37, 59
+  orig: 58, 89
+  offset: 8, 18
+  index: -1
+PamelaFrost-02/PamelaFrost-02_leg_upper_near
+  rotate: true
+  xy: 733, 454
+  size: 36, 59
+  orig: 58, 89
+  offset: 9, 18
+  index: -1
+PamelaFrost-02/PamelaFrost-02_neck
+  rotate: false
+  xy: 993, 702
+  size: 22, 23
+  orig: 43, 36
+  offset: 11, 8
+  index: -1
+PamelaFrost-02/PamelaFrost-02_torso
+  rotate: false
+  xy: 329, 177
+  size: 54, 61
+  orig: 169, 149
+  offset: 61, 39
+  index: -1
+PamelaFrost-02/PamelaFrost-02_waist
+  rotate: true
+  xy: 534, 181
+  size: 48, 38
+  orig: 93, 71
+  offset: 21, 17
+  index: -1
+PamelaFrost-03/PamelaFrost-03_arm_lower_far
+  rotate: false
+  xy: 696, 182
+  size: 21, 38
+  orig: 85, 69
+  offset: 31, 16
+  index: -1
+PamelaFrost-04/PamelaFrost-04_arm_lower_far
+  rotate: false
+  xy: 696, 182
+  size: 21, 38
+  orig: 85, 69
+  offset: 31, 16
+  index: -1
+PamelaFrost/PamelaFrost_arm_lower_far
+  rotate: false
+  xy: 696, 182
+  size: 21, 38
+  orig: 85, 69
+  offset: 31, 16
+  index: -1
+PamelaFrost-03/PamelaFrost-03_arm_lower_near
+  rotate: false
+  xy: 922, 258
+  size: 24, 43
+  orig: 85, 69
+  offset: 30, 13
+  index: -1
+PamelaFrost-04/PamelaFrost-04_arm_lower_near
+  rotate: false
+  xy: 922, 258
+  size: 24, 43
+  orig: 85, 69
+  offset: 30, 13
+  index: -1
+PamelaFrost-03/PamelaFrost-03_arm_upper_far
+  rotate: true
+  xy: 522, 352
+  size: 26, 56
+  orig: 99, 93
+  offset: 35, 17
+  index: -1
+PamelaFrost-04/PamelaFrost-04_arm_upper_far
+  rotate: true
+  xy: 522, 352
+  size: 26, 56
+  orig: 99, 93
+  offset: 35, 17
+  index: -1
+PamelaFrost-03/PamelaFrost-03_arm_upper_near
+  rotate: false
+  xy: 617, 65
+  size: 26, 56
+  orig: 99, 93
+  offset: 35, 17
+  index: -1
+PamelaFrost-04/PamelaFrost-04_arm_upper_near
+  rotate: false
+  xy: 617, 65
+  size: 26, 56
+  orig: 99, 93
+  offset: 35, 17
+  index: -1
+PamelaFrost/PamelaFrost_arm_upper_near
+  rotate: false
+  xy: 617, 65
+  size: 26, 56
+  orig: 99, 93
+  offset: 35, 17
+  index: -1
+PamelaFrost-03/PamelaFrost-03_hand_far_1_fistBack
+  rotate: false
+  xy: 823, 135
+  size: 34, 30
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+PamelaFrost-04/PamelaFrost-04_hand_far_1_fistBack
+  rotate: false
+  xy: 823, 135
+  size: 34, 30
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+PamelaFrost-03/PamelaFrost-03_hand_far_2_fistPalm
+  rotate: true
+  xy: 884, 72
+  size: 30, 28
+  orig: 67, 53
+  offset: 19, 14
+  index: -1
+PamelaFrost-03/PamelaFrost-03_hand_near_1_fistBack
+  rotate: true
+  xy: 789, 23
+  size: 35, 30
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+PamelaFrost-04/PamelaFrost-04_hand_near_1_fistBack
+  rotate: true
+  xy: 789, 23
+  size: 35, 30
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+PamelaFrost/PamelaFrost_hand_near_1_fistBack
+  rotate: true
+  xy: 789, 23
+  size: 35, 30
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+PamelaFrost-03/PamelaFrost-03_hand_near_2_fistPalm
+  rotate: false
+  xy: 879, 104
+  size: 31, 29
+  orig: 67, 53
+  offset: 18, 14
+  index: -1
+PamelaFrost-03/PamelaFrost-03_head_1
+  rotate: false
+  xy: 207, 776
+  size: 126, 125
+  orig: 179, 179
+  offset: 31, 15
+  index: -1
+PamelaFrost-03/PamelaFrost-03_head_2_injured
+  rotate: true
+  xy: 892, 897
+  size: 125, 128
+  orig: 179, 179
+  offset: 32, 13
+  index: -1
+PamelaFrost-03/PamelaFrost-03_leg_lower_far
+  rotate: false
+  xy: 494, 288
+  size: 33, 62
+  orig: 64, 107
+  offset: 16, 23
+  index: -1
+PamelaFrost-03/PamelaFrost-03_leg_lower_near_2
+  rotate: false
+  xy: 494, 288
+  size: 33, 62
+  orig: 64, 107
+  offset: 16, 23
+  index: -1
+PamelaFrost-03/PamelaFrost-03_leg_lower_near_1
+  rotate: true
+  xy: 898, 525
+  size: 30, 60
+  orig: 64, 107
+  offset: 17, 24
+  index: -1
+PamelaFrost-03/PamelaFrost-03_leg_upper_far
+  rotate: false
+  xy: 556, 450
+  size: 37, 59
+  orig: 58, 89
+  offset: 8, 18
+  index: -1
+PamelaFrost-04/PamelaFrost-04_leg_upper_far
+  rotate: false
+  xy: 556, 450
+  size: 37, 59
+  orig: 58, 89
+  offset: 8, 18
+  index: -1
+PamelaFrost-03/PamelaFrost-03_leg_upper_near
+  rotate: false
+  xy: 794, 464
+  size: 36, 59
+  orig: 58, 89
+  offset: 9, 18
+  index: -1
+PamelaFrost-04/PamelaFrost-04_leg_upper_near
+  rotate: false
+  xy: 794, 464
+  size: 36, 59
+  orig: 58, 89
+  offset: 9, 18
+  index: -1
+PamelaFrost-03/PamelaFrost-03_neck
+  rotate: false
+  xy: 912, 107
+  size: 22, 24
+  orig: 43, 36
+  offset: 11, 8
+  index: -1
+PamelaFrost-04/PamelaFrost-04_neck
+  rotate: false
+  xy: 912, 107
+  size: 22, 24
+  orig: 43, 36
+  offset: 11, 8
+  index: -1
+PamelaFrost-03/PamelaFrost-03_torso
+  rotate: false
+  xy: 351, 115
+  size: 54, 60
+  orig: 169, 149
+  offset: 61, 39
+  index: -1
+PamelaFrost-03/PamelaFrost-03_waist
+  rotate: true
+  xy: 799, 254
+  size: 48, 38
+  orig: 93, 71
+  offset: 21, 17
+  index: -1
+PamelaFrost-04/PamelaFrost-04_waist
+  rotate: true
+  xy: 799, 254
+  size: 48, 38
+  orig: 93, 71
+  offset: 21, 17
+  index: -1
+PamelaFrost-05/PamelaFrost-05_waist
+  rotate: true
+  xy: 799, 254
+  size: 48, 38
+  orig: 93, 71
+  offset: 21, 17
+  index: -1
+PamelaFrost/PamelaFrost_waist
+  rotate: true
+  xy: 799, 254
+  size: 48, 38
+  orig: 93, 71
+  offset: 21, 17
+  index: -1
+PamelaFrost-04/PamelaFrost-04_hand_far_2_fistPalm
+  rotate: true
+  xy: 821, 68
+  size: 31, 28
+  orig: 67, 53
+  offset: 18, 14
+  index: -1
+PamelaFrost-04/PamelaFrost-04_hand_near_2_fistPalm
+  rotate: true
+  xy: 821, 35
+  size: 31, 29
+  orig: 67, 53
+  offset: 18, 14
+  index: -1
+PamelaFrost-04/PamelaFrost-04_head_1
+  rotate: false
+  xy: 141, 650
+  size: 125, 124
+  orig: 179, 179
+  offset: 32, 15
+  index: -1
+PamelaFrost-04/PamelaFrost-04_head_2_injured
+  rotate: true
+  xy: 761, 897
+  size: 125, 129
+  orig: 179, 179
+  offset: 32, 12
+  index: -1
+PamelaFrost-04/PamelaFrost-04_leg_lower_far
+  rotate: false
+  xy: 517, 116
+  size: 33, 62
+  orig: 64, 107
+  offset: 16, 23
+  index: -1
+PamelaFrost-04/PamelaFrost-04_leg_lower_near_2
+  rotate: false
+  xy: 517, 116
+  size: 33, 62
+  orig: 64, 107
+  offset: 16, 23
+  index: -1
+PamelaFrost-04/PamelaFrost-04_leg_lower_near_1
+  rotate: true
+  xy: 556, 418
+  size: 30, 60
+  orig: 64, 107
+  offset: 17, 24
+  index: -1
+PamelaFrost-04/PamelaFrost-04_torso
+  rotate: false
+  xy: 385, 177
+  size: 54, 61
+  orig: 169, 149
+  offset: 61, 39
+  index: -1
+PamelaFrost-05/PamelaFrost-05_arm_upper_far
+  rotate: false
+  xy: 669, 244
+  size: 24, 56
+  orig: 99, 93
+  offset: 37, 17
+  index: -1
+PamelaFrost-05/PamelaFrost-05_arm_upper_near
+  rotate: true
+  xy: 761, 228
+  size: 24, 56
+  orig: 99, 93
+  offset: 37, 17
+  index: -1
+PamelaFrost-05/PamelaFrost-05_foot_far_2_bent
+  rotate: true
+  xy: 695, 252
+  size: 54, 36
+  orig: 101, 64
+  offset: 20, 12
+  index: -1
+PamelaFrost-05/PamelaFrost-05_foot_near_2_bent
+  rotate: true
+  xy: 695, 252
+  size: 54, 36
+  orig: 101, 64
+  offset: 20, 12
+  index: -1
+PamelaFrost-05/PamelaFrost-05_hand_far_1_fistBack
+  rotate: false
+  xy: 895, 135
+  size: 34, 29
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+PamelaFrost-05/PamelaFrost-05_hand_far_2_fistPalm
+  rotate: false
+  xy: 852, 43
+  size: 30, 28
+  orig: 67, 53
+  offset: 19, 14
+  index: -1
+PamelaFrost-05/PamelaFrost-05_hand_near_1_fistBack
+  rotate: false
+  xy: 823, 167
+  size: 35, 30
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+PamelaFrost-05/PamelaFrost-05_hand_near_2_fistPalm
+  rotate: true
+  xy: 821, 2
+  size: 31, 29
+  orig: 67, 53
+  offset: 18, 14
+  index: -1
+PamelaFrost-05/PamelaFrost-05_head_1
+  rotate: true
+  xy: 596, 791
+  size: 106, 109
+  orig: 179, 179
+  offset: 39, 9
+  index: -1
+PamelaFrost-05/PamelaFrost-05_head_2_injured
+  rotate: true
+  xy: 707, 789
+  size: 106, 109
+  orig: 179, 179
+  offset: 39, 9
+  index: -1
+PamelaFrost-05/PamelaFrost-05_leg_lower_far
+  rotate: false
+  xy: 520, 52
+  size: 33, 62
+  orig: 64, 107
+  offset: 16, 25
+  index: -1
+PamelaFrost-05/PamelaFrost-05_leg_lower_near_2
+  rotate: false
+  xy: 520, 52
+  size: 33, 62
+  orig: 64, 107
+  offset: 16, 25
+  index: -1
+PamelaFrost-05/PamelaFrost-05_leg_lower_near_1
+  rotate: true
+  xy: 733, 421
+  size: 31, 60
+  orig: 64, 107
+  offset: 17, 25
+  index: -1
+PamelaFrost-05/PamelaFrost-05_leg_upper_far
+  rotate: false
+  xy: 633, 470
+  size: 37, 59
+  orig: 58, 89
+  offset: 8, 18
+  index: -1
+PamelaFrost-05/PamelaFrost-05_leg_upper_near
+  rotate: false
+  xy: 443, 115
+  size: 36, 60
+  orig: 58, 89
+  offset: 9, 16
+  index: -1
+PamelaFrost-05/PamelaFrost-05_neck
+  rotate: true
+  xy: 999, 144
+  size: 22, 23
+  orig: 43, 36
+  offset: 11, 9
+  index: -1
+PamelaFrost-05/PamelaFrost-05_torso
+  rotate: false
+  xy: 356, 54
+  size: 54, 59
+  orig: 169, 149
+  offset: 61, 41
+  index: -1
+PamelaFrost/PamelaFrost_arm_lower_near
+  rotate: true
+  xy: 877, 223
+  size: 24, 42
+  orig: 85, 69
+  offset: 29, 14
+  index: -1
+PamelaFrost/PamelaFrost_arm_upper_far
+  rotate: true
+  xy: 819, 224
+  size: 25, 56
+  orig: 99, 93
+  offset: 35, 17
+  index: -1
+PamelaFrost/PamelaFrost_foot_near_1
+  rotate: false
+  xy: 895, 427
+  size: 54, 28
+  orig: 107, 58
+  offset: 25, 15
+  index: -1
+PamelaFrost/PamelaFrost_hand_far_1_fistBack
+  rotate: false
+  xy: 859, 135
+  size: 34, 30
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+PamelaFrost/PamelaFrost_hand_far_2_fistPalm
+  rotate: false
+  xy: 852, 13
+  size: 30, 28
+  orig: 67, 53
+  offset: 19, 14
+  index: -1
+PamelaFrost/PamelaFrost_hand_near_2_fistPalm
+  rotate: false
+  xy: 851, 73
+  size: 31, 29
+  orig: 67, 53
+  offset: 18, 14
+  index: -1
+PamelaFrost/PamelaFrost_head_1
+  rotate: false
+  xy: 345, 907
+  size: 137, 115
+  orig: 179, 179
+  offset: 25, 10
+  index: -1
+PamelaFrost/PamelaFrost_head_2_injured
+  rotate: false
+  xy: 207, 903
+  size: 136, 119
+  orig: 179, 179
+  offset: 25, 6
+  index: -1
+PamelaFrost/PamelaFrost_leg_lower_far
+  rotate: false
+  xy: 519, 380
+  size: 33, 62
+  orig: 64, 107
+  offset: 17, 24
+  index: -1
+PamelaFrost/PamelaFrost_leg_lower_near_1
+  rotate: false
+  xy: 552, 119
+  size: 30, 60
+  orig: 64, 107
+  offset: 17, 25
+  index: -1
+PamelaFrost/PamelaFrost_leg_lower_near_2
+  rotate: true
+  xy: 617, 531
+  size: 33, 62
+  orig: 64, 107
+  offset: 16, 23
+  index: -1
+PamelaFrost/PamelaFrost_leg_upper_far
+  rotate: true
+  xy: 672, 491
+  size: 37, 59
+  orig: 58, 89
+  offset: 8, 18
+  index: -1
+PamelaFrost/PamelaFrost_leg_upper_near
+  rotate: true
+  xy: 897, 487
+  size: 36, 59
+  orig: 58, 89
+  offset: 9, 18
+  index: -1
+PamelaFrost/PamelaFrost_neck
+  rotate: true
+  xy: 999, 120
+  size: 22, 23
+  orig: 43, 36
+  offset: 11, 9
+  index: -1
+PamelaFrost/PamelaFrost_torso
+  rotate: false
+  xy: 470, 594
+  size: 54, 59
+  orig: 169, 149
+  offset: 61, 40
+  index: -1
+StumpyPete/StumpyPete_arm_lower_far
+  rotate: false
+  xy: 884, 293
+  size: 28, 43
+  orig: 85, 69
+  offset: 27, 12
+  index: -1
+StumpyPete/StumpyPete_arm_lower_near
+  rotate: true
+  xy: 977, 259
+  size: 28, 42
+  orig: 85, 69
+  offset: 27, 13
+  index: -1
+StumpyPete/StumpyPete_arm_upper_far
+  rotate: false
+  xy: 529, 293
+  size: 37, 57
+  orig: 99, 93
+  offset: 28, 20
+  index: -1
+StumpyPete/StumpyPete_arm_upper_near
+  rotate: true
+  xy: 674, 382
+  size: 37, 57
+  orig: 99, 93
+  offset: 28, 20
+  index: -1
+StumpyPete/StumpyPete_foot_far_1
+  rotate: true
+  xy: 460, 2
+  size: 49, 24
+  orig: 107, 58
+  offset: 27, 14
+  index: -1
+StumpyPete/StumpyPete_foot_far_2_bent
+  rotate: true
+  xy: 880, 338
+  size: 48, 31
+  orig: 101, 64
+  offset: 27, 14
+  index: -1
+StumpyPete/StumpyPete_foot_near_1
+  rotate: false
+  xy: 552, 116
+  size: 1, 1
+  orig: 1, 1
+  offset: 0, 0
+  index: -1
+StumpyPete/StumpyPete_foot_near_2_bent
+  rotate: false
+  xy: 552, 116
+  size: 1, 1
+  orig: 1, 1
+  offset: 0, 0
+  index: -1
+StumpyPete/StumpyPete_hand_far_1_fistBack
+  rotate: false
+  xy: 689, 2
+  size: 34, 31
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+StumpyPete/StumpyPete_hand_far_2_fistPalm
+  rotate: true
+  xy: 954, 223
+  size: 34, 29
+  orig: 67, 53
+  offset: 18, 15
+  index: -1
+StumpyPete/StumpyPete_hand_near_2_fistPalm
+  rotate: true
+  xy: 954, 223
+  size: 34, 29
+  orig: 67, 53
+  offset: 18, 15
+  index: -1
+StumpyPete/StumpyPete_hand_near_1_fistBack
+  rotate: false
+  xy: 720, 120
+  size: 34, 31
+  orig: 67, 53
+  offset: 17, 15
+  index: -1
+StumpyPete/StumpyPete_head_1
+  rotate: false
+  xy: 484, 824
+  size: 110, 92
+  orig: 179, 179
+  offset: 33, 8
+  index: -1
+StumpyPete/StumpyPete_head_2_injured
+  rotate: true
+  xy: 228, 240
+  size: 112, 92
+  orig: 179, 179
+  offset: 33, 8
+  index: -1
+StumpyPete/StumpyPete_leg_lower_far
+  rotate: true
+  xy: 764, 566
+  size: 43, 56
+  orig: 64, 107
+  offset: 14, 26
+  index: -1
+StumpyPete/StumpyPete_leg_lower_near_1
+  rotate: true
+  xy: 370, 642
+  size: 36, 75
+  orig: 64, 107
+  offset: 14, 9
+  index: -1
+StumpyPete/StumpyPete_leg_lower_near_2
+  rotate: false
+  xy: 820, 623
+  size: 36, 75
+  orig: 64, 107
+  offset: 14, 9
+  index: -1
+StumpyPete/StumpyPete_leg_upper_far
+  rotate: false
+  xy: 574, 181
+  size: 25, 51
+  orig: 58, 89
+  offset: 16, 17
+  index: -1
+StumpyPete/StumpyPete_leg_upper_near
+  rotate: false
+  xy: 601, 181
+  size: 25, 51
+  orig: 58, 89
+  offset: 16, 17
+  index: -1
+StumpyPete/StumpyPete_neck
+  rotate: false
+  xy: 996, 289
+  size: 26, 27
+  orig: 43, 36
+  offset: 9, 6
+  index: -1
+StumpyPete/StumpyPete_torso
+  rotate: false
+  xy: 228, 173
+  size: 74, 65
+  orig: 169, 149
+  offset: 51, 34
+  index: -1
+StumpyPete/StumpyPete_waist
+  rotate: true
+  xy: 317, 407
+  size: 69, 31
+  orig: 93, 71
+  offset: 18, 15
+  index: -1
+Truck/TruckMatthews_arm_upper_far
+  rotate: false
+  xy: 533, 231
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+Truck/TruckMatthews_arm_upper_near
+  rotate: false
+  xy: 555, 57
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+Truck/TruckMatthews_foot_far_2_bent
+  rotate: false
+  xy: 795, 424
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+Truck/TruckMatthews_foot_near_2_bent
+  rotate: false
+  xy: 795, 424
+  size: 57, 38
+  orig: 101, 64
+  offset: 17, 12
+  index: -1
+Truck/TruckMatthews_hand_far_1_fistBack
+  rotate: false
+  xy: 648, 2
+  size: 39, 31
+  orig: 67, 53
+  offset: 15, 13
+  index: -1
+Truck/TruckMatthews_hand_far_2_fistPalm
+  rotate: false
+  xy: 985, 194
+  size: 32, 30
+  orig: 67, 53
+  offset: 18, 13
+  index: -1
+Truck/TruckMatthews_hand_near_2_fistPalm
+  rotate: false
+  xy: 965, 135
+  size: 32, 31
+  orig: 67, 53
+  offset: 18, 13
+  index: -1
+Truck/TruckMatthews_head_1
+  rotate: true
+  xy: 477, 740
+  size: 82, 94
+  orig: 179, 179
+  offset: 48, 11
+  index: -1
+Truck/TruckMatthews_head_2_injured
+  rotate: false
+  xy: 906, 797
+  size: 85, 98
+  orig: 179, 179
+  offset: 47, 7
+  index: -1
+Truck/TruckMatthews_leg_lower_far
+  rotate: false
+  xy: 361, 354
+  size: 36, 65
+  orig: 64, 107
+  offset: 12, 23
+  index: -1
+Truck/TruckMatthews_leg_lower_near_2
+  rotate: false
+  xy: 361, 354
+  size: 36, 65
+  orig: 64, 107
+  offset: 12, 23
+  index: -1
+Truck/TruckMatthews_leg_lower_near_1
+  rotate: false
+  xy: 860, 568
+  size: 36, 63
+  orig: 64, 107
+  offset: 14, 23
+  index: -1
+Truck/TruckMatthews_neck
+  rotate: false
+  xy: 936, 110
+  size: 24, 21
+  orig: 43, 36
+  offset: 10, 8
+  index: -1
+Truck/TruckMatthews_torso
+  rotate: false
+  xy: 284, 478
+  size: 60, 66
+  orig: 169, 149
+  offset: 55, 36
+  index: -1
+TurboTed/TurboTed_arm_lower_far
+  rotate: false
+  xy: 706, 37
+  size: 28, 40
+  orig: 28, 40
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_arm_lower_near
+  rotate: true
+  xy: 719, 221
+  size: 28, 40
+  orig: 28, 40
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_arm_upper_far
+  rotate: true
+  xy: 322, 240
+  size: 44, 59
+  orig: 44, 59
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_arm_upper_near
+  rotate: true
+  xy: 383, 240
+  size: 44, 60
+  orig: 44, 60
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_foot_far_1
+  rotate: true
+  xy: 993, 835
+  size: 60, 29
+  orig: 60, 29
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_foot_far_2_bent
+  rotate: false
+  xy: 554, 380
+  size: 59, 36
+  orig: 59, 36
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_foot_near_2_bent
+  rotate: false
+  xy: 554, 380
+  size: 59, 36
+  orig: 59, 36
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_foot_near_1
+  rotate: true
+  xy: 993, 773
+  size: 60, 29
+  orig: 60, 29
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_hand_1_fistBack
+  rotate: true
+  xy: 756, 129
+  size: 37, 29
+  orig: 37, 29
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_hand_2_fistPalm
+  rotate: true
+  xy: 922, 223
+  size: 33, 30
+  orig: 33, 30
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_head_1
+  rotate: false
+  xy: 455, 655
+  size: 93, 83
+  orig: 93, 83
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_head_2_injured
+  rotate: false
+  xy: 573, 702
+  size: 93, 87
+  orig: 93, 87
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_leg_lower_far
+  rotate: false
+  xy: 399, 352
+  size: 49, 64
+  orig: 49, 64
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_leg_lower_near_1
+  rotate: false
+  xy: 322, 286
+  size: 49, 66
+  orig: 49, 66
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_leg_lower_near_2
+  rotate: false
+  xy: 373, 286
+  size: 49, 64
+  orig: 49, 64
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_leg_upper_far
+  rotate: false
+  xy: 969, 306
+  size: 25, 54
+  orig: 25, 54
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_leg_upper_near
+  rotate: false
+  xy: 969, 306
+  size: 25, 54
+  orig: 25, 54
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_neck
+  rotate: true
+  xy: 695, 222
+  size: 28, 22
+  orig: 28, 22
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_torso
+  rotate: false
+  xy: 304, 46
+  size: 50, 60
+  orig: 50, 60
+  offset: 0, 0
+  index: -1
+TurboTed/TurboTed_waist
+  rotate: true
+  xy: 854, 424
+  size: 38, 39
+  orig: 38, 39
+  offset: 0, 0
+  index: -1
+YoungBuck/YoungBuck_arm_lower_near
+  rotate: false
+  xy: 677, 35
+  size: 27, 42
+  orig: 85, 69
+  offset: 28, 14
+  index: -1
+YoungBuck/YoungBuck_arm_upper_far
+  rotate: true
+  xy: 733, 385
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+YoungBuck/YoungBuck_arm_upper_near
+  rotate: true
+  xy: 795, 388
+  size: 34, 60
+  orig: 99, 93
+  offset: 32, 16
+  index: -1
+YoungBuck/YoungBuck_hand_far_1_fistBack
+  rotate: true
+  xy: 676, 79
+  size: 39, 31
+  orig: 67, 53
+  offset: 15, 13
+  index: -1
+YoungBuck/YoungBuck_hand_near_1_fistBack
+  rotate: false
+  xy: 652, 206
+  size: 39, 36
+  orig: 67, 53
+  offset: 15, 13
+  index: -1
+YoungBuck/YoungBuck_hand_near_2_fistPalm
+  rotate: false
+  xy: 787, 134
+  size: 34, 32
+  orig: 67, 53
+  offset: 17, 12
+  index: -1
+YoungBuck/YoungBuck_head_1
+  rotate: true
+  xy: 2, 59
+  size: 131, 123
+  orig: 179, 179
+  offset: 30, 10
+  index: -1
+YoungBuck/YoungBuck_head_2_injured
+  rotate: false
+  xy: 628, 899
+  size: 131, 123
+  orig: 179, 179
+  offset: 30, 10
+  index: -1
+YoungBuck/YoungBuck_leg_lower_far
+  rotate: true
+  xy: 550, 584
+  size: 35, 65
+  orig: 64, 107
+  offset: 14, 23
+  index: -1
+YoungBuck/YoungBuck_leg_lower_near_1
+  rotate: true
+  xy: 962, 526
+  size: 36, 60
+  orig: 64, 107
+  offset: 14, 24
+  index: -1
+YoungBuck/YoungBuck_leg_lower_near_2
+  rotate: false
+  xy: 482, 375
+  size: 35, 65
+  orig: 64, 107
+  offset: 14, 23
+  index: -1
+YoungBuck/YoungBuck_torso
+  rotate: false
+  xy: 419, 839
+  size: 63, 66
+  orig: 169, 149
+  offset: 54, 34
+  index: -1
+sword_1
+  rotate: false
+  xy: 114, 616
+  size: 25, 207
+  orig: 168, 289
+  offset: 72, 34
+  index: -1
+sword_2_swing
+  rotate: false
+  xy: 2, 612
+  size: 110, 211
+  orig: 253, 288
+  offset: 72, 33
+  index: -1
+sword_3_bigSwing
+  rotate: false
+  xy: 2, 825
+  size: 203, 197
+  orig: 333, 289
+  offset: 57, 34
+  index: -1

BIN
spine-ts/webgl/demos/assets/heroes.png


+ 31 - 19
spine-ts/webgl/demos/demos.css

@@ -12,27 +12,27 @@ br {
 	content: "";
 	margin-top: 15px;
 }
-.aspect {
-	margin-bottom: 15px;
-	max-width: 800px;
-	text-align: center;
+canvas {
+	width: 640px;
+	height: 480px;
 }
-.aspect div {
-	position: relative;
-	padding-bottom: 70.14%;
+
+.play {
+	background: black;
+	background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3Cpath%20fill%3D%27%23F2F2F2%27%20d%3D%27M30.185%2C15.5L12.556%2C24.8V6.201L30.185%2C15.5z%27%2F%3E%3C%2Fsvg%3E");
+	width: 40px;
+	height: 30px;
 }
-.aspect canvas {
-	position: absolute;
-	top: 0;
-	bottom: 0;
-	left: 0;
-	right: 0;
-	width: 100%;
-	height: 100%;
-	border: 1px solid black;
+.pause {
+	background: black;
+	background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3Cpath%20fill%3D%22%23F2F2F2%22%20d%3D%22M26.94%2C6.978v17.045h-5.249V6.978H26.94z%22%2F%3E%3Cpath%20fill%3D%22%23F2F2F2%22%20d%3D%22M18.975%2C6.978v17.045h-5.249V6.978H18.975z%22%2F%3E%3C%2Fsvg%3E");
+	width: 40px;
+	height: 30px;
+	margin: 0;
 }
+
 .slider {
-	width: 100%;
+	width: 597px;
 	max-width: 800px;
 	border-radius: 3px;
 	text-align: left;
@@ -43,7 +43,7 @@ br {
 	height: 15px;
 	border: 1px solid #c5c5c5;
 }
-.slider div {	
+.slider div {
 	position: absolute;
 	top: -2px;
 	width: 10px;
@@ -56,7 +56,7 @@ br {
 .slider.filled {
 	border: 0;
 }
-.slider.filled div {	
+.slider.filled div {
 	top: -1px;
 	margin-left: 1px;
 }
@@ -73,3 +73,15 @@ br {
 	border-top-right-radius: 3px;
 	border-bottom-right-radius: 3px;
 }
+
+.overlay {
+	opacity: 1;
+	transition: opacity 0.5s ease;
+	z-index: 10;
+}
+.overlay-hide {
+	opacity: 0;
+}
+.overlay-label {
+	display: none;
+}

+ 365 - 0
spine-ts/webgl/demos/demos.html

@@ -0,0 +1,365 @@
+<!DOCTYPE html><html ><head>
+	<meta charset="utf-8">
+	<title>Spine: Demos</title>
+<body >
+
+<link rel="stylesheet" href="demos.css">
+
+
+<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
+<script src="../../build/spine-webgl.js"></script>
+
+<script src="utils.js"></script>
+<script src="spritesheets.js"></script>
+<script src="imagechanges.js"></script>
+<script src="transitions.js"></script>
+<script src="meshes.js"></script>
+<script src="skins.js"></script>
+<script src="hoverboard.js"></script>
+<script src="vine.js"></script>
+<script src="clipping.js"></script>
+<script src="stretchyman.js"></script>
+<script src="tank.js"></script>
+<script src="transforms.js"></script>
+
+<script src="demos.js"></script>
+
+<div id="demos" class="demos-page">
+	<div>
+		<div>
+			<div>
+				<h2 id="Spine-versus-sprites-sheets"><a href="#Spine-versus-sprite-sheets">Spine versus sprite sheets</a></h2>
+				<div>
+					<div><canvas id="spritesheets-canvas"></canvas></div>
+					<div class="resize"></div>
+					<div id="spritesheets-overlay" class="overlay-hide">
+						<div class="overlay-label" style="width:50%"><b>Spine</b><br><span class="hide-small">All animations, all frame rates<br></span><b>0.18 MB</b></div>
+						<div class="overlay-label" style="left:50%;width:50%"><b>Sprite sheet</b><br><span class="hide-small">1 second of animation @ 30FPS<br></span><b>3.39 MB = 18x larger!</b></div>
+					</div>
+				</div>
+				<div>
+					<p>Traditional sprite animation requires an image for each frame of animation, resulting in massive sprite sheets. Each additional animation greatly increases your games' disk space and memory requirements, especially at frame rates necessary for smooth playback. It quickly becomes an enormous amount of work for your artists and your finished product suffers when the number of animations must be reduced to meet size constraints.</p>
+					<p>Spine animations store only the bone and animation data, coupled with a single set of individual images which are reused for every animation. This allows you to bring your games to life by packing them full of unique animations. Also, Spine animations are interpolated so playback is always perfectly smooth, regardless of the frame rate.</p>
+					<p><a href="/demos/assets/spine-versus-sprite-sheets.png" target="_blank">
+						<img src="/demos/assets/spine-versus-sprite-sheets-thumb.png" class="compare">
+						Compare the memory and disk space requirements of Spine versus sprite sheet animations.
+					</a></p>
+					<div class="controls">
+						<div class="control" style="padding-bottom:0px">
+							<div class="control-label"><span>Animation speed</span></div>
+							<div class="slidervalue" id="spritesheets-timeslider-label">&nbsp;</div>
+							<div class="slider filled" id="spritesheets-timeslider"></div>
+						</div>
+						<div class="control" style="margin:0">
+							<div>
+								<button id="spritesheets-roar" class="btn unit-50">Roar</button>
+								<button id="spritesheets-jump" class="btn unit-50">Jump</button>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div>
+		<div>
+			<div>
+				<h2 id="Spine-with-frame-based-animation"><a href="#Spine-with-frame-based-animation">Spine with frame-based animation</a></h2>
+				<div>
+					<div><canvas id="imagechanges-canvas"></canvas></div>
+					<table class="timeline layout"><tr>
+						<td><div id="imagechanges-playbutton" class="pause"></div></td>
+						<td><div class="slider" id="imagechanges-timeline"></div></td>
+					</tr></table>
+					<div class="resize"></div>
+				</div>
+				<div>
+					<p>While Spine largely replaces the need for traditional frame-by-frame animation, images can still be swapped when needed. For example, a change of perspective for a torso or flapping wing, alternative facial expressions, or a muzzle flash.</p>
+					<p>Spine's slots, attachments, and draw order mechanisms allow you to easily integrate frame-by-frame animations in your otherwise fully dynamic Spine animations. Even better, Spine can manipulate the frame-by-frame images, shown in this demo by scaling on the alien's exploding head.</p>
+					<div class="controls">
+						<div class="control">
+							<label>Select a skeleton:</label>
+							<div class="select-container">
+								<select id="imagechanges-skeleton" size="2"></select>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div>
+		<div>
+			<div>
+				<h2 id="Transitions-and-layering"><a href="#Transitions-and-layering">Transitions and layering</a></h2>
+				<div>
+					<div><canvas id="transitions-canvas"></canvas></div>
+					<div id="transitions-overlay" class="overlay-hide">
+						<div class="overlay-label" style="left:25%;"><b>Smooth</b></div>
+						<div class="overlay-label" style="right:30%;"><b>Abrupt</b></div>
+					</div>
+					<div class="resize"></div>
+				</div>
+				<div>
+					<p>An often felt disadvantage of 2D games is the lack of smooth animation transitions. In 3D games, transitions between animations can be calculated on-the-fly at runtime. Animations can even be blended, for example half walking and half running. In 2D games without Spine, blending is impossible and typically transitions are jarring. Artists can manually create frames for every possible transition, but even that doesn't help when animations can be interrupted mid playback.</p>
+					<p>Spine brings the benefits from the 3D world back to 2D. The Spine Runtimes smoothly and dynamically transition from one animation to the next, giving your characters natural looking fluidity. Layering allows animations to be blended on top of others, for example to play a shooting animation while your character is running or to blend walking and limping more and more as damage is taken.</p>
+					<div class="controls">
+						<div class="control" style="margin:0">
+							<div>
+								<button id="transitions-die" class="btn unit-50">Die</button>
+							</div>
+						</div>
+						<div class="control" style="padding-bottom:0px">
+							<div class="control-label"><span>Animation speed</span></div>
+							<div class="slidervalue" id="transitions-timeslider-label">&nbsp;</div>
+							<div class="slider filled" id="transitions-timeslider"></div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div id="demo-mesh-deformations" >
+		<div>
+			<div>
+				<h2 id="Mesh-deformations"><a href="#Mesh-deformations">Mesh deformation</a></h2>
+				<div>
+					<div><canvas id="meshes-canvas"></canvas></div>
+					<table class="timeline layout"><tr>
+						<td><div id="meshes-playbutton" class="pause"></div></td>
+						<td><div class="slider" id="meshes-timeline"></div></td>
+					</tr></table>
+					<div class="resize"></div>
+				</div>
+				<div>
+					<p>A Spine character made up of rigid 2D images can already give excellent results, such as Spineboy in the demo above. To give your characters even more life, Spine brings more tricks from the 3D world in the form of meshes and weights. With meshes, images are no longer rigid and can bend and deform however you like. Weights bind meshes to bones, so the images deform automatically as the bones are moved.</p>
+					<p>Meshes can also improve your game's performance, reducing fill rate usage by not drawing transparent portions of your images. This is especially important on mobile devices.</p>
+					<p>The amazing art for this demo was kindly provided by Hwadock (a.k.a. dugy). Follow him on <a href="https://twitter.com/dugy_">Twitter</a> and his <a href="http://hwadock.dothome.co.kr/dugy/index.htm">blog</a>.</p>
+					<div class="controls">
+						<div class="control" style="padding-bottom:0">
+							<label>Select a character:</label>
+							<div class="select-container">
+								<select id="meshes-skeleton" size="3"></select>
+							</div>
+						</div>
+						<div class="control" style="width:50%; display:inline-block; float:left; padding-bottom:6px">
+							<div class="checkbox">
+								<input type="checkbox" id="meshes-drawbonescheckbox" name="check">
+								<label for="meshes-drawbonescheckbox"></label>
+							</div>
+							<span style="cursor:pointer" onclick="$('#meshes-drawbonescheckbox').click()">Show bones</span>
+						</div>
+						<div class="control" style="width:50%; display:inline-block; padding-bottom:6px">
+							<div class="checkbox">
+								<input type="checkbox" id="meshes-drawmeshtrianglescheckbox" name="check">
+								<label for="meshes-drawmeshtrianglescheckbox"></label>
+							</div>
+							<span style="cursor:pointer" onclick="$('#meshes-drawmeshtrianglescheckbox').click()">Show triangles</span>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div id="demo-skins" >
+		<div>
+			<div>
+				<h2 id="Skins"><a href="#Skins">Skins</a></h2>
+				<div>
+					<div><canvas id="skins-canvas"></canvas></div>
+					<div class="resize"></div>
+				</div>
+				<div>
+					<p>Spine's skins feature is perfect for providing customization and variety while keeping your workload reasonable. With skins, the work of animating only needs to be done once, then you can assign different looks to your skeletons while reusing all your animations. For ultimate flexibility, the Spine Runtimes let you combine parts from different skins at runtime, covering all possible customization needs.</p>
+					<p>Skins give players the ability to add their own touch to your game's world by outfitting their avatars with new looks, clothing, weapons, and other accessories. Skins also give you more mileage out of your animations: mix and match your art for enemies, items, and other game objects to greatly increase variety for little effort.</p>
+					<p>The art for this demo can be found in the <a href="https://www.assetstore.unity3d.com/en/#!/content/41338" target="_blank">2D Anim Heroes</a> character pack for Unity.
+					<div class="controls">
+						<div class="control">
+							<label>Select a skin:</label>
+							<div class="select-container">
+								<select id="skins-skin"></select>
+							</div>
+						</div>
+						<div class="control" style="margin:0">
+							<div>
+								<button id="skins-randomizeattachments" class="btn unit-50">Randomize</button>
+								<button id="skins-swingsword" class="btn unit-50">Swing Sword</button>
+							</div>
+						</div>
+						<div class="control" style="padding-bottom:6px; padding-top:10px">
+							<div class="checkbox">
+								<input type="checkbox" id="skins-randomizeskins" name="check" checked="true">
+								<label for="skins-randomizeskins"></label>
+							</div>
+							<span style="cursor:pointer" onclick="$('#skins-randomizeskins').click()">Random skins</span>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div id="demo-ik-constraint" >
+		<div>
+			<div>
+				<h2 id="Inverse-kinematics"><a href="#Inverse-kinematics">Inverse kinematics</a></h2>
+				<div>
+					<div><canvas id="hoverboard-canvas"></canvas></div>
+					<div class="resize"></div>
+				</div>
+					<div>
+					<p>Spine's support for inverse kinematics allows for realistic and dynamic movement that would otherwise be difficult or impossible to animate. It also enables more advanced rigging, where complex poses can be easily controlled by a small number of bones.</p>
+					<p>Since Spine doesn't use baking or plotting, IK really shines at runtime. By dynamically positioning bones at runtime, IK constraints allow your character to easily react to the environment, such as aiming at enemies, having feet follow slopes and bumps in the terrain, and much more. In this demo Spineboy is balanced on a user controlled hover board while playing an animation at the same time.</p>
+					<p>Try it out! Drag the red circles around to dynamically pose Spineboy. The shoot and jump buttons and aim checkbox layer animations on top of the idle animation.</p>
+					<div class="controls">
+						<div class="control" style="margin:0">
+							<div>
+								<button id="hoverboard-shoot" class="btn unit-50">Shoot</button>
+								<button id="hoverboard-jump" class="btn unit-50">Jump</button>
+							</div>
+						</div>
+						<div class="control" style="width:50%; display:inline-block; float:left; padding-bottom:6px">
+							<div class="checkbox">
+								<input type="checkbox" id="hoverboard-aim" name="check">
+								<label for="hoverboard-aim"></label>
+							</div>
+							<span style="cursor:pointer" onclick="$('#hoverboard-aim').click()">Aim</span>
+						</div>
+						<div class="control" style="width:50%; display:inline-block; padding-bottom:6px">
+							<div class="checkbox">
+								<input type="checkbox" id="hoverboard-drawbones" name="check">
+								<label for="hoverboard-drawbones"></label>
+							</div>
+							<span style="cursor:pointer" onclick="$('#hoverboard-drawbones').click()">Show bones</span>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div id="demo-path-constraint" >
+		<div>
+			<div>
+				<h2 id="Path-constraints"><a href="#Path-constraints">Path constraints</a></h2>
+				<div>
+					<div><canvas id="vine-canvas"></canvas></div>
+					<table class="timeline layout"><tr>
+						<td><div id="vine-playbutton" class="pause"></div></td>
+						<td><div class="slider" id="vine-timeline"></div></td>
+					</tr></table>
+					<div class="resize"></div>
+				</div>
+				<div>
+					<p>Often a part of a character follows an open or closed path. Rather than key this movement manually, Spine's path constraints can be used to make bones automatically follow a path. The composite Bézier path is made up of a set of interconnected points that let you bend and shape the path. The path itself can be animated and even weighted to bones, so the path deforms automatically as the bones are moved.</p>
+					<p>In this demo a vine mesh is bound to bones which are constrained to a path. The more vertices in the mesh, the smoother it will bend.</p>
+					<p>Path constraints can also be used to great effect at runtime. Move the red handles to dynamically modify the path and watch the vine follow it seamlessly!</p>
+					<div class="controls">
+						<div class="control" style="padding-bottom:6px">
+							<div class="checkbox">
+								<input type="checkbox" id="vine-drawbones" name="check">
+								<label for="vine-drawbones"></label>
+							</div>
+							<span style="cursor:pointer" onclick="$('#vine-drawbones').click()">Show bones &amp; paths</span>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div>
+				<div>
+					<div><canvas id="stretchyman-canvas"></canvas></div>
+					<div class="resize"></div>
+				</div>
+				<div>
+					<p>Path constraints enable powerful rigging, shown by Stretchyman in this demo. For the arms and legs, meshes are weighted to many small bones which are then constrained to follow simple paths for the limbs. The paths are then weighted to bones which can be moved to control the limbs. This setups allows a large number of bones to be controlled with just a few bones. Not only does this make animating easier, but at runtime only a few bones need to be adjusted for posing dynamically.</p>
+					<p>Move the red handles and make Stretchyman dance!</p>
+					<div class="controls">
+						<div class="control" style="padding-bottom:6px">
+							<div class="checkbox">
+								<input type="checkbox" id="stretchyman-drawbones" name="check">
+								<label for="stretchyman-drawbones"></label>
+							</div>
+							<span style="cursor:pointer" onclick="$('#stretchyman-drawbones').click()">Show bones &amp; paths</span>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div id="demo-clipping" >
+		<div>
+			<div>
+				<h2 id="Clipping"><a href="#Clipping">Clipping</a></h2>
+				<div>
+					<div><canvas id="clipping-canvas"></canvas></div>
+					<table class="timeline layout"><tr>
+						<td><div id="clipping-playbutton" class="pause"></div></td>
+						<td><div class="slider" id="clipping-timeline"></div></td>
+					</tr></table>
+					<div class="resize"></div>
+				</div>
+				<div>
+					<p>Sometimes parts of an animation must be partially hidden, like in this example where Spineboy comes out of a portal. Clipping comes in handy in these cases by restricting rendering to a polygonal area. Only the parts of the skeleton inside the predefined, animatable area are shown. This enables many effects that wouldn't otherwise be possible, such as windows, lighting effects, and more. It is also possible to have clipping only affect a subset of the skeleton. For example, an animation where a character goes through an x-ray.</p>
+					<div class="controls">
+						<div class="control" style="padding-bottom:6px">
+							<div class="checkbox">
+								<input type="checkbox" id="clipping-drawtriangles" name="check">
+								<label for="clipping-drawtriangles"></label>
+							</div>
+							<span style="cursor:pointer" onclick="$('#clipping-drawtriangles').click()">Show triangles</span>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div id="demo-transform-constraint" >
+		<div>
+			<div>
+				<h2 id="Transform-constraints"><a href="#Transform-constraints">Transform constraints</a></h2>
+				<div>
+					<div><canvas id="tank-canvas"></canvas></div>
+					<table class="timeline layout"><tr>
+						<td><div id="tank-playbutton" class="pause"></div></td>
+						<td><div class="slider" id="tank-timeline"></div></td>
+					</tr></table>
+					<div class="resize"></div>
+				</div>
+				<div>
+					<p>Animating complex skeletons with many interdependent pieces can be tedious. Spine's transform constraints remove this pain by unlocking more powerful rigging. By constraining bone transforms to the transform of another bone, you only need to animate one of the bones and the others are adjusted automatically. While seemingly simple on the surface, advanced rigging can make great use of this to automate how a skeleton behaves as it is posed.</p>
+					<p>Transform constraints are also great for machinery, such as the tank in this demo. Instead of keying the rotation of each individual wheel, a single wheel is animated while the others follow via a transform constraint. Offsetting and mixing can add individualism back to constrained parts.</p>
+					<p>The treads on the tank are circulated using a path constraint, which would be impossible to animate without paths. The path is weighted to the wheels, so the path bends automatically as the wheels move up and down.</p>
+					<div class="controls">
+						<div class="control" style="padding-bottom:6px">
+							<div class="checkbox">
+								<input type="checkbox" id="tank-drawbones" name="check">
+								<label for="tank-drawbones" id="tank-drawbones-label"></label>
+							</div>
+							<span style="cursor:pointer" onclick="$('#tank-drawbones').click()">Show bones &amp; paths</span>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div>
+				<div>
+					<div><canvas id="transforms-canvas"></canvas></div>
+					<div class="resize"></div>
+				</div>
+				<div>
+					<p>In this demo, the rotation of the two smaller wheels is constrained by the big wheel's rotation. Also, the big wheel's translation is constrained so it stays between the two smaller wheels.</p>
+					<div class="controls">
+						<div class="control" style="padding-bottom:0px">
+							<div class="control-label"><span>Rotation offset</span></div>
+							<div class="slidervalue" id="transforms-rotationoffset-label">&nbsp;</div>
+							<div class="slider filled" id="transforms-rotationoffset"></div>
+						</div>
+						<div class="control" style="padding-bottom:0px">
+							<div class="control-label"><span>Translation mix</span></div>
+							<div class="slidervalue" id="transforms-translationmix-label">&nbsp;</div>
+							<div class="slider filled" id="transforms-translationmix"></div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+</body></html>

+ 81 - 0
spine-ts/webgl/demos/demos.js

@@ -0,0 +1,81 @@
+
+$(function () {
+	window.onerror = function(message, url, lineNo) {
+		alert("Error: " + message + "\n" + "URL:" + url + "\nLine: " + lineNo);
+	}
+
+	spineDemos.assetManager = new spine.SharedAssetManager("assets/");
+	spineDemos.loadSliders();
+
+	var demos = [
+		spritesheetsDemo,
+		imageChangesDemo,
+		transitionsDemo,
+		meshesDemo,
+		skinsDemo,
+		hoverboardDemo,
+		vineDemo,
+		clippingDemo,
+		stretchymanDemo,
+		tankDemo,
+		transformsDemo,
+	];
+	for (var i = 0; i < demos.length; i++)
+		demos[i](spineDemos.setupRendering);
+
+	function resizeSliders () {
+		$(".slider").each(function () {
+			$(this).data("slider").resized();
+		});
+	}
+
+	function windowResized () {
+		// Keep canvas from taking up whole screen.
+		$(".aspect").each(function () {
+			$(this).css("padding-bottom", Math.min(70.14, $(window).height() * 0.75 / $(this).width() * 100) + "%");
+		});
+
+		// Swap controls when media query puts text below canvas.
+		var below = $("#below").is(':visible');
+		$(".demo .description").each(function () {
+			var description = $(this);
+			var controls = description.children(".controls");
+			if (below || description.hasClass("fullsize"))
+				description.prepend(controls);
+			else
+				description.append(controls);
+		});
+
+		resizeSliders();
+	}
+	windowResized();
+	$(window).resize(windowResized);
+
+	$(".resize").click(function () {
+		var resizeButton = $(this);
+		var container = resizeButton.parent();
+		var parent = container.parent();
+		var overlayLabels = parent.find(".overlay-label");
+		var description = parent.children(".description");
+		var controls = description.children(".controls");
+
+		container.toggleClass("fullsize");
+		resizeButton.toggleClass("checked");
+
+		var offset = parseFloat(overlayLabels.css("bottom"));
+		description.toggleClass("fullsize");
+		if (description.hasClass("fullsize")) {
+			overlayLabels.css("bottom", offset * 1.666);
+		} else {
+			resizeSliders();
+			overlayLabels.css("bottom", offset / 1.666);
+		}
+		setTimeout(function() {
+			windowResized();
+		}, 500);
+	});
+
+	$(".checkbox-overlay").change(function () {
+		$(this).closest(".demo").find(".overlay").toggleClass("overlay-hide");
+	});
+});

Some files were not shown because too many files changed in this diff