diff --git a/apps/module-ts/.gitignore b/apps/module-ts/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/apps/module-ts/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/apps/module-ts/index.html b/apps/module-ts/index.html new file mode 100644 index 0000000..44a9335 --- /dev/null +++ b/apps/module-ts/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + TS + + +
+ + + diff --git a/apps/module-ts/package.json b/apps/module-ts/package.json new file mode 100644 index 0000000..3e8c995 --- /dev/null +++ b/apps/module-ts/package.json @@ -0,0 +1,15 @@ +{ + "name": "module-ts", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "devDependencies": { + "typescript": "~5.7.2", + "vite": "^6.2.0" + } +} diff --git a/apps/module-ts/public/vite.svg b/apps/module-ts/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/apps/module-ts/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/module-ts/src/counter.ts b/apps/module-ts/src/counter.ts new file mode 100644 index 0000000..09e5afd --- /dev/null +++ b/apps/module-ts/src/counter.ts @@ -0,0 +1,9 @@ +export function setupCounter(element: HTMLButtonElement) { + let counter = 0 + const setCounter = (count: number) => { + counter = count + element.innerHTML = `count is ${counter}` + } + element.addEventListener('click', () => setCounter(counter + 1)) + setCounter(0) +} diff --git a/apps/module-ts/src/main.ts b/apps/module-ts/src/main.ts new file mode 100644 index 0000000..6396b50 --- /dev/null +++ b/apps/module-ts/src/main.ts @@ -0,0 +1,24 @@ +import './style.css' +import typescriptLogo from './typescript.svg' +import viteLogo from '/vite.svg' +import { setupCounter } from './counter.ts' + +document.querySelector('#app')!.innerHTML = ` +
+ + + + + + +

Vite + TypeScript

+
+ +
+

+ Click on the Vite and TypeScript logos to learn more +

+
+` + +setupCounter(document.querySelector('#counter')!) diff --git a/apps/module-ts/src/spine-ts/LICENSE b/apps/module-ts/src/spine-ts/LICENSE new file mode 100755 index 0000000..4501a61 --- /dev/null +++ b/apps/module-ts/src/spine-ts/LICENSE @@ -0,0 +1,26 @@ +Spine Runtimes License Agreement +Last updated May 1, 2019. Replaces all prior versions. + +Copyright (c) 2013-2019, Esoteric Software LLC + +Integration of the Spine Runtimes into software or otherwise creating +derivative works of the Spine Runtimes is permitted under the terms and +conditions of Section 2 of the Spine Editor License Agreement: +http://esotericsoftware.com/spine-editor-license + +Otherwise, it is permitted to integrate the Spine Runtimes into software +or otherwise create derivative works of the Spine Runtimes (collectively, +"Products"), provided that each user of the Products must obtain their own +Spine Editor license and redistribution of the Products in any form must +include this license and copyright notice. + +THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN +NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS +INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/README.md b/apps/module-ts/src/spine-ts/README.md new file mode 100755 index 0000000..fe04045 --- /dev/null +++ b/apps/module-ts/src/spine-ts/README.md @@ -0,0 +1,144 @@ +# spine-ts + +The spine-ts runtime provides functionality to load and manipulate [Spine](http://esotericsoftware.com) skeletal animation data using TypeScript and JavaScript. spine-ts is split +up into multiple modules: + +1. **Core**: `core/`, the core classes to load and process Spine skeletons. +1. **WebGL**: `webgl/`, a self-contained WebGL backend, built on the core classes. +1. **Canvas**: `canvas/`, a self-contained Canvas backend, built on the core classes. +1. **THREE.JS**: `threejs/`, a self-contained THREE.JS backend, built on the core classes. +1. **Player**: `player/`, a self-contained player to easily display Spine animations on your website, built on core the classes and WebGL backend. + +While the source code for the core library and backends is written in TypeScript, all code is compiled to JavaScript. + +## Licensing + +You are welcome to evaluate the Spine Runtimes and the examples we provide in this repository free of charge. + +You can integrate the Spine Runtimes into your software free of charge, but users of your software must have their own [Spine license](https://esotericsoftware.com/spine-purchase). Please make your users aware of this requirement! This option is often chosen by those making development tools, such as an SDK, game toolkit, or software library. + +In order to distribute your software containing the Spine Runtimes to others that don't have a Spine license, you need a [Spine license](https://esotericsoftware.com/spine-purchase) at the time of integration. Then you can distribute your software containing the Spine Runtimes however you like, provided others don't modify it or use it to create new software. If others want to do that, they'll need their own Spine license. + +For the official legal terms governing the Spine Runtimes, please read the [Spine Runtimes License Agreement](http://esotericsoftware.com/spine-runtimes-license) and Section 2 of the [Spine Editor License Agreement](http://esotericsoftware.com/spine-editor-license#s2). + +## Spine version + +spine-ts works with data exported from Spine 3.8.xx. + +The spine-ts WebGL and Player backends support all Spine features. + +spine-ts Canvas does not support white space stripped texture atlases, color tinting, mesh attachments, or clipping. Only the alpha channel from tint colors is applied. Experimental support for mesh attachments can be enabled by setting `spine.canvas.SkeletonRenderer.useTriangleRendering` to true. Note that this experimental mesh rendering is slow and may lead to artifacts on some browsers. + +spine-ts THREE.JS does not support two color tinting or blend modes. The THREE.JS backend provides `SkeletonMesh.zOffset` to avoid z-fighting. Adjust to your near/far plane settings. + +## Usage + +1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it as a zip via the download button above. +2. To use only the core library without rendering support, include the `build/spine-core.js` file in your project. +3. To use the WebGL backend, include the `build/spine-webgl.js` file in your project. +3. To use the Canvas backend, include the `build/spine-canvas.js` file in your project. +4. To use the Player, include `build/spine-player.js` and `player/css/spine-player.css` file in your project. +5. To use the THREE.JS backend, include the `build/spine-threejs.js` file in your project. THREE.JS must be loaded first. + +All `*.js` files are self-contained and include both the core and respective backend classes. + +If you write your app with TypeScript, additionally copy the corresponding `build/spine-*.d.ts` file into your project. + +**Note:** If you are using the compiled `.js` files with ES6 or other module systems, you need to add: + +``` +export { spine }; +``` + +At the bottom of the `.js` file you are using. You can then import the module as usual, for example: + +``` +import { spine } from './spine-webgl.js'; +``` + +## Examples + +To run the various examples found in each of the spine-ts backend folders, the image, atlas, and JSON files must be served by a webserver. For security reasons browsers will not load these files from your local disk. To work around this, you can spawn a lightweight web server in the spine-ts folder, then navigate to the `index.html` file for the example you want to view. For example: + +``` +cd spine-ts +python -m SimpleHTTPServer // for Python 2 +python -m http.server // for Python 3 +``` + +Then open `http://localhost:8000/webgl/example`, `http://localhost:8000/canvas/example`, `https://localhost:8000/threejs/example`, or `http://localhost:8000/player/example` in your browser. + +### WebGL demos + +The spine-ts WebGL demos can be viewed [all on one page](http://esotericsoftware.com/spine-demos/) or in individual, standalone pages which are easy for you to explore and edit. See the [standalone demos source code](webgl/demos) and view the pages here: + +- [Spine vs sprite sheets](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/demos/spritesheets.html) +- [Image changes](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/demos/imagechanges.html) +- [Transitions](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/demos/transitions.html) +- [Meshes](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/demos/meshes.html) +- [Skins](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/demos/skins.html) +- [Hoverboard](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/demos/hoverboard.html) +- [Vine](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/demos/vine.html) +- [Clipping](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/demos/clipping.html) +- [Stretchyman](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/demos/stretchyman.html) +- [Tank](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/demos/tank.html) +- [Transform constraints](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/demos/transforms.html) + +Please note that Chrome and possibly other browsers do not use the original CORS headers when loading cached resources. After the initial page load for a demo, you may need to forcefully refresh (hold `shift` and click refresh) or clear your browser cache. + +### WebGL examples + +The WebGL demos serve well as examples, showing various ways to use the APIs. We also provide a simple, self-contained example with UI to control the skeletons: + +- [WebGL example](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/example/index.html) + +A barebones example is also available. It doesn't use JQuery and shows the minimal code necessary to use spine-ts with WebGL to load and render a skeleton: + +- [WebGL barebones](http://rawgit.com/EsotericSoftware/spine-runtimes/3.8/spine-ts/webgl/example/barebones.html) + +## Development setup + +The spine-ts runtime and the various backends are implemented in TypeScript for greater maintainability and better tooling support. To setup a development environment, follow these steps: + +1. Install [NPM](https://nodejs.org/en/download/) and make sure it's available on the command line. +2. On the command line, Install the TypeScript compiler via `npm install -g typescript`. +3. Install [Visual Studio Code](https://code.visualstudio.com/). +4. On the command line, change into the `spine-ts` directory. +5. Install the offscreen types package via `npm install @types/offscreencanvas`. +5. Start the TypeScript compiler in watcher mode for the backend you want to work on: + * **Core**: `tsc -w -p tsconfig.core.json`, builds `core/src`, outputs `build/spine-core.js|d.ts|js.map`. + * **WebGL**: `tsc -w -p tsconfig.webgl.json`, builds `core/src` and `webgl/src`, outputs `build/spine-webgl.js|d.ts|js.map`. + * **Canvas**: `tsc -w -p tsconfig.canvas.json`, builds `core/src` and `canvas/src`, outputs `build/spine-canvas.js|d.ts|js.map`. + * **THREE.JS**: `tsc -w -p tsconfig.threejs.json`, builds `core/src` and `threejs/src`, outputs `build/spine-threejs.js|d.ts|js.map`. + * **Player**: `tsc -w -p tsconfig.player.json`, builds `core/src` and `player/src`, outputs `build/spine-player.js|d.ts|js.map`. +6. Open the `spine-ts` folder in Visual Studio Code. VS Code will use the `tsconfig.json` file to find all source files for your development pleasure. The actual JavaScript output is still created by the command line TypeScript compiler process from the previous step. + +Each backend contains an `example/` folder with an `index.html` file that demonstrates the respective backend. For development, we suggest to run a HTTP server in the root of `spine-ts`, for example: + +``` +cd spine-ts +python -m SimpleHTTPServer // for Python 2 +python -m http.server // for Python 3 +``` + +Then navigate to `http://localhost:8000/webgl/example`, `http://localhost:8000/canvas/example`, `http://localhost:8000/threejs/example`, or `http://localhost:8000/player/example`. + +### WebGL backend + +By default, the spine-ts WebGL backend supports two-color tinting. This requires more per vertex data to be submitted to the GPU and the fragment shader has to do a few more arithmetic operations. It has a neglible effect on performance, but you can disable two-color tinting like this: + +```javascript +// If you use SceneRenderer, disable two-color tinting via the last constructor argument. +var sceneRenderer = new spine.SceneRenderer(canvas, gl, false); + +// If you use SkeletonRenderer and PolygonBatcher directly, disable two-color +// tinting in the respective constructor and use the shader returned by +// Shader.newColoredTextured() instead of Shader.newTwoColoredTextured(). +var batcher = new spine.PolygonBatcher(gl, false); +var skeletonRenderer = new spine.SkeletonRenderer(gl, false); +var shader = Shader.newColoredTextured(); +``` + +### Using the Player + +Please see the documentation for the [Spine Web Player](https://esotericsoftware.com/spine-player). diff --git a/apps/module-ts/src/spine-ts/build.sh b/apps/module-ts/src/spine-ts/build.sh new file mode 100755 index 0000000..5c3b56a --- /dev/null +++ b/apps/module-ts/src/spine-ts/build.sh @@ -0,0 +1,28 @@ +#!/bin/sh +set -e + +if [ -z "$GITHUB_REF" ]; +then + BRANCH=$(git symbolic-ref --short -q HEAD) +else + BRANCH=${GITHUB_REF#refs/heads/} +fi + +echo "Building spine-ts $BRANCH artifacts" +npm install @types/offscreencanvas +tsc -p tsconfig.json +tsc -p tsconfig.core.json +tsc -p tsconfig.webgl.json +tsc -p tsconfig.canvas.json +tsc -p tsconfig.threejs.json +tsc -p tsconfig.player.json +ls build/*.js build/*.ts | awk '{print "unexpand -t 4 ", $0, " > /tmp/e; mv /tmp/e ", $0}' | sh + +if ! [ -z "$TS_UPDATE_URL" ] && ! [ -z "$BRANCH" ]; +then + echo "Deploying spine-ts $BRANCH artifacts" + zip -j spine-ts.zip build/* player/css/spine-player.css player/example/external/* + curl -F "file=@spine-ts.zip" "$TS_UPDATE_URL$BRANCH" +else + echo "Not deploying artifacts. TS_UPDATE_URL and/or BRANCH not set." +fi \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-all.d.ts b/apps/module-ts/src/spine-ts/build/spine-all.d.ts new file mode 100755 index 0000000..211c93f --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-all.d.ts @@ -0,0 +1,2002 @@ +/// +declare module spine { + class Animation { + name: string; + timelines: Array; + timelineIds: Array; + duration: number; + constructor(name: string, timelines: Array, duration: number); + hasTimeline(id: number): boolean; + apply(skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + static binarySearch(values: ArrayLike, target: number, step?: number): number; + static linearSearch(values: ArrayLike, target: number, step: number): number; + } + interface Timeline { + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + getPropertyId(): number; + } + enum MixBlend { + setup = 0, + first = 1, + replace = 2, + add = 3 + } + enum MixDirection { + mixIn = 0, + mixOut = 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, degrees: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, x: number, y: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ScaleTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ShearTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class AttachmentTimeline implements Timeline { + slotIndex: number; + frames: ArrayLike; + attachmentNames: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, attachmentName: string): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string): void; + } + class DeformTimeline extends CurveTimeline { + slotIndex: number; + attachment: VertexAttachment; + frames: ArrayLike; + frameVertices: Array>; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, vertices: ArrayLike): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class EventTimeline implements Timeline { + frames: ArrayLike; + events: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, event: Event): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class DrawOrderTimeline implements Timeline { + frames: ArrayLike; + drawOrders: Array>; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, drawOrder: Array): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class IkConstraintTimeline extends CurveTimeline { + static ENTRIES: number; + static PREV_TIME: number; + static PREV_MIX: number; + static PREV_SOFTNESS: number; + static PREV_BEND_DIRECTION: number; + static PREV_COMPRESS: number; + static PREV_STRETCH: number; + static MIX: number; + static SOFTNESS: number; + static BEND_DIRECTION: number; + static COMPRESS: number; + static STRETCH: number; + ikConstraintIndex: number; + frames: ArrayLike; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, mix: number, softness: number, bendDirection: number, compress: boolean, stretch: boolean): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, value: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class PathConstraintSpacingTimeline extends PathConstraintPositionTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, rotateMix: number, translateMix: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } +} +declare module spine { + class AnimationState { + static emptyAnimation: Animation; + static SUBSEQUENT: number; + static FIRST: number; + static HOLD_SUBSEQUENT: number; + static HOLD_FIRST: number; + static HOLD_MIX: number; + static SETUP: number; + static CURRENT: number; + data: AnimationStateData; + tracks: TrackEntry[]; + timeScale: number; + unkeyedState: number; + events: Event[]; + listeners: AnimationStateListener[]; + queue: EventQueue; + propertyIDs: IntSet; + animationsChanged: boolean; + trackEntryPool: Pool; + constructor(data: AnimationStateData); + update(delta: number): void; + updateMixingFrom(to: TrackEntry, delta: number): boolean; + apply(skeleton: Skeleton): boolean; + applyMixingFrom(to: TrackEntry, skeleton: Skeleton, blend: MixBlend): number; + applyAttachmentTimeline(timeline: AttachmentTimeline, skeleton: Skeleton, time: number, blend: MixBlend, attachments: boolean): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string, attachments: boolean): void; + applyRotateTimeline(timeline: Timeline, skeleton: Skeleton, time: number, alpha: number, blend: MixBlend, timelinesRotation: Array, 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; + computeHold(entry: TrackEntry): void; + getCurrent(trackIndex: number): TrackEntry; + addListener(listener: AnimationStateListener): void; + removeListener(listener: AnimationStateListener): void; + clearListeners(): void; + clearListenerNotifications(): void; + } + class TrackEntry { + animation: Animation; + next: TrackEntry; + mixingFrom: TrackEntry; + mixingTo: TrackEntry; + listener: AnimationStateListener; + trackIndex: number; + loop: boolean; + holdPrevious: 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; + mixBlend: MixBlend; + timelineMode: number[]; + timelineHoldMix: TrackEntry[]; + timelinesRotation: number[]; + reset(): void; + getAnimationTime(): number; + setAnimationLast(animationLast: number): void; + isComplete(): boolean; + resetRotationDirections(): void; + } + class EventQueue { + objects: Array; + 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 AnimationStateListener { + 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 AnimationStateAdapter implements AnimationStateListener { + 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; + 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; + private rawDataUris; + constructor(textureLoader: (image: HTMLImageElement) => any, pathPrefix?: string); + private downloadText; + private downloadBinary; + setRawDataURI(path: string, data: string): void; + loadBinary(path: string, success?: (path: string, binary: Uint8Array) => void, error?: (path: string, error: string) => void): void; + 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; + loadTextureAtlas(path: string, success?: (path: string, atlas: TextureAtlas) => 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; + } +} +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; + } +} +declare module spine { + 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; + c: number; + d: number; + worldY: number; + worldX: number; + sorted: boolean; + active: boolean; + constructor(data: BoneData, skeleton: Skeleton, parent: Bone); + isActive(): boolean; + 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; + skinRequired: boolean; + color: Color; + constructor(index: number, name: string, parent: BoneData); + } + enum TransformMode { + Normal = 0, + OnlyTranslation = 1, + NoRotationOrReflection = 2, + NoScale = 3, + NoScaleOrReflection = 4 + } +} +declare module spine { + abstract class ConstraintData { + name: string; + order: number; + skinRequired: boolean; + constructor(name: string, order: number, skinRequired: boolean); + } +} +declare module spine { + class Event { + data: EventData; + intValue: number; + floatValue: number; + stringValue: string; + time: number; + volume: number; + balance: number; + constructor(time: number, data: EventData); + } +} +declare module spine { + class EventData { + name: string; + intValue: number; + floatValue: number; + stringValue: string; + audioPath: string; + volume: number; + balance: number; + constructor(name: string); + } +} +declare module spine { + class IkConstraint implements Updatable { + data: IkConstraintData; + bones: Array; + target: Bone; + bendDirection: number; + compress: boolean; + stretch: boolean; + mix: number; + softness: number; + active: boolean; + constructor(data: IkConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + apply1(bone: Bone, targetX: number, targetY: number, compress: boolean, stretch: boolean, uniform: boolean, alpha: number): void; + apply2(parent: Bone, child: Bone, targetX: number, targetY: number, bendDir: number, stretch: boolean, softness: number, alpha: number): void; + } +} +declare module spine { + class IkConstraintData extends ConstraintData { + bones: BoneData[]; + target: BoneData; + bendDirection: number; + compress: boolean; + stretch: boolean; + uniform: boolean; + mix: number; + softness: number; + constructor(name: string); + } +} +declare module spine { + class PathConstraint implements Updatable { + static NONE: number; + static BEFORE: number; + static AFTER: number; + static epsilon: number; + data: PathConstraintData; + bones: Array; + target: Slot; + position: number; + spacing: number; + rotateMix: number; + translateMix: number; + spaces: number[]; + positions: number[]; + world: number[]; + curves: number[]; + lengths: number[]; + segments: number[]; + active: boolean; + constructor(data: PathConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + computeWorldPositions(path: PathAttachment, spacesCount: number, tangents: boolean, percentPosition: boolean, percentSpacing: boolean): number[]; + addBeforePosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addAfterPosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addCurvePosition(p: number, x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, out: Array, o: number, tangents: boolean): void; + } +} +declare module spine { + class PathConstraintData extends ConstraintData { + 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 + } +} +declare module spine { + class SharedAssetManager implements Disposable { + private pathPrefix; + private clientAssets; + private queuedAssets; + private rawAssets; + private errors; + constructor(pathPrefix?: string); + private queueAsset; + loadText(clientId: string, path: string): void; + loadJson(clientId: string, path: string): void; + loadTexture(clientId: string, textureLoader: (image: HTMLImageElement | ImageBitmap) => any, path: string): void; + get(clientId: string, path: string): any; + private updateClientAssets; + isLoadingComplete(clientId: string): boolean; + dispose(): void; + hasErrors(): boolean; + getErrors(): Map; + } +} +declare module spine { + class Skeleton { + data: SkeletonData; + bones: Array; + slots: Array; + drawOrder: Array; + ikConstraints: Array; + transformConstraints: Array; + pathConstraints: Array; + _updateCache: Updatable[]; + updateCacheReset: Updatable[]; + skin: Skin; + color: Color; + time: number; + scaleX: number; + scaleY: number; + 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): 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): void; + update(delta: number): void; + } +} +declare module spine { + class SkeletonBinary { + static AttachmentTypeValues: number[]; + static TransformModeValues: TransformMode[]; + static PositionModeValues: PositionMode[]; + static SpacingModeValues: SpacingMode[]; + static RotateModeValues: RotateMode[]; + static BlendModeValues: BlendMode[]; + static BONE_ROTATE: number; + static BONE_TRANSLATE: number; + static BONE_SCALE: number; + static BONE_SHEAR: number; + static SLOT_ATTACHMENT: number; + static SLOT_COLOR: number; + static SLOT_TWO_COLOR: number; + static PATH_POSITION: number; + static PATH_SPACING: number; + static PATH_MIX: number; + static CURVE_LINEAR: number; + static CURVE_STEPPED: number; + static CURVE_BEZIER: number; + scale: number; + attachmentLoader: AttachmentLoader; + private linkedMeshes; + constructor(attachmentLoader: AttachmentLoader); + readSkeletonData(binary: Uint8Array): SkeletonData; + private readSkin; + private readAttachment; + private readVertices; + private readFloatArray; + private readShortArray; + private readAnimation; + private readCurve; + setCurve(timeline: CurveTimeline, frameIndex: number, cx1: number, cy1: number, cx2: number, cy2: number): void; + } +} +declare module spine { + class SkeletonBounds { + minX: number; + minY: number; + maxX: number; + maxY: number; + boundingBoxes: BoundingBoxAttachment[]; + polygons: ArrayLike[]; + 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, x: number, y: number): boolean; + intersectsSegment(x1: number, y1: number, x2: number, y2: number): BoundingBoxAttachment; + intersectsSegmentPolygon(polygon: ArrayLike, x1: number, y1: number, x2: number, y2: number): boolean; + getPolygon(boundingBox: BoundingBoxAttachment): ArrayLike; + 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, verticesLength: number, triangles: ArrayLike, trianglesLength: number, uvs: ArrayLike, light: Color, dark: Color, twoColor: boolean): void; + clip(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, clippingArea: Array, output: Array): boolean; + static makeClockwise(polygon: ArrayLike): 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[]; + x: number; + y: number; + width: number; + height: number; + version: string; + hash: string; + fps: number; + imagesPath: string; + audioPath: 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; + } +} +declare module spine { + class SkinEntry { + slotIndex: number; + name: string; + attachment: Attachment; + constructor(slotIndex: number, name: string, attachment: Attachment); + } + class Skin { + name: string; + attachments: Map[]; + bones: BoneData[]; + constraints: ConstraintData[]; + constructor(name: string); + setAttachment(slotIndex: number, name: string, attachment: Attachment): void; + addSkin(skin: Skin): void; + copySkin(skin: Skin): void; + getAttachment(slotIndex: number, name: string): Attachment; + removeAttachment(slotIndex: number, name: string): void; + getAttachments(): Array; + getAttachmentsForSlot(slotIndex: number, attachments: Array): void; + clear(): void; + attachAll(skeleton: Skeleton, oldSkin: Skin): void; + } +} +declare module spine { + class Slot { + data: SlotData; + bone: Bone; + color: Color; + darkColor: Color; + attachment: Attachment; + private attachmentTime; + attachmentState: number; + deform: number[]; + constructor(data: SlotData, bone: Bone); + getSkeleton(): Skeleton; + 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); + } +} +declare module spine { + abstract class Texture { + protected _image: HTMLImageElement | ImageBitmap; + constructor(image: HTMLImageElement | ImageBitmap); + getImage(): HTMLImageElement | ImageBitmap; + 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; + } + class FakeTexture extends Texture { + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void; + dispose(): void; + } +} +declare module spine { + class TextureAtlas implements Disposable { + pages: TextureAtlasPage[]; + regions: TextureAtlasRegion[]; + constructor(atlasText: string, textureLoader: (path: string) => any); + private load; + 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; + degrees: number; + texture: Texture; + } +} +declare module spine { + class TransformConstraint implements Updatable { + data: TransformConstraintData; + bones: Array; + target: Bone; + rotateMix: number; + translateMix: number; + scaleMix: number; + shearMix: number; + temp: Vector2; + active: boolean; + constructor(data: TransformConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + applyAbsoluteWorld(): void; + applyRelativeWorld(): void; + applyAbsoluteLocal(): void; + applyRelativeLocal(): void; + } +} +declare module spine { + class TransformConstraintData extends ConstraintData { + 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): Array; + decompose(verticesArray: Array, triangles: Array): Array>; + private static isConcave; + private static positiveArea; + private static winding; + } +} +declare module spine { + interface Updatable { + update(): void; + isActive(): boolean; + } +} +declare module spine { + interface Map { + [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; + static rgba8888ToColor(color: Color, value: number): void; + static rgb888ToColor(color: Color, value: number): void; + } + 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(source: ArrayLike, sourceStart: number, dest: ArrayLike, destStart: number, numElements: number): void; + static setArraySize(array: Array, size: number, value?: any): Array; + static ensureArrayCapacity(array: Array, size: number, value?: any): Array; + static newArray(size: number, defaultValue: T): Array; + static newFloatArray(size: number): ArrayLike; + static newShortArray(size: number): ArrayLike; + static toFloatArray(array: Array): number[] | Float32Array; + static toSinglePrecision(value: number): number; + static webkit602BugfixHelper(alpha: number, blend: MixBlend): void; + static contains(array: Array, element: T, identity?: boolean): boolean; + } + class DebugUtils { + static logBones(skeleton: Skeleton): void; + } + class Pool { + private items; + private instantiator; + constructor(instantiator: () => T); + obtain(): T; + free(item: T): void; + freeAll(items: ArrayLike): 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 { + length: number; + [n: number]: T; + } + class WindowedMean { + values: Array; + 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 Math { + fround(n: number): number; +} +declare module spine { + abstract class Attachment { + name: string; + constructor(name: string); + abstract copy(): Attachment; + } + abstract class VertexAttachment extends Attachment { + private static nextID; + id: number; + bones: Array; + vertices: ArrayLike; + worldVerticesLength: number; + deformAttachment: VertexAttachment; + constructor(name: string); + computeWorldVertices(slot: Slot, start: number, count: number, worldVertices: ArrayLike, offset: number, stride: number): void; + copyTo(attachment: VertexAttachment): void; + } +} +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; + } +} +declare module spine { + enum AttachmentType { + Region = 0, + BoundingBox = 1, + Mesh = 2, + LinkedMesh = 3, + Path = 4, + Point = 5, + Clipping = 6 + } +} +declare module spine { + class BoundingBoxAttachment extends VertexAttachment { + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class ClippingAttachment extends VertexAttachment { + endSlot: SlotData; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class MeshAttachment extends VertexAttachment { + region: TextureRegion; + path: string; + regionUVs: ArrayLike; + uvs: ArrayLike; + triangles: Array; + color: Color; + width: number; + height: number; + hullLength: number; + edges: Array; + private parentMesh; + tempColor: Color; + constructor(name: string); + updateUVs(): void; + getParentMesh(): MeshAttachment; + setParentMesh(parentMesh: MeshAttachment): void; + copy(): Attachment; + newLinkedMesh(): MeshAttachment; + } +} +declare module spine { + class PathAttachment extends VertexAttachment { + lengths: Array; + closed: boolean; + constantSpeed: boolean; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +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; + copy(): Attachment; + } +} +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; + uvs: ArrayLike; + tempColor: Color; + constructor(name: string); + updateOffset(): void; + setRegion(region: TextureRegion): void; + computeWorldVertices(bone: Bone, worldVertices: ArrayLike, offset: number, stride: number): void; + copy(): Attachment; + } +} +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; + } +} +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; + } +} +declare module spine.canvas { + class AssetManager extends spine.AssetManager { + constructor(pathPrefix?: string); + } +} +declare module spine.canvas { + class CanvasTexture extends Texture { + constructor(image: HTMLImageElement); + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void; + dispose(): void; + } +} +declare module spine.canvas { + class SkeletonRenderer { + static QUAD_TRIANGLES: number[]; + static VERTEX_SIZE: number; + private ctx; + triangleRendering: boolean; + debugRendering: boolean; + private vertices; + private tempColor; + constructor(context: CanvasRenderingContext2D); + draw(skeleton: Skeleton): void; + private drawImages; + private drawTriangles; + private drawTriangle; + private computeRegionVertices; + private computeMeshVertices; + } +} +declare module spine.webgl { + 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; + } +} +declare module spine.webgl { + class GLTexture extends Texture implements Disposable, Restorable { + private context; + private texture; + private boundUnit; + private useMipMaps; + static DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL: boolean; + constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, image: HTMLImageElement | ImageBitmap, useMipMaps?: boolean); + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + static validateMagFilter(magFilter: TextureFilter): TextureFilter.Nearest | TextureFilter.Linear; + 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; + private listeners; + constructor(element: HTMLElement); + private setupCallbacks; + 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; + } +} +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): 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): void; + setIndices(indices: Array): 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, indices: Array): 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; + skeletonRenderer: SkeletonRenderer; + skeletonDebugRenderer: SkeletonDebugRenderer; + private QUAD; + private QUAD_TRIANGLES; + private WHITE; + constructor(canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean); + begin(): void; + drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean, slotRangeStart?: number, slotRangeEnd?: number): void; + drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array): void; + drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void; + drawTextureUV(texture: GLTexture, x: number, y: number, width: number, height: number, u: number, v: number, u2: number, v2: 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, 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; + 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 vsSource; + private fs; + private fsSource; + private program; + private tmp2x2; + private tmp3x3; + private tmp4x4; + getProgram(): WebGLProgram; + getVertexShader(): string; + getFragmentShader(): string; + getVertexShaderSource(): string; + getFragmentSource(): string; + constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, vertexShader: string, fragmentShader: string); + private compile; + private compileShader; + private compileProgram; + 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): void; + setUniform3x3f(uniform: string, value: ArrayLike): void; + setUniform4x4f(uniform: string, value: ArrayLike): 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, 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; + end(): void; + private flush; + private check; + 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): 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, slotRangeStart?: number, slotRangeEnd?: number): 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; + } +} +declare module spine.webgl { + class ManagedWebGLRenderingContext { + canvas: HTMLCanvasElement | OffscreenCanvas; + gl: WebGLRenderingContext; + private restorables; + constructor(canvasOrContext: HTMLCanvasElement | WebGLRenderingContext | EventTarget | WebGL2RenderingContext, contextConfig?: any); + private setupCanvas; + 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; + } +} +declare module spine.threejs { + class AssetManager extends spine.AssetManager { + constructor(pathPrefix?: string); + } +} +declare module spine.threejs { + class MeshBatcher extends THREE.Mesh { + private static VERTEX_SIZE; + private vertexBuffer; + private vertices; + private verticesLength; + private indices; + private indicesLength; + constructor(maxVertices?: number, materialCustomizer?: SkeletonMeshMaterialParametersCustomizer); + dispose(): void; + clear(): void; + begin(): void; + canBatch(verticesLength: number, indicesLength: number): boolean; + batch(vertices: ArrayLike, verticesLength: number, indices: ArrayLike, indicesLength: number, z?: number): void; + end(): void; + } +} +declare module spine.threejs { + interface SkeletonMeshMaterialParametersCustomizer { + (materialParameters: THREE.ShaderMaterialParameters): void; + } + class SkeletonMeshMaterial extends THREE.ShaderMaterial { + constructor(customizer: SkeletonMeshMaterialParametersCustomizer); + } + class SkeletonMesh extends THREE.Object3D { + tempPos: Vector2; + tempUv: Vector2; + tempLight: Color; + tempDark: Color; + skeleton: Skeleton; + state: AnimationState; + zOffset: number; + vertexEffect: VertexEffect; + private batches; + private nextBatchIndex; + private clipper; + static QUAD_TRIANGLES: number[]; + static VERTEX_SIZE: number; + private vertices; + private tempColor; + private materialCustomizer; + constructor(skeletonData: SkeletonData, materialCustomizer?: SkeletonMeshMaterialParametersCustomizer); + update(deltaTime: number): void; + dispose(): void; + private clearBatches; + private nextBatch; + private updateGeometry; + } +} +declare module spine.threejs { + class ThreeJsTexture extends Texture { + texture: THREE.Texture; + constructor(image: HTMLImageElement); + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void; + dispose(): void; + static toThreeJsTextureFilter(filter: TextureFilter): THREE.TextureFilter; + static toThreeJsTextureWrap(wrap: TextureWrap): THREE.Wrapping; + } +} +declare module spine { + interface Viewport { + x: number; + y: number; + width: number; + height: number; + padLeft: string | number; + padRight: string | number; + padTop: string | number; + padBottom: string | number; + } + interface SpinePlayerConfig { + jsonUrl: string; + skelUrl: string; + atlasUrl: string; + rawDataURIs: Map; + animation: string; + animations: string[]; + defaultMix: number; + skin: string; + skins: string[]; + premultipliedAlpha: boolean; + showControls: boolean; + debug: { + bones: boolean; + regions: boolean; + meshes: boolean; + bounds: boolean; + paths: boolean; + clipping: boolean; + points: boolean; + hulls: boolean; + }; + viewport: { + x: number; + y: number; + width: number; + height: number; + padLeft: string | number; + padRight: string | number; + padTop: string | number; + padBottom: string | number; + animations: Map; + debugRender: boolean; + transitionTime: number; + }; + alpha: boolean; + backgroundColor: string; + backgroundImage: { + url: string; + x: number; + y: number; + width: number; + height: number; + }; + fullScreenBackgroundColor: string; + controlBones: string[]; + success: (widget: SpinePlayer) => void; + error: (widget: SpinePlayer, msg: string) => void; + } + class SpinePlayer { + private config; + static HOVER_COLOR_INNER: Color; + static HOVER_COLOR_OUTER: Color; + static NON_HOVER_COLOR_INNER: Color; + static NON_HOVER_COLOR_OUTER: Color; + private sceneRenderer; + private dom; + private playerControls; + private canvas; + private timelineSlider; + private playButton; + private skinButton; + private animationButton; + private context; + private loadingScreen; + private assetManager; + loaded: boolean; + skeleton: Skeleton; + animationState: AnimationState; + private paused; + private playTime; + private speed; + private time; + private animationViewports; + private currentViewport; + private previousViewport; + private viewportTransitionStart; + private selectedBones; + private parent; + private stopRequestAnimationFrame; + constructor(parent: HTMLElement | string, config: SpinePlayerConfig); + validateConfig(config: SpinePlayerConfig): SpinePlayerConfig; + showError(error: string): void; + render(): HTMLElement; + private lastPopup; + showSpeedDialog(speedButton: HTMLElement): void; + showAnimationsDialog(animationsButton: HTMLElement): void; + showSkinsDialog(skinButton: HTMLElement): void; + showSettingsDialog(settingsButton: HTMLElement): void; + drawFrame(requestNextFrame?: boolean): void; + scale(sourceWidth: number, sourceHeight: number, targetWidth: number, targetHeight: number): Vector2; + loadSkeleton(): void; + private cancelId; + setupInput(): void; + private play; + private pause; + setAnimation(animation: string, loop?: boolean): void; + private percentageToWorldUnit; + private calculateAnimationViewport; + stopRendering(): void; + } +} +declare function CodeMirror(el: Element, config: any): void; +declare module spine { + class SpinePlayerEditor { + private static DEFAULT_CODE; + private prefix; + private postfix; + private code; + private player; + constructor(parent: HTMLElement); + private render; + setPreAndPostfix(prefix: string, postfix: string): void; + setCode(code: string): void; + private timerId; + startPlayer(): void; + } +} diff --git a/apps/module-ts/src/spine-ts/build/spine-all.js b/apps/module-ts/src/spine-ts/build/spine-all.js new file mode 100755 index 0000000..1178df8 --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-all.js @@ -0,0 +1,12601 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var spine; +(function (spine) { + var Animation = (function () { + function Animation(name, timelines, duration) { + if (name == null) + throw new Error("name cannot be null."); + if (timelines == null) + throw new Error("timelines cannot be null."); + this.name = name; + this.timelines = timelines; + this.timelineIds = []; + for (var i = 0; i < timelines.length; i++) + this.timelineIds[timelines[i].getPropertyId()] = true; + this.duration = duration; + } + Animation.prototype.hasTimeline = function (id) { + return this.timelineIds[id] == true; + }; + Animation.prototype.apply = function (skeleton, lastTime, time, loop, events, alpha, blend, direction) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (loop && this.duration != 0) { + time %= this.duration; + if (lastTime > 0) + lastTime %= this.duration; + } + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction); + }; + Animation.binarySearch = function (values, target, step) { + if (step === void 0) { step = 1; } + var low = 0; + var high = values.length / step - 2; + if (high == 0) + return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) + return (low + 1) * step; + current = (low + high) >>> 1; + } + }; + Animation.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) + return i; + return -1; + }; + return Animation; + }()); + spine.Animation = Animation; + var MixBlend; + (function (MixBlend) { + MixBlend[MixBlend["setup"] = 0] = "setup"; + MixBlend[MixBlend["first"] = 1] = "first"; + MixBlend[MixBlend["replace"] = 2] = "replace"; + MixBlend[MixBlend["add"] = 3] = "add"; + })(MixBlend = spine.MixBlend || (spine.MixBlend = {})); + var MixDirection; + (function (MixDirection) { + MixDirection[MixDirection["mixIn"] = 0] = "mixIn"; + MixDirection[MixDirection["mixOut"] = 1] = "mixOut"; + })(MixDirection = spine.MixDirection || (spine.MixDirection = {})); + var TimelineType; + (function (TimelineType) { + TimelineType[TimelineType["rotate"] = 0] = "rotate"; + TimelineType[TimelineType["translate"] = 1] = "translate"; + TimelineType[TimelineType["scale"] = 2] = "scale"; + TimelineType[TimelineType["shear"] = 3] = "shear"; + TimelineType[TimelineType["attachment"] = 4] = "attachment"; + TimelineType[TimelineType["color"] = 5] = "color"; + TimelineType[TimelineType["deform"] = 6] = "deform"; + TimelineType[TimelineType["event"] = 7] = "event"; + TimelineType[TimelineType["drawOrder"] = 8] = "drawOrder"; + TimelineType[TimelineType["ikConstraint"] = 9] = "ikConstraint"; + TimelineType[TimelineType["transformConstraint"] = 10] = "transformConstraint"; + TimelineType[TimelineType["pathConstraintPosition"] = 11] = "pathConstraintPosition"; + TimelineType[TimelineType["pathConstraintSpacing"] = 12] = "pathConstraintSpacing"; + TimelineType[TimelineType["pathConstraintMix"] = 13] = "pathConstraintMix"; + TimelineType[TimelineType["twoColor"] = 14] = "twoColor"; + })(TimelineType = spine.TimelineType || (spine.TimelineType = {})); + var CurveTimeline = (function () { + function CurveTimeline(frameCount) { + if (frameCount <= 0) + throw new Error("frameCount must be > 0: " + frameCount); + this.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE); + } + CurveTimeline.prototype.getFrameCount = function () { + return this.curves.length / CurveTimeline.BEZIER_SIZE + 1; + }; + CurveTimeline.prototype.setLinear = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR; + }; + CurveTimeline.prototype.setStepped = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED; + }; + CurveTimeline.prototype.getCurveType = function (frameIndex) { + var index = frameIndex * CurveTimeline.BEZIER_SIZE; + if (index == this.curves.length) + return CurveTimeline.LINEAR; + var type = this.curves[index]; + if (type == CurveTimeline.LINEAR) + return CurveTimeline.LINEAR; + if (type == CurveTimeline.STEPPED) + return CurveTimeline.STEPPED; + return CurveTimeline.BEZIER; + }; + CurveTimeline.prototype.setCurve = function (frameIndex, cx1, cy1, cx2, cy2) { + var tmpx = (-cx1 * 2 + cx2) * 0.03, tmpy = (-cy1 * 2 + cy2) * 0.03; + var dddfx = ((cx1 - cx2) * 3 + 1) * 0.006, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006; + var ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy; + var dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667, dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var curves = this.curves; + curves[i++] = CurveTimeline.BEZIER; + var x = dfx, y = dfy; + for (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + }; + CurveTimeline.prototype.getCurvePercent = function (frameIndex, percent) { + percent = spine.MathUtils.clamp(percent, 0, 1); + var curves = this.curves; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var type = curves[i]; + if (type == CurveTimeline.LINEAR) + return percent; + if (type == CurveTimeline.STEPPED) + return 0; + i++; + var x = 0; + for (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + x = curves[i]; + if (x >= percent) { + var prevX = void 0, prevY = void 0; + if (i == start) { + prevX = 0; + prevY = 0; + } + else { + prevX = curves[i - 2]; + prevY = curves[i - 1]; + } + return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX); + } + } + var y = curves[i - 1]; + return y + (1 - y) * (percent - x) / (1 - x); + }; + CurveTimeline.LINEAR = 0; + CurveTimeline.STEPPED = 1; + CurveTimeline.BEZIER = 2; + CurveTimeline.BEZIER_SIZE = 10 * 2 - 1; + return CurveTimeline; + }()); + spine.CurveTimeline = CurveTimeline; + var RotateTimeline = (function (_super) { + __extends(RotateTimeline, _super); + function RotateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount << 1); + return _this; + } + RotateTimeline.prototype.getPropertyId = function () { + return (TimelineType.rotate << 24) + this.boneIndex; + }; + RotateTimeline.prototype.setFrame = function (frameIndex, time, degrees) { + frameIndex <<= 1; + this.frames[frameIndex] = time; + this.frames[frameIndex + RotateTimeline.ROTATION] = degrees; + }; + RotateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + return; + case MixBlend.first: + var r_1 = bone.data.rotation - bone.rotation; + bone.rotation += (r_1 - (16384 - ((16384.499999999996 - r_1 / 360) | 0)) * 360) * alpha; + } + return; + } + if (time >= frames[frames.length - RotateTimeline.ENTRIES]) { + var r_2 = frames[frames.length + RotateTimeline.PREV_ROTATION]; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + r_2 * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r_2 += bone.data.rotation - bone.rotation; + r_2 -= (16384 - ((16384.499999999996 - r_2 / 360) | 0)) * 360; + case MixBlend.add: + bone.rotation += r_2 * alpha; + } + return; + } + var frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES); + var prevRotation = frames[frame + RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime)); + var r = frames[frame + RotateTimeline.ROTATION] - prevRotation; + r = prevRotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * percent; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r += bone.data.rotation - bone.rotation; + case MixBlend.add: + bone.rotation += (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + } + }; + RotateTimeline.ENTRIES = 2; + RotateTimeline.PREV_TIME = -2; + RotateTimeline.PREV_ROTATION = -1; + RotateTimeline.ROTATION = 1; + return RotateTimeline; + }(CurveTimeline)); + spine.RotateTimeline = RotateTimeline; + var TranslateTimeline = (function (_super) { + __extends(TranslateTimeline, _super); + function TranslateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES); + return _this; + } + TranslateTimeline.prototype.getPropertyId = function () { + return (TimelineType.translate << 24) + this.boneIndex; + }; + TranslateTimeline.prototype.setFrame = function (frameIndex, time, x, y) { + frameIndex *= TranslateTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TranslateTimeline.X] = x; + this.frames[frameIndex + TranslateTimeline.Y] = y; + }; + TranslateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + bone.y = bone.data.y; + return; + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) { + x = frames[frames.length + TranslateTimeline.PREV_X]; + y = frames[frames.length + TranslateTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES); + x = frames[frame + TranslateTimeline.PREV_X]; + y = frames[frame + TranslateTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime)); + x += (frames[frame + TranslateTimeline.X] - x) * percent; + y += (frames[frame + TranslateTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + bone.y = bone.data.y + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + bone.y += (bone.data.y + y - bone.y) * alpha; + break; + case MixBlend.add: + bone.x += x * alpha; + bone.y += y * alpha; + } + }; + TranslateTimeline.ENTRIES = 3; + TranslateTimeline.PREV_TIME = -3; + TranslateTimeline.PREV_X = -2; + TranslateTimeline.PREV_Y = -1; + TranslateTimeline.X = 1; + TranslateTimeline.Y = 2; + return TranslateTimeline; + }(CurveTimeline)); + spine.TranslateTimeline = TranslateTimeline; + var ScaleTimeline = (function (_super) { + __extends(ScaleTimeline, _super); + function ScaleTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ScaleTimeline.prototype.getPropertyId = function () { + return (TimelineType.scale << 24) + this.boneIndex; + }; + ScaleTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + bone.scaleY = bone.data.scaleY; + return; + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) { + x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX; + y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY; + } + else { + var frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES); + x = frames[frame + ScaleTimeline.PREV_X]; + y = frames[frame + ScaleTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime)); + x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX; + y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY; + } + if (alpha == 1) { + if (blend == MixBlend.add) { + bone.scaleX += x - bone.data.scaleX; + bone.scaleY += y - bone.data.scaleY; + } + else { + bone.scaleX = x; + bone.scaleY = y; + } + } + else { + var bx = 0, by = 0; + if (direction == MixDirection.mixOut) { + switch (blend) { + case MixBlend.setup: + bx = bone.data.scaleX; + by = bone.data.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.add: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bone.data.scaleX) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - bone.data.scaleY) * alpha; + } + } + else { + switch (blend) { + case MixBlend.setup: + bx = Math.abs(bone.data.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.data.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = Math.abs(bone.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.add: + bx = spine.MathUtils.signum(x); + by = spine.MathUtils.signum(y); + bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha; + bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha; + } + } + } + }; + return ScaleTimeline; + }(TranslateTimeline)); + spine.ScaleTimeline = ScaleTimeline; + var ShearTimeline = (function (_super) { + __extends(ShearTimeline, _super); + function ShearTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ShearTimeline.prototype.getPropertyId = function () { + return (TimelineType.shear << 24) + this.boneIndex; + }; + ShearTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + bone.shearY = bone.data.shearY; + return; + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ShearTimeline.ENTRIES]) { + x = frames[frames.length + ShearTimeline.PREV_X]; + y = frames[frames.length + ShearTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES); + x = frames[frame + ShearTimeline.PREV_X]; + y = frames[frame + ShearTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime)); + x = x + (frames[frame + ShearTimeline.X] - x) * percent; + y = y + (frames[frame + ShearTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + bone.shearY = bone.data.shearY + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + break; + case MixBlend.add: + bone.shearX += x * alpha; + bone.shearY += y * alpha; + } + }; + return ShearTimeline; + }(TranslateTimeline)); + spine.ShearTimeline = ShearTimeline; + var ColorTimeline = (function (_super) { + __extends(ColorTimeline, _super); + function ColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES); + return _this; + } + ColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.color << 24) + this.slotIndex; + }; + ColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a) { + frameIndex *= ColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + ColorTimeline.R] = r; + this.frames[frameIndex + ColorTimeline.G] = g; + this.frames[frameIndex + ColorTimeline.B] = b; + this.frames[frameIndex + ColorTimeline.A] = a; + }; + ColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + return; + case MixBlend.first: + var color = slot.color, setup = slot.data.color; + color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha); + } + return; + } + var r = 0, g = 0, b = 0, a = 0; + if (time >= frames[frames.length - ColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + ColorTimeline.PREV_R]; + g = frames[i + ColorTimeline.PREV_G]; + b = frames[i + ColorTimeline.PREV_B]; + a = frames[i + ColorTimeline.PREV_A]; + } + else { + var frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES); + r = frames[frame + ColorTimeline.PREV_R]; + g = frames[frame + ColorTimeline.PREV_G]; + b = frames[frame + ColorTimeline.PREV_B]; + a = frames[frame + ColorTimeline.PREV_A]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + ColorTimeline.R] - r) * percent; + g += (frames[frame + ColorTimeline.G] - g) * percent; + b += (frames[frame + ColorTimeline.B] - b) * percent; + a += (frames[frame + ColorTimeline.A] - a) * percent; + } + if (alpha == 1) + slot.color.set(r, g, b, a); + else { + var color = slot.color; + if (blend == MixBlend.setup) + color.setFromColor(slot.data.color); + color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha); + } + }; + ColorTimeline.ENTRIES = 5; + ColorTimeline.PREV_TIME = -5; + ColorTimeline.PREV_R = -4; + ColorTimeline.PREV_G = -3; + ColorTimeline.PREV_B = -2; + ColorTimeline.PREV_A = -1; + ColorTimeline.R = 1; + ColorTimeline.G = 2; + ColorTimeline.B = 3; + ColorTimeline.A = 4; + return ColorTimeline; + }(CurveTimeline)); + spine.ColorTimeline = ColorTimeline; + var TwoColorTimeline = (function (_super) { + __extends(TwoColorTimeline, _super); + function TwoColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES); + return _this; + } + TwoColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.twoColor << 24) + this.slotIndex; + }; + TwoColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a, r2, g2, b2) { + frameIndex *= TwoColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TwoColorTimeline.R] = r; + this.frames[frameIndex + TwoColorTimeline.G] = g; + this.frames[frameIndex + TwoColorTimeline.B] = b; + this.frames[frameIndex + TwoColorTimeline.A] = a; + this.frames[frameIndex + TwoColorTimeline.R2] = r2; + this.frames[frameIndex + TwoColorTimeline.G2] = g2; + this.frames[frameIndex + TwoColorTimeline.B2] = b2; + }; + TwoColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + slot.darkColor.setFromColor(slot.data.darkColor); + return; + case MixBlend.first: + var light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor; + light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha); + dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0); + } + return; + } + var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; + if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + TwoColorTimeline.PREV_R]; + g = frames[i + TwoColorTimeline.PREV_G]; + b = frames[i + TwoColorTimeline.PREV_B]; + a = frames[i + TwoColorTimeline.PREV_A]; + r2 = frames[i + TwoColorTimeline.PREV_R2]; + g2 = frames[i + TwoColorTimeline.PREV_G2]; + b2 = frames[i + TwoColorTimeline.PREV_B2]; + } + else { + var frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES); + r = frames[frame + TwoColorTimeline.PREV_R]; + g = frames[frame + TwoColorTimeline.PREV_G]; + b = frames[frame + TwoColorTimeline.PREV_B]; + a = frames[frame + TwoColorTimeline.PREV_A]; + r2 = frames[frame + TwoColorTimeline.PREV_R2]; + g2 = frames[frame + TwoColorTimeline.PREV_G2]; + b2 = frames[frame + TwoColorTimeline.PREV_B2]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + TwoColorTimeline.R] - r) * percent; + g += (frames[frame + TwoColorTimeline.G] - g) * percent; + b += (frames[frame + TwoColorTimeline.B] - b) * percent; + a += (frames[frame + TwoColorTimeline.A] - a) * percent; + r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent; + g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent; + b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent; + } + if (alpha == 1) { + slot.color.set(r, g, b, a); + slot.darkColor.set(r2, g2, b2, 1); + } + else { + var light = slot.color, dark = slot.darkColor; + if (blend == MixBlend.setup) { + light.setFromColor(slot.data.color); + dark.setFromColor(slot.data.darkColor); + } + light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha); + dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0); + } + }; + TwoColorTimeline.ENTRIES = 8; + TwoColorTimeline.PREV_TIME = -8; + TwoColorTimeline.PREV_R = -7; + TwoColorTimeline.PREV_G = -6; + TwoColorTimeline.PREV_B = -5; + TwoColorTimeline.PREV_A = -4; + TwoColorTimeline.PREV_R2 = -3; + TwoColorTimeline.PREV_G2 = -2; + TwoColorTimeline.PREV_B2 = -1; + TwoColorTimeline.R = 1; + TwoColorTimeline.G = 2; + TwoColorTimeline.B = 3; + TwoColorTimeline.A = 4; + TwoColorTimeline.R2 = 5; + TwoColorTimeline.G2 = 6; + TwoColorTimeline.B2 = 7; + return TwoColorTimeline; + }(CurveTimeline)); + spine.TwoColorTimeline = TwoColorTimeline; + var AttachmentTimeline = (function () { + function AttachmentTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.attachmentNames = new Array(frameCount); + } + AttachmentTimeline.prototype.getPropertyId = function () { + return (TimelineType.attachment << 24) + this.slotIndex; + }; + AttachmentTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + AttachmentTimeline.prototype.setFrame = function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }; + AttachmentTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frameIndex = 0; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = Animation.binarySearch(frames, time, 1) - 1; + var attachmentName = this.attachmentNames[frameIndex]; + skeleton.slots[this.slotIndex] + .setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + AttachmentTimeline.prototype.setAttachment = function (skeleton, slot, attachmentName) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + return AttachmentTimeline; + }()); + spine.AttachmentTimeline = AttachmentTimeline; + var zeros = null; + var DeformTimeline = (function (_super) { + __extends(DeformTimeline, _super); + function DeformTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount); + _this.frameVertices = new Array(frameCount); + if (zeros == null) + zeros = spine.Utils.newFloatArray(64); + return _this; + } + DeformTimeline.prototype.getPropertyId = function () { + return (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex; + }; + DeformTimeline.prototype.setFrame = function (frameIndex, time, vertices) { + this.frames[frameIndex] = time; + this.frameVertices[frameIndex] = vertices; + }; + DeformTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var slotAttachment = slot.getAttachment(); + if (!(slotAttachment instanceof spine.VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment)) + return; + var deformArray = slot.deform; + if (deformArray.length == 0) + blend = MixBlend.setup; + var frameVertices = this.frameVertices; + var vertexCount = frameVertices[0].length; + var frames = this.frames; + if (time < frames[0]) { + var vertexAttachment = slotAttachment; + switch (blend) { + case MixBlend.setup: + deformArray.length = 0; + return; + case MixBlend.first: + if (alpha == 1) { + deformArray.length = 0; + break; + } + var deform_1 = spine.Utils.setArraySize(deformArray, vertexCount); + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i = 0; i < vertexCount; i++) + deform_1[i] += (setupVertices[i] - deform_1[i]) * alpha; + } + else { + alpha = 1 - alpha; + for (var i = 0; i < vertexCount; i++) + deform_1[i] *= alpha; + } + } + return; + } + var deform = spine.Utils.setArraySize(deformArray, vertexCount); + if (time >= frames[frames.length - 1]) { + var lastVertices = frameVertices[frames.length - 1]; + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_1 = 0; i_1 < vertexCount; i_1++) { + deform[i_1] += lastVertices[i_1] - setupVertices[i_1]; + } + } + else { + for (var i_2 = 0; i_2 < vertexCount; i_2++) + deform[i_2] += lastVertices[i_2]; + } + } + else { + spine.Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount); + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_1 = slotAttachment; + if (vertexAttachment_1.bones == null) { + var setupVertices = vertexAttachment_1.vertices; + for (var i_3 = 0; i_3 < vertexCount; i_3++) { + var setup = setupVertices[i_3]; + deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha; + } + } + else { + for (var i_4 = 0; i_4 < vertexCount; i_4++) + deform[i_4] = lastVertices[i_4] * alpha; + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_5 = 0; i_5 < vertexCount; i_5++) + deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha; + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_6 = 0; i_6 < vertexCount; i_6++) { + deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha; + } + } + else { + for (var i_7 = 0; i_7 < vertexCount; i_7++) + deform[i_7] += lastVertices[i_7] * alpha; + } + } + } + return; + } + var frame = Animation.binarySearch(frames, time); + var prevVertices = frameVertices[frame - 1]; + var nextVertices = frameVertices[frame]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime)); + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_8 = 0; i_8 < vertexCount; i_8++) { + var prev = prevVertices[i_8]; + deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8]; + } + } + else { + for (var i_9 = 0; i_9 < vertexCount; i_9++) { + var prev = prevVertices[i_9]; + deform[i_9] += prev + (nextVertices[i_9] - prev) * percent; + } + } + } + else { + for (var i_10 = 0; i_10 < vertexCount; i_10++) { + var prev = prevVertices[i_10]; + deform[i_10] = prev + (nextVertices[i_10] - prev) * percent; + } + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_2 = slotAttachment; + if (vertexAttachment_2.bones == null) { + var setupVertices = vertexAttachment_2.vertices; + for (var i_11 = 0; i_11 < vertexCount; i_11++) { + var prev = prevVertices[i_11], setup = setupVertices[i_11]; + deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha; + } + } + else { + for (var i_12 = 0; i_12 < vertexCount; i_12++) { + var prev = prevVertices[i_12]; + deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha; + } + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_13 = 0; i_13 < vertexCount; i_13++) { + var prev = prevVertices[i_13]; + deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha; + } + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_14 = 0; i_14 < vertexCount; i_14++) { + var prev = prevVertices[i_14]; + deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha; + } + } + else { + for (var i_15 = 0; i_15 < vertexCount; i_15++) { + var prev = prevVertices[i_15]; + deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha; + } + } + } + } + }; + return DeformTimeline; + }(CurveTimeline)); + spine.DeformTimeline = DeformTimeline; + var EventTimeline = (function () { + function EventTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.events = new Array(frameCount); + } + EventTimeline.prototype.getPropertyId = function () { + return TimelineType.event << 24; + }; + EventTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + EventTimeline.prototype.setFrame = function (frameIndex, event) { + this.frames[frameIndex] = event.time; + this.events[frameIndex] = event; + }; + EventTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + if (firedEvents == null) + return; + var frames = this.frames; + var frameCount = this.frames.length; + if (lastTime > time) { + this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction); + lastTime = -1; + } + else if (lastTime >= frames[frameCount - 1]) + return; + if (time < frames[0]) + return; + var frame = 0; + if (lastTime < frames[0]) + frame = 0; + else { + frame = Animation.binarySearch(frames, lastTime); + var frameTime = frames[frame]; + while (frame > 0) { + if (frames[frame - 1] != frameTime) + break; + frame--; + } + } + for (; frame < frameCount && time >= frames[frame]; frame++) + firedEvents.push(this.events[frame]); + }; + return EventTimeline; + }()); + spine.EventTimeline = EventTimeline; + var DrawOrderTimeline = (function () { + function DrawOrderTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.drawOrders = new Array(frameCount); + } + DrawOrderTimeline.prototype.getPropertyId = function () { + return TimelineType.drawOrder << 24; + }; + DrawOrderTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + DrawOrderTimeline.prototype.setFrame = function (frameIndex, time, drawOrder) { + this.frames[frameIndex] = time; + this.drawOrders[frameIndex] = drawOrder; + }; + DrawOrderTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var drawOrder = skeleton.drawOrder; + var slots = skeleton.slots; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frame = 0; + if (time >= frames[frames.length - 1]) + frame = frames.length - 1; + else + frame = Animation.binarySearch(frames, time) - 1; + var drawOrderToSetupIndex = this.drawOrders[frame]; + if (drawOrderToSetupIndex == null) + spine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length); + else { + for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++) + drawOrder[i] = slots[drawOrderToSetupIndex[i]]; + } + }; + return DrawOrderTimeline; + }()); + spine.DrawOrderTimeline = DrawOrderTimeline; + var IkConstraintTimeline = (function (_super) { + __extends(IkConstraintTimeline, _super); + function IkConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES); + return _this; + } + IkConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex; + }; + IkConstraintTimeline.prototype.setFrame = function (frameIndex, time, mix, softness, bendDirection, compress, stretch) { + frameIndex *= IkConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + IkConstraintTimeline.MIX] = mix; + this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness; + this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection; + this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0; + this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0; + }; + IkConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.ikConstraints[this.ikConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + return; + case MixBlend.first: + constraint.mix += (constraint.data.mix - constraint.mix) * alpha; + constraint.softness += (constraint.data.softness - constraint.softness) * alpha; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + return; + } + if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) { + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha; + constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + return; + } + var frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES); + var mix = frames[frame + IkConstraintTimeline.PREV_MIX]; + var softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime)); + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha; + constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + }; + IkConstraintTimeline.ENTRIES = 6; + IkConstraintTimeline.PREV_TIME = -6; + IkConstraintTimeline.PREV_MIX = -5; + IkConstraintTimeline.PREV_SOFTNESS = -4; + IkConstraintTimeline.PREV_BEND_DIRECTION = -3; + IkConstraintTimeline.PREV_COMPRESS = -2; + IkConstraintTimeline.PREV_STRETCH = -1; + IkConstraintTimeline.MIX = 1; + IkConstraintTimeline.SOFTNESS = 2; + IkConstraintTimeline.BEND_DIRECTION = 3; + IkConstraintTimeline.COMPRESS = 4; + IkConstraintTimeline.STRETCH = 5; + return IkConstraintTimeline; + }(CurveTimeline)); + spine.IkConstraintTimeline = IkConstraintTimeline; + var TransformConstraintTimeline = (function (_super) { + __extends(TransformConstraintTimeline, _super); + function TransformConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES); + return _this; + } + TransformConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex; + }; + TransformConstraintTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) { + frameIndex *= TransformConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix; + this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix; + this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix; + }; + TransformConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.transformConstraints[this.transformConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + var data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + return; + case MixBlend.first: + constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha; + constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha; + constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha; + } + return; + } + var rotate = 0, translate = 0, scale = 0, shear = 0; + if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) { + var i = frames.length; + rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[i + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[i + TransformConstraintTimeline.PREV_SHEAR]; + } + else { + var frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES); + rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[frame + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent; + scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent; + shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent; + } + if (blend == MixBlend.setup) { + var data = constraint.data; + constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha; + constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha; + constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha; + constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + constraint.scaleMix += (scale - constraint.scaleMix) * alpha; + constraint.shearMix += (shear - constraint.shearMix) * alpha; + } + }; + TransformConstraintTimeline.ENTRIES = 5; + TransformConstraintTimeline.PREV_TIME = -5; + TransformConstraintTimeline.PREV_ROTATE = -4; + TransformConstraintTimeline.PREV_TRANSLATE = -3; + TransformConstraintTimeline.PREV_SCALE = -2; + TransformConstraintTimeline.PREV_SHEAR = -1; + TransformConstraintTimeline.ROTATE = 1; + TransformConstraintTimeline.TRANSLATE = 2; + TransformConstraintTimeline.SCALE = 3; + TransformConstraintTimeline.SHEAR = 4; + return TransformConstraintTimeline; + }(CurveTimeline)); + spine.TransformConstraintTimeline = TransformConstraintTimeline; + var PathConstraintPositionTimeline = (function (_super) { + __extends(PathConstraintPositionTimeline, _super); + function PathConstraintPositionTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES); + return _this; + } + PathConstraintPositionTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex; + }; + PathConstraintPositionTimeline.prototype.setFrame = function (frameIndex, time, value) { + frameIndex *= PathConstraintPositionTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value; + }; + PathConstraintPositionTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.position = constraint.data.position; + return; + case MixBlend.first: + constraint.position += (constraint.data.position - constraint.position) * alpha; + } + return; + } + var position = 0; + if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES]) + position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES); + position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime)); + position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent; + } + if (blend == MixBlend.setup) + constraint.position = constraint.data.position + (position - constraint.data.position) * alpha; + else + constraint.position += (position - constraint.position) * alpha; + }; + PathConstraintPositionTimeline.ENTRIES = 2; + PathConstraintPositionTimeline.PREV_TIME = -2; + PathConstraintPositionTimeline.PREV_VALUE = -1; + PathConstraintPositionTimeline.VALUE = 1; + return PathConstraintPositionTimeline; + }(CurveTimeline)); + spine.PathConstraintPositionTimeline = PathConstraintPositionTimeline; + var PathConstraintSpacingTimeline = (function (_super) { + __extends(PathConstraintSpacingTimeline, _super); + function PathConstraintSpacingTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + PathConstraintSpacingTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex; + }; + PathConstraintSpacingTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.spacing = constraint.data.spacing; + return; + case MixBlend.first: + constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha; + } + return; + } + var spacing = 0; + if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES]) + spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES); + spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime)); + spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent; + } + if (blend == MixBlend.setup) + constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha; + else + constraint.spacing += (spacing - constraint.spacing) * alpha; + }; + return PathConstraintSpacingTimeline; + }(PathConstraintPositionTimeline)); + spine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline; + var PathConstraintMixTimeline = (function (_super) { + __extends(PathConstraintMixTimeline, _super); + function PathConstraintMixTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES); + return _this; + } + PathConstraintMixTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex; + }; + PathConstraintMixTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix) { + frameIndex *= PathConstraintMixTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix; + }; + PathConstraintMixTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = constraint.data.rotateMix; + constraint.translateMix = constraint.data.translateMix; + return; + case MixBlend.first: + constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha; + } + return; + } + var rotate = 0, translate = 0; + if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) { + rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE]; + } + else { + var frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES); + rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent; + } + if (blend == MixBlend.setup) { + constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha; + constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + } + }; + PathConstraintMixTimeline.ENTRIES = 3; + PathConstraintMixTimeline.PREV_TIME = -3; + PathConstraintMixTimeline.PREV_ROTATE = -2; + PathConstraintMixTimeline.PREV_TRANSLATE = -1; + PathConstraintMixTimeline.ROTATE = 1; + PathConstraintMixTimeline.TRANSLATE = 2; + return PathConstraintMixTimeline; + }(CurveTimeline)); + spine.PathConstraintMixTimeline = PathConstraintMixTimeline; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationState = (function () { + function AnimationState(data) { + this.tracks = new Array(); + this.timeScale = 1; + this.unkeyedState = 0; + this.events = new Array(); + this.listeners = new Array(); + this.queue = new EventQueue(this); + this.propertyIDs = new spine.IntSet(); + this.animationsChanged = false; + this.trackEntryPool = new spine.Pool(function () { return new TrackEntry(); }); + this.data = data; + } + AnimationState.prototype.update = function (delta) { + delta *= this.timeScale; + var tracks = this.tracks; + for (var i = 0, n = tracks.length; i < n; i++) { + var current = tracks[i]; + if (current == null) + continue; + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + var currentDelta = delta * current.timeScale; + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) + continue; + currentDelta = -current.delay; + current.delay = 0; + } + var next = current.next; + if (next != null) { + var nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setCurrent(i, next, true); + while (next.mixingFrom != null) { + next.mixTime += delta; + next = next.mixingFrom; + } + continue; + } + } + else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) { + tracks[i] = null; + this.queue.end(current); + this.disposeNext(current); + continue; + } + if (current.mixingFrom != null && this.updateMixingFrom(current, delta)) { + var from = current.mixingFrom; + current.mixingFrom = null; + if (from != null) + from.mixingTo = null; + while (from != null) { + this.queue.end(from); + from = from.mixingFrom; + } + } + current.trackTime += currentDelta; + } + this.queue.drain(); + }; + AnimationState.prototype.updateMixingFrom = function (to, delta) { + var from = to.mixingFrom; + if (from == null) + return true; + var finished = this.updateMixingFrom(from, delta); + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { + if (from.totalAlpha == 0 || to.mixDuration == 0) { + to.mixingFrom = from.mixingFrom; + if (from.mixingFrom != null) + from.mixingFrom.mixingTo = to; + to.interruptAlpha = from.interruptAlpha; + this.queue.end(from); + } + return finished; + } + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + }; + AnimationState.prototype.apply = function (skeleton) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (this.animationsChanged) + this._animationsChanged(); + var events = this.events; + var tracks = this.tracks; + var applied = false; + for (var i_16 = 0, n_1 = tracks.length; i_16 < n_1; i_16++) { + var current = tracks[i_16]; + if (current == null || current.delay > 0) + continue; + applied = true; + var blend = i_16 == 0 ? spine.MixBlend.first : current.mixBlend; + var mix = current.alpha; + if (current.mixingFrom != null) + mix *= this.applyMixingFrom(current, skeleton, blend); + else if (current.trackTime >= current.trackEnd && current.next == null) + mix = 0; + var animationLast = current.animationLast, animationTime = current.getAnimationTime(); + var timelineCount = current.animation.timelines.length; + var timelines = current.animation.timelines; + if ((i_16 == 0 && mix == 1) || blend == spine.MixBlend.add) { + for (var ii = 0; ii < timelineCount; ii++) { + spine.Utils.webkit602BugfixHelper(mix, blend); + var timeline = timelines[ii]; + if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, blend, true); + else + timeline.apply(skeleton, animationLast, animationTime, events, mix, blend, spine.MixDirection.mixIn); + } + } + else { + var timelineMode = current.timelineMode; + var firstFrame = current.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = current.timelinesRotation; + for (var ii = 0; ii < timelineCount; ii++) { + var timeline_1 = timelines[ii]; + var timelineBlend = timelineMode[ii] == AnimationState.SUBSEQUENT ? blend : spine.MixBlend.setup; + if (timeline_1 instanceof spine.RotateTimeline) { + this.applyRotateTimeline(timeline_1, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); + } + else if (timeline_1 instanceof spine.AttachmentTimeline) { + this.applyAttachmentTimeline(timeline_1, skeleton, animationTime, blend, true); + } + else { + spine.Utils.webkit602BugfixHelper(mix, blend); + timeline_1.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, spine.MixDirection.mixIn); + } + } + } + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + var setupState = this.unkeyedState + AnimationState.SETUP; + var slots = skeleton.slots; + for (var i = 0, n = skeleton.slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.attachmentState == setupState) { + var attachmentName = slot.data.attachmentName; + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + } + } + this.unkeyedState += 2; + this.queue.drain(); + return applied; + }; + AnimationState.prototype.applyMixingFrom = function (to, skeleton, blend) { + var from = to.mixingFrom; + if (from.mixingFrom != null) + this.applyMixingFrom(from, skeleton, blend); + var mix = 0; + if (to.mixDuration == 0) { + mix = 1; + if (blend == spine.MixBlend.first) + blend = spine.MixBlend.setup; + } + else { + mix = to.mixTime / to.mixDuration; + if (mix > 1) + mix = 1; + if (blend != spine.MixBlend.first) + blend = from.mixBlend; + } + var events = mix < from.eventThreshold ? this.events : null; + var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold; + var animationLast = from.animationLast, animationTime = from.getAnimationTime(); + var timelineCount = from.animation.timelines.length; + var timelines = from.animation.timelines; + var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); + if (blend == spine.MixBlend.add) { + for (var i = 0; i < timelineCount; i++) + timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, spine.MixDirection.mixOut); + } + else { + var timelineMode = from.timelineMode; + var timelineHoldMix = from.timelineHoldMix; + var firstFrame = from.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = from.timelinesRotation; + from.totalAlpha = 0; + for (var i = 0; i < timelineCount; i++) { + var timeline = timelines[i]; + var direction = spine.MixDirection.mixOut; + var timelineBlend = void 0; + var alpha = 0; + switch (timelineMode[i]) { + case AnimationState.SUBSEQUENT: + if (!drawOrder && timeline instanceof spine.DrawOrderTimeline) + continue; + timelineBlend = blend; + alpha = alphaMix; + break; + case AnimationState.FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaMix; + break; + case AnimationState.HOLD_SUBSEQUENT: + timelineBlend = blend; + alpha = alphaHold; + break; + case AnimationState.HOLD_FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaHold; + break; + default: + timelineBlend = spine.MixBlend.setup; + var holdMix = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + break; + } + from.totalAlpha += alpha; + if (timeline instanceof spine.RotateTimeline) + this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); + else if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, timelineBlend, attachments); + else { + spine.Utils.webkit602BugfixHelper(alpha, blend); + if (drawOrder && timeline instanceof spine.DrawOrderTimeline && timelineBlend == spine.MixBlend.setup) + direction = spine.MixDirection.mixIn; + timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction); + } + } + } + if (to.mixDuration > 0) + this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + return mix; + }; + AnimationState.prototype.applyAttachmentTimeline = function (timeline, skeleton, time, blend, attachments) { + var slot = skeleton.slots[timeline.slotIndex]; + if (!slot.bone.active) + return; + var frames = timeline.frames; + if (time < frames[0]) { + if (blend == spine.MixBlend.setup || blend == spine.MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments); + } + else { + var frameIndex; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = spine.Animation.binarySearch(frames, time) - 1; + this.setAttachment(skeleton, slot, timeline.attachmentNames[frameIndex], attachments); + } + if (slot.attachmentState <= this.unkeyedState) + slot.attachmentState = this.unkeyedState + AnimationState.SETUP; + }; + AnimationState.prototype.setAttachment = function (skeleton, slot, attachmentName, attachments) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + if (attachments) + slot.attachmentState = this.unkeyedState + AnimationState.CURRENT; + }; + AnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) { + if (firstFrame) + timelinesRotation[i] = 0; + if (alpha == 1) { + timeline.apply(skeleton, 0, time, null, 1, blend, spine.MixDirection.mixIn); + return; + } + var rotateTimeline = timeline; + var frames = rotateTimeline.frames; + var bone = skeleton.bones[rotateTimeline.boneIndex]; + if (!bone.active) + return; + var r1 = 0, r2 = 0; + if (time < frames[0]) { + switch (blend) { + case spine.MixBlend.setup: + bone.rotation = bone.data.rotation; + default: + return; + case spine.MixBlend.first: + r1 = bone.rotation; + r2 = bone.data.rotation; + } + } + else { + r1 = blend == spine.MixBlend.setup ? bone.data.rotation : bone.rotation; + if (time >= frames[frames.length - spine.RotateTimeline.ENTRIES]) + r2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION]; + else { + var frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES); + var prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime)); + r2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + r2 = prevRotation + r2 * percent + bone.data.rotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + } + } + var total = 0, diff = r2 - r1; + diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360; + if (diff == 0) { + total = timelinesRotation[i]; + } + else { + var lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } + else { + lastTotal = timelinesRotation[i]; + lastDiff = timelinesRotation[i + 1]; + } + var current = diff > 0, dir = lastTotal >= 0; + if (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) { + if (Math.abs(lastTotal) > 180) + lastTotal += 360 * spine.MathUtils.signum(lastTotal); + dir = current; + } + total = diff + lastTotal - lastTotal % 360; + if (dir != current) + total += 360 * spine.MathUtils.signum(lastTotal); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + r1 += total * alpha; + bone.rotation = r1 - (16384 - ((16384.499999999996 - r1 / 360) | 0)) * 360; + }; + AnimationState.prototype.queueEvents = function (entry, animationTime) { + var animationStart = entry.animationStart, animationEnd = entry.animationEnd; + var duration = animationEnd - animationStart; + var trackLastWrapped = entry.trackLast % duration; + var events = this.events; + var i = 0, n = events.length; + for (; i < n; i++) { + var event_1 = events[i]; + if (event_1.time < trackLastWrapped) + break; + if (event_1.time > animationEnd) + continue; + this.queue.event(entry, event_1); + } + var complete = false; + if (entry.loop) + complete = duration == 0 || trackLastWrapped > entry.trackTime % duration; + else + complete = animationTime >= animationEnd && entry.animationLast < animationEnd; + if (complete) + this.queue.complete(entry); + for (; i < n; i++) { + var event_2 = events[i]; + if (event_2.time < animationStart) + continue; + this.queue.event(entry, events[i]); + } + }; + AnimationState.prototype.clearTracks = function () { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) + this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.clearTrack = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return; + var current = this.tracks[trackIndex]; + if (current == null) + return; + this.queue.end(current); + this.disposeNext(current); + var entry = current; + while (true) { + var from = entry.mixingFrom; + if (from == null) + break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + this.tracks[current.trackIndex] = null; + this.queue.drain(); + }; + AnimationState.prototype.setCurrent = function (index, current, interrupt) { + var from = this.expandToIndex(index); + this.tracks[index] = current; + if (from != null) { + if (interrupt) + this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + if (from.mixingFrom != null && from.mixDuration > 0) + current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration); + from.timelinesRotation.length = 0; + } + this.queue.start(current); + }; + AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.setAnimationWith(trackIndex, animation, loop); + }; + AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) { + if (animation == null) + throw new Error("animation cannot be null."); + var interrupt = true; + var current = this.expandToIndex(trackIndex); + if (current != null) { + if (current.nextTrackLast == -1) { + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.disposeNext(current); + current = current.mixingFrom; + interrupt = false; + } + else + this.disposeNext(current); + } + var entry = this.trackEntry(trackIndex, animation, loop, current); + this.setCurrent(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + }; + AnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.addAnimationWith(trackIndex, animation, loop, delay); + }; + AnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) { + if (animation == null) + throw new Error("animation cannot be null."); + var last = this.expandToIndex(trackIndex); + if (last != null) { + while (last.next != null) + last = last.next; + } + var entry = this.trackEntry(trackIndex, animation, loop, last); + if (last == null) { + this.setCurrent(trackIndex, entry, true); + this.queue.drain(); + } + else { + last.next = entry; + if (delay <= 0) { + var duration = last.animationEnd - last.animationStart; + if (duration != 0) { + if (last.loop) + delay += duration * (1 + ((last.trackTime / duration) | 0)); + else + delay += Math.max(duration, last.trackTime); + delay -= this.data.getMix(last.animation, animation); + } + else + delay = last.trackTime; + } + } + entry.delay = delay; + return entry; + }; + AnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) { + var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) { + if (delay <= 0) + delay -= mixDuration; + var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.setEmptyAnimations = function (mixDuration) { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) { + var current = this.tracks[i]; + if (current != null) + this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.expandToIndex = function (index) { + if (index < this.tracks.length) + return this.tracks[index]; + spine.Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + }; + AnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) { + var entry = this.trackEntryPool.obtain(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + entry.eventThreshold = 0; + entry.attachmentThreshold = 0; + entry.drawOrderThreshold = 0; + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + entry.alpha = 1; + entry.interruptAlpha = 1; + entry.mixTime = 0; + entry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation); + entry.mixBlend = spine.MixBlend.replace; + return entry; + }; + AnimationState.prototype.disposeNext = function (entry) { + var next = entry.next; + while (next != null) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + }; + AnimationState.prototype._animationsChanged = function () { + this.animationsChanged = false; + this.propertyIDs.clear(); + for (var i = 0, n = this.tracks.length; i < n; i++) { + var entry = this.tracks[i]; + if (entry == null) + continue; + while (entry.mixingFrom != null) + entry = entry.mixingFrom; + do { + if (entry.mixingFrom == null || entry.mixBlend != spine.MixBlend.add) + this.computeHold(entry); + entry = entry.mixingTo; + } while (entry != null); + } + }; + AnimationState.prototype.computeHold = function (entry) { + var to = entry.mixingTo; + var timelines = entry.animation.timelines; + var timelinesCount = entry.animation.timelines.length; + var timelineMode = spine.Utils.setArraySize(entry.timelineMode, timelinesCount); + entry.timelineHoldMix.length = 0; + var timelineDipMix = spine.Utils.setArraySize(entry.timelineHoldMix, timelinesCount); + var propertyIDs = this.propertyIDs; + if (to != null && to.holdPrevious) { + for (var i = 0; i < timelinesCount; i++) { + timelineMode[i] = propertyIDs.add(timelines[i].getPropertyId()) ? AnimationState.HOLD_FIRST : AnimationState.HOLD_SUBSEQUENT; + } + return; + } + outer: for (var i = 0; i < timelinesCount; i++) { + var timeline = timelines[i]; + var id = timeline.getPropertyId(); + if (!propertyIDs.add(id)) + timelineMode[i] = AnimationState.SUBSEQUENT; + else if (to == null || timeline instanceof spine.AttachmentTimeline || timeline instanceof spine.DrawOrderTimeline + || timeline instanceof spine.EventTimeline || !to.animation.hasTimeline(id)) { + timelineMode[i] = AnimationState.FIRST; + } + else { + for (var next = to.mixingTo; next != null; next = next.mixingTo) { + if (next.animation.hasTimeline(id)) + continue; + if (entry.mixDuration > 0) { + timelineMode[i] = AnimationState.HOLD_MIX; + timelineDipMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = AnimationState.HOLD_FIRST; + } + } + }; + AnimationState.prototype.getCurrent = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return null; + return this.tracks[trackIndex]; + }; + AnimationState.prototype.addListener = function (listener) { + if (listener == null) + throw new Error("listener cannot be null."); + this.listeners.push(listener); + }; + AnimationState.prototype.removeListener = function (listener) { + var index = this.listeners.indexOf(listener); + if (index >= 0) + this.listeners.splice(index, 1); + }; + AnimationState.prototype.clearListeners = function () { + this.listeners.length = 0; + }; + AnimationState.prototype.clearListenerNotifications = function () { + this.queue.clear(); + }; + AnimationState.emptyAnimation = new spine.Animation("", [], 0); + AnimationState.SUBSEQUENT = 0; + AnimationState.FIRST = 1; + AnimationState.HOLD_SUBSEQUENT = 2; + AnimationState.HOLD_FIRST = 3; + AnimationState.HOLD_MIX = 4; + AnimationState.SETUP = 1; + AnimationState.CURRENT = 2; + return AnimationState; + }()); + spine.AnimationState = AnimationState; + var TrackEntry = (function () { + function TrackEntry() { + this.mixBlend = spine.MixBlend.replace; + this.timelineMode = new Array(); + this.timelineHoldMix = new Array(); + this.timelinesRotation = new Array(); + } + TrackEntry.prototype.reset = function () { + this.next = null; + this.mixingFrom = null; + this.mixingTo = null; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + }; + TrackEntry.prototype.getAnimationTime = function () { + if (this.loop) { + var duration = this.animationEnd - this.animationStart; + if (duration == 0) + return this.animationStart; + return (this.trackTime % duration) + this.animationStart; + } + return Math.min(this.trackTime + this.animationStart, this.animationEnd); + }; + TrackEntry.prototype.setAnimationLast = function (animationLast) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + }; + TrackEntry.prototype.isComplete = function () { + return this.trackTime >= this.animationEnd - this.animationStart; + }; + TrackEntry.prototype.resetRotationDirections = function () { + this.timelinesRotation.length = 0; + }; + return TrackEntry; + }()); + spine.TrackEntry = TrackEntry; + var EventQueue = (function () { + function EventQueue(animState) { + this.objects = []; + this.drainDisabled = false; + this.animState = animState; + } + EventQueue.prototype.start = function (entry) { + this.objects.push(EventType.start); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.interrupt = function (entry) { + this.objects.push(EventType.interrupt); + this.objects.push(entry); + }; + EventQueue.prototype.end = function (entry) { + this.objects.push(EventType.end); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.dispose = function (entry) { + this.objects.push(EventType.dispose); + this.objects.push(entry); + }; + EventQueue.prototype.complete = function (entry) { + this.objects.push(EventType.complete); + this.objects.push(entry); + }; + EventQueue.prototype.event = function (entry, event) { + this.objects.push(EventType.event); + this.objects.push(entry); + this.objects.push(event); + }; + EventQueue.prototype.drain = function () { + if (this.drainDisabled) + return; + this.drainDisabled = true; + var objects = this.objects; + var listeners = this.animState.listeners; + for (var i = 0; i < objects.length; i += 2) { + var type = objects[i]; + var entry = objects[i + 1]; + switch (type) { + case EventType.start: + if (entry.listener != null && entry.listener.start) + entry.listener.start(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].start) + listeners[ii].start(entry); + break; + case EventType.interrupt: + if (entry.listener != null && entry.listener.interrupt) + entry.listener.interrupt(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].interrupt) + listeners[ii].interrupt(entry); + break; + case EventType.end: + if (entry.listener != null && entry.listener.end) + entry.listener.end(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].end) + listeners[ii].end(entry); + case EventType.dispose: + if (entry.listener != null && entry.listener.dispose) + entry.listener.dispose(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].dispose) + listeners[ii].dispose(entry); + this.animState.trackEntryPool.free(entry); + break; + case EventType.complete: + if (entry.listener != null && entry.listener.complete) + entry.listener.complete(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].complete) + listeners[ii].complete(entry); + break; + case EventType.event: + var event_3 = objects[i++ + 2]; + if (entry.listener != null && entry.listener.event) + entry.listener.event(entry, event_3); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].event) + listeners[ii].event(entry, event_3); + break; + } + } + this.clear(); + this.drainDisabled = false; + }; + EventQueue.prototype.clear = function () { + this.objects.length = 0; + }; + return EventQueue; + }()); + spine.EventQueue = EventQueue; + var EventType; + (function (EventType) { + EventType[EventType["start"] = 0] = "start"; + EventType[EventType["interrupt"] = 1] = "interrupt"; + EventType[EventType["end"] = 2] = "end"; + EventType[EventType["dispose"] = 3] = "dispose"; + EventType[EventType["complete"] = 4] = "complete"; + EventType[EventType["event"] = 5] = "event"; + })(EventType = spine.EventType || (spine.EventType = {})); + var AnimationStateAdapter = (function () { + function AnimationStateAdapter() { + } + AnimationStateAdapter.prototype.start = function (entry) { + }; + AnimationStateAdapter.prototype.interrupt = function (entry) { + }; + AnimationStateAdapter.prototype.end = function (entry) { + }; + AnimationStateAdapter.prototype.dispose = function (entry) { + }; + AnimationStateAdapter.prototype.complete = function (entry) { + }; + AnimationStateAdapter.prototype.event = function (entry, event) { + }; + return AnimationStateAdapter; + }()); + spine.AnimationStateAdapter = AnimationStateAdapter; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationStateData = (function () { + function AnimationStateData(skeletonData) { + this.animationToMixTime = {}; + this.defaultMix = 0; + if (skeletonData == null) + throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + AnimationStateData.prototype.setMix = function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (from == null) + throw new Error("Animation not found: " + fromName); + var to = this.skeletonData.findAnimation(toName); + if (to == null) + throw new Error("Animation not found: " + toName); + this.setMixWith(from, to, duration); + }; + AnimationStateData.prototype.setMixWith = function (from, to, duration) { + if (from == null) + throw new Error("from cannot be null."); + if (to == null) + throw new Error("to cannot be null."); + var key = from.name + "." + to.name; + this.animationToMixTime[key] = duration; + }; + AnimationStateData.prototype.getMix = function (from, to) { + var key = from.name + "." + to.name; + var value = this.animationToMixTime[key]; + return value === undefined ? this.defaultMix : value; + }; + return AnimationStateData; + }()); + spine.AnimationStateData = AnimationStateData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AssetManager = (function () { + function AssetManager(textureLoader, pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.assets = {}; + this.errors = {}; + this.toLoad = 0; + this.loaded = 0; + this.rawDataUris = {}; + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + } + AssetManager.prototype.downloadText = function (url, success, error) { + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.onload = function () { + if (request.status == 200) { + success(request.responseText); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.downloadBinary = function (url, success, error) { + var request = new XMLHttpRequest(); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.responseType = "arraybuffer"; + request.onload = function () { + if (request.status == 200) { + success(new Uint8Array(request.response)); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.setRawDataURI = function (path, data) { + this.rawDataUris[this.pathPrefix + path] = data; + }; + AssetManager.prototype.loadBinary = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadBinary(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load binary " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load binary " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadText = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load text " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load text " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadTexture = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + var storagePath = path; + this.toLoad++; + var img = new Image(); + img.crossOrigin = "anonymous"; + img.onload = function (ev) { + var texture = _this.textureLoader(img); + _this.assets[storagePath] = texture; + _this.toLoad--; + _this.loaded++; + if (success) + success(path, img); + }; + img.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + _this.toLoad--; + _this.loaded++; + if (error) + error(path, "Couldn't load image " + path); + }; + if (this.rawDataUris[path]) + path = this.rawDataUris[path]; + img.src = path; + }; + AssetManager.prototype.loadTextureAtlas = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + var parent = path.lastIndexOf("/") >= 0 ? path.substring(0, path.lastIndexOf("/")) : ""; + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (atlasData) { + var pagesLoaded = { count: 0 }; + var atlasPages = new Array(); + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + atlasPages.push(parent == "" ? path : parent + "/" + path); + var image = document.createElement("img"); + image.width = 16; + image.height = 16; + return new spine.FakeTexture(image); + }); + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + return; + } + var _loop_1 = function (atlasPage) { + var pageLoadError = false; + _this.loadTexture(atlasPage, function (imagePath, image) { + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + if (!pageLoadError) { + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + return _this.get(parent == "" ? path : parent + "/" + path); + }); + _this.assets[path] = atlas; + if (success) + success(path, atlas); + _this.toLoad--; + _this.loaded++; + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + } + } + else { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + } + }, function (imagePath, errorMessage) { + pageLoadError = true; + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + }); + }; + for (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) { + var atlasPage = atlasPages_1[_i]; + _loop_1(atlasPage); + } + }, function (state, responseText) { + _this.errors[path] = "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.get = function (path) { + path = this.pathPrefix + path; + return this.assets[path]; + }; + AssetManager.prototype.remove = function (path) { + path = this.pathPrefix + path; + var asset = this.assets[path]; + if (asset.dispose) + asset.dispose(); + this.assets[path] = null; + }; + AssetManager.prototype.removeAll = function () { + for (var key in this.assets) { + var asset = this.assets[key]; + if (asset.dispose) + asset.dispose(); + } + this.assets = {}; + }; + AssetManager.prototype.isLoadingComplete = function () { + return this.toLoad == 0; + }; + AssetManager.prototype.getToLoad = function () { + return this.toLoad; + }; + AssetManager.prototype.getLoaded = function () { + return this.loaded; + }; + AssetManager.prototype.dispose = function () { + this.removeAll(); + }; + AssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + AssetManager.prototype.getErrors = function () { + return this.errors; + }; + return AssetManager; + }()); + spine.AssetManager = AssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AtlasAttachmentLoader = (function () { + function AtlasAttachmentLoader(atlas) { + this.atlas = atlas; + } + AtlasAttachmentLoader.prototype.newRegionAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.RegionAttachment(name); + attachment.setRegion(region); + return attachment; + }; + AtlasAttachmentLoader.prototype.newMeshAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.MeshAttachment(name); + attachment.region = region; + return attachment; + }; + AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function (skin, name) { + return new spine.BoundingBoxAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPathAttachment = function (skin, name) { + return new spine.PathAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPointAttachment = function (skin, name) { + return new spine.PointAttachment(name); + }; + AtlasAttachmentLoader.prototype.newClippingAttachment = function (skin, name) { + return new spine.ClippingAttachment(name); + }; + return AtlasAttachmentLoader; + }()); + spine.AtlasAttachmentLoader = AtlasAttachmentLoader; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BlendMode; + (function (BlendMode) { + BlendMode[BlendMode["Normal"] = 0] = "Normal"; + BlendMode[BlendMode["Additive"] = 1] = "Additive"; + BlendMode[BlendMode["Multiply"] = 2] = "Multiply"; + BlendMode[BlendMode["Screen"] = 3] = "Screen"; + })(BlendMode = spine.BlendMode || (spine.BlendMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Bone = (function () { + function Bone(data, skeleton, parent) { + this.children = new Array(); + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 0; + this.scaleY = 0; + this.shearX = 0; + this.shearY = 0; + this.ax = 0; + this.ay = 0; + this.arotation = 0; + this.ascaleX = 0; + this.ascaleY = 0; + this.ashearX = 0; + this.ashearY = 0; + this.appliedValid = false; + this.a = 0; + this.b = 0; + this.c = 0; + this.d = 0; + this.worldY = 0; + this.worldX = 0; + this.sorted = false; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.skeleton = skeleton; + this.parent = parent; + this.setToSetupPose(); + } + Bone.prototype.isActive = function () { + return this.active; + }; + Bone.prototype.update = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransform = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransformWith = function (x, y, rotation, scaleX, scaleY, shearX, shearY) { + this.ax = x; + this.ay = y; + this.arotation = rotation; + this.ascaleX = scaleX; + this.ascaleY = scaleY; + this.ashearX = shearX; + this.ashearY = shearY; + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + var skeleton = this.skeleton; + var rotationY = rotation + 90 + shearY; + var sx = skeleton.scaleX; + var sy = skeleton.scaleY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX * sx; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY * sx; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX * sy; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY * sy; + this.worldX = x * sx + skeleton.x; + this.worldY = y * sy + skeleton.y; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + this.worldX = pa * x + pb * y + parent.worldX; + this.worldY = pc * x + pd * y + parent.worldY; + switch (this.data.transformMode) { + case spine.TransformMode.Normal: { + var rotationY = rotation + 90 + shearY; + var la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(rotationY) * scaleY; + var lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(rotationY) * scaleY; + this.a = pa * la + pb * lc; + this.b = pa * lb + pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + return; + } + case spine.TransformMode.OnlyTranslation: { + var rotationY = rotation + 90 + shearY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY; + break; + } + case spine.TransformMode.NoRotationOrReflection: { + var s = pa * pa + pc * pc; + var prx = 0; + if (s > 0.0001) { + s = Math.abs(pa * pd - pb * pc) / s; + pa /= this.skeleton.scaleX; + pc /= this.skeleton.scaleY; + pb = pc * s; + pd = pa * s; + prx = Math.atan2(pc, pa) * spine.MathUtils.radDeg; + } + else { + pa = 0; + pc = 0; + prx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg; + } + var rx = rotation + shearX - prx; + var ry = rotation + shearY - prx + 90; + var la = spine.MathUtils.cosDeg(rx) * scaleX; + var lb = spine.MathUtils.cosDeg(ry) * scaleY; + var lc = spine.MathUtils.sinDeg(rx) * scaleX; + var ld = spine.MathUtils.sinDeg(ry) * scaleY; + this.a = pa * la - pb * lc; + this.b = pa * lb - pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + break; + } + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: { + var cos = spine.MathUtils.cosDeg(rotation); + var sin = spine.MathUtils.sinDeg(rotation); + var za = (pa * cos + pb * sin) / this.skeleton.scaleX; + var zc = (pc * cos + pd * sin) / this.skeleton.scaleY; + var s = Math.sqrt(za * za + zc * zc); + if (s > 0.00001) + s = 1 / s; + za *= s; + zc *= s; + s = Math.sqrt(za * za + zc * zc); + if (this.data.transformMode == spine.TransformMode.NoScale + && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) + s = -s; + var r = Math.PI / 2 + Math.atan2(zc, za); + var zb = Math.cos(r) * s; + var zd = Math.sin(r) * s; + var la = spine.MathUtils.cosDeg(shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY; + var lc = spine.MathUtils.sinDeg(shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY; + this.a = za * la + zb * lc; + this.b = za * lb + zb * ld; + this.c = zc * la + zd * lc; + this.d = zc * lb + zd * ld; + break; + } + } + this.a *= this.skeleton.scaleX; + this.b *= this.skeleton.scaleX; + this.c *= this.skeleton.scaleY; + this.d *= this.skeleton.scaleY; + }; + Bone.prototype.setToSetupPose = function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + this.shearX = data.shearX; + this.shearY = data.shearY; + }; + Bone.prototype.getWorldRotationX = function () { + return Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldRotationY = function () { + return Math.atan2(this.d, this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldScaleX = function () { + return Math.sqrt(this.a * this.a + this.c * this.c); + }; + Bone.prototype.getWorldScaleY = function () { + return Math.sqrt(this.b * this.b + this.d * this.d); + }; + Bone.prototype.updateAppliedTransform = function () { + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + this.ax = this.worldX; + this.ay = this.worldY; + this.arotation = Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c); + this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d); + this.ashearX = 0; + this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + var pid = 1 / (pa * pd - pb * pc); + var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY; + this.ax = (dx * pd * pid - dy * pb * pid); + this.ay = (dy * pa * pid - dx * pc * pid); + var ia = pid * pd; + var id = pid * pa; + var ib = pid * pb; + var ic = pid * pc; + var ra = ia * this.a - ib * this.c; + var rb = ia * this.b - ib * this.d; + var rc = id * this.c - ic * this.a; + var rd = id * this.d - ic * this.b; + this.ashearX = 0; + this.ascaleX = Math.sqrt(ra * ra + rc * rc); + if (this.ascaleX > 0.0001) { + var det = ra * rd - rb * rc; + this.ascaleY = det / this.ascaleX; + this.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg; + this.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg; + } + else { + this.ascaleX = 0; + this.ascaleY = Math.sqrt(rb * rb + rd * rd); + this.ashearY = 0; + this.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg; + } + }; + Bone.prototype.worldToLocal = function (world) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var invDet = 1 / (a * d - b * c); + var x = world.x - this.worldX, y = world.y - this.worldY; + world.x = (x * d * invDet - y * b * invDet); + world.y = (y * a * invDet - x * c * invDet); + return world; + }; + Bone.prototype.localToWorld = function (local) { + var x = local.x, y = local.y; + local.x = x * this.a + y * this.b + this.worldX; + local.y = x * this.c + y * this.d + this.worldY; + return local; + }; + Bone.prototype.worldToLocalRotation = function (worldRotation) { + var sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation); + return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg + this.rotation - this.shearX; + }; + Bone.prototype.localToWorldRotation = function (localRotation) { + localRotation -= this.rotation - this.shearX; + var sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation); + return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.rotateWorld = function (degrees) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees); + this.a = cos * a - sin * c; + this.b = cos * b - sin * d; + this.c = sin * a + cos * c; + this.d = sin * b + cos * d; + this.appliedValid = false; + }; + return Bone; + }()); + spine.Bone = Bone; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoneData = (function () { + function BoneData(index, name, parent) { + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 1; + this.scaleY = 1; + this.shearX = 0; + this.shearY = 0; + this.transformMode = TransformMode.Normal; + this.skinRequired = false; + this.color = new spine.Color(); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + this.index = index; + this.name = name; + this.parent = parent; + } + return BoneData; + }()); + spine.BoneData = BoneData; + var TransformMode; + (function (TransformMode) { + TransformMode[TransformMode["Normal"] = 0] = "Normal"; + TransformMode[TransformMode["OnlyTranslation"] = 1] = "OnlyTranslation"; + TransformMode[TransformMode["NoRotationOrReflection"] = 2] = "NoRotationOrReflection"; + TransformMode[TransformMode["NoScale"] = 3] = "NoScale"; + TransformMode[TransformMode["NoScaleOrReflection"] = 4] = "NoScaleOrReflection"; + })(TransformMode = spine.TransformMode || (spine.TransformMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var ConstraintData = (function () { + function ConstraintData(name, order, skinRequired) { + this.name = name; + this.order = order; + this.skinRequired = skinRequired; + } + return ConstraintData; + }()); + spine.ConstraintData = ConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Event = (function () { + function Event(time, data) { + if (data == null) + throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + return Event; + }()); + spine.Event = Event; +})(spine || (spine = {})); +var spine; +(function (spine) { + var EventData = (function () { + function EventData(name) { + this.name = name; + } + return EventData; + }()); + spine.EventData = EventData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraint = (function () { + function IkConstraint(data, skeleton) { + this.bendDirection = 0; + this.compress = false; + this.stretch = false; + this.mix = 1; + this.softness = 0; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + IkConstraint.prototype.isActive = function () { + return this.active; + }; + IkConstraint.prototype.apply = function () { + this.update(); + }; + IkConstraint.prototype.update = function () { + var target = this.target; + var bones = this.bones; + switch (bones.length) { + case 1: + this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); + break; + case 2: + this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix); + break; + } + }; + IkConstraint.prototype.apply1 = function (bone, targetX, targetY, compress, stretch, uniform, alpha) { + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var p = bone.parent; + var pa = p.a, pb = p.b, pc = p.c, pd = p.d; + var rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0; + switch (bone.data.transformMode) { + case spine.TransformMode.OnlyTranslation: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + break; + case spine.TransformMode.NoRotationOrReflection: + var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + var sa = pa / bone.skeleton.scaleX; + var sc = pc / bone.skeleton.scaleY; + pb = -sc * s * bone.skeleton.scaleX; + pd = sa * s * bone.skeleton.scaleY; + rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg; + default: + var x = targetX - p.worldX, y = targetY - p.worldY; + var d = pa * pd - pb * pc; + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + } + rotationIK += Math.atan2(ty, tx) * spine.MathUtils.radDeg; + if (bone.ascaleX < 0) + rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; + else if (rotationIK < -180) + rotationIK += 360; + var sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { + switch (bone.data.transformMode) { + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + } + var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty); + if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) { + var s = (dd / b - 1) * alpha + 1; + sx *= s; + if (uniform) + sy *= s; + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); + }; + IkConstraint.prototype.apply2 = function (parent, child, targetX, targetY, bendDir, stretch, softness, alpha) { + if (alpha == 0) { + child.updateWorldTransform(); + return; + } + if (!parent.appliedValid) + parent.updateAppliedTransform(); + if (!child.appliedValid) + child.updateAppliedTransform(); + var px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX; + var os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } + else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } + else + os2 = 0; + var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + var u = Math.abs(psx - psy) <= 0.0001; + if (!u) { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } + else { + cy = child.ay; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } + var pp = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; + if (l1 < 0.0001) { + this.apply1(parent, targetX, targetY, false, stretch, false, alpha); + child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + var dd = tx * tx + ty * ty; + if (softness != 0) { + softness *= psx * (csx + 1) / 2; + var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + var p = Math.min(1, sd / (softness * 2)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: if (u) { + l2 *= psx; + var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) + cos = -1; + else if (cos > 1) { + cos = 1; + if (stretch) + sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + } + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } + else { + a = psx * l2; + b = psy * l2; + var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + var c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + var q = Math.sqrt(d); + if (c1 < 0) + q = -q; + q = -(c1 + q) / 2; + var r0 = q / c2, r1 = c / q; + var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + if (r * r <= dd) { + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; + } + } + var minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; + } + } + if (dd <= (minDist + maxDist) / 2) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } + else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + var os = Math.atan2(cy, cx) * s2; + var rotation = parent.arotation; + a1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) + a1 += 360; + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0); + rotation = child.arotation; + a2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) + a2 += 360; + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + }; + return IkConstraint; + }()); + spine.IkConstraint = IkConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraintData = (function (_super) { + __extends(IkConstraintData, _super); + function IkConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.bendDirection = 1; + _this.compress = false; + _this.stretch = false; + _this.uniform = false; + _this.mix = 1; + _this.softness = 0; + return _this; + } + return IkConstraintData; + }(spine.ConstraintData)); + spine.IkConstraintData = IkConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraint = (function () { + function PathConstraint(data, skeleton) { + this.position = 0; + this.spacing = 0; + this.rotateMix = 0; + this.translateMix = 0; + this.spaces = new Array(); + this.positions = new Array(); + this.world = new Array(); + this.curves = new Array(); + this.lengths = new Array(); + this.segments = new Array(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0, n = data.bones.length; i < n; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findSlot(data.target.name); + this.position = data.position; + this.spacing = data.spacing; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + } + PathConstraint.prototype.isActive = function () { + return this.active; + }; + PathConstraint.prototype.apply = function () { + this.update(); + }; + PathConstraint.prototype.update = function () { + var attachment = this.target.getAttachment(); + if (!(attachment instanceof spine.PathAttachment)) + return; + var rotateMix = this.rotateMix, translateMix = this.translateMix; + var translate = translateMix > 0, rotate = rotateMix > 0; + if (!translate && !rotate) + return; + var data = this.data; + var percentSpacing = data.spacingMode == spine.SpacingMode.Percent; + var rotateMode = data.rotateMode; + var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; + var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + var bones = this.bones; + var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; + var spacing = this.spacing; + if (scale || !percentSpacing) { + if (scale) + lengths = spine.Utils.setArraySize(this.lengths, boneCount); + var lengthSpacing = data.spacingMode == spine.SpacingMode.Length; + for (var i = 0, n = spacesCount - 1; i < n;) { + var bone = bones[i]; + var setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + if (scale) + lengths[i] = 0; + spaces[++i] = 0; + } + else if (percentSpacing) { + if (scale) { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_1 = Math.sqrt(x * x + y * y); + lengths[i] = length_1; + } + spaces[++i] = spacing; + } + else { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_2 = Math.sqrt(x * x + y * y); + if (scale) + lengths[i] = length_2; + spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength; + } + } + } + else { + for (var i = 1; i < spacesCount; i++) + spaces[i] = spacing; + } + var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing); + var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + var tip = false; + if (offsetRotation == 0) + tip = rotateMode == spine.RotateMode.Chain; + else { + tip = false; + var p = this.target.bone; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + } + for (var i = 0, p = 3; i < boneCount; i++, p += 3) { + var bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * translateMix; + bone.worldY += (boneY - bone.worldY) * translateMix; + var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + var length_3 = lengths[i]; + if (length_3 != 0) { + var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * rotateMix + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + if (tangents) + r = positions[p - 1]; + else if (spaces[i + 1] == 0) + r = positions[p + 2]; + else + r = Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + var length_4 = bone.data.length; + boneX += (length_4 * (cos * a - sin * c) - dx) * rotateMix; + boneY += (length_4 * (sin * a + cos * c) - dy) * rotateMix; + } + else { + r += offsetRotation; + } + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.appliedValid = false; + } + }; + PathConstraint.prototype.computeWorldPositions = function (path, spacesCount, tangents, percentPosition, percentSpacing) { + var target = this.target; + var position = this.position; + var spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null; + var closed = path.closed; + var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE; + if (!path.constantSpeed) { + var lengths = path.lengths; + curveCount -= closed ? 1 : 2; + var pathLength_1 = lengths[curveCount]; + if (percentPosition) + position *= pathLength_1; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength_1; + } + world = spine.Utils.setArraySize(this.world, 8); + for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength_1; + if (p < 0) + p += pathLength_1; + curve = 0; + } + else if (p < 0) { + if (prevCurve != PathConstraint.BEFORE) { + prevCurve = PathConstraint.BEFORE; + path.computeWorldVertices(target, 2, 4, world, 0, 2); + } + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength_1) { + if (prevCurve != PathConstraint.AFTER) { + prevCurve = PathConstraint.AFTER; + path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength_1, world, 0, out, o); + continue; + } + for (;; curve++) { + var length_5 = lengths[curve]; + if (p > length_5) + continue; + if (curve == 0) + p /= length_5; + else { + var prev = lengths[curve - 1]; + p = (p - prev) / (length_5 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); + path.computeWorldVertices(target, 0, 4, world, 4, 2); + } + else + path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2); + } + this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0)); + } + return out; + } + if (closed) { + verticesLength += 2; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); + path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } + else { + curveCount--; + verticesLength -= 4; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + var curves = spine.Utils.setArraySize(this.curves, curveCount); + var pathLength = 0; + var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (var i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (percentPosition) + position *= pathLength; + else + position *= pathLength / path.lengths[curveCount - 1]; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength; + } + var segments = this.segments; + var curveLength = 0; + for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength; + if (p < 0) + p += pathLength; + curve = 0; + } + else if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + for (;; curve++) { + var length_6 = curves[curve]; + if (p > length_6) + continue; + if (curve == 0) + p /= length_6; + else { + var prev = curves[curve - 1]; + p = (p - prev) / (length_6 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + var ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + p *= curveLength; + for (;; segment++) { + var length_7 = segments[segment]; + if (p > length_7) + continue; + if (segment == 0) + p /= length_7; + else { + var prev = segments[segment - 1]; + p = segment + (p - prev) / (length_7 - prev); + } + break; + } + this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); + } + return out; + }; + PathConstraint.prototype.addBeforePosition = function (p, temp, i, out, o) { + var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addAfterPosition = function (p, temp, i, out, o) { + var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addCurvePosition = function (p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { + if (p == 0 || isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + var ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) { + if (p < 0.001) + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + else + out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + }; + PathConstraint.NONE = -1; + PathConstraint.BEFORE = -2; + PathConstraint.AFTER = -3; + PathConstraint.epsilon = 0.00001; + return PathConstraint; + }()); + spine.PathConstraint = PathConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraintData = (function (_super) { + __extends(PathConstraintData, _super); + function PathConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + return _this; + } + return PathConstraintData; + }(spine.ConstraintData)); + spine.PathConstraintData = PathConstraintData; + var PositionMode; + (function (PositionMode) { + PositionMode[PositionMode["Fixed"] = 0] = "Fixed"; + PositionMode[PositionMode["Percent"] = 1] = "Percent"; + })(PositionMode = spine.PositionMode || (spine.PositionMode = {})); + var SpacingMode; + (function (SpacingMode) { + SpacingMode[SpacingMode["Length"] = 0] = "Length"; + SpacingMode[SpacingMode["Fixed"] = 1] = "Fixed"; + SpacingMode[SpacingMode["Percent"] = 2] = "Percent"; + })(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {})); + var RotateMode; + (function (RotateMode) { + RotateMode[RotateMode["Tangent"] = 0] = "Tangent"; + RotateMode[RotateMode["Chain"] = 1] = "Chain"; + RotateMode[RotateMode["ChainScale"] = 2] = "ChainScale"; + })(RotateMode = spine.RotateMode || (spine.RotateMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Assets = (function () { + function Assets(clientId) { + this.toLoad = new Array(); + this.assets = {}; + this.clientId = clientId; + } + Assets.prototype.loaded = function () { + var i = 0; + for (var v in this.assets) + i++; + return i; + }; + return Assets; + }()); + var SharedAssetManager = (function () { + function SharedAssetManager(pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.clientAssets = {}; + this.queuedAssets = {}; + this.rawAssets = {}; + this.errors = {}; + this.pathPrefix = pathPrefix; + } + SharedAssetManager.prototype.queueAsset = function (clientId, textureLoader, path) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) { + clientAssets = new Assets(clientId); + this.clientAssets[clientId] = clientAssets; + } + if (textureLoader !== null) + clientAssets.textureLoader = textureLoader; + clientAssets.toLoad.push(path); + if (this.queuedAssets[path] === path) { + return false; + } + else { + this.queuedAssets[path] = path; + return true; + } + }; + SharedAssetManager.prototype.loadText = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = request.responseText; + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadJson = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = JSON.parse(request.responseText); + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadTexture = function (clientId, textureLoader, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, textureLoader, path)) + return; + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + if (isWebWorker) { + var options = { mode: "cors" }; + fetch(path, options).then(function (response) { + if (!response.ok) { + _this.errors[path] = "Couldn't load image " + path; + } + return response.blob(); + }).then(function (blob) { + return createImageBitmap(blob, { + premultiplyAlpha: 'none', + colorSpaceConversion: 'none' + }); + }).then(function (bitmap) { + _this.rawAssets[path] = bitmap; + }); + } + else { + var img_1 = new Image(); + img_1.crossOrigin = "anonymous"; + img_1.onload = function (ev) { + _this.rawAssets[path] = img_1; + }; + img_1.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + }; + img_1.src = path; + } + }; + SharedAssetManager.prototype.get = function (clientId, path) { + path = this.pathPrefix + path; + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + return clientAssets.assets[path]; + }; + SharedAssetManager.prototype.updateClientAssets = function (clientAssets) { + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + for (var i = 0; i < clientAssets.toLoad.length; i++) { + var path = clientAssets.toLoad[i]; + var asset = clientAssets.assets[path]; + if (asset === null || asset === undefined) { + var rawAsset = this.rawAssets[path]; + if (rawAsset === null || rawAsset === undefined) + continue; + if (isWebWorker) { + if (rawAsset instanceof ImageBitmap) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + else { + if (rawAsset instanceof HTMLImageElement) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + } + } + }; + SharedAssetManager.prototype.isLoadingComplete = function (clientId) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + this.updateClientAssets(clientAssets); + return clientAssets.toLoad.length == clientAssets.loaded(); + }; + SharedAssetManager.prototype.dispose = function () { + }; + SharedAssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + SharedAssetManager.prototype.getErrors = function () { + return this.errors; + }; + return SharedAssetManager; + }()); + spine.SharedAssetManager = SharedAssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Skeleton = (function () { + function Skeleton(data) { + this._updateCache = new Array(); + this.updateCacheReset = new Array(); + this.time = 0; + this.scaleX = 1; + this.scaleY = 1; + this.x = 0; + this.y = 0; + if (data == null) + throw new Error("data cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) { + var boneData = data.bones[i]; + var bone = void 0; + if (boneData.parent == null) + bone = new spine.Bone(boneData, this, null); + else { + var parent_1 = this.bones[boneData.parent.index]; + bone = new spine.Bone(boneData, this, parent_1); + parent_1.children.push(bone); + } + this.bones.push(bone); + } + this.slots = new Array(); + this.drawOrder = new Array(); + for (var i = 0; i < data.slots.length; i++) { + var slotData = data.slots[i]; + var bone = this.bones[slotData.boneData.index]; + var slot = new spine.Slot(slotData, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } + this.ikConstraints = new Array(); + for (var i = 0; i < data.ikConstraints.length; i++) { + var ikConstraintData = data.ikConstraints[i]; + this.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this)); + } + this.transformConstraints = new Array(); + for (var i = 0; i < data.transformConstraints.length; i++) { + var transformConstraintData = data.transformConstraints[i]; + this.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this)); + } + this.pathConstraints = new Array(); + for (var i = 0; i < data.pathConstraints.length; i++) { + var pathConstraintData = data.pathConstraints[i]; + this.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this)); + } + this.color = new spine.Color(1, 1, 1, 1); + this.updateCache(); + } + Skeleton.prototype.updateCache = function () { + var updateCache = this._updateCache; + updateCache.length = 0; + this.updateCacheReset.length = 0; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + } + if (this.skin != null) { + var skinBones = this.skin.bones; + for (var i = 0, n = this.skin.bones.length; i < n; i++) { + var bone = this.bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (bone != null); + } + } + var ikConstraints = this.ikConstraints; + var transformConstraints = this.transformConstraints; + var pathConstraints = this.pathConstraints; + var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length; + var constraintCount = ikCount + transformCount + pathCount; + outer: for (var i = 0; i < constraintCount; i++) { + for (var ii = 0; ii < ikCount; ii++) { + var constraint = ikConstraints[ii]; + if (constraint.data.order == i) { + this.sortIkConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < transformCount; ii++) { + var constraint = transformConstraints[ii]; + if (constraint.data.order == i) { + this.sortTransformConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < pathCount; ii++) { + var constraint = pathConstraints[ii]; + if (constraint.data.order == i) { + this.sortPathConstraint(constraint); + continue outer; + } + } + } + for (var i = 0, n = bones.length; i < n; i++) + this.sortBone(bones[i]); + }; + Skeleton.prototype.sortIkConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var target = constraint.target; + this.sortBone(target); + var constrained = constraint.bones; + var parent = constrained[0]; + this.sortBone(parent); + if (constrained.length > 1) { + var child = constrained[constrained.length - 1]; + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + this._updateCache.push(constraint); + this.sortReset(parent.children); + constrained[constrained.length - 1].sorted = true; + }; + Skeleton.prototype.sortPathConstraint = function (constraint) { + constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var slot = constraint.target; + var slotIndex = slot.data.index; + var slotBone = slot.bone; + if (this.skin != null) + this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); + if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin) + this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); + for (var i = 0, n = this.data.skins.length; i < n; i++) + this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); + var attachment = slot.getAttachment(); + if (attachment instanceof spine.PathAttachment) + this.sortPathConstraintAttachmentWith(attachment, slotBone); + var constrained = constraint.bones; + var boneCount = constrained.length; + for (var i = 0; i < boneCount; i++) + this.sortBone(constrained[i]); + this._updateCache.push(constraint); + for (var i = 0; i < boneCount; i++) + this.sortReset(constrained[i].children); + for (var i = 0; i < boneCount; i++) + constrained[i].sorted = true; + }; + Skeleton.prototype.sortTransformConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + this.sortBone(constraint.target); + var constrained = constraint.bones; + var boneCount = constrained.length; + if (constraint.data.local) { + for (var i = 0; i < boneCount; i++) { + var child = constrained[i]; + this.sortBone(child.parent); + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + } + else { + for (var i = 0; i < boneCount; i++) { + this.sortBone(constrained[i]); + } + } + this._updateCache.push(constraint); + for (var ii = 0; ii < boneCount; ii++) + this.sortReset(constrained[ii].children); + for (var ii = 0; ii < boneCount; ii++) + constrained[ii].sorted = true; + }; + Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) { + var attachments = skin.attachments[slotIndex]; + if (!attachments) + return; + for (var key in attachments) { + this.sortPathConstraintAttachmentWith(attachments[key], slotBone); + } + }; + Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) { + if (!(attachment instanceof spine.PathAttachment)) + return; + var pathBones = attachment.bones; + if (pathBones == null) + this.sortBone(slotBone); + else { + var bones = this.bones; + var i = 0; + while (i < pathBones.length) { + var boneCount = pathBones[i++]; + for (var n = i + boneCount; i < n; i++) { + var boneIndex = pathBones[i]; + this.sortBone(bones[boneIndex]); + } + } + } + }; + Skeleton.prototype.sortBone = function (bone) { + if (bone.sorted) + return; + var parent = bone.parent; + if (parent != null) + this.sortBone(parent); + bone.sorted = true; + this._updateCache.push(bone); + }; + Skeleton.prototype.sortReset = function (bones) { + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.active) + continue; + if (bone.sorted) + this.sortReset(bone.children); + bone.sorted = false; + } + }; + Skeleton.prototype.updateWorldTransform = function () { + var updateCacheReset = this.updateCacheReset; + for (var i = 0, n = updateCacheReset.length; i < n; i++) { + var bone = updateCacheReset[i]; + bone.ax = bone.x; + bone.ay = bone.y; + bone.arotation = bone.rotation; + bone.ascaleX = bone.scaleX; + bone.ascaleY = bone.scaleY; + bone.ashearX = bone.shearX; + bone.ashearY = bone.shearY; + bone.appliedValid = true; + } + var updateCache = this._updateCache; + for (var i = 0, n = updateCache.length; i < n; i++) + updateCache[i].update(); + }; + Skeleton.prototype.setToSetupPose = function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }; + Skeleton.prototype.setBonesToSetupPose = function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + var data = constraint.data; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + } + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + var data = constraint.data; + constraint.position = data.position; + constraint.spacing = data.spacing; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + } + }; + Skeleton.prototype.setSlotsToSetupPose = function () { + var slots = this.slots; + spine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length); + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(); + }; + Skeleton.prototype.getRootBone = function () { + if (this.bones.length == 0) + return null; + return this.bones[0]; + }; + Skeleton.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.data.name == boneName) + return bone; + } + return null; + }; + Skeleton.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) + return i; + return -1; + }; + Skeleton.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) + return slot; + } + return null; + }; + Skeleton.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) + return i; + return -1; + }; + Skeleton.prototype.setSkinByName = function (skinName) { + var skin = this.data.findSkin(skinName); + if (skin == null) + throw new Error("Skin not found: " + skinName); + this.setSkin(skin); + }; + Skeleton.prototype.setSkin = function (newSkin) { + if (newSkin == this.skin) + return; + if (newSkin != null) { + if (this.skin != null) + newSkin.attachAll(this, this.skin); + else { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var name_1 = slot.data.attachmentName; + if (name_1 != null) { + var attachment = newSkin.getAttachment(i, name_1); + if (attachment != null) + slot.setAttachment(attachment); + } + } + } + } + this.skin = newSkin; + this.updateCache(); + }; + Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) { + return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName); + }; + Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) { + if (attachmentName == null) + throw new Error("attachmentName cannot be null."); + if (this.skin != null) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment != null) + return attachment; + } + if (this.data.defaultSkin != null) + return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }; + Skeleton.prototype.setAttachment = function (slotName, attachmentName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName != null) { + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) + throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); + } + slot.setAttachment(attachment); + return; + } + } + throw new Error("Slot not found: " + slotName); + }; + Skeleton.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var ikConstraint = ikConstraints[i]; + if (ikConstraint.data.name == constraintName) + return ikConstraint; + } + return null; + }; + Skeleton.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.getBounds = function (offset, size, temp) { + if (temp === void 0) { temp = new Array(2); } + if (offset == null) + throw new Error("offset cannot be null."); + if (size == null) + throw new Error("size cannot be null."); + var drawOrder = this.drawOrder; + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + if (!slot.bone.active) + continue; + var verticesLength = 0; + var vertices = null; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.RegionAttachment) { + verticesLength = 8; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + attachment.computeWorldVertices(slot.bone, vertices, 0, 2); + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + verticesLength = mesh.worldVerticesLength; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); + } + if (vertices != null) { + for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) { + var x = vertices[ii], y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + } + offset.set(minX, minY); + size.set(maxX - minX, maxY - minY); + }; + Skeleton.prototype.update = function (delta) { + this.time += delta; + }; + return Skeleton; + }()); + spine.Skeleton = Skeleton; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBinary = (function () { + function SkeletonBinary(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonBinary.prototype.readSkeletonData = function (binary) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + skeletonData.name = ""; + var input = new BinaryInput(binary); + skeletonData.hash = input.readString(); + skeletonData.version = input.readString(); + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + var nonessential = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + var n = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) + input.strings.push(input.readString()); + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var name_2 = input.readString(); + var parent_2 = i == 0 ? null : skeletonData.bones[input.readInt(true)]; + var data = new spine.BoneData(i, name_2, parent_2); + data.rotation = input.readFloat(); + data.x = input.readFloat() * scale; + data.y = input.readFloat() * scale; + data.scaleX = input.readFloat(); + data.scaleY = input.readFloat(); + data.shearX = input.readFloat(); + data.shearY = input.readFloat(); + data.length = input.readFloat() * scale; + data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)]; + data.skinRequired = input.readBoolean(); + if (nonessential) + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + skeletonData.bones.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var slotName = input.readString(); + var boneData = skeletonData.bones[input.readInt(true)]; + var data = new spine.SlotData(i, slotName, boneData); + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + var darkColor = input.readInt32(); + if (darkColor != -1) + spine.Color.rgb888ToColor(data.darkColor = new spine.Color(), darkColor); + data.attachmentName = input.readStringRef(); + data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)]; + skeletonData.slots.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.IkConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.mix = input.readFloat(); + data.softness = input.readFloat() * scale; + data.bendDirection = input.readByte(); + data.compress = input.readBoolean(); + data.stretch = input.readBoolean(); + data.uniform = input.readBoolean(); + skeletonData.ikConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.TransformConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.local = input.readBoolean(); + data.relative = input.readBoolean(); + data.offsetRotation = input.readFloat(); + data.offsetX = input.readFloat() * scale; + data.offsetY = input.readFloat() * scale; + data.offsetScaleX = input.readFloat(); + data.offsetScaleY = input.readFloat(); + data.offsetShearY = input.readFloat(); + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + data.scaleMix = input.readFloat(); + data.shearMix = input.readFloat(); + skeletonData.transformConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.PathConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.slots[input.readInt(true)]; + data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)]; + data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)]; + data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)]; + data.offsetRotation = input.readFloat(); + data.position = input.readFloat(); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = input.readFloat(); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + skeletonData.pathConstraints.push(data); + } + var defaultSkin = this.readSkin(input, skeletonData, true, nonessential); + if (defaultSkin != null) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + { + var i = skeletonData.skins.length; + spine.Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true)); + for (; i < n; i++) + skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential); + } + n = this.linkedMeshes.length; + for (var i = 0; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_3 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_3 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_3); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var data = new spine.EventData(input.readStringRef()); + data.intValue = input.readInt(false); + data.floatValue = input.readFloat(); + data.stringValue = input.readString(); + data.audioPath = input.readString(); + if (data.audioPath != null) { + data.volume = input.readFloat(); + data.balance = input.readFloat(); + } + skeletonData.events.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) + skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData)); + return skeletonData; + }; + SkeletonBinary.prototype.readSkin = function (input, skeletonData, defaultSkin, nonessential) { + var skin = null; + var slotCount = 0; + if (defaultSkin) { + slotCount = input.readInt(true); + if (slotCount == 0) + return null; + skin = new spine.Skin("default"); + } + else { + skin = new spine.Skin(input.readStringRef()); + skin.bones.length = input.readInt(true); + for (var i = 0, n = skin.bones.length; i < n; i++) + skin.bones[i] = skeletonData.bones[input.readInt(true)]; + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]); + slotCount = input.readInt(true); + } + for (var i = 0; i < slotCount; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var name_3 = input.readStringRef(); + var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_3, nonessential); + if (attachment != null) + skin.setAttachment(slotIndex, name_3, attachment); + } + } + return skin; + }; + SkeletonBinary.prototype.readAttachment = function (input, skeletonData, skin, slotIndex, attachmentName, nonessential) { + var scale = this.scale; + var name = input.readStringRef(); + if (name == null) + name = attachmentName; + var typeIndex = input.readByte(); + var type = SkeletonBinary.AttachmentTypeValues[typeIndex]; + switch (type) { + case spine.AttachmentType.Region: { + var path = input.readStringRef(); + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var scaleX = input.readFloat(); + var scaleY = input.readFloat(); + var width = input.readFloat(); + var height = input.readFloat(); + var color = input.readInt32(); + if (path == null) + path = name; + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = x * scale; + region.y = y * scale; + region.scaleX = scaleX; + region.scaleY = scaleY; + region.rotation = rotation; + region.width = width * scale; + region.height = height * scale; + spine.Color.rgba8888ToColor(region.color, color); + region.updateOffset(); + return region; + } + case spine.AttachmentType.BoundingBox: { + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + box.worldVerticesLength = vertexCount << 1; + box.vertices = vertices.vertices; + box.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(box.color, color); + return box; + } + case spine.AttachmentType.Mesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var vertexCount = input.readInt(true); + var uvs = this.readFloatArray(input, vertexCount << 1, 1); + var triangles = this.readShortArray(input); + var vertices = this.readVertices(input, vertexCount); + var hullLength = input.readInt(true); + var edges = null; + var width = 0, height = 0; + if (nonessential) { + edges = this.readShortArray(input); + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertexCount << 1; + mesh.triangles = triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.hullLength = hullLength << 1; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + return mesh; + } + case spine.AttachmentType.LinkedMesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var skinName = input.readStringRef(); + var parent_4 = input.readStringRef(); + var inheritDeform = input.readBoolean(); + var width = 0, height = 0; + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_4, inheritDeform)); + return mesh; + } + case spine.AttachmentType.Path: { + var closed_1 = input.readBoolean(); + var constantSpeed = input.readBoolean(); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0, n = lengths.length; i < n; i++) + lengths[i] = input.readFloat() * scale; + var color = nonessential ? input.readInt32() : 0; + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = closed_1; + path.constantSpeed = constantSpeed; + path.worldVerticesLength = vertexCount << 1; + path.vertices = vertices.vertices; + path.bones = vertices.bones; + path.lengths = lengths; + if (nonessential) + spine.Color.rgba8888ToColor(path.color, color); + return path; + } + case spine.AttachmentType.Point: { + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var color = nonessential ? input.readInt32() : 0; + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + if (nonessential) + spine.Color.rgba8888ToColor(point.color, color); + return point; + } + case spine.AttachmentType.Clipping: { + var endSlotIndex = input.readInt(true); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.worldVerticesLength = vertexCount << 1; + clip.vertices = vertices.vertices; + clip.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(clip.color, color); + return clip; + } + } + return null; + }; + SkeletonBinary.prototype.readVertices = function (input, vertexCount) { + var verticesLength = vertexCount << 1; + var vertices = new Vertices(); + var scale = this.scale; + if (!input.readBoolean()) { + vertices.vertices = this.readFloatArray(input, verticesLength, scale); + return vertices; + } + var weights = new Array(); + var bonesArray = new Array(); + for (var i = 0; i < vertexCount; i++) { + var boneCount = input.readInt(true); + bonesArray.push(boneCount); + for (var ii = 0; ii < boneCount; ii++) { + bonesArray.push(input.readInt(true)); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat()); + } + } + vertices.vertices = spine.Utils.toFloatArray(weights); + vertices.bones = bonesArray; + return vertices; + }; + SkeletonBinary.prototype.readFloatArray = function (input, n, scale) { + var array = new Array(n); + if (scale == 1) { + for (var i = 0; i < n; i++) + array[i] = input.readFloat(); + } + else { + for (var i = 0; i < n; i++) + array[i] = input.readFloat() * scale; + } + return array; + }; + SkeletonBinary.prototype.readShortArray = function (input) { + var n = input.readInt(true); + var array = new Array(n); + for (var i = 0; i < n; i++) + array[i] = input.readShort(); + return array; + }; + SkeletonBinary.prototype.readAnimation = function (input, name, skeletonData) { + var timelines = new Array(); + var scale = this.scale; + var duration = 0; + var tempColor1 = new spine.Color(); + var tempColor2 = new spine.Color(); + for (var i = 0, n = input.readInt(true); i < n; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.SLOT_ATTACHMENT: { + var timeline = new spine.AttachmentTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) + timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef()); + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + break; + } + case SkeletonBinary.SLOT_COLOR: { + var timeline = new spine.ColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.ColorTimeline.ENTRIES]); + break; + } + case SkeletonBinary.SLOT_TWO_COLOR: { + var timeline = new spine.TwoColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + spine.Color.rgb888ToColor(tempColor2, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TwoColorTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var boneIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.BONE_ROTATE: { + var timeline = new spine.RotateTimeline(frameCount); + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.RotateTimeline.ENTRIES]); + break; + } + case SkeletonBinary.BONE_TRANSLATE: + case SkeletonBinary.BONE_SCALE: + case SkeletonBinary.BONE_SHEAR: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.BONE_SCALE) + timeline = new spine.ScaleTimeline(frameCount); + else if (timelineType == SkeletonBinary.BONE_SHEAR) + timeline = new spine.ShearTimeline(frameCount); + else { + timeline = new spine.TranslateTimeline(frameCount); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TranslateTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.IkConstraintTimeline(frameCount); + timeline.ikConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.TransformConstraintTimeline(frameCount); + timeline.transformConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var data = skeletonData.pathConstraints[index]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.PATH_POSITION: + case SkeletonBinary.PATH_SPACING: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.PATH_SPACING) { + timeline = new spine.PathConstraintSpacingTimeline(frameCount); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(frameCount); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + break; + } + case SkeletonBinary.PATH_MIX: { + var timeline = new spine.PathConstraintMixTimeline(frameCount); + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var skin = skeletonData.skins[input.readInt(true)]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var slotIndex = input.readInt(true); + for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { + var attachment = skin.getAttachment(slotIndex, input.readStringRef()); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var frameCount = input.readInt(true); + var timeline = new spine.DeformTimeline(frameCount); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + var deform = void 0; + var end = input.readInt(true); + if (end == 0) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = input.readInt(true); + end += start; + if (scale == 1) { + for (var v = start; v < end; v++) + deform[v] = input.readFloat(); + } + else { + for (var v = start; v < end; v++) + deform[v] = input.readFloat() * scale; + } + if (!weighted) { + for (var v = 0, vn = deform.length; v < vn; v++) + deform[v] += vertices[v]; + } + } + timeline.setFrame(frameIndex, time, deform); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + } + } + } + var drawOrderCount = input.readInt(true); + if (drawOrderCount > 0) { + var timeline = new spine.DrawOrderTimeline(drawOrderCount); + var slotCount = skeletonData.slots.length; + for (var i = 0; i < drawOrderCount; i++) { + var time = input.readFloat(); + var offsetCount = input.readInt(true); + var drawOrder = spine.Utils.newArray(slotCount, 0); + for (var ii = slotCount - 1; ii >= 0; ii--) + drawOrder[ii] = -1; + var unchanged = spine.Utils.newArray(slotCount - offsetCount, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var ii = 0; ii < offsetCount; ii++) { + var slotIndex = input.readInt(true); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + input.readInt(true)] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var ii = slotCount - 1; ii >= 0; ii--) + if (drawOrder[ii] == -1) + drawOrder[ii] = unchanged[--unchangedIndex]; + timeline.setFrame(i, time, drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[drawOrderCount - 1]); + } + var eventCount = input.readInt(true); + if (eventCount > 0) { + var timeline = new spine.EventTimeline(eventCount); + for (var i = 0; i < eventCount; i++) { + var time = input.readFloat(); + var eventData = skeletonData.events[input.readInt(true)]; + var event_4 = new spine.Event(time, eventData); + event_4.intValue = input.readInt(false); + event_4.floatValue = input.readFloat(); + event_4.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue; + if (event_4.data.audioPath != null) { + event_4.volume = input.readFloat(); + event_4.balance = input.readFloat(); + } + timeline.setFrame(i, event_4); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[eventCount - 1]); + } + return new spine.Animation(name, timelines, duration); + }; + SkeletonBinary.prototype.readCurve = function (input, frameIndex, timeline) { + switch (input.readByte()) { + case SkeletonBinary.CURVE_STEPPED: + timeline.setStepped(frameIndex); + break; + case SkeletonBinary.CURVE_BEZIER: + this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + break; + } + }; + SkeletonBinary.prototype.setCurve = function (timeline, frameIndex, cx1, cy1, cx2, cy2) { + timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2); + }; + SkeletonBinary.AttachmentTypeValues = [0, 1, 2, 3, 4, 5, 6]; + SkeletonBinary.TransformModeValues = [spine.TransformMode.Normal, spine.TransformMode.OnlyTranslation, spine.TransformMode.NoRotationOrReflection, spine.TransformMode.NoScale, spine.TransformMode.NoScaleOrReflection]; + SkeletonBinary.PositionModeValues = [spine.PositionMode.Fixed, spine.PositionMode.Percent]; + SkeletonBinary.SpacingModeValues = [spine.SpacingMode.Length, spine.SpacingMode.Fixed, spine.SpacingMode.Percent]; + SkeletonBinary.RotateModeValues = [spine.RotateMode.Tangent, spine.RotateMode.Chain, spine.RotateMode.ChainScale]; + SkeletonBinary.BlendModeValues = [spine.BlendMode.Normal, spine.BlendMode.Additive, spine.BlendMode.Multiply, spine.BlendMode.Screen]; + SkeletonBinary.BONE_ROTATE = 0; + SkeletonBinary.BONE_TRANSLATE = 1; + SkeletonBinary.BONE_SCALE = 2; + SkeletonBinary.BONE_SHEAR = 3; + SkeletonBinary.SLOT_ATTACHMENT = 0; + SkeletonBinary.SLOT_COLOR = 1; + SkeletonBinary.SLOT_TWO_COLOR = 2; + SkeletonBinary.PATH_POSITION = 0; + SkeletonBinary.PATH_SPACING = 1; + SkeletonBinary.PATH_MIX = 2; + SkeletonBinary.CURVE_LINEAR = 0; + SkeletonBinary.CURVE_STEPPED = 1; + SkeletonBinary.CURVE_BEZIER = 2; + return SkeletonBinary; + }()); + spine.SkeletonBinary = SkeletonBinary; + var BinaryInput = (function () { + function BinaryInput(data, strings, index, buffer) { + if (strings === void 0) { strings = new Array(); } + if (index === void 0) { index = 0; } + if (buffer === void 0) { buffer = new DataView(data.buffer); } + this.strings = strings; + this.index = index; + this.buffer = buffer; + } + BinaryInput.prototype.readByte = function () { + return this.buffer.getInt8(this.index++); + }; + BinaryInput.prototype.readShort = function () { + var value = this.buffer.getInt16(this.index); + this.index += 2; + return value; + }; + BinaryInput.prototype.readInt32 = function () { + var value = this.buffer.getInt32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readInt = function (optimizePositive) { + var b = this.readByte(); + var result = b & 0x7F; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 7; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 14; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 21; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 28; + } + } + } + } + return optimizePositive ? result : ((result >>> 1) ^ -(result & 1)); + }; + BinaryInput.prototype.readStringRef = function () { + var index = this.readInt(true); + return index == 0 ? null : this.strings[index - 1]; + }; + BinaryInput.prototype.readString = function () { + var byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + case 1: + return ""; + } + byteCount--; + var chars = ""; + var charCount = 0; + for (var i = 0; i < byteCount;) { + var b = this.readByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F)); + i += 2; + break; + case 14: + chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F)); + i += 3; + break; + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + }; + BinaryInput.prototype.readFloat = function () { + var value = this.buffer.getFloat32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readBoolean = function () { + return this.readByte() != 0; + }; + return BinaryInput; + }()); + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); + var Vertices = (function () { + function Vertices(bones, vertices) { + if (bones === void 0) { bones = null; } + if (vertices === void 0) { vertices = null; } + this.bones = bones; + this.vertices = vertices; + } + return Vertices; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBounds = (function () { + function SkeletonBounds() { + this.minX = 0; + this.minY = 0; + this.maxX = 0; + this.maxY = 0; + this.boundingBoxes = new Array(); + this.polygons = new Array(); + this.polygonPool = new spine.Pool(function () { + return spine.Utils.newFloatArray(16); + }); + } + SkeletonBounds.prototype.update = function (skeleton, updateAabb) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + var boundingBoxes = this.boundingBoxes; + var polygons = this.polygons; + var polygonPool = this.polygonPool; + var slots = skeleton.slots; + var slotCount = slots.length; + boundingBoxes.length = 0; + polygonPool.freeAll(polygons); + polygons.length = 0; + for (var i = 0; i < slotCount; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.BoundingBoxAttachment) { + var boundingBox = attachment; + boundingBoxes.push(boundingBox); + var polygon = polygonPool.obtain(); + if (polygon.length != boundingBox.worldVerticesLength) { + polygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength); + } + polygons.push(polygon); + boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2); + } + } + if (updateAabb) { + this.aabbCompute(); + } + else { + this.minX = Number.POSITIVE_INFINITY; + this.minY = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.maxY = Number.NEGATIVE_INFINITY; + } + }; + SkeletonBounds.prototype.aabbCompute = function () { + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) { + var polygon = polygons[i]; + var vertices = polygon; + for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) { + var x = vertices[ii]; + var y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + }; + SkeletonBounds.prototype.aabbContainsPoint = function (x, y) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + }; + SkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) { + var minX = this.minX; + var minY = this.minY; + var maxX = this.maxX; + var maxY = this.maxY; + if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY)) + return false; + var m = (y2 - y1) / (x2 - x1); + var y = m * (minX - x1) + y1; + if (y > minY && y < maxY) + return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) + return true; + var x = (minY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + return false; + }; + SkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + }; + SkeletonBounds.prototype.containsPoint = function (x, y) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.containsPointPolygon(polygons[i], x, y)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) { + var vertices = polygon; + var nn = polygon.length; + var prevIndex = nn - 2; + var inside = false; + for (var ii = 0; ii < nn; ii += 2) { + var vertexY = vertices[ii + 1]; + var prevY = vertices[prevIndex + 1]; + if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) { + var vertexX = vertices[ii]; + if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) + inside = !inside; + } + prevIndex = ii; + } + return inside; + }; + SkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) { + var vertices = polygon; + var nn = polygon.length; + var width12 = x1 - x2, height12 = y1 - y2; + var det1 = x1 * y2 - y1 * x2; + var x3 = vertices[nn - 2], y3 = vertices[nn - 1]; + for (var ii = 0; ii < nn; ii += 2) { + var x4 = vertices[ii], y4 = vertices[ii + 1]; + var det2 = x3 * y4 - y3 * x4; + var width34 = x3 - x4, height34 = y3 - y4; + var det3 = width12 * height34 - height12 * width34; + var x = (det1 * width34 - width12 * det2) / det3; + if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) { + var y = (det1 * height34 - height12 * det2) / det3; + if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1))) + return true; + } + x3 = x4; + y3 = y4; + } + return false; + }; + SkeletonBounds.prototype.getPolygon = function (boundingBox) { + if (boundingBox == null) + throw new Error("boundingBox cannot be null."); + var index = this.boundingBoxes.indexOf(boundingBox); + return index == -1 ? null : this.polygons[index]; + }; + SkeletonBounds.prototype.getWidth = function () { + return this.maxX - this.minX; + }; + SkeletonBounds.prototype.getHeight = function () { + return this.maxY - this.minY; + }; + return SkeletonBounds; + }()); + spine.SkeletonBounds = SkeletonBounds; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonClipping = (function () { + function SkeletonClipping() { + this.triangulator = new spine.Triangulator(); + this.clippingPolygon = new Array(); + this.clipOutput = new Array(); + this.clippedVertices = new Array(); + this.clippedTriangles = new Array(); + this.scratch = new Array(); + } + SkeletonClipping.prototype.clipStart = function (slot, clip) { + if (this.clipAttachment != null) + return 0; + this.clipAttachment = clip; + var n = clip.worldVerticesLength; + var vertices = spine.Utils.setArraySize(this.clippingPolygon, n); + clip.computeWorldVertices(slot, 0, n, vertices, 0, 2); + var clippingPolygon = this.clippingPolygon; + SkeletonClipping.makeClockwise(clippingPolygon); + var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)); + for (var i = 0, n_2 = clippingPolygons.length; i < n_2; i++) { + var polygon = clippingPolygons[i]; + SkeletonClipping.makeClockwise(polygon); + polygon.push(polygon[0]); + polygon.push(polygon[1]); + } + return clippingPolygons.length; + }; + SkeletonClipping.prototype.clipEndWithSlot = function (slot) { + if (this.clipAttachment != null && this.clipAttachment.endSlot == slot.data) + this.clipEnd(); + }; + SkeletonClipping.prototype.clipEnd = function () { + if (this.clipAttachment == null) + return; + this.clipAttachment = null; + this.clippingPolygons = null; + this.clippedVertices.length = 0; + this.clippedTriangles.length = 0; + this.clippingPolygon.length = 0; + }; + SkeletonClipping.prototype.isClipping = function () { + return this.clipAttachment != null; + }; + SkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) { + var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; + var clippedTriangles = this.clippedTriangles; + var polygons = this.clippingPolygons; + var polygonsCount = this.clippingPolygons.length; + var vertexSize = twoColor ? 12 : 8; + var index = 0; + clippedVertices.length = 0; + clippedTriangles.length = 0; + outer: for (var i = 0; i < trianglesLength; i += 3) { + var vertexOffset = triangles[i] << 1; + var x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; + var u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 1] << 1; + var x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1]; + var u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 2] << 1; + var x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1]; + var u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1]; + for (var p = 0; p < polygonsCount; p++) { + var s = clippedVertices.length; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { + var clipOutputLength = clipOutput.length; + if (clipOutputLength == 0) + continue; + var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1; + var d = 1 / (d0 * d2 + d1 * (y1 - y3)); + var clipOutputCount = clipOutputLength >> 1; + var clipOutputItems = this.clipOutput; + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); + for (var ii = 0; ii < clipOutputLength; ii += 2) { + var x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + var c0 = x - x3, c1 = y - y3; + var a = (d0 * c0 + d1 * c1) * d; + var b = (d4 * c0 + d2 * c1) * d; + var c = 1 - a - b; + clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c; + clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + } + s += vertexSize; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (var ii = 1; ii < clipOutputCount; ii++) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + ii); + clippedTrianglesItems[s + 2] = (index + ii + 1); + s += 3; + } + index += clipOutputCount + 1; + } + else { + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + if (!twoColor) { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = x2; + clippedVerticesItems[s + 9] = y2; + clippedVerticesItems[s + 10] = light.r; + clippedVerticesItems[s + 11] = light.g; + clippedVerticesItems[s + 12] = light.b; + clippedVerticesItems[s + 13] = light.a; + clippedVerticesItems[s + 14] = u2; + clippedVerticesItems[s + 15] = v2; + clippedVerticesItems[s + 16] = x3; + clippedVerticesItems[s + 17] = y3; + clippedVerticesItems[s + 18] = light.r; + clippedVerticesItems[s + 19] = light.g; + clippedVerticesItems[s + 20] = light.b; + clippedVerticesItems[s + 21] = light.a; + clippedVerticesItems[s + 22] = u3; + clippedVerticesItems[s + 23] = v3; + } + else { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + clippedVerticesItems[s + 12] = x2; + clippedVerticesItems[s + 13] = y2; + clippedVerticesItems[s + 14] = light.r; + clippedVerticesItems[s + 15] = light.g; + clippedVerticesItems[s + 16] = light.b; + clippedVerticesItems[s + 17] = light.a; + clippedVerticesItems[s + 18] = u2; + clippedVerticesItems[s + 19] = v2; + clippedVerticesItems[s + 20] = dark.r; + clippedVerticesItems[s + 21] = dark.g; + clippedVerticesItems[s + 22] = dark.b; + clippedVerticesItems[s + 23] = dark.a; + clippedVerticesItems[s + 24] = x3; + clippedVerticesItems[s + 25] = y3; + clippedVerticesItems[s + 26] = light.r; + clippedVerticesItems[s + 27] = light.g; + clippedVerticesItems[s + 28] = light.b; + clippedVerticesItems[s + 29] = light.a; + clippedVerticesItems[s + 30] = u3; + clippedVerticesItems[s + 31] = v3; + clippedVerticesItems[s + 32] = dark.r; + clippedVerticesItems[s + 33] = dark.g; + clippedVerticesItems[s + 34] = dark.b; + clippedVerticesItems[s + 35] = dark.a; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + 1); + clippedTrianglesItems[s + 2] = (index + 2); + index += 3; + continue outer; + } + } + } + }; + SkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) { + var originalOutput = output; + var clipped = false; + var input = null; + if (clippingArea.length % 4 >= 2) { + input = output; + output = this.scratch; + } + else + input = this.scratch; + input.length = 0; + input.push(x1); + input.push(y1); + input.push(x2); + input.push(y2); + input.push(x3); + input.push(y3); + input.push(x1); + input.push(y1); + output.length = 0; + var clippingVertices = clippingArea; + var clippingVerticesLast = clippingArea.length - 4; + for (var i = 0;; i += 2) { + var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1]; + var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3]; + var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2; + var inputVertices = input; + var inputVerticesLength = input.length - 2, outputStart = output.length; + for (var ii = 0; ii < inputVerticesLength; ii += 2) { + var inputX = inputVertices[ii], inputY = inputVertices[ii + 1]; + var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3]; + var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0; + if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) { + if (side2) { + output.push(inputX2); + output.push(inputY2); + continue; + } + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + } + else if (side2) { + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + output.push(inputX2); + output.push(inputY2); + } + clipped = true; + } + if (outputStart == output.length) { + originalOutput.length = 0; + return true; + } + output.push(output[0]); + output.push(output[1]); + if (i == clippingVerticesLast) + break; + var temp = output; + output = input; + output.length = 0; + input = temp; + } + if (originalOutput != output) { + originalOutput.length = 0; + for (var i = 0, n = output.length - 2; i < n; i++) + originalOutput[i] = output[i]; + } + else + originalOutput.length = originalOutput.length - 2; + return clipped; + }; + SkeletonClipping.makeClockwise = function (polygon) { + var vertices = polygon; + var verticeslength = polygon.length; + var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0; + for (var i = 0, n = verticeslength - 3; i < n; i += 2) { + p1x = vertices[i]; + p1y = vertices[i + 1]; + p2x = vertices[i + 2]; + p2y = vertices[i + 3]; + area += p1x * p2y - p2x * p1y; + } + if (area < 0) + return; + for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) { + var x = vertices[i], y = vertices[i + 1]; + var other = lastX - i; + vertices[i] = vertices[other]; + vertices[i + 1] = vertices[other + 1]; + vertices[other] = x; + vertices[other + 1] = y; + } + }; + return SkeletonClipping; + }()); + spine.SkeletonClipping = SkeletonClipping; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonData = (function () { + function SkeletonData() { + this.bones = new Array(); + this.slots = new Array(); + this.skins = new Array(); + this.events = new Array(); + this.animations = new Array(); + this.ikConstraints = new Array(); + this.transformConstraints = new Array(); + this.pathConstraints = new Array(); + this.fps = 0; + } + SkeletonData.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.name == boneName) + return bone; + } + return null; + }; + SkeletonData.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) + return i; + return -1; + }; + SkeletonData.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.name == slotName) + return slot; + } + return null; + }; + SkeletonData.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) + return i; + return -1; + }; + SkeletonData.prototype.findSkin = function (skinName) { + if (skinName == null) + throw new Error("skinName cannot be null."); + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) { + var skin = skins[i]; + if (skin.name == skinName) + return skin; + } + return null; + }; + SkeletonData.prototype.findEvent = function (eventDataName) { + if (eventDataName == null) + throw new Error("eventDataName cannot be null."); + var events = this.events; + for (var i = 0, n = events.length; i < n; i++) { + var event_5 = events[i]; + if (event_5.name == eventDataName) + return event_5; + } + return null; + }; + SkeletonData.prototype.findAnimation = function (animationName) { + if (animationName == null) + throw new Error("animationName cannot be null."); + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) { + var animation = animations[i]; + if (animation.name == animationName) + return animation; + } + return null; + }; + SkeletonData.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraintIndex = function (pathConstraintName) { + if (pathConstraintName == null) + throw new Error("pathConstraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) + if (pathConstraints[i].name == pathConstraintName) + return i; + return -1; + }; + return SkeletonData; + }()); + spine.SkeletonData = SkeletonData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonJson = (function () { + function SkeletonJson(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonJson.prototype.readSkeletonData = function (json) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + var root = typeof (json) === "string" ? JSON.parse(json) : json; + var skeletonMap = root.skeleton; + if (skeletonMap != null) { + skeletonData.hash = skeletonMap.hash; + skeletonData.version = skeletonMap.spine; + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = skeletonMap.x; + skeletonData.y = skeletonMap.y; + skeletonData.width = skeletonMap.width; + skeletonData.height = skeletonMap.height; + skeletonData.fps = skeletonMap.fps; + skeletonData.imagesPath = skeletonMap.images; + } + if (root.bones) { + for (var i = 0; i < root.bones.length; i++) { + var boneMap = root.bones[i]; + var parent_5 = null; + var parentName = this.getValue(boneMap, "parent", null); + if (parentName != null) { + parent_5 = skeletonData.findBone(parentName); + if (parent_5 == null) + throw new Error("Parent bone not found: " + parentName); + } + var data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_5); + data.length = this.getValue(boneMap, "length", 0) * scale; + data.x = this.getValue(boneMap, "x", 0) * scale; + data.y = this.getValue(boneMap, "y", 0) * scale; + data.rotation = this.getValue(boneMap, "rotation", 0); + data.scaleX = this.getValue(boneMap, "scaleX", 1); + data.scaleY = this.getValue(boneMap, "scaleY", 1); + data.shearX = this.getValue(boneMap, "shearX", 0); + data.shearY = this.getValue(boneMap, "shearY", 0); + data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, "transform", "normal")); + data.skinRequired = this.getValue(boneMap, "skin", false); + skeletonData.bones.push(data); + } + } + if (root.slots) { + for (var i = 0; i < root.slots.length; i++) { + var slotMap = root.slots[i]; + var slotName = slotMap.name; + var boneName = slotMap.bone; + var boneData = skeletonData.findBone(boneName); + if (boneData == null) + throw new Error("Slot bone not found: " + boneName); + var data = new spine.SlotData(skeletonData.slots.length, slotName, boneData); + var color = this.getValue(slotMap, "color", null); + if (color != null) + data.color.setFromString(color); + var dark = this.getValue(slotMap, "dark", null); + if (dark != null) { + data.darkColor = new spine.Color(1, 1, 1, 1); + data.darkColor.setFromString(dark); + } + data.attachmentName = this.getValue(slotMap, "attachment", null); + data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, "blend", "normal")); + skeletonData.slots.push(data); + } + } + if (root.ik) { + for (var i = 0; i < root.ik.length; i++) { + var constraintMap = root.ik[i]; + var data = new spine.IkConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("IK bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("IK target bone not found: " + targetName); + data.mix = this.getValue(constraintMap, "mix", 1); + data.softness = this.getValue(constraintMap, "softness", 0) * scale; + data.bendDirection = this.getValue(constraintMap, "bendPositive", true) ? 1 : -1; + data.compress = this.getValue(constraintMap, "compress", false); + data.stretch = this.getValue(constraintMap, "stretch", false); + data.uniform = this.getValue(constraintMap, "uniform", false); + skeletonData.ikConstraints.push(data); + } + } + if (root.transform) { + for (var i = 0; i < root.transform.length; i++) { + var constraintMap = root.transform[i]; + var data = new spine.TransformConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("Transform constraint target bone not found: " + targetName); + data.local = this.getValue(constraintMap, "local", false); + data.relative = this.getValue(constraintMap, "relative", false); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.offsetX = this.getValue(constraintMap, "x", 0) * scale; + data.offsetY = this.getValue(constraintMap, "y", 0) * scale; + data.offsetScaleX = this.getValue(constraintMap, "scaleX", 0); + data.offsetScaleY = this.getValue(constraintMap, "scaleY", 0); + data.offsetShearY = this.getValue(constraintMap, "shearY", 0); + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + data.scaleMix = this.getValue(constraintMap, "scaleMix", 1); + data.shearMix = this.getValue(constraintMap, "shearMix", 1); + skeletonData.transformConstraints.push(data); + } + } + if (root.path) { + for (var i = 0; i < root.path.length; i++) { + var constraintMap = root.path[i]; + var data = new spine.PathConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findSlot(targetName); + if (data.target == null) + throw new Error("Path target slot not found: " + targetName); + data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, "positionMode", "percent")); + data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, "spacingMode", "length")); + data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, "rotateMode", "tangent")); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.position = this.getValue(constraintMap, "position", 0); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = this.getValue(constraintMap, "spacing", 0); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + skeletonData.pathConstraints.push(data); + } + } + if (root.skins) { + for (var i = 0; i < root.skins.length; i++) { + var skinMap = root.skins[i]; + var skin = new spine.Skin(skinMap.name); + if (skinMap.bones) { + for (var ii = 0; ii < skinMap.bones.length; ii++) { + var bone = skeletonData.findBone(skinMap.bones[ii]); + if (bone == null) + throw new Error("Skin bone not found: " + skinMap.bones[i]); + skin.bones.push(bone); + } + } + if (skinMap.ik) { + for (var ii = 0; ii < skinMap.ik.length; ii++) { + var constraint = skeletonData.findIkConstraint(skinMap.ik[ii]); + if (constraint == null) + throw new Error("Skin IK constraint not found: " + skinMap.ik[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.transform) { + for (var ii = 0; ii < skinMap.transform.length; ii++) { + var constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]); + if (constraint == null) + throw new Error("Skin transform constraint not found: " + skinMap.transform[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.path) { + for (var ii = 0; ii < skinMap.path.length; ii++) { + var constraint = skeletonData.findPathConstraint(skinMap.path[ii]); + if (constraint == null) + throw new Error("Skin path constraint not found: " + skinMap.path[i]); + skin.constraints.push(constraint); + } + } + for (var slotName in skinMap.attachments) { + var slot = skeletonData.findSlot(slotName); + if (slot == null) + throw new Error("Slot not found: " + slotName); + var slotMap = skinMap.attachments[slotName]; + for (var entryName in slotMap) { + var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); + if (attachment != null) + skin.setAttachment(slot.index, entryName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") + skeletonData.defaultSkin = skin; + } + } + for (var i = 0, n = this.linkedMeshes.length; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_6 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_6 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_6 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_6); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + if (root.events) { + for (var eventName in root.events) { + var eventMap = root.events[eventName]; + var data = new spine.EventData(eventName); + data.intValue = this.getValue(eventMap, "int", 0); + data.floatValue = this.getValue(eventMap, "float", 0); + data.stringValue = this.getValue(eventMap, "string", ""); + data.audioPath = this.getValue(eventMap, "audio", null); + if (data.audioPath != null) { + data.volume = this.getValue(eventMap, "volume", 1); + data.balance = this.getValue(eventMap, "balance", 0); + } + skeletonData.events.push(data); + } + } + if (root.animations) { + for (var animationName in root.animations) { + var animationMap = root.animations[animationName]; + this.readAnimation(animationMap, animationName, skeletonData); + } + } + return skeletonData; + }; + SkeletonJson.prototype.readAttachment = function (map, skin, slotIndex, name, skeletonData) { + var scale = this.scale; + name = this.getValue(map, "name", name); + var type = this.getValue(map, "type", "region"); + switch (type) { + case "region": { + var path = this.getValue(map, "path", name); + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = this.getValue(map, "x", 0) * scale; + region.y = this.getValue(map, "y", 0) * scale; + region.scaleX = this.getValue(map, "scaleX", 1); + region.scaleY = this.getValue(map, "scaleY", 1); + region.rotation = this.getValue(map, "rotation", 0); + region.width = map.width * scale; + region.height = map.height * scale; + var color = this.getValue(map, "color", null); + if (color != null) + region.color.setFromString(color); + region.updateOffset(); + return region; + } + case "boundingbox": { + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + this.readVertices(map, box, map.vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + box.color.setFromString(color); + return box; + } + case "mesh": + case "linkedmesh": { + var path = this.getValue(map, "path", name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + var color = this.getValue(map, "color", null); + if (color != null) + mesh.color.setFromString(color); + mesh.width = this.getValue(map, "width", 0) * scale; + mesh.height = this.getValue(map, "height", 0) * scale; + var parent_7 = this.getValue(map, "parent", null); + if (parent_7 != null) { + this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, "skin", null), slotIndex, parent_7, this.getValue(map, "deform", true))); + return mesh; + } + var uvs = map.uvs; + this.readVertices(map, mesh, uvs.length); + mesh.triangles = map.triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.edges = this.getValue(map, "edges", null); + mesh.hullLength = this.getValue(map, "hull", 0) * 2; + return mesh; + } + case "path": { + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = this.getValue(map, "closed", false); + path.constantSpeed = this.getValue(map, "constantSpeed", true); + var vertexCount = map.vertexCount; + this.readVertices(map, path, vertexCount << 1); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0; i < map.lengths.length; i++) + lengths[i] = map.lengths[i] * scale; + path.lengths = lengths; + var color = this.getValue(map, "color", null); + if (color != null) + path.color.setFromString(color); + return path; + } + case "point": { + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = this.getValue(map, "x", 0) * scale; + point.y = this.getValue(map, "y", 0) * scale; + point.rotation = this.getValue(map, "rotation", 0); + var color = this.getValue(map, "color", null); + if (color != null) + point.color.setFromString(color); + return point; + } + case "clipping": { + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + var end = this.getValue(map, "end", null); + if (end != null) { + var slot = skeletonData.findSlot(end); + if (slot == null) + throw new Error("Clipping end slot not found: " + end); + clip.endSlot = slot; + } + var vertexCount = map.vertexCount; + this.readVertices(map, clip, vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + clip.color.setFromString(color); + return clip; + } + } + return null; + }; + SkeletonJson.prototype.readVertices = function (map, attachment, verticesLength) { + var scale = this.scale; + attachment.worldVerticesLength = verticesLength; + var vertices = map.vertices; + if (verticesLength == vertices.length) { + var scaledVertices = spine.Utils.toFloatArray(vertices); + if (scale != 1) { + for (var i = 0, n = vertices.length; i < n; i++) + scaledVertices[i] *= scale; + } + attachment.vertices = scaledVertices; + return; + } + var weights = new Array(); + var bones = new Array(); + for (var i = 0, n = vertices.length; i < n;) { + var boneCount = vertices[i++]; + bones.push(boneCount); + for (var nn = i + boneCount * 4; i < nn; i += 4) { + bones.push(vertices[i]); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = spine.Utils.toFloatArray(weights); + }; + SkeletonJson.prototype.readAnimation = function (map, name, skeletonData) { + var scale = this.scale; + var timelines = new Array(); + var duration = 0; + if (map.slots) { + for (var slotName in map.slots) { + var slotMap = map.slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotName); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex++, this.getValue(valueMap, "time", 0), valueMap.name); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + else if (timelineName == "color") { + var timeline = new spine.ColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var color = new spine.Color(); + color.setFromString(valueMap.color); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), color.r, color.g, color.b, color.a); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]); + } + else if (timelineName == "twoColor") { + var timeline = new spine.TwoColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var light = new spine.Color(); + var dark = new spine.Color(); + light.setFromString(valueMap.light); + dark.setFromString(valueMap.dark); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"); + } + } + } + if (map.bones) { + for (var boneName in map.bones) { + var boneMap = map.bones[boneName]; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) + throw new Error("Bone not found: " + boneName); + for (var timelineName in boneMap) { + var timelineMap = boneMap[timelineName]; + if (timelineName === "rotate") { + var timeline = new spine.RotateTimeline(timelineMap.length); + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "angle", 0)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]); + } + else if (timelineName === "translate" || timelineName === "scale" || timelineName === "shear") { + var timeline = null; + var timelineScale = 1, defaultValue = 0; + if (timelineName === "scale") { + timeline = new spine.ScaleTimeline(timelineMap.length); + defaultValue = 1; + } + else if (timelineName === "shear") + timeline = new spine.ShearTimeline(timelineMap.length); + else { + timeline = new spine.TranslateTimeline(timelineMap.length); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var x = this.getValue(valueMap, "x", defaultValue), y = this.getValue(valueMap, "y", defaultValue); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), x * timelineScale, y * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); + } + } + } + if (map.ik) { + for (var constraintName in map.ik) { + var constraintMap = map.ik[constraintName]; + var constraint = skeletonData.findIkConstraint(constraintName); + var timeline = new spine.IkConstraintTimeline(constraintMap.length); + timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "mix", 1), this.getValue(valueMap, "softness", 0) * scale, this.getValue(valueMap, "bendPositive", true) ? 1 : -1, this.getValue(valueMap, "compress", false), this.getValue(valueMap, "stretch", false)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + } + if (map.transform) { + for (var constraintName in map.transform) { + var constraintMap = map.transform[constraintName]; + var constraint = skeletonData.findTransformConstraint(constraintName); + var timeline = new spine.TransformConstraintTimeline(constraintMap.length); + timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1), this.getValue(valueMap, "scaleMix", 1), this.getValue(valueMap, "shearMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + } + if (map.path) { + for (var constraintName in map.path) { + var constraintMap = map.path[constraintName]; + var index = skeletonData.findPathConstraintIndex(constraintName); + if (index == -1) + throw new Error("Path constraint not found: " + constraintName); + var data = skeletonData.pathConstraints[index]; + for (var timelineName in constraintMap) { + var timelineMap = constraintMap[timelineName]; + if (timelineName === "position" || timelineName === "spacing") { + var timeline = null; + var timelineScale = 1; + if (timelineName === "spacing") { + timeline = new spine.PathConstraintSpacingTimeline(timelineMap.length); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(timelineMap.length); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, timelineName, 0) * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + } + else if (timelineName === "mix") { + var timeline = new spine.PathConstraintMixTimeline(timelineMap.length); + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + } + } + } + } + if (map.deform) { + for (var deformName in map.deform) { + var deformMap = map.deform[deformName]; + var skin = skeletonData.findSkin(deformName); + if (skin == null) + throw new Error("Skin not found: " + deformName); + for (var slotName in deformMap) { + var slotMap = deformMap[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotMap.name); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + var attachment = skin.getAttachment(slotIndex, timelineName); + if (attachment == null) + throw new Error("Deform attachment not found: " + timelineMap.name); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var timeline = new spine.DeformTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + var frameIndex = 0; + for (var j = 0; j < timelineMap.length; j++) { + var valueMap = timelineMap[j]; + var deform = void 0; + var verticesValue = this.getValue(valueMap, "vertices", null); + if (verticesValue == null) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = this.getValue(valueMap, "offset", 0); + spine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length); + if (scale != 1) { + for (var i = start, n = i + verticesValue.length; i < n; i++) + deform[i] *= scale; + } + if (!weighted) { + for (var i = 0; i < deformLength; i++) + deform[i] += vertices[i]; + } + } + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), deform); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + } + } + } + var drawOrderNode = map.drawOrder; + if (drawOrderNode == null) + drawOrderNode = map.draworder; + if (drawOrderNode != null) { + var timeline = new spine.DrawOrderTimeline(drawOrderNode.length); + var slotCount = skeletonData.slots.length; + var frameIndex = 0; + for (var j = 0; j < drawOrderNode.length; j++) { + var drawOrderMap = drawOrderNode[j]; + var drawOrder = null; + var offsets = this.getValue(drawOrderMap, "offsets", null); + if (offsets != null) { + drawOrder = spine.Utils.newArray(slotCount, -1); + var unchanged = spine.Utils.newArray(slotCount - offsets.length, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var i = 0; i < offsets.length; i++) { + var offsetMap = offsets[i]; + var slotIndex = skeletonData.findSlotIndex(offsetMap.slot); + if (slotIndex == -1) + throw new Error("Slot not found: " + offsetMap.slot); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + offsetMap.offset] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var i = slotCount - 1; i >= 0; i--) + if (drawOrder[i] == -1) + drawOrder[i] = unchanged[--unchangedIndex]; + } + timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, "time", 0), drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (map.events) { + var timeline = new spine.EventTimeline(map.events.length); + var frameIndex = 0; + for (var i = 0; i < map.events.length; i++) { + var eventMap = map.events[i]; + var eventData = skeletonData.findEvent(eventMap.name); + if (eventData == null) + throw new Error("Event not found: " + eventMap.name); + var event_6 = new spine.Event(spine.Utils.toSinglePrecision(this.getValue(eventMap, "time", 0)), eventData); + event_6.intValue = this.getValue(eventMap, "int", eventData.intValue); + event_6.floatValue = this.getValue(eventMap, "float", eventData.floatValue); + event_6.stringValue = this.getValue(eventMap, "string", eventData.stringValue); + if (event_6.data.audioPath != null) { + event_6.volume = this.getValue(eventMap, "volume", 1); + event_6.balance = this.getValue(eventMap, "balance", 0); + } + timeline.setFrame(frameIndex++, event_6); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (isNaN(duration)) { + throw new Error("Error while parsing animation, duration is NaN"); + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + }; + SkeletonJson.prototype.readCurve = function (map, timeline, frameIndex) { + if (!map.hasOwnProperty("curve")) + return; + if (map.curve == "stepped") + timeline.setStepped(frameIndex); + else { + var curve = map.curve; + timeline.setCurve(frameIndex, curve, this.getValue(map, "c2", 0), this.getValue(map, "c3", 1), this.getValue(map, "c4", 1)); + } + }; + SkeletonJson.prototype.getValue = function (map, prop, defaultValue) { + return map[prop] !== undefined ? map[prop] : defaultValue; + }; + SkeletonJson.blendModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.BlendMode.Normal; + if (str == "additive") + return spine.BlendMode.Additive; + if (str == "multiply") + return spine.BlendMode.Multiply; + if (str == "screen") + return spine.BlendMode.Screen; + throw new Error("Unknown blend mode: " + str); + }; + SkeletonJson.positionModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "fixed") + return spine.PositionMode.Fixed; + if (str == "percent") + return spine.PositionMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.spacingModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "length") + return spine.SpacingMode.Length; + if (str == "fixed") + return spine.SpacingMode.Fixed; + if (str == "percent") + return spine.SpacingMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.rotateModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "tangent") + return spine.RotateMode.Tangent; + if (str == "chain") + return spine.RotateMode.Chain; + if (str == "chainscale") + return spine.RotateMode.ChainScale; + throw new Error("Unknown rotate mode: " + str); + }; + SkeletonJson.transformModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.TransformMode.Normal; + if (str == "onlytranslation") + return spine.TransformMode.OnlyTranslation; + if (str == "norotationorreflection") + return spine.TransformMode.NoRotationOrReflection; + if (str == "noscale") + return spine.TransformMode.NoScale; + if (str == "noscaleorreflection") + return spine.TransformMode.NoScaleOrReflection; + throw new Error("Unknown transform mode: " + str); + }; + return SkeletonJson; + }()); + spine.SkeletonJson = SkeletonJson; + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkinEntry = (function () { + function SkinEntry(slotIndex, name, attachment) { + this.slotIndex = slotIndex; + this.name = name; + this.attachment = attachment; + } + return SkinEntry; + }()); + spine.SkinEntry = SkinEntry; + var Skin = (function () { + function Skin(name) { + this.attachments = new Array(); + this.bones = Array(); + this.constraints = new Array(); + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + Skin.prototype.setAttachment = function (slotIndex, name, attachment) { + if (attachment == null) + throw new Error("attachment cannot be null."); + var attachments = this.attachments; + if (slotIndex >= attachments.length) + attachments.length = slotIndex + 1; + if (!attachments[slotIndex]) + attachments[slotIndex] = {}; + attachments[slotIndex][name] = attachment; + }; + Skin.prototype.addSkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + }; + Skin.prototype.copySkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + if (attachment.attachment == null) + continue; + if (attachment.attachment instanceof spine.MeshAttachment) { + attachment.attachment = attachment.attachment.newLinkedMesh(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + else { + attachment.attachment = attachment.attachment.copy(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + }; + Skin.prototype.getAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + return dictionary ? dictionary[name] : null; + }; + Skin.prototype.removeAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + if (dictionary) + dictionary[name] = null; + }; + Skin.prototype.getAttachments = function () { + var entries = new Array(); + for (var i = 0; i < this.attachments.length; i++) { + var slotAttachments = this.attachments[i]; + if (slotAttachments) { + for (var name_4 in slotAttachments) { + var attachment = slotAttachments[name_4]; + if (attachment) + entries.push(new SkinEntry(i, name_4, attachment)); + } + } + } + return entries; + }; + Skin.prototype.getAttachmentsForSlot = function (slotIndex, attachments) { + var slotAttachments = this.attachments[slotIndex]; + if (slotAttachments) { + for (var name_5 in slotAttachments) { + var attachment = slotAttachments[name_5]; + if (attachment) + attachments.push(new SkinEntry(slotIndex, name_5, attachment)); + } + } + }; + Skin.prototype.clear = function () { + this.attachments.length = 0; + this.bones.length = 0; + this.constraints.length = 0; + }; + Skin.prototype.attachAll = function (skeleton, oldSkin) { + var slotIndex = 0; + for (var i = 0; i < skeleton.slots.length; i++) { + var slot = skeleton.slots[i]; + var slotAttachment = slot.getAttachment(); + if (slotAttachment && slotIndex < oldSkin.attachments.length) { + var dictionary = oldSkin.attachments[slotIndex]; + for (var key in dictionary) { + var skinAttachment = dictionary[key]; + if (slotAttachment == skinAttachment) { + var attachment = this.getAttachment(slotIndex, key); + if (attachment != null) + slot.setAttachment(attachment); + break; + } + } + } + slotIndex++; + } + }; + return Skin; + }()); + spine.Skin = Skin; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Slot = (function () { + function Slot(data, bone) { + this.deform = new Array(); + if (data == null) + throw new Error("data cannot be null."); + if (bone == null) + throw new Error("bone cannot be null."); + this.data = data; + this.bone = bone; + this.color = new spine.Color(); + this.darkColor = data.darkColor == null ? null : new spine.Color(); + this.setToSetupPose(); + } + Slot.prototype.getSkeleton = function () { + return this.bone.skeleton; + }; + Slot.prototype.getAttachment = function () { + return this.attachment; + }; + Slot.prototype.setAttachment = function (attachment) { + if (this.attachment == attachment) + return; + this.attachment = attachment; + this.attachmentTime = this.bone.skeleton.time; + this.deform.length = 0; + }; + Slot.prototype.setAttachmentTime = function (time) { + this.attachmentTime = this.bone.skeleton.time - time; + }; + Slot.prototype.getAttachmentTime = function () { + return this.bone.skeleton.time - this.attachmentTime; + }; + Slot.prototype.setToSetupPose = function () { + this.color.setFromColor(this.data.color); + if (this.darkColor != null) + this.darkColor.setFromColor(this.data.darkColor); + if (this.data.attachmentName == null) + this.attachment = null; + else { + this.attachment = null; + this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + }; + return Slot; + }()); + spine.Slot = Slot; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SlotData = (function () { + function SlotData(index, name, boneData) { + this.color = new spine.Color(1, 1, 1, 1); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + if (boneData == null) + throw new Error("boneData cannot be null."); + this.index = index; + this.name = name; + this.boneData = boneData; + } + return SlotData; + }()); + spine.SlotData = SlotData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Texture = (function () { + function Texture(image) { + this._image = image; + } + Texture.prototype.getImage = function () { + return this._image; + }; + Texture.filterFromString = function (text) { + switch (text.toLowerCase()) { + case "nearest": return TextureFilter.Nearest; + case "linear": return TextureFilter.Linear; + case "mipmap": return TextureFilter.MipMap; + case "mipmapnearestnearest": return TextureFilter.MipMapNearestNearest; + case "mipmaplinearnearest": return TextureFilter.MipMapLinearNearest; + case "mipmapnearestlinear": return TextureFilter.MipMapNearestLinear; + case "mipmaplinearlinear": return TextureFilter.MipMapLinearLinear; + default: throw new Error("Unknown texture filter " + text); + } + }; + Texture.wrapFromString = function (text) { + switch (text.toLowerCase()) { + case "mirroredtepeat": return TextureWrap.MirroredRepeat; + case "clamptoedge": return TextureWrap.ClampToEdge; + case "repeat": return TextureWrap.Repeat; + default: throw new Error("Unknown texture wrap " + text); + } + }; + return Texture; + }()); + spine.Texture = Texture; + var TextureFilter; + (function (TextureFilter) { + TextureFilter[TextureFilter["Nearest"] = 9728] = "Nearest"; + TextureFilter[TextureFilter["Linear"] = 9729] = "Linear"; + TextureFilter[TextureFilter["MipMap"] = 9987] = "MipMap"; + TextureFilter[TextureFilter["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; + TextureFilter[TextureFilter["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; + TextureFilter[TextureFilter["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; + TextureFilter[TextureFilter["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; + })(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {})); + var TextureWrap; + (function (TextureWrap) { + TextureWrap[TextureWrap["MirroredRepeat"] = 33648] = "MirroredRepeat"; + TextureWrap[TextureWrap["ClampToEdge"] = 33071] = "ClampToEdge"; + TextureWrap[TextureWrap["Repeat"] = 10497] = "Repeat"; + })(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {})); + var TextureRegion = (function () { + function TextureRegion() { + this.u = 0; + this.v = 0; + this.u2 = 0; + this.v2 = 0; + this.width = 0; + this.height = 0; + this.rotate = false; + this.offsetX = 0; + this.offsetY = 0; + this.originalWidth = 0; + this.originalHeight = 0; + } + return TextureRegion; + }()); + spine.TextureRegion = TextureRegion; + var FakeTexture = (function (_super) { + __extends(FakeTexture, _super); + function FakeTexture() { + return _super !== null && _super.apply(this, arguments) || this; + } + FakeTexture.prototype.setFilters = function (minFilter, magFilter) { }; + FakeTexture.prototype.setWraps = function (uWrap, vWrap) { }; + FakeTexture.prototype.dispose = function () { }; + return FakeTexture; + }(Texture)); + spine.FakeTexture = FakeTexture; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TextureAtlas = (function () { + function TextureAtlas(atlasText, textureLoader) { + this.pages = new Array(); + this.regions = new Array(); + this.load(atlasText, textureLoader); + } + TextureAtlas.prototype.load = function (atlasText, textureLoader) { + if (textureLoader == null) + throw new Error("textureLoader cannot be null."); + var reader = new TextureAtlasReader(atlasText); + var tuple = new Array(4); + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) + break; + line = line.trim(); + if (line.length == 0) + page = null; + else if (!page) { + page = new TextureAtlasPage(); + page.name = line; + if (reader.readTuple(tuple) == 2) { + page.width = parseInt(tuple[0]); + page.height = parseInt(tuple[1]); + reader.readTuple(tuple); + } + reader.readTuple(tuple); + page.minFilter = spine.Texture.filterFromString(tuple[0]); + page.magFilter = spine.Texture.filterFromString(tuple[1]); + var direction = reader.readValue(); + page.uWrap = spine.TextureWrap.ClampToEdge; + page.vWrap = spine.TextureWrap.ClampToEdge; + if (direction == "x") + page.uWrap = spine.TextureWrap.Repeat; + else if (direction == "y") + page.vWrap = spine.TextureWrap.Repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.TextureWrap.Repeat; + page.texture = textureLoader(line); + page.texture.setFilters(page.minFilter, page.magFilter); + page.texture.setWraps(page.uWrap, page.vWrap); + page.width = page.texture.getImage().width; + page.height = page.texture.getImage().height; + this.pages.push(page); + } + else { + var region = new TextureAtlasRegion(); + region.name = line; + region.page = page; + var rotateValue = reader.readValue(); + if (rotateValue.toLocaleLowerCase() == "true") { + region.degrees = 90; + } + else if (rotateValue.toLocaleLowerCase() == "false") { + region.degrees = 0; + } + else { + region.degrees = parseFloat(rotateValue); + } + region.rotate = region.degrees == 90; + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } + else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + if (reader.readTuple(tuple) == 4) { + if (reader.readTuple(tuple) == 4) { + reader.readTuple(tuple); + } + } + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + region.index = parseInt(reader.readValue()); + region.texture = page.texture; + this.regions.push(region); + } + } + }; + TextureAtlas.prototype.findRegion = function (name) { + for (var i = 0; i < this.regions.length; i++) { + if (this.regions[i].name == name) { + return this.regions[i]; + } + } + return null; + }; + TextureAtlas.prototype.dispose = function () { + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].texture.dispose(); + } + }; + return TextureAtlas; + }()); + spine.TextureAtlas = TextureAtlas; + var TextureAtlasReader = (function () { + function TextureAtlasReader(text) { + this.index = 0; + this.lines = text.split(/\r\n|\r|\n/); + } + TextureAtlasReader.prototype.readLine = function () { + if (this.index >= this.lines.length) + return null; + return this.lines[this.index++]; + }; + TextureAtlasReader.prototype.readValue = function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + return line.substring(colon + 1).trim(); + }; + TextureAtlasReader.prototype.readTuple = function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + var i = 0, lastMatch = colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) + break; + tuple[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + } + tuple[i] = line.substring(lastMatch).trim(); + return i + 1; + }; + return TextureAtlasReader; + }()); + var TextureAtlasPage = (function () { + function TextureAtlasPage() { + } + return TextureAtlasPage; + }()); + spine.TextureAtlasPage = TextureAtlasPage; + var TextureAtlasRegion = (function (_super) { + __extends(TextureAtlasRegion, _super); + function TextureAtlasRegion() { + return _super !== null && _super.apply(this, arguments) || this; + } + return TextureAtlasRegion; + }(spine.TextureRegion)); + spine.TextureAtlasRegion = TextureAtlasRegion; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraint = (function () { + function TransformConstraint(data, skeleton) { + this.rotateMix = 0; + this.translateMix = 0; + this.scaleMix = 0; + this.shearMix = 0; + this.temp = new spine.Vector2(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + this.scaleMix = data.scaleMix; + this.shearMix = data.shearMix; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + TransformConstraint.prototype.isActive = function () { + return this.active; + }; + TransformConstraint.prototype.apply = function () { + this.update(); + }; + TransformConstraint.prototype.update = function () { + if (this.data.local) { + if (this.data.relative) + this.applyRelativeLocal(); + else + this.applyAbsoluteLocal(); + } + else { + if (this.data.relative) + this.applyRelativeWorld(); + else + this.applyAbsoluteWorld(); + } + }; + TransformConstraint.prototype.applyAbsoluteWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect; + var offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += (temp.x - bone.worldX) * translateMix; + bone.worldY += (temp.y - bone.worldY) * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + var ts = Math.sqrt(ta * ta + tc * tc); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s; + bone.a *= s; + bone.c *= s; + s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + ts = Math.sqrt(tb * tb + td * td); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var b = bone.b, d = bone.d; + var by = Math.atan2(d, b); + var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r = by + (r + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyRelativeWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += temp.x * translateMix; + bone.worldY += temp.y * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1; + bone.a *= s; + bone.c *= s; + s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var r = Math.atan2(td, tb) - Math.atan2(tc, ta); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + var b = bone.b, d = bone.d; + r = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyAbsoluteLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) { + var r = target.arotation - rotation + this.data.offsetRotation; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + rotation += r * rotateMix; + } + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax - x + this.data.offsetX) * translateMix; + y += (target.ay - y + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX; + if (scaleY > 0.00001) + scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY; + } + var shearY = bone.ashearY; + if (shearMix != 0) { + var r = target.ashearY - shearY + this.data.offsetShearY; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + bone.shearY += r * shearMix; + } + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + TransformConstraint.prototype.applyRelativeLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) + rotation += (target.arotation + this.data.offsetRotation) * rotateMix; + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax + this.data.offsetX) * translateMix; + y += (target.ay + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX *= ((target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix) + 1; + if (scaleY > 0.00001) + scaleY *= ((target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix) + 1; + } + var shearY = bone.ashearY; + if (shearMix != 0) + shearY += (target.ashearY + this.data.offsetShearY) * shearMix; + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + return TransformConstraint; + }()); + spine.TransformConstraint = TransformConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraintData = (function (_super) { + __extends(TransformConstraintData, _super); + function TransformConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.rotateMix = 0; + _this.translateMix = 0; + _this.scaleMix = 0; + _this.shearMix = 0; + _this.offsetRotation = 0; + _this.offsetX = 0; + _this.offsetY = 0; + _this.offsetScaleX = 0; + _this.offsetScaleY = 0; + _this.offsetShearY = 0; + _this.relative = false; + _this.local = false; + return _this; + } + return TransformConstraintData; + }(spine.ConstraintData)); + spine.TransformConstraintData = TransformConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Triangulator = (function () { + function Triangulator() { + this.convexPolygons = new Array(); + this.convexPolygonsIndices = new Array(); + this.indicesArray = new Array(); + this.isConcaveArray = new Array(); + this.triangles = new Array(); + this.polygonPool = new spine.Pool(function () { + return new Array(); + }); + this.polygonIndicesPool = new spine.Pool(function () { + return new Array(); + }); + } + Triangulator.prototype.triangulate = function (verticesArray) { + var vertices = verticesArray; + var vertexCount = verticesArray.length >> 1; + var indices = this.indicesArray; + indices.length = 0; + for (var i = 0; i < vertexCount; i++) + indices[i] = i; + var isConcave = this.isConcaveArray; + isConcave.length = 0; + for (var i = 0, n = vertexCount; i < n; ++i) + isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices); + var triangles = this.triangles; + triangles.length = 0; + while (vertexCount > 3) { + var previous = vertexCount - 1, i = 0, next = 1; + while (true) { + outer: if (!isConcave[i]) { + var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; + var p1x = vertices[p1], p1y = vertices[p1 + 1]; + var p2x = vertices[p2], p2y = vertices[p2 + 1]; + var p3x = vertices[p3], p3y = vertices[p3 + 1]; + for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) { + if (!isConcave[ii]) + continue; + var v = indices[ii] << 1; + var vx = vertices[v], vy = vertices[v + 1]; + if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) { + if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) { + if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) + break outer; + } + } + } + break; + } + if (next == 0) { + do { + if (!isConcave[i]) + break; + i--; + } while (i > 0); + break; + } + previous = i; + i = next; + next = (next + 1) % vertexCount; + } + triangles.push(indices[(vertexCount + i - 1) % vertexCount]); + triangles.push(indices[i]); + triangles.push(indices[(i + 1) % vertexCount]); + indices.splice(i, 1); + isConcave.splice(i, 1); + vertexCount--; + var previousIndex = (vertexCount + i - 1) % vertexCount; + var nextIndex = i == vertexCount ? 0 : i; + isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices); + isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices); + } + if (vertexCount == 3) { + triangles.push(indices[2]); + triangles.push(indices[0]); + triangles.push(indices[1]); + } + return triangles; + }; + Triangulator.prototype.decompose = function (verticesArray, triangles) { + var vertices = verticesArray; + var convexPolygons = this.convexPolygons; + this.polygonPool.freeAll(convexPolygons); + convexPolygons.length = 0; + var convexPolygonsIndices = this.convexPolygonsIndices; + this.polygonIndicesPool.freeAll(convexPolygonsIndices); + convexPolygonsIndices.length = 0; + var polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + var polygon = this.polygonPool.obtain(); + polygon.length = 0; + var fanBaseIndex = -1, lastWinding = 0; + for (var i = 0, n = triangles.length; i < n; i += 3) { + var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1; + var x1 = vertices[t1], y1 = vertices[t1 + 1]; + var x2 = vertices[t2], y2 = vertices[t2 + 1]; + var x3 = vertices[t3], y3 = vertices[t3 + 1]; + var merged = false; + if (fanBaseIndex == t1) { + var o = polygon.length - 4; + var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3); + var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]); + if (winding1 == lastWinding && winding2 == lastWinding) { + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(t3); + merged = true; + } + } + if (!merged) { + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + else { + this.polygonPool.free(polygon); + this.polygonIndicesPool.free(polygonIndices); + } + polygon = this.polygonPool.obtain(); + polygon.length = 0; + polygon.push(x1); + polygon.push(y1); + polygon.push(x2); + polygon.push(y2); + polygon.push(x3); + polygon.push(y3); + polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + polygonIndices.push(t1); + polygonIndices.push(t2); + polygonIndices.push(t3); + lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + } + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + for (var i = 0, n = convexPolygons.length; i < n; i++) { + polygonIndices = convexPolygonsIndices[i]; + if (polygonIndices.length == 0) + continue; + var firstIndex = polygonIndices[0]; + var lastIndex = polygonIndices[polygonIndices.length - 1]; + polygon = convexPolygons[i]; + var o = polygon.length - 4; + var prevPrevX = polygon[o], prevPrevY = polygon[o + 1]; + var prevX = polygon[o + 2], prevY = polygon[o + 3]; + var firstX = polygon[0], firstY = polygon[1]; + var secondX = polygon[2], secondY = polygon[3]; + var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + for (var ii = 0; ii < n; ii++) { + if (ii == i) + continue; + var otherIndices = convexPolygonsIndices[ii]; + if (otherIndices.length != 3) + continue; + var otherFirstIndex = otherIndices[0]; + var otherSecondIndex = otherIndices[1]; + var otherLastIndex = otherIndices[2]; + var otherPoly = convexPolygons[ii]; + var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1]; + if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) + continue; + var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); + var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY); + if (winding1 == winding && winding2 == winding) { + otherPoly.length = 0; + otherIndices.length = 0; + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(otherLastIndex); + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = 0; + } + } + } + for (var i = convexPolygons.length - 1; i >= 0; i--) { + polygon = convexPolygons[i]; + if (polygon.length == 0) { + convexPolygons.splice(i, 1); + this.polygonPool.free(polygon); + polygonIndices = convexPolygonsIndices[i]; + convexPolygonsIndices.splice(i, 1); + this.polygonIndicesPool.free(polygonIndices); + } + } + return convexPolygons; + }; + Triangulator.isConcave = function (index, vertexCount, vertices, indices) { + var previous = indices[(vertexCount + index - 1) % vertexCount] << 1; + var current = indices[index] << 1; + var next = indices[(index + 1) % vertexCount] << 1; + return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]); + }; + Triangulator.positiveArea = function (p1x, p1y, p2x, p2y, p3x, p3y) { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + }; + Triangulator.winding = function (p1x, p1y, p2x, p2y, p3x, p3y) { + var px = p2x - p1x, py = p2y - p1y; + return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; + }; + return Triangulator; + }()); + spine.Triangulator = Triangulator; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IntSet = (function () { + function IntSet() { + this.array = new Array(); + } + IntSet.prototype.add = function (value) { + var contains = this.contains(value); + this.array[value | 0] = value | 0; + return !contains; + }; + IntSet.prototype.contains = function (value) { + return this.array[value | 0] != undefined; + }; + IntSet.prototype.remove = function (value) { + this.array[value | 0] = undefined; + }; + IntSet.prototype.clear = function () { + this.array.length = 0; + }; + return IntSet; + }()); + spine.IntSet = IntSet; + var Color = (function () { + function Color(r, g, b, a) { + if (r === void 0) { r = 0; } + if (g === void 0) { g = 0; } + if (b === void 0) { b = 0; } + if (a === void 0) { a = 0; } + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + Color.prototype.set = function (r, g, b, a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + this.clamp(); + return this; + }; + Color.prototype.setFromColor = function (c) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + }; + Color.prototype.setFromString = function (hex) { + hex = hex.charAt(0) == '#' ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255.0; + this.g = parseInt(hex.substr(2, 2), 16) / 255.0; + this.b = parseInt(hex.substr(4, 2), 16) / 255.0; + this.a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0; + return this; + }; + Color.prototype.add = function (r, g, b, a) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + this.clamp(); + return this; + }; + Color.prototype.clamp = function () { + if (this.r < 0) + this.r = 0; + else if (this.r > 1) + this.r = 1; + if (this.g < 0) + this.g = 0; + else if (this.g > 1) + this.g = 1; + if (this.b < 0) + this.b = 0; + else if (this.b > 1) + this.b = 1; + if (this.a < 0) + this.a = 0; + else if (this.a > 1) + this.a = 1; + return this; + }; + Color.rgba8888ToColor = function (color, value) { + color.r = ((value & 0xff000000) >>> 24) / 255; + color.g = ((value & 0x00ff0000) >>> 16) / 255; + color.b = ((value & 0x0000ff00) >>> 8) / 255; + color.a = ((value & 0x000000ff)) / 255; + }; + Color.rgb888ToColor = function (color, value) { + color.r = ((value & 0x00ff0000) >>> 16) / 255; + color.g = ((value & 0x0000ff00) >>> 8) / 255; + color.b = ((value & 0x000000ff)) / 255; + }; + Color.WHITE = new Color(1, 1, 1, 1); + Color.RED = new Color(1, 0, 0, 1); + Color.GREEN = new Color(0, 1, 0, 1); + Color.BLUE = new Color(0, 0, 1, 1); + Color.MAGENTA = new Color(1, 0, 1, 1); + return Color; + }()); + spine.Color = Color; + var MathUtils = (function () { + function MathUtils() { + } + MathUtils.clamp = function (value, min, max) { + if (value < min) + return min; + if (value > max) + return max; + return value; + }; + MathUtils.cosDeg = function (degrees) { + return Math.cos(degrees * MathUtils.degRad); + }; + MathUtils.sinDeg = function (degrees) { + return Math.sin(degrees * MathUtils.degRad); + }; + MathUtils.signum = function (value) { + return value > 0 ? 1 : value < 0 ? -1 : 0; + }; + MathUtils.toInt = function (x) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + }; + MathUtils.cbrt = function (x) { + var y = Math.pow(Math.abs(x), 1 / 3); + return x < 0 ? -y : y; + }; + MathUtils.randomTriangular = function (min, max) { + return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); + }; + MathUtils.randomTriangularWith = function (min, max, mode) { + var u = Math.random(); + var d = max - min; + if (u <= (mode - min) / d) + return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + }; + MathUtils.PI = 3.1415927; + MathUtils.PI2 = MathUtils.PI * 2; + MathUtils.radiansToDegrees = 180 / MathUtils.PI; + MathUtils.radDeg = MathUtils.radiansToDegrees; + MathUtils.degreesToRadians = MathUtils.PI / 180; + MathUtils.degRad = MathUtils.degreesToRadians; + return MathUtils; + }()); + spine.MathUtils = MathUtils; + var Interpolation = (function () { + function Interpolation() { + } + Interpolation.prototype.apply = function (start, end, a) { + return start + (end - start) * this.applyInternal(a); + }; + return Interpolation; + }()); + spine.Interpolation = Interpolation; + var Pow = (function (_super) { + __extends(Pow, _super); + function Pow(power) { + var _this = _super.call(this) || this; + _this.power = 2; + _this.power = power; + return _this; + } + Pow.prototype.applyInternal = function (a) { + if (a <= 0.5) + return Math.pow(a * 2, this.power) / 2; + return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; + }; + return Pow; + }(Interpolation)); + spine.Pow = Pow; + var PowOut = (function (_super) { + __extends(PowOut, _super); + function PowOut(power) { + return _super.call(this, power) || this; + } + PowOut.prototype.applyInternal = function (a) { + return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; + }; + return PowOut; + }(Pow)); + spine.PowOut = PowOut; + var Utils = (function () { + function Utils() { + } + Utils.arrayCopy = function (source, sourceStart, dest, destStart, numElements) { + for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { + dest[j] = source[i]; + } + }; + Utils.setArraySize = function (array, size, value) { + if (value === void 0) { value = 0; } + var oldSize = array.length; + if (oldSize == size) + return array; + array.length = size; + if (oldSize < size) { + for (var i = oldSize; i < size; i++) + array[i] = value; + } + return array; + }; + Utils.ensureArrayCapacity = function (array, size, value) { + if (value === void 0) { value = 0; } + if (array.length >= size) + return array; + return Utils.setArraySize(array, size, value); + }; + Utils.newArray = function (size, defaultValue) { + var array = new Array(size); + for (var i = 0; i < size; i++) + array[i] = defaultValue; + return array; + }; + Utils.newFloatArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Float32Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.newShortArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Int16Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.toFloatArray = function (array) { + return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + }; + Utils.toSinglePrecision = function (value) { + return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + }; + Utils.webkit602BugfixHelper = function (alpha, blend) { + }; + Utils.contains = function (array, element, identity) { + if (identity === void 0) { identity = true; } + for (var i = 0; i < array.length; i++) { + if (array[i] == element) + return true; + } + return false; + }; + Utils.SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== "undefined"; + return Utils; + }()); + spine.Utils = Utils; + var DebugUtils = (function () { + function DebugUtils() { + } + DebugUtils.logBones = function (skeleton) { + for (var i = 0; i < skeleton.bones.length; i++) { + var bone = skeleton.bones[i]; + console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); + } + }; + return DebugUtils; + }()); + spine.DebugUtils = DebugUtils; + var Pool = (function () { + function Pool(instantiator) { + this.items = new Array(); + this.instantiator = instantiator; + } + Pool.prototype.obtain = function () { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + }; + Pool.prototype.free = function (item) { + if (item.reset) + item.reset(); + this.items.push(item); + }; + Pool.prototype.freeAll = function (items) { + for (var i = 0; i < items.length; i++) { + this.free(items[i]); + } + }; + Pool.prototype.clear = function () { + this.items.length = 0; + }; + return Pool; + }()); + spine.Pool = Pool; + var Vector2 = (function () { + function Vector2(x, y) { + if (x === void 0) { x = 0; } + if (y === void 0) { y = 0; } + this.x = x; + this.y = y; + } + Vector2.prototype.set = function (x, y) { + this.x = x; + this.y = y; + return this; + }; + Vector2.prototype.length = function () { + var x = this.x; + var y = this.y; + return Math.sqrt(x * x + y * y); + }; + Vector2.prototype.normalize = function () { + var len = this.length(); + if (len != 0) { + this.x /= len; + this.y /= len; + } + return this; + }; + return Vector2; + }()); + spine.Vector2 = Vector2; + var TimeKeeper = (function () { + function TimeKeeper() { + this.maxDelta = 0.064; + this.framesPerSecond = 0; + this.delta = 0; + this.totalTime = 0; + this.lastTime = Date.now() / 1000; + this.frameCount = 0; + this.frameTime = 0; + } + TimeKeeper.prototype.update = function () { + var now = Date.now() / 1000; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + if (this.delta > this.maxDelta) + this.delta = this.maxDelta; + this.lastTime = now; + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + }; + return TimeKeeper; + }()); + spine.TimeKeeper = TimeKeeper; + var WindowedMean = (function () { + function WindowedMean(windowSize) { + if (windowSize === void 0) { windowSize = 32; } + this.addedValues = 0; + this.lastValue = 0; + this.mean = 0; + this.dirty = true; + this.values = new Array(windowSize); + } + WindowedMean.prototype.hasEnoughData = function () { + return this.addedValues >= this.values.length; + }; + WindowedMean.prototype.addValue = function (value) { + if (this.addedValues < this.values.length) + this.addedValues++; + this.values[this.lastValue++] = value; + if (this.lastValue > this.values.length - 1) + this.lastValue = 0; + this.dirty = true; + }; + WindowedMean.prototype.getMean = function () { + if (this.hasEnoughData()) { + if (this.dirty) { + var mean = 0; + for (var i = 0; i < this.values.length; i++) { + mean += this.values[i]; + } + this.mean = mean / this.values.length; + this.dirty = false; + } + return this.mean; + } + else { + return 0; + } + }; + return WindowedMean; + }()); + spine.WindowedMean = WindowedMean; +})(spine || (spine = {})); +(function () { + if (!Math.fround) { + Math.fround = (function (array) { + return function (x) { + return array[0] = x, array[0]; + }; + })(new Float32Array(1)); + } +})(); +var spine; +(function (spine) { + var Attachment = (function () { + function Attachment(name) { + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + return Attachment; + }()); + spine.Attachment = Attachment; + var VertexAttachment = (function (_super) { + __extends(VertexAttachment, _super); + function VertexAttachment(name) { + var _this = _super.call(this, name) || this; + _this.id = (VertexAttachment.nextID++ & 65535) << 11; + _this.worldVerticesLength = 0; + _this.deformAttachment = _this; + return _this; + } + VertexAttachment.prototype.computeWorldVertices = function (slot, start, count, worldVertices, offset, stride) { + count = offset + (count >> 1) * stride; + var skeleton = slot.bone.skeleton; + var deformArray = slot.deform; + var vertices = this.vertices; + var bones = this.bones; + if (bones == null) { + if (deformArray.length > 0) + vertices = deformArray; + var bone = slot.bone; + var x = bone.worldX; + var y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) { + var vx = vertices[v_1], vy = vertices[v_1 + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + var v = 0, skip = 0; + for (var i = 0; i < start; i += 2) { + var n = bones[v]; + v += n + 1; + skip += n; + } + var skeletonBones = skeleton.bones; + if (deformArray.length == 0) { + for (var w = offset, b = skip * 3; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + else { + var deform = deformArray; + for (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + }; + VertexAttachment.prototype.copyTo = function (attachment) { + if (this.bones != null) { + attachment.bones = new Array(this.bones.length); + spine.Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); + } + else + attachment.bones = null; + if (this.vertices != null) { + attachment.vertices = spine.Utils.newFloatArray(this.vertices.length); + spine.Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); + } + else + attachment.vertices = null; + attachment.worldVerticesLength = this.worldVerticesLength; + attachment.deformAttachment = this.deformAttachment; + }; + VertexAttachment.nextID = 0; + return VertexAttachment; + }(Attachment)); + spine.VertexAttachment = VertexAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AttachmentType; + (function (AttachmentType) { + AttachmentType[AttachmentType["Region"] = 0] = "Region"; + AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox"; + AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh"; + AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh"; + AttachmentType[AttachmentType["Path"] = 4] = "Path"; + AttachmentType[AttachmentType["Point"] = 5] = "Point"; + AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping"; + })(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoundingBoxAttachment = (function (_super) { + __extends(BoundingBoxAttachment, _super); + function BoundingBoxAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + BoundingBoxAttachment.prototype.copy = function () { + var copy = new BoundingBoxAttachment(this.name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + }; + return BoundingBoxAttachment; + }(spine.VertexAttachment)); + spine.BoundingBoxAttachment = BoundingBoxAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var ClippingAttachment = (function (_super) { + __extends(ClippingAttachment, _super); + function ClippingAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.2275, 0.2275, 0.8078, 1); + return _this; + } + ClippingAttachment.prototype.copy = function () { + var copy = new ClippingAttachment(this.name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.color.setFromColor(this.color); + return copy; + }; + return ClippingAttachment; + }(spine.VertexAttachment)); + spine.ClippingAttachment = ClippingAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var MeshAttachment = (function (_super) { + __extends(MeshAttachment, _super); + function MeshAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + _this.tempColor = new spine.Color(0, 0, 0, 0); + return _this; + } + MeshAttachment.prototype.updateUVs = function () { + var regionUVs = this.regionUVs; + if (this.uvs == null || this.uvs.length != regionUVs.length) + this.uvs = spine.Utils.newFloatArray(regionUVs.length); + var uvs = this.uvs; + var n = this.uvs.length; + var u = this.region.u, v = this.region.v, width = 0, height = 0; + if (this.region instanceof spine.TextureAtlasRegion) { + var region = this.region; + var textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height; + switch (region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; + } + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } + else if (this.region == null) { + u = v = 0; + width = height = 1; + } + else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + }; + MeshAttachment.prototype.getParentMesh = function () { + return this.parentMesh; + }; + MeshAttachment.prototype.setParentMesh = function (parentMesh) { + this.parentMesh = parentMesh; + if (parentMesh != null) { + this.bones = parentMesh.bones; + this.vertices = parentMesh.vertices; + this.worldVerticesLength = parentMesh.worldVerticesLength; + this.regionUVs = parentMesh.regionUVs; + this.triangles = parentMesh.triangles; + this.hullLength = parentMesh.hullLength; + this.worldVerticesLength = parentMesh.worldVerticesLength; + } + }; + MeshAttachment.prototype.copy = function () { + if (this.parentMesh != null) + return this.newLinkedMesh(); + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + this.copyTo(copy); + copy.regionUVs = new Array(this.regionUVs.length); + spine.Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.uvs = new Array(this.uvs.length); + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); + copy.triangles = new Array(this.triangles.length); + spine.Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + if (this.edges != null) { + copy.edges = new Array(this.edges.length); + spine.Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + return copy; + }; + MeshAttachment.prototype.newLinkedMesh = function () { + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + copy.deformAttachment = this.deformAttachment; + copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this); + copy.updateUVs(); + return copy; + }; + return MeshAttachment; + }(spine.VertexAttachment)); + spine.MeshAttachment = MeshAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathAttachment = (function (_super) { + __extends(PathAttachment, _super); + function PathAttachment(name) { + var _this = _super.call(this, name) || this; + _this.closed = false; + _this.constantSpeed = false; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + PathAttachment.prototype.copy = function () { + var copy = new PathAttachment(this.name); + this.copyTo(copy); + copy.lengths = new Array(this.lengths.length); + spine.Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + }; + return PathAttachment; + }(spine.VertexAttachment)); + spine.PathAttachment = PathAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PointAttachment = (function (_super) { + __extends(PointAttachment, _super); + function PointAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.38, 0.94, 0, 1); + return _this; + } + PointAttachment.prototype.computeWorldPosition = function (bone, point) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + }; + PointAttachment.prototype.computeWorldRotation = function (bone) { + var cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation); + var x = cos * bone.a + sin * bone.b; + var y = cos * bone.c + sin * bone.d; + return Math.atan2(y, x) * spine.MathUtils.radDeg; + }; + PointAttachment.prototype.copy = function () { + var copy = new PointAttachment(this.name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + }; + return PointAttachment; + }(spine.VertexAttachment)); + spine.PointAttachment = PointAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var RegionAttachment = (function (_super) { + __extends(RegionAttachment, _super); + function RegionAttachment(name) { + var _this = _super.call(this, name) || this; + _this.x = 0; + _this.y = 0; + _this.scaleX = 1; + _this.scaleY = 1; + _this.rotation = 0; + _this.width = 0; + _this.height = 0; + _this.color = new spine.Color(1, 1, 1, 1); + _this.offset = spine.Utils.newFloatArray(8); + _this.uvs = spine.Utils.newFloatArray(8); + _this.tempColor = new spine.Color(1, 1, 1, 1); + return _this; + } + RegionAttachment.prototype.updateOffset = function () { + var regionScaleX = this.width / this.region.originalWidth * this.scaleX; + var regionScaleY = this.height / this.region.originalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY; + var localX2 = localX + this.region.width * regionScaleX; + var localY2 = localY + this.region.height * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[RegionAttachment.OX1] = localXCos - localYSin; + offset[RegionAttachment.OY1] = localYCos + localXSin; + offset[RegionAttachment.OX2] = localXCos - localY2Sin; + offset[RegionAttachment.OY2] = localY2Cos + localXSin; + offset[RegionAttachment.OX3] = localX2Cos - localY2Sin; + offset[RegionAttachment.OY3] = localY2Cos + localX2Sin; + offset[RegionAttachment.OX4] = localX2Cos - localYSin; + offset[RegionAttachment.OY4] = localYCos + localX2Sin; + }; + RegionAttachment.prototype.setRegion = function (region) { + this.region = region; + var uvs = this.uvs; + if (region.rotate) { + uvs[2] = region.u; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v; + uvs[0] = region.u2; + uvs[1] = region.v2; + } + else { + uvs[0] = region.u; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v2; + } + }; + RegionAttachment.prototype.computeWorldVertices = function (bone, worldVertices, offset, stride) { + var vertexOffset = this.offset; + var x = bone.worldX, y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var offsetX = 0, offsetY = 0; + offsetX = vertexOffset[RegionAttachment.OX1]; + offsetY = vertexOffset[RegionAttachment.OY1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX2]; + offsetY = vertexOffset[RegionAttachment.OY2]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX3]; + offsetY = vertexOffset[RegionAttachment.OY3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX4]; + offsetY = vertexOffset[RegionAttachment.OY4]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + }; + RegionAttachment.prototype.copy = function () { + var copy = new RegionAttachment(this.name); + copy.region = this.region; + copy.rendererObject = this.rendererObject; + copy.path = this.path; + copy.x = this.x; + copy.y = this.y; + copy.scaleX = this.scaleX; + copy.scaleY = this.scaleY; + copy.rotation = this.rotation; + copy.width = this.width; + copy.height = this.height; + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); + spine.Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); + copy.color.setFromColor(this.color); + return copy; + }; + RegionAttachment.OX1 = 0; + RegionAttachment.OY1 = 1; + RegionAttachment.OX2 = 2; + RegionAttachment.OY2 = 3; + RegionAttachment.OX3 = 4; + RegionAttachment.OY3 = 5; + RegionAttachment.OX4 = 6; + RegionAttachment.OY4 = 7; + RegionAttachment.X1 = 0; + RegionAttachment.Y1 = 1; + RegionAttachment.C1R = 2; + RegionAttachment.C1G = 3; + RegionAttachment.C1B = 4; + RegionAttachment.C1A = 5; + RegionAttachment.U1 = 6; + RegionAttachment.V1 = 7; + RegionAttachment.X2 = 8; + RegionAttachment.Y2 = 9; + RegionAttachment.C2R = 10; + RegionAttachment.C2G = 11; + RegionAttachment.C2B = 12; + RegionAttachment.C2A = 13; + RegionAttachment.U2 = 14; + RegionAttachment.V2 = 15; + RegionAttachment.X3 = 16; + RegionAttachment.Y3 = 17; + RegionAttachment.C3R = 18; + RegionAttachment.C3G = 19; + RegionAttachment.C3B = 20; + RegionAttachment.C3A = 21; + RegionAttachment.U3 = 22; + RegionAttachment.V3 = 23; + RegionAttachment.X4 = 24; + RegionAttachment.Y4 = 25; + RegionAttachment.C4R = 26; + RegionAttachment.C4G = 27; + RegionAttachment.C4B = 28; + RegionAttachment.C4A = 29; + RegionAttachment.U4 = 30; + RegionAttachment.V4 = 31; + return RegionAttachment; + }(spine.Attachment)); + spine.RegionAttachment = RegionAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var JitterEffect = (function () { + function JitterEffect(jitterX, jitterY) { + this.jitterX = 0; + this.jitterY = 0; + this.jitterX = jitterX; + this.jitterY = jitterY; + } + JitterEffect.prototype.begin = function (skeleton) { + }; + JitterEffect.prototype.transform = function (position, uv, light, dark) { + position.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + position.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + }; + JitterEffect.prototype.end = function () { + }; + return JitterEffect; + }()); + spine.JitterEffect = JitterEffect; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SwirlEffect = (function () { + function SwirlEffect(radius) { + this.centerX = 0; + this.centerY = 0; + this.radius = 0; + this.angle = 0; + this.worldX = 0; + this.worldY = 0; + this.radius = radius; + } + SwirlEffect.prototype.begin = function (skeleton) { + this.worldX = skeleton.x + this.centerX; + this.worldY = skeleton.y + this.centerY; + }; + SwirlEffect.prototype.transform = function (position, uv, light, dark) { + var radAngle = this.angle * spine.MathUtils.degreesToRadians; + var x = position.x - this.worldX; + var y = position.y - this.worldY; + var dist = Math.sqrt(x * x + y * y); + if (dist < this.radius) { + var theta = SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius); + var cos = Math.cos(theta); + var sin = Math.sin(theta); + position.x = cos * x - sin * y + this.worldX; + position.y = sin * x + cos * y + this.worldY; + } + }; + SwirlEffect.prototype.end = function () { + }; + SwirlEffect.interpolation = new spine.PowOut(2); + return SwirlEffect; + }()); + spine.SwirlEffect = SwirlEffect; +})(spine || (spine = {})); +var spine; +(function (spine) { + var canvas; + (function (canvas) { + var AssetManager = (function (_super) { + __extends(AssetManager, _super); + function AssetManager(pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + return _super.call(this, function (image) { return new spine.canvas.CanvasTexture(image); }, pathPrefix) || this; + } + return AssetManager; + }(spine.AssetManager)); + canvas.AssetManager = AssetManager; + })(canvas = spine.canvas || (spine.canvas = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var canvas; + (function (canvas) { + var CanvasTexture = (function (_super) { + __extends(CanvasTexture, _super); + function CanvasTexture(image) { + return _super.call(this, image) || this; + } + CanvasTexture.prototype.setFilters = function (minFilter, magFilter) { }; + CanvasTexture.prototype.setWraps = function (uWrap, vWrap) { }; + CanvasTexture.prototype.dispose = function () { }; + return CanvasTexture; + }(spine.Texture)); + canvas.CanvasTexture = CanvasTexture; + })(canvas = spine.canvas || (spine.canvas = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var canvas; + (function (canvas) { + var SkeletonRenderer = (function () { + function SkeletonRenderer(context) { + this.triangleRendering = false; + this.debugRendering = false; + this.vertices = spine.Utils.newFloatArray(8 * 1024); + this.tempColor = new spine.Color(); + this.ctx = context; + } + SkeletonRenderer.prototype.draw = function (skeleton) { + if (this.triangleRendering) + this.drawTriangles(skeleton); + else + this.drawImages(skeleton); + }; + SkeletonRenderer.prototype.drawImages = function (skeleton) { + var ctx = this.ctx; + var drawOrder = skeleton.drawOrder; + if (this.debugRendering) + ctx.strokeStyle = "green"; + ctx.save(); + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + var regionAttachment = null; + var region = null; + var image = null; + if (attachment instanceof spine.RegionAttachment) { + regionAttachment = attachment; + region = regionAttachment.region; + image = region.texture.getImage(); + } + else + continue; + var skeleton_1 = slot.bone.skeleton; + var skeletonColor = skeleton_1.color; + var slotColor = slot.color; + var regionColor = regionAttachment.color; + var alpha = skeletonColor.a * slotColor.a * regionColor.a; + var color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * regionColor.r, skeletonColor.g * slotColor.g * regionColor.g, skeletonColor.b * slotColor.b * regionColor.b, alpha); + var att = attachment; + var bone = slot.bone; + var w = region.width; + var h = region.height; + ctx.save(); + ctx.transform(bone.a, bone.c, bone.b, bone.d, bone.worldX, bone.worldY); + ctx.translate(attachment.offset[0], attachment.offset[1]); + ctx.rotate(attachment.rotation * Math.PI / 180); + var atlasScale = att.width / w; + ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY); + ctx.translate(w / 2, h / 2); + if (attachment.region.rotate) { + var t = w; + w = h; + h = t; + ctx.rotate(-Math.PI / 2); + } + ctx.scale(1, -1); + ctx.translate(-w / 2, -h / 2); + ctx.globalAlpha = color.a; + ctx.drawImage(image, region.x, region.y, w, h, 0, 0, w, h); + if (this.debugRendering) + ctx.strokeRect(0, 0, w, h); + ctx.restore(); + } + ctx.restore(); + }; + SkeletonRenderer.prototype.drawTriangles = function (skeleton) { + var blendMode = null; + var vertices = this.vertices; + var triangles = null; + var drawOrder = skeleton.drawOrder; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + var attachment = slot.getAttachment(); + var texture = null; + var region = null; + if (attachment instanceof spine.RegionAttachment) { + var regionAttachment = attachment; + vertices = this.computeRegionVertices(slot, regionAttachment, false); + triangles = SkeletonRenderer.QUAD_TRIANGLES; + region = regionAttachment.region; + texture = region.texture.getImage(); + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + vertices = this.computeMeshVertices(slot, mesh, false); + triangles = mesh.triangles; + texture = mesh.region.renderObject.texture.getImage(); + } + else + continue; + if (texture != null) { + var slotBlendMode = slot.data.blendMode; + if (slotBlendMode != blendMode) { + blendMode = slotBlendMode; + } + var skeleton_2 = slot.bone.skeleton; + var skeletonColor = skeleton_2.color; + var slotColor = slot.color; + var attachmentColor = attachment.color; + var alpha = skeletonColor.a * slotColor.a * attachmentColor.a; + var color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * attachmentColor.r, skeletonColor.g * slotColor.g * attachmentColor.g, skeletonColor.b * slotColor.b * attachmentColor.b, alpha); + var ctx = this.ctx; + ctx.globalAlpha = color.a; + for (var j = 0; j < triangles.length; j += 3) { + var t1 = triangles[j] * 8, t2 = triangles[j + 1] * 8, t3 = triangles[j + 2] * 8; + var x0 = vertices[t1], y0 = vertices[t1 + 1], u0 = vertices[t1 + 6], v0 = vertices[t1 + 7]; + var x1 = vertices[t2], y1 = vertices[t2 + 1], u1 = vertices[t2 + 6], v1 = vertices[t2 + 7]; + var x2 = vertices[t3], y2 = vertices[t3 + 1], u2 = vertices[t3 + 6], v2 = vertices[t3 + 7]; + this.drawTriangle(texture, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2); + if (this.debugRendering) { + ctx.strokeStyle = "green"; + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x0, y0); + ctx.stroke(); + } + } + } + } + this.ctx.globalAlpha = 1; + }; + SkeletonRenderer.prototype.drawTriangle = function (img, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2) { + var ctx = this.ctx; + u0 *= img.width; + v0 *= img.height; + u1 *= img.width; + v1 *= img.height; + u2 *= img.width; + v2 *= img.height; + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.closePath(); + x1 -= x0; + y1 -= y0; + x2 -= x0; + y2 -= y0; + u1 -= u0; + v1 -= v0; + u2 -= u0; + v2 -= v0; + var det = 1 / (u1 * v2 - u2 * v1), a = (v2 * x1 - v1 * x2) * det, b = (v2 * y1 - v1 * y2) * det, c = (u1 * x2 - u2 * x1) * det, d = (u1 * y2 - u2 * y1) * det, e = x0 - a * u0 - c * v0, f = y0 - b * u0 - d * v0; + ctx.save(); + ctx.transform(a, b, c, d, e, f); + ctx.clip(); + ctx.drawImage(img, 0, 0); + ctx.restore(); + }; + SkeletonRenderer.prototype.computeRegionVertices = function (slot, region, pma) { + var skeleton = slot.bone.skeleton; + var skeletonColor = skeleton.color; + var slotColor = slot.color; + var regionColor = region.color; + var alpha = skeletonColor.a * slotColor.a * regionColor.a; + var multiplier = pma ? alpha : 1; + var color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha); + region.computeWorldVertices(slot.bone, this.vertices, 0, SkeletonRenderer.VERTEX_SIZE); + var vertices = this.vertices; + var uvs = region.uvs; + vertices[spine.RegionAttachment.C1R] = color.r; + vertices[spine.RegionAttachment.C1G] = color.g; + vertices[spine.RegionAttachment.C1B] = color.b; + vertices[spine.RegionAttachment.C1A] = color.a; + vertices[spine.RegionAttachment.U1] = uvs[0]; + vertices[spine.RegionAttachment.V1] = uvs[1]; + vertices[spine.RegionAttachment.C2R] = color.r; + vertices[spine.RegionAttachment.C2G] = color.g; + vertices[spine.RegionAttachment.C2B] = color.b; + vertices[spine.RegionAttachment.C2A] = color.a; + vertices[spine.RegionAttachment.U2] = uvs[2]; + vertices[spine.RegionAttachment.V2] = uvs[3]; + vertices[spine.RegionAttachment.C3R] = color.r; + vertices[spine.RegionAttachment.C3G] = color.g; + vertices[spine.RegionAttachment.C3B] = color.b; + vertices[spine.RegionAttachment.C3A] = color.a; + vertices[spine.RegionAttachment.U3] = uvs[4]; + vertices[spine.RegionAttachment.V3] = uvs[5]; + vertices[spine.RegionAttachment.C4R] = color.r; + vertices[spine.RegionAttachment.C4G] = color.g; + vertices[spine.RegionAttachment.C4B] = color.b; + vertices[spine.RegionAttachment.C4A] = color.a; + vertices[spine.RegionAttachment.U4] = uvs[6]; + vertices[spine.RegionAttachment.V4] = uvs[7]; + return vertices; + }; + SkeletonRenderer.prototype.computeMeshVertices = function (slot, mesh, pma) { + var skeleton = slot.bone.skeleton; + var skeletonColor = skeleton.color; + var slotColor = slot.color; + var regionColor = mesh.color; + var alpha = skeletonColor.a * slotColor.a * regionColor.a; + var multiplier = pma ? alpha : 1; + var color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha); + var numVertices = mesh.worldVerticesLength / 2; + if (this.vertices.length < mesh.worldVerticesLength) { + this.vertices = spine.Utils.newFloatArray(mesh.worldVerticesLength); + } + var vertices = this.vertices; + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, SkeletonRenderer.VERTEX_SIZE); + var uvs = mesh.uvs; + for (var i = 0, n = numVertices, u = 0, v = 2; i < n; i++) { + vertices[v++] = color.r; + vertices[v++] = color.g; + vertices[v++] = color.b; + vertices[v++] = color.a; + vertices[v++] = uvs[u++]; + vertices[v++] = uvs[u++]; + v += 2; + } + return vertices; + }; + SkeletonRenderer.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + SkeletonRenderer.VERTEX_SIZE = 2 + 2 + 4; + return SkeletonRenderer; + }()); + canvas.SkeletonRenderer = SkeletonRenderer; + })(canvas = spine.canvas || (spine.canvas = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var AssetManager = (function (_super) { + __extends(AssetManager, _super); + function AssetManager(context, pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + return _super.call(this, function (image) { + return new spine.webgl.GLTexture(context, image); + }, pathPrefix) || this; + } + return AssetManager; + }(spine.AssetManager)); + webgl.AssetManager = AssetManager; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var OrthoCamera = (function () { + function OrthoCamera(viewportWidth, viewportHeight) { + this.position = new webgl.Vector3(0, 0, 0); + this.direction = new webgl.Vector3(0, 0, -1); + this.up = new webgl.Vector3(0, 1, 0); + this.near = 0; + this.far = 100; + this.zoom = 1; + this.viewportWidth = 0; + this.viewportHeight = 0; + this.projectionView = new webgl.Matrix4(); + this.inverseProjectionView = new webgl.Matrix4(); + this.projection = new webgl.Matrix4(); + this.view = new webgl.Matrix4(); + this.tmp = new webgl.Vector3(); + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + this.update(); + } + OrthoCamera.prototype.update = function () { + var projection = this.projection; + var view = this.view; + var projectionView = this.projectionView; + var inverseProjectionView = this.inverseProjectionView; + var zoom = this.zoom, viewportWidth = this.viewportWidth, viewportHeight = this.viewportHeight; + projection.ortho(zoom * (-viewportWidth / 2), zoom * (viewportWidth / 2), zoom * (-viewportHeight / 2), zoom * (viewportHeight / 2), this.near, this.far); + view.lookAt(this.position, this.direction, this.up); + projectionView.set(projection.values); + projectionView.multiply(view); + inverseProjectionView.set(projectionView.values).invert(); + }; + OrthoCamera.prototype.screenToWorld = function (screenCoords, screenWidth, screenHeight) { + var x = screenCoords.x, y = screenHeight - screenCoords.y - 1; + var tmp = this.tmp; + tmp.x = (2 * x) / screenWidth - 1; + tmp.y = (2 * y) / screenHeight - 1; + tmp.z = (2 * screenCoords.z) - 1; + tmp.project(this.inverseProjectionView); + screenCoords.set(tmp.x, tmp.y, tmp.z); + return screenCoords; + }; + OrthoCamera.prototype.setViewport = function (viewportWidth, viewportHeight) { + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + }; + return OrthoCamera; + }()); + webgl.OrthoCamera = OrthoCamera; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var GLTexture = (function (_super) { + __extends(GLTexture, _super); + function GLTexture(context, image, useMipMaps) { + if (useMipMaps === void 0) { useMipMaps = false; } + var _this = _super.call(this, image) || this; + _this.texture = null; + _this.boundUnit = 0; + _this.useMipMaps = false; + _this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + _this.useMipMaps = useMipMaps; + _this.restore(); + _this.context.addRestorable(_this); + return _this; + } + GLTexture.prototype.setFilters = function (minFilter, magFilter) { + var gl = this.context.gl; + this.bind(); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, GLTexture.validateMagFilter(magFilter)); + }; + GLTexture.validateMagFilter = function (magFilter) { + switch (magFilter) { + case spine.TextureFilter.MipMap: + case spine.TextureFilter.MipMapLinearLinear: + case spine.TextureFilter.MipMapLinearNearest: + case spine.TextureFilter.MipMapNearestLinear: + case spine.TextureFilter.MipMapNearestNearest: + return spine.TextureFilter.Linear; + default: + return magFilter; + } + }; + GLTexture.prototype.setWraps = function (uWrap, vWrap) { + var gl = this.context.gl; + this.bind(); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, uWrap); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, vWrap); + }; + GLTexture.prototype.update = function (useMipMaps) { + var gl = this.context.gl; + if (!this.texture) { + this.texture = this.context.gl.createTexture(); + } + this.bind(); + if (GLTexture.DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL) + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, useMipMaps ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + if (useMipMaps) + gl.generateMipmap(gl.TEXTURE_2D); + }; + GLTexture.prototype.restore = function () { + this.texture = null; + this.update(this.useMipMaps); + }; + GLTexture.prototype.bind = function (unit) { + if (unit === void 0) { unit = 0; } + var gl = this.context.gl; + this.boundUnit = unit; + gl.activeTexture(gl.TEXTURE0 + unit); + gl.bindTexture(gl.TEXTURE_2D, this.texture); + }; + GLTexture.prototype.unbind = function () { + var gl = this.context.gl; + gl.activeTexture(gl.TEXTURE0 + this.boundUnit); + gl.bindTexture(gl.TEXTURE_2D, null); + }; + GLTexture.prototype.dispose = function () { + this.context.removeRestorable(this); + var gl = this.context.gl; + gl.deleteTexture(this.texture); + }; + GLTexture.DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL = false; + return GLTexture; + }(spine.Texture)); + webgl.GLTexture = GLTexture; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Input = (function () { + function Input(element) { + this.lastX = 0; + this.lastY = 0; + this.buttonDown = false; + this.currTouch = null; + this.touchesPool = new spine.Pool(function () { + return new spine.webgl.Touch(0, 0, 0); + }); + this.listeners = new Array(); + this.element = element; + this.setupCallbacks(element); + } + Input.prototype.setupCallbacks = function (element) { + var _this = this; + var mouseDown = function (ev) { + if (ev instanceof MouseEvent) { + var rect = element.getBoundingClientRect(); + var x = ev.clientX - rect.left; + var y = ev.clientY - rect.top; + var listeners = _this.listeners; + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].down) + listeners[i].down(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = true; + document.addEventListener("mousemove", mouseMove); + document.addEventListener("mouseup", mouseUp); + } + }; + var mouseMove = function (ev) { + if (ev instanceof MouseEvent) { + var rect = element.getBoundingClientRect(); + var x = ev.clientX - rect.left; + var y = ev.clientY - rect.top; + var listeners = _this.listeners; + for (var i = 0; i < listeners.length; i++) { + if (_this.buttonDown) { + if (listeners[i].dragged) + listeners[i].dragged(x, y); + } + else { + if (listeners[i].moved) + listeners[i].moved(x, y); + } + } + _this.lastX = x; + _this.lastY = y; + } + }; + var mouseUp = function (ev) { + if (ev instanceof MouseEvent) { + var rect = element.getBoundingClientRect(); + var x = ev.clientX - rect.left; + var y = ev.clientY - rect.top; + var listeners = _this.listeners; + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].up) + listeners[i].up(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = false; + document.removeEventListener("mousemove", mouseMove); + document.removeEventListener("mouseup", mouseUp); + } + }; + element.addEventListener("mousedown", mouseDown, true); + element.addEventListener("mousemove", mouseMove, true); + element.addEventListener("mouseup", mouseUp, true); + element.addEventListener("touchstart", function (ev) { + if (_this.currTouch != null) + return; + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + var rect = element.getBoundingClientRect(); + var x = touch.clientX - rect.left; + var y = touch.clientY - rect.top; + _this.currTouch = _this.touchesPool.obtain(); + _this.currTouch.identifier = touch.identifier; + _this.currTouch.x = x; + _this.currTouch.y = y; + break; + } + var listeners = _this.listeners; + for (var i_17 = 0; i_17 < listeners.length; i_17++) { + if (listeners[i_17].down) + listeners[i_17].down(_this.currTouch.x, _this.currTouch.y); + } + _this.lastX = _this.currTouch.x; + _this.lastY = _this.currTouch.y; + _this.buttonDown = true; + ev.preventDefault(); + }, false); + element.addEventListener("touchend", function (ev) { + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (_this.currTouch.identifier === touch.identifier) { + var rect = element.getBoundingClientRect(); + var x = _this.currTouch.x = touch.clientX - rect.left; + var y = _this.currTouch.y = touch.clientY - rect.top; + _this.touchesPool.free(_this.currTouch); + var listeners = _this.listeners; + for (var i_18 = 0; i_18 < listeners.length; i_18++) { + if (listeners[i_18].up) + listeners[i_18].up(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = false; + _this.currTouch = null; + break; + } + } + ev.preventDefault(); + }, false); + element.addEventListener("touchcancel", function (ev) { + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (_this.currTouch.identifier === touch.identifier) { + var rect = element.getBoundingClientRect(); + var x = _this.currTouch.x = touch.clientX - rect.left; + var y = _this.currTouch.y = touch.clientY - rect.top; + _this.touchesPool.free(_this.currTouch); + var listeners = _this.listeners; + for (var i_19 = 0; i_19 < listeners.length; i_19++) { + if (listeners[i_19].up) + listeners[i_19].up(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = false; + _this.currTouch = null; + break; + } + } + ev.preventDefault(); + }, false); + element.addEventListener("touchmove", function (ev) { + if (_this.currTouch == null) + return; + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (_this.currTouch.identifier === touch.identifier) { + var rect = element.getBoundingClientRect(); + var x = touch.clientX - rect.left; + var y = touch.clientY - rect.top; + var listeners = _this.listeners; + for (var i_20 = 0; i_20 < listeners.length; i_20++) { + if (listeners[i_20].dragged) + listeners[i_20].dragged(x, y); + } + _this.lastX = _this.currTouch.x = x; + _this.lastY = _this.currTouch.y = y; + break; + } + } + ev.preventDefault(); + }, false); + }; + Input.prototype.addListener = function (listener) { + this.listeners.push(listener); + }; + Input.prototype.removeListener = function (listener) { + var idx = this.listeners.indexOf(listener); + if (idx > -1) { + this.listeners.splice(idx, 1); + } + }; + return Input; + }()); + webgl.Input = Input; + var Touch = (function () { + function Touch(identifier, x, y) { + this.identifier = identifier; + this.x = x; + this.y = y; + } + return Touch; + }()); + webgl.Touch = Touch; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var LoadingScreen = (function () { + function LoadingScreen(renderer) { + this.logo = null; + this.spinner = null; + this.angle = 0; + this.fadeOut = 0; + this.timeKeeper = new spine.TimeKeeper(); + this.backgroundColor = new spine.Color(0.135, 0.135, 0.135, 1); + this.tempColor = new spine.Color(); + this.firstDraw = 0; + this.renderer = renderer; + this.timeKeeper.maxDelta = 9; + if (LoadingScreen.logoImg === null) { + var isSafari = navigator.userAgent.indexOf("Safari") > -1; + LoadingScreen.logoImg = new Image(); + LoadingScreen.logoImg.src = LoadingScreen.SPINE_LOGO_DATA; + if (!isSafari) + LoadingScreen.logoImg.crossOrigin = "anonymous"; + LoadingScreen.logoImg.onload = function (ev) { + LoadingScreen.loaded++; + }; + LoadingScreen.spinnerImg = new Image(); + LoadingScreen.spinnerImg.src = LoadingScreen.SPINNER_DATA; + if (!isSafari) + LoadingScreen.spinnerImg.crossOrigin = "anonymous"; + LoadingScreen.spinnerImg.onload = function (ev) { + LoadingScreen.loaded++; + }; + } + } + LoadingScreen.prototype.draw = function (complete) { + if (complete === void 0) { complete = false; } + if (complete && this.fadeOut > LoadingScreen.FADE_SECONDS) + return; + this.timeKeeper.update(); + var a = Math.abs(Math.sin(this.timeKeeper.totalTime + 0.75)); + this.angle -= this.timeKeeper.delta / 1.4 * 360 * (1 + 1.5 * Math.pow(a, 5)); + var renderer = this.renderer; + var canvas = renderer.canvas; + var gl = renderer.context.gl; + renderer.resize(webgl.ResizeMode.Stretch); + var oldX = renderer.camera.position.x, oldY = renderer.camera.position.y; + renderer.camera.position.set(canvas.width / 2, canvas.height / 2, 0); + renderer.camera.viewportWidth = canvas.width; + renderer.camera.viewportHeight = canvas.height; + if (!complete) { + gl.clearColor(this.backgroundColor.r, this.backgroundColor.g, this.backgroundColor.b, this.backgroundColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + this.tempColor.a = 1; + } + else { + this.fadeOut += this.timeKeeper.delta * (this.timeKeeper.totalTime < 1 ? 2 : 1); + if (this.fadeOut > LoadingScreen.FADE_SECONDS) { + renderer.camera.position.set(oldX, oldY, 0); + return; + } + a = 1 - this.fadeOut / LoadingScreen.FADE_SECONDS; + this.tempColor.setFromColor(this.backgroundColor); + this.tempColor.a = 1 - (a - 1) * (a - 1); + renderer.begin(); + renderer.quad(true, 0, 0, canvas.width, 0, canvas.width, canvas.height, 0, canvas.height, this.tempColor, this.tempColor, this.tempColor, this.tempColor); + renderer.end(); + } + this.tempColor.set(1, 1, 1, this.tempColor.a); + if (LoadingScreen.loaded != 2) + return; + if (this.logo === null) { + this.logo = new webgl.GLTexture(renderer.context, LoadingScreen.logoImg); + this.spinner = new webgl.GLTexture(renderer.context, LoadingScreen.spinnerImg); + } + this.logo.update(false); + this.spinner.update(false); + var logoWidth = this.logo.getImage().width; + var logoHeight = this.logo.getImage().height; + var spinnerWidth = this.spinner.getImage().width; + var spinnerHeight = this.spinner.getImage().height; + renderer.batcher.setBlendMode(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + renderer.begin(); + renderer.drawTexture(this.logo, (canvas.width - logoWidth) / 2, (canvas.height - logoHeight) / 2, logoWidth, logoHeight, this.tempColor); + renderer.drawTextureRotated(this.spinner, (canvas.width - spinnerWidth) / 2, (canvas.height - spinnerHeight) / 2, spinnerWidth, spinnerHeight, spinnerWidth / 2, spinnerHeight / 2, this.angle, this.tempColor); + renderer.end(); + renderer.camera.position.set(oldX, oldY, 0); + }; + LoadingScreen.FADE_SECONDS = 1; + LoadingScreen.loaded = 0; + LoadingScreen.spinnerImg = null; + LoadingScreen.logoImg = null; + LoadingScreen.SPINNER_DATA = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACjCAYAAADmbK6AAAAACXBIWXMAAAsTAAALEwEAmpwYAAALB2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTgtMTEtMTVUMTY6NDA6NTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpmZDhlNTljMC02NGJjLTIxNGQtODAyZi1jZDlhODJjM2ZjMGMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpmYmNmZWJlYS03MjY2LWE0NGQtOTI4NS0wOTJmNGNhYzk4ZWEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMjk3IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjQyIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHN0RXZ0OndoZW49IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNThlMTlkNi0xYTRjLTQyNDEtODU0ZC01MDVlZjYxMjRhODQiIHN0RXZ0OndoZW49IjIwMTgtMTEtMTVUMTY6NDA6MjMrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ3YzYzYzIwLWJkYjgtYzM0YS1hYzMyLWQ5MDdjOWEyOTA0MCIgc3RFdnQ6d2hlbj0iMjAxOC0xMS0xNVQxNjo0MDo1OSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZmQ4ZTU5YzAtNjRiYy0yMTRkLTgwMmYtY2Q5YTgyYzNmYzBjIiBzdEV2dDp3aGVuPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0N2M2M2MyMC1iZGI4LWMzNGEtYWMzMi1kOTA3YzlhMjkwNDAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2OWRmZjljYy01YzFiLWE5NDctOTc3OS03ODgxZjM0ODk3MDMiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiLz4gPHBob3Rvc2hvcDpEb2N1bWVudEFu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"; + LoadingScreen.SPINE_LOGO_DATA = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKUAAABsCAYAAAALzHKmAAAACXBIWXMAAAsTAAALEwEAmpwYAAALB2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTgtMTEtMTVUMTY6NDA6NTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowMTdhZGQ3Ni04OTZlLThlNGUtYmM5MS00ZjEyNjI1YjA3MjgiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMTViNGE2ZS1hMDg3LWEzNDktODdhOS1mNDYzYjE2MzQ0Y2MiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMjk3IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjQyIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHN0RXZ0OndoZW49IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNThlMTlkNi0xYTRjLTQyNDEtODU0ZC01MDVlZjYxMjRhODQiIHN0RXZ0OndoZW49IjIwMTgtMTEtMTVUMTY6NDA6MjMrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJlNjJiMWM2LWIxYzQtNDk0MC04MDMxLWU4ZDkyNTBmODJjNSIgc3RFdnQ6d2hlbj0iMjAxOC0xMS0xNVQxNjo0MDo1OSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDE3YWRkNzYtODk2ZS04ZTRlLWJjOTEtNGYxMjYyNWIwNzI4IiBzdEV2dDp3aGVuPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyZTYyYjFjNi1iMWM0LTQ5NDAtODAzMS1lOGQ5MjUwZjgyYzUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2OWRmZjljYy01YzFiLWE5NDctOTc3OS03ODgxZjM0ODk3MDMiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiLz4gPHBob3Rvc2hvcDpEb2N1bWVudEFu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"; + return LoadingScreen; + }()); + webgl.LoadingScreen = LoadingScreen; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + webgl.M00 = 0; + webgl.M01 = 4; + webgl.M02 = 8; + webgl.M03 = 12; + webgl.M10 = 1; + webgl.M11 = 5; + webgl.M12 = 9; + webgl.M13 = 13; + webgl.M20 = 2; + webgl.M21 = 6; + webgl.M22 = 10; + webgl.M23 = 14; + webgl.M30 = 3; + webgl.M31 = 7; + webgl.M32 = 11; + webgl.M33 = 15; + var Matrix4 = (function () { + function Matrix4() { + this.temp = new Float32Array(16); + this.values = new Float32Array(16); + var v = this.values; + v[webgl.M00] = 1; + v[webgl.M11] = 1; + v[webgl.M22] = 1; + v[webgl.M33] = 1; + } + Matrix4.prototype.set = function (values) { + this.values.set(values); + return this; + }; + Matrix4.prototype.transpose = function () { + var t = this.temp; + var v = this.values; + t[webgl.M00] = v[webgl.M00]; + t[webgl.M01] = v[webgl.M10]; + t[webgl.M02] = v[webgl.M20]; + t[webgl.M03] = v[webgl.M30]; + t[webgl.M10] = v[webgl.M01]; + t[webgl.M11] = v[webgl.M11]; + t[webgl.M12] = v[webgl.M21]; + t[webgl.M13] = v[webgl.M31]; + t[webgl.M20] = v[webgl.M02]; + t[webgl.M21] = v[webgl.M12]; + t[webgl.M22] = v[webgl.M22]; + t[webgl.M23] = v[webgl.M32]; + t[webgl.M30] = v[webgl.M03]; + t[webgl.M31] = v[webgl.M13]; + t[webgl.M32] = v[webgl.M23]; + t[webgl.M33] = v[webgl.M33]; + return this.set(t); + }; + Matrix4.prototype.identity = function () { + var v = this.values; + v[webgl.M00] = 1; + v[webgl.M01] = 0; + v[webgl.M02] = 0; + v[webgl.M03] = 0; + v[webgl.M10] = 0; + v[webgl.M11] = 1; + v[webgl.M12] = 0; + v[webgl.M13] = 0; + v[webgl.M20] = 0; + v[webgl.M21] = 0; + v[webgl.M22] = 1; + v[webgl.M23] = 0; + v[webgl.M30] = 0; + v[webgl.M31] = 0; + v[webgl.M32] = 0; + v[webgl.M33] = 1; + return this; + }; + Matrix4.prototype.invert = function () { + var v = this.values; + var t = this.temp; + var l_det = v[webgl.M30] * v[webgl.M21] * v[webgl.M12] * v[webgl.M03] - v[webgl.M20] * v[webgl.M31] * v[webgl.M12] * v[webgl.M03] - v[webgl.M30] * v[webgl.M11] * v[webgl.M22] * v[webgl.M03] + + v[webgl.M10] * v[webgl.M31] * v[webgl.M22] * v[webgl.M03] + v[webgl.M20] * v[webgl.M11] * v[webgl.M32] * v[webgl.M03] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32] * v[webgl.M03] + - v[webgl.M30] * v[webgl.M21] * v[webgl.M02] * v[webgl.M13] + v[webgl.M20] * v[webgl.M31] * v[webgl.M02] * v[webgl.M13] + v[webgl.M30] * v[webgl.M01] * v[webgl.M22] * v[webgl.M13] + - v[webgl.M00] * v[webgl.M31] * v[webgl.M22] * v[webgl.M13] - v[webgl.M20] * v[webgl.M01] * v[webgl.M32] * v[webgl.M13] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32] * v[webgl.M13] + + v[webgl.M30] * v[webgl.M11] * v[webgl.M02] * v[webgl.M23] - v[webgl.M10] * v[webgl.M31] * v[webgl.M02] * v[webgl.M23] - v[webgl.M30] * v[webgl.M01] * v[webgl.M12] * v[webgl.M23] + + v[webgl.M00] * v[webgl.M31] * v[webgl.M12] * v[webgl.M23] + v[webgl.M10] * v[webgl.M01] * v[webgl.M32] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32] * v[webgl.M23] + - v[webgl.M20] * v[webgl.M11] * v[webgl.M02] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M02] * v[webgl.M33] + v[webgl.M20] * v[webgl.M01] * v[webgl.M12] * v[webgl.M33] + - v[webgl.M00] * v[webgl.M21] * v[webgl.M12] * v[webgl.M33] - v[webgl.M10] * v[webgl.M01] * v[webgl.M22] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22] * v[webgl.M33]; + if (l_det == 0) + throw new Error("non-invertible matrix"); + var inv_det = 1.0 / l_det; + t[webgl.M00] = v[webgl.M12] * v[webgl.M23] * v[webgl.M31] - v[webgl.M13] * v[webgl.M22] * v[webgl.M31] + v[webgl.M13] * v[webgl.M21] * v[webgl.M32] + - v[webgl.M11] * v[webgl.M23] * v[webgl.M32] - v[webgl.M12] * v[webgl.M21] * v[webgl.M33] + v[webgl.M11] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M01] = v[webgl.M03] * v[webgl.M22] * v[webgl.M31] - v[webgl.M02] * v[webgl.M23] * v[webgl.M31] - v[webgl.M03] * v[webgl.M21] * v[webgl.M32] + + v[webgl.M01] * v[webgl.M23] * v[webgl.M32] + v[webgl.M02] * v[webgl.M21] * v[webgl.M33] - v[webgl.M01] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M02] = v[webgl.M02] * v[webgl.M13] * v[webgl.M31] - v[webgl.M03] * v[webgl.M12] * v[webgl.M31] + v[webgl.M03] * v[webgl.M11] * v[webgl.M32] + - v[webgl.M01] * v[webgl.M13] * v[webgl.M32] - v[webgl.M02] * v[webgl.M11] * v[webgl.M33] + v[webgl.M01] * v[webgl.M12] * v[webgl.M33]; + t[webgl.M03] = v[webgl.M03] * v[webgl.M12] * v[webgl.M21] - v[webgl.M02] * v[webgl.M13] * v[webgl.M21] - v[webgl.M03] * v[webgl.M11] * v[webgl.M22] + + v[webgl.M01] * v[webgl.M13] * v[webgl.M22] + v[webgl.M02] * v[webgl.M11] * v[webgl.M23] - v[webgl.M01] * v[webgl.M12] * v[webgl.M23]; + t[webgl.M10] = v[webgl.M13] * v[webgl.M22] * v[webgl.M30] - v[webgl.M12] * v[webgl.M23] * v[webgl.M30] - v[webgl.M13] * v[webgl.M20] * v[webgl.M32] + + v[webgl.M10] * v[webgl.M23] * v[webgl.M32] + v[webgl.M12] * v[webgl.M20] * v[webgl.M33] - v[webgl.M10] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M11] = v[webgl.M02] * v[webgl.M23] * v[webgl.M30] - v[webgl.M03] * v[webgl.M22] * v[webgl.M30] + v[webgl.M03] * v[webgl.M20] * v[webgl.M32] + - v[webgl.M00] * v[webgl.M23] * v[webgl.M32] - v[webgl.M02] * v[webgl.M20] * v[webgl.M33] + v[webgl.M00] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M12] = v[webgl.M03] * v[webgl.M12] * v[webgl.M30] - v[webgl.M02] * v[webgl.M13] * v[webgl.M30] - v[webgl.M03] * v[webgl.M10] * v[webgl.M32] + + v[webgl.M00] * v[webgl.M13] * v[webgl.M32] + v[webgl.M02] * v[webgl.M10] * v[webgl.M33] - v[webgl.M00] * v[webgl.M12] * v[webgl.M33]; + t[webgl.M13] = v[webgl.M02] * v[webgl.M13] * v[webgl.M20] - v[webgl.M03] * v[webgl.M12] * v[webgl.M20] + v[webgl.M03] * v[webgl.M10] * v[webgl.M22] + - v[webgl.M00] * v[webgl.M13] * v[webgl.M22] - v[webgl.M02] * v[webgl.M10] * v[webgl.M23] + v[webgl.M00] * v[webgl.M12] * v[webgl.M23]; + t[webgl.M20] = v[webgl.M11] * v[webgl.M23] * v[webgl.M30] - v[webgl.M13] * v[webgl.M21] * v[webgl.M30] + v[webgl.M13] * v[webgl.M20] * v[webgl.M31] + - v[webgl.M10] * v[webgl.M23] * v[webgl.M31] - v[webgl.M11] * v[webgl.M20] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M33]; + t[webgl.M21] = v[webgl.M03] * v[webgl.M21] * v[webgl.M30] - v[webgl.M01] * v[webgl.M23] * v[webgl.M30] - v[webgl.M03] * v[webgl.M20] * v[webgl.M31] + + v[webgl.M00] * v[webgl.M23] * v[webgl.M31] + v[webgl.M01] * v[webgl.M20] * v[webgl.M33] - v[webgl.M00] * v[webgl.M21] * v[webgl.M33]; + t[webgl.M22] = v[webgl.M01] * v[webgl.M13] * v[webgl.M30] - v[webgl.M03] * v[webgl.M11] * v[webgl.M30] + v[webgl.M03] * v[webgl.M10] * v[webgl.M31] + - v[webgl.M00] * v[webgl.M13] * v[webgl.M31] - v[webgl.M01] * v[webgl.M10] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M33]; + t[webgl.M23] = v[webgl.M03] * v[webgl.M11] * v[webgl.M20] - v[webgl.M01] * v[webgl.M13] * v[webgl.M20] - v[webgl.M03] * v[webgl.M10] * v[webgl.M21] + + v[webgl.M00] * v[webgl.M13] * v[webgl.M21] + v[webgl.M01] * v[webgl.M10] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M23]; + t[webgl.M30] = v[webgl.M12] * v[webgl.M21] * v[webgl.M30] - v[webgl.M11] * v[webgl.M22] * v[webgl.M30] - v[webgl.M12] * v[webgl.M20] * v[webgl.M31] + + v[webgl.M10] * v[webgl.M22] * v[webgl.M31] + v[webgl.M11] * v[webgl.M20] * v[webgl.M32] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32]; + t[webgl.M31] = v[webgl.M01] * v[webgl.M22] * v[webgl.M30] - v[webgl.M02] * v[webgl.M21] * v[webgl.M30] + v[webgl.M02] * v[webgl.M20] * v[webgl.M31] + - v[webgl.M00] * v[webgl.M22] * v[webgl.M31] - v[webgl.M01] * v[webgl.M20] * v[webgl.M32] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32]; + t[webgl.M32] = v[webgl.M02] * v[webgl.M11] * v[webgl.M30] - v[webgl.M01] * v[webgl.M12] * v[webgl.M30] - v[webgl.M02] * v[webgl.M10] * v[webgl.M31] + + v[webgl.M00] * v[webgl.M12] * v[webgl.M31] + v[webgl.M01] * v[webgl.M10] * v[webgl.M32] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32]; + t[webgl.M33] = v[webgl.M01] * v[webgl.M12] * v[webgl.M20] - v[webgl.M02] * v[webgl.M11] * v[webgl.M20] + v[webgl.M02] * v[webgl.M10] * v[webgl.M21] + - v[webgl.M00] * v[webgl.M12] * v[webgl.M21] - v[webgl.M01] * v[webgl.M10] * v[webgl.M22] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22]; + v[webgl.M00] = t[webgl.M00] * inv_det; + v[webgl.M01] = t[webgl.M01] * inv_det; + v[webgl.M02] = t[webgl.M02] * inv_det; + v[webgl.M03] = t[webgl.M03] * inv_det; + v[webgl.M10] = t[webgl.M10] * inv_det; + v[webgl.M11] = t[webgl.M11] * inv_det; + v[webgl.M12] = t[webgl.M12] * inv_det; + v[webgl.M13] = t[webgl.M13] * inv_det; + v[webgl.M20] = t[webgl.M20] * inv_det; + v[webgl.M21] = t[webgl.M21] * inv_det; + v[webgl.M22] = t[webgl.M22] * inv_det; + v[webgl.M23] = t[webgl.M23] * inv_det; + v[webgl.M30] = t[webgl.M30] * inv_det; + v[webgl.M31] = t[webgl.M31] * inv_det; + v[webgl.M32] = t[webgl.M32] * inv_det; + v[webgl.M33] = t[webgl.M33] * inv_det; + return this; + }; + Matrix4.prototype.determinant = function () { + var v = this.values; + return v[webgl.M30] * v[webgl.M21] * v[webgl.M12] * v[webgl.M03] - v[webgl.M20] * v[webgl.M31] * v[webgl.M12] * v[webgl.M03] - v[webgl.M30] * v[webgl.M11] * v[webgl.M22] * v[webgl.M03] + + v[webgl.M10] * v[webgl.M31] * v[webgl.M22] * v[webgl.M03] + v[webgl.M20] * v[webgl.M11] * v[webgl.M32] * v[webgl.M03] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32] * v[webgl.M03] + - v[webgl.M30] * v[webgl.M21] * v[webgl.M02] * v[webgl.M13] + v[webgl.M20] * v[webgl.M31] * v[webgl.M02] * v[webgl.M13] + v[webgl.M30] * v[webgl.M01] * v[webgl.M22] * v[webgl.M13] + - v[webgl.M00] * v[webgl.M31] * v[webgl.M22] * v[webgl.M13] - v[webgl.M20] * v[webgl.M01] * v[webgl.M32] * v[webgl.M13] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32] * v[webgl.M13] + + v[webgl.M30] * v[webgl.M11] * v[webgl.M02] * v[webgl.M23] - v[webgl.M10] * v[webgl.M31] * v[webgl.M02] * v[webgl.M23] - v[webgl.M30] * v[webgl.M01] * v[webgl.M12] * v[webgl.M23] + + v[webgl.M00] * v[webgl.M31] * v[webgl.M12] * v[webgl.M23] + v[webgl.M10] * v[webgl.M01] * v[webgl.M32] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32] * v[webgl.M23] + - v[webgl.M20] * v[webgl.M11] * v[webgl.M02] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M02] * v[webgl.M33] + v[webgl.M20] * v[webgl.M01] * v[webgl.M12] * v[webgl.M33] + - v[webgl.M00] * v[webgl.M21] * v[webgl.M12] * v[webgl.M33] - v[webgl.M10] * v[webgl.M01] * v[webgl.M22] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22] * v[webgl.M33]; + }; + Matrix4.prototype.translate = function (x, y, z) { + var v = this.values; + v[webgl.M03] += x; + v[webgl.M13] += y; + v[webgl.M23] += z; + return this; + }; + Matrix4.prototype.copy = function () { + return new Matrix4().set(this.values); + }; + Matrix4.prototype.projection = function (near, far, fovy, aspectRatio) { + this.identity(); + var l_fd = (1.0 / Math.tan((fovy * (Math.PI / 180)) / 2.0)); + var l_a1 = (far + near) / (near - far); + var l_a2 = (2 * far * near) / (near - far); + var v = this.values; + v[webgl.M00] = l_fd / aspectRatio; + v[webgl.M10] = 0; + v[webgl.M20] = 0; + v[webgl.M30] = 0; + v[webgl.M01] = 0; + v[webgl.M11] = l_fd; + v[webgl.M21] = 0; + v[webgl.M31] = 0; + v[webgl.M02] = 0; + v[webgl.M12] = 0; + v[webgl.M22] = l_a1; + v[webgl.M32] = -1; + v[webgl.M03] = 0; + v[webgl.M13] = 0; + v[webgl.M23] = l_a2; + v[webgl.M33] = 0; + return this; + }; + Matrix4.prototype.ortho2d = function (x, y, width, height) { + return this.ortho(x, x + width, y, y + height, 0, 1); + }; + Matrix4.prototype.ortho = function (left, right, bottom, top, near, far) { + this.identity(); + var x_orth = 2 / (right - left); + var y_orth = 2 / (top - bottom); + var z_orth = -2 / (far - near); + var tx = -(right + left) / (right - left); + var ty = -(top + bottom) / (top - bottom); + var tz = -(far + near) / (far - near); + var v = this.values; + v[webgl.M00] = x_orth; + v[webgl.M10] = 0; + v[webgl.M20] = 0; + v[webgl.M30] = 0; + v[webgl.M01] = 0; + v[webgl.M11] = y_orth; + v[webgl.M21] = 0; + v[webgl.M31] = 0; + v[webgl.M02] = 0; + v[webgl.M12] = 0; + v[webgl.M22] = z_orth; + v[webgl.M32] = 0; + v[webgl.M03] = tx; + v[webgl.M13] = ty; + v[webgl.M23] = tz; + v[webgl.M33] = 1; + return this; + }; + Matrix4.prototype.multiply = function (matrix) { + var t = this.temp; + var v = this.values; + var m = matrix.values; + t[webgl.M00] = v[webgl.M00] * m[webgl.M00] + v[webgl.M01] * m[webgl.M10] + v[webgl.M02] * m[webgl.M20] + v[webgl.M03] * m[webgl.M30]; + t[webgl.M01] = v[webgl.M00] * m[webgl.M01] + v[webgl.M01] * m[webgl.M11] + v[webgl.M02] * m[webgl.M21] + v[webgl.M03] * m[webgl.M31]; + t[webgl.M02] = v[webgl.M00] * m[webgl.M02] + v[webgl.M01] * m[webgl.M12] + v[webgl.M02] * m[webgl.M22] + v[webgl.M03] * m[webgl.M32]; + t[webgl.M03] = v[webgl.M00] * m[webgl.M03] + v[webgl.M01] * m[webgl.M13] + v[webgl.M02] * m[webgl.M23] + v[webgl.M03] * m[webgl.M33]; + t[webgl.M10] = v[webgl.M10] * m[webgl.M00] + v[webgl.M11] * m[webgl.M10] + v[webgl.M12] * m[webgl.M20] + v[webgl.M13] * m[webgl.M30]; + t[webgl.M11] = v[webgl.M10] * m[webgl.M01] + v[webgl.M11] * m[webgl.M11] + v[webgl.M12] * m[webgl.M21] + v[webgl.M13] * m[webgl.M31]; + t[webgl.M12] = v[webgl.M10] * m[webgl.M02] + v[webgl.M11] * m[webgl.M12] + v[webgl.M12] * m[webgl.M22] + v[webgl.M13] * m[webgl.M32]; + t[webgl.M13] = v[webgl.M10] * m[webgl.M03] + v[webgl.M11] * m[webgl.M13] + v[webgl.M12] * m[webgl.M23] + v[webgl.M13] * m[webgl.M33]; + t[webgl.M20] = v[webgl.M20] * m[webgl.M00] + v[webgl.M21] * m[webgl.M10] + v[webgl.M22] * m[webgl.M20] + v[webgl.M23] * m[webgl.M30]; + t[webgl.M21] = v[webgl.M20] * m[webgl.M01] + v[webgl.M21] * m[webgl.M11] + v[webgl.M22] * m[webgl.M21] + v[webgl.M23] * m[webgl.M31]; + t[webgl.M22] = v[webgl.M20] * m[webgl.M02] + v[webgl.M21] * m[webgl.M12] + v[webgl.M22] * m[webgl.M22] + v[webgl.M23] * m[webgl.M32]; + t[webgl.M23] = v[webgl.M20] * m[webgl.M03] + v[webgl.M21] * m[webgl.M13] + v[webgl.M22] * m[webgl.M23] + v[webgl.M23] * m[webgl.M33]; + t[webgl.M30] = v[webgl.M30] * m[webgl.M00] + v[webgl.M31] * m[webgl.M10] + v[webgl.M32] * m[webgl.M20] + v[webgl.M33] * m[webgl.M30]; + t[webgl.M31] = v[webgl.M30] * m[webgl.M01] + v[webgl.M31] * m[webgl.M11] + v[webgl.M32] * m[webgl.M21] + v[webgl.M33] * m[webgl.M31]; + t[webgl.M32] = v[webgl.M30] * m[webgl.M02] + v[webgl.M31] * m[webgl.M12] + v[webgl.M32] * m[webgl.M22] + v[webgl.M33] * m[webgl.M32]; + t[webgl.M33] = v[webgl.M30] * m[webgl.M03] + v[webgl.M31] * m[webgl.M13] + v[webgl.M32] * m[webgl.M23] + v[webgl.M33] * m[webgl.M33]; + return this.set(this.temp); + }; + Matrix4.prototype.multiplyLeft = function (matrix) { + var t = this.temp; + var v = this.values; + var m = matrix.values; + t[webgl.M00] = m[webgl.M00] * v[webgl.M00] + m[webgl.M01] * v[webgl.M10] + m[webgl.M02] * v[webgl.M20] + m[webgl.M03] * v[webgl.M30]; + t[webgl.M01] = m[webgl.M00] * v[webgl.M01] + m[webgl.M01] * v[webgl.M11] + m[webgl.M02] * v[webgl.M21] + m[webgl.M03] * v[webgl.M31]; + t[webgl.M02] = m[webgl.M00] * v[webgl.M02] + m[webgl.M01] * v[webgl.M12] + m[webgl.M02] * v[webgl.M22] + m[webgl.M03] * v[webgl.M32]; + t[webgl.M03] = m[webgl.M00] * v[webgl.M03] + m[webgl.M01] * v[webgl.M13] + m[webgl.M02] * v[webgl.M23] + m[webgl.M03] * v[webgl.M33]; + t[webgl.M10] = m[webgl.M10] * v[webgl.M00] + m[webgl.M11] * v[webgl.M10] + m[webgl.M12] * v[webgl.M20] + m[webgl.M13] * v[webgl.M30]; + t[webgl.M11] = m[webgl.M10] * v[webgl.M01] + m[webgl.M11] * v[webgl.M11] + m[webgl.M12] * v[webgl.M21] + m[webgl.M13] * v[webgl.M31]; + t[webgl.M12] = m[webgl.M10] * v[webgl.M02] + m[webgl.M11] * v[webgl.M12] + m[webgl.M12] * v[webgl.M22] + m[webgl.M13] * v[webgl.M32]; + t[webgl.M13] = m[webgl.M10] * v[webgl.M03] + m[webgl.M11] * v[webgl.M13] + m[webgl.M12] * v[webgl.M23] + m[webgl.M13] * v[webgl.M33]; + t[webgl.M20] = m[webgl.M20] * v[webgl.M00] + m[webgl.M21] * v[webgl.M10] + m[webgl.M22] * v[webgl.M20] + m[webgl.M23] * v[webgl.M30]; + t[webgl.M21] = m[webgl.M20] * v[webgl.M01] + m[webgl.M21] * v[webgl.M11] + m[webgl.M22] * v[webgl.M21] + m[webgl.M23] * v[webgl.M31]; + t[webgl.M22] = m[webgl.M20] * v[webgl.M02] + m[webgl.M21] * v[webgl.M12] + m[webgl.M22] * v[webgl.M22] + m[webgl.M23] * v[webgl.M32]; + t[webgl.M23] = m[webgl.M20] * v[webgl.M03] + m[webgl.M21] * v[webgl.M13] + m[webgl.M22] * v[webgl.M23] + m[webgl.M23] * v[webgl.M33]; + t[webgl.M30] = m[webgl.M30] * v[webgl.M00] + m[webgl.M31] * v[webgl.M10] + m[webgl.M32] * v[webgl.M20] + m[webgl.M33] * v[webgl.M30]; + t[webgl.M31] = m[webgl.M30] * v[webgl.M01] + m[webgl.M31] * v[webgl.M11] + m[webgl.M32] * v[webgl.M21] + m[webgl.M33] * v[webgl.M31]; + t[webgl.M32] = m[webgl.M30] * v[webgl.M02] + m[webgl.M31] * v[webgl.M12] + m[webgl.M32] * v[webgl.M22] + m[webgl.M33] * v[webgl.M32]; + t[webgl.M33] = m[webgl.M30] * v[webgl.M03] + m[webgl.M31] * v[webgl.M13] + m[webgl.M32] * v[webgl.M23] + m[webgl.M33] * v[webgl.M33]; + return this.set(this.temp); + }; + Matrix4.prototype.lookAt = function (position, direction, up) { + Matrix4.initTemps(); + var xAxis = Matrix4.xAxis, yAxis = Matrix4.yAxis, zAxis = Matrix4.zAxis; + zAxis.setFrom(direction).normalize(); + xAxis.setFrom(direction).normalize(); + xAxis.cross(up).normalize(); + yAxis.setFrom(xAxis).cross(zAxis).normalize(); + this.identity(); + var val = this.values; + val[webgl.M00] = xAxis.x; + val[webgl.M01] = xAxis.y; + val[webgl.M02] = xAxis.z; + val[webgl.M10] = yAxis.x; + val[webgl.M11] = yAxis.y; + val[webgl.M12] = yAxis.z; + val[webgl.M20] = -zAxis.x; + val[webgl.M21] = -zAxis.y; + val[webgl.M22] = -zAxis.z; + Matrix4.tmpMatrix.identity(); + Matrix4.tmpMatrix.values[webgl.M03] = -position.x; + Matrix4.tmpMatrix.values[webgl.M13] = -position.y; + Matrix4.tmpMatrix.values[webgl.M23] = -position.z; + this.multiply(Matrix4.tmpMatrix); + return this; + }; + Matrix4.initTemps = function () { + if (Matrix4.xAxis === null) + Matrix4.xAxis = new webgl.Vector3(); + if (Matrix4.yAxis === null) + Matrix4.yAxis = new webgl.Vector3(); + if (Matrix4.zAxis === null) + Matrix4.zAxis = new webgl.Vector3(); + }; + Matrix4.xAxis = null; + Matrix4.yAxis = null; + Matrix4.zAxis = null; + Matrix4.tmpMatrix = new Matrix4(); + return Matrix4; + }()); + webgl.Matrix4 = Matrix4; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Mesh = (function () { + function Mesh(context, attributes, maxVertices, maxIndices) { + this.attributes = attributes; + this.verticesLength = 0; + this.dirtyVertices = false; + this.indicesLength = 0; + this.dirtyIndices = false; + this.elementsPerVertex = 0; + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.elementsPerVertex = 0; + for (var i = 0; i < attributes.length; i++) { + this.elementsPerVertex += attributes[i].numElements; + } + this.vertices = new Float32Array(maxVertices * this.elementsPerVertex); + this.indices = new Uint16Array(maxIndices); + this.context.addRestorable(this); + } + Mesh.prototype.getAttributes = function () { return this.attributes; }; + Mesh.prototype.maxVertices = function () { return this.vertices.length / this.elementsPerVertex; }; + Mesh.prototype.numVertices = function () { return this.verticesLength / this.elementsPerVertex; }; + Mesh.prototype.setVerticesLength = function (length) { + this.dirtyVertices = true; + this.verticesLength = length; + }; + Mesh.prototype.getVertices = function () { return this.vertices; }; + Mesh.prototype.maxIndices = function () { return this.indices.length; }; + Mesh.prototype.numIndices = function () { return this.indicesLength; }; + Mesh.prototype.setIndicesLength = function (length) { + this.dirtyIndices = true; + this.indicesLength = length; + }; + Mesh.prototype.getIndices = function () { return this.indices; }; + ; + Mesh.prototype.getVertexSizeInFloats = function () { + var size = 0; + for (var i = 0; i < this.attributes.length; i++) { + var attribute = this.attributes[i]; + size += attribute.numElements; + } + return size; + }; + Mesh.prototype.setVertices = function (vertices) { + this.dirtyVertices = true; + if (vertices.length > this.vertices.length) + throw Error("Mesh can't store more than " + this.maxVertices() + " vertices"); + this.vertices.set(vertices, 0); + this.verticesLength = vertices.length; + }; + Mesh.prototype.setIndices = function (indices) { + this.dirtyIndices = true; + if (indices.length > this.indices.length) + throw Error("Mesh can't store more than " + this.maxIndices() + " indices"); + this.indices.set(indices, 0); + this.indicesLength = indices.length; + }; + Mesh.prototype.draw = function (shader, primitiveType) { + this.drawWithOffset(shader, primitiveType, 0, this.indicesLength > 0 ? this.indicesLength : this.verticesLength / this.elementsPerVertex); + }; + Mesh.prototype.drawWithOffset = function (shader, primitiveType, offset, count) { + var gl = this.context.gl; + if (this.dirtyVertices || this.dirtyIndices) + this.update(); + this.bind(shader); + if (this.indicesLength > 0) { + gl.drawElements(primitiveType, count, gl.UNSIGNED_SHORT, offset * 2); + } + else { + gl.drawArrays(primitiveType, offset, count); + } + this.unbind(shader); + }; + Mesh.prototype.bind = function (shader) { + var gl = this.context.gl; + gl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer); + var offset = 0; + for (var i = 0; i < this.attributes.length; i++) { + var attrib = this.attributes[i]; + var location_1 = shader.getAttributeLocation(attrib.name); + gl.enableVertexAttribArray(location_1); + gl.vertexAttribPointer(location_1, attrib.numElements, gl.FLOAT, false, this.elementsPerVertex * 4, offset * 4); + offset += attrib.numElements; + } + if (this.indicesLength > 0) + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer); + }; + Mesh.prototype.unbind = function (shader) { + var gl = this.context.gl; + for (var i = 0; i < this.attributes.length; i++) { + var attrib = this.attributes[i]; + var location_2 = shader.getAttributeLocation(attrib.name); + gl.disableVertexAttribArray(location_2); + } + gl.bindBuffer(gl.ARRAY_BUFFER, null); + if (this.indicesLength > 0) + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null); + }; + Mesh.prototype.update = function () { + var gl = this.context.gl; + if (this.dirtyVertices) { + if (!this.verticesBuffer) { + this.verticesBuffer = gl.createBuffer(); + } + gl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.vertices.subarray(0, this.verticesLength), gl.DYNAMIC_DRAW); + this.dirtyVertices = false; + } + if (this.dirtyIndices) { + if (!this.indicesBuffer) { + this.indicesBuffer = gl.createBuffer(); + } + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices.subarray(0, this.indicesLength), gl.DYNAMIC_DRAW); + this.dirtyIndices = false; + } + }; + Mesh.prototype.restore = function () { + this.verticesBuffer = null; + this.indicesBuffer = null; + this.update(); + }; + Mesh.prototype.dispose = function () { + this.context.removeRestorable(this); + var gl = this.context.gl; + gl.deleteBuffer(this.verticesBuffer); + gl.deleteBuffer(this.indicesBuffer); + }; + return Mesh; + }()); + webgl.Mesh = Mesh; + var VertexAttribute = (function () { + function VertexAttribute(name, type, numElements) { + this.name = name; + this.type = type; + this.numElements = numElements; + } + return VertexAttribute; + }()); + webgl.VertexAttribute = VertexAttribute; + var Position2Attribute = (function (_super) { + __extends(Position2Attribute, _super); + function Position2Attribute() { + return _super.call(this, webgl.Shader.POSITION, VertexAttributeType.Float, 2) || this; + } + return Position2Attribute; + }(VertexAttribute)); + webgl.Position2Attribute = Position2Attribute; + var Position3Attribute = (function (_super) { + __extends(Position3Attribute, _super); + function Position3Attribute() { + return _super.call(this, webgl.Shader.POSITION, VertexAttributeType.Float, 3) || this; + } + return Position3Attribute; + }(VertexAttribute)); + webgl.Position3Attribute = Position3Attribute; + var TexCoordAttribute = (function (_super) { + __extends(TexCoordAttribute, _super); + function TexCoordAttribute(unit) { + if (unit === void 0) { unit = 0; } + return _super.call(this, webgl.Shader.TEXCOORDS + (unit == 0 ? "" : unit), VertexAttributeType.Float, 2) || this; + } + return TexCoordAttribute; + }(VertexAttribute)); + webgl.TexCoordAttribute = TexCoordAttribute; + var ColorAttribute = (function (_super) { + __extends(ColorAttribute, _super); + function ColorAttribute() { + return _super.call(this, webgl.Shader.COLOR, VertexAttributeType.Float, 4) || this; + } + return ColorAttribute; + }(VertexAttribute)); + webgl.ColorAttribute = ColorAttribute; + var Color2Attribute = (function (_super) { + __extends(Color2Attribute, _super); + function Color2Attribute() { + return _super.call(this, webgl.Shader.COLOR2, VertexAttributeType.Float, 4) || this; + } + return Color2Attribute; + }(VertexAttribute)); + webgl.Color2Attribute = Color2Attribute; + var VertexAttributeType; + (function (VertexAttributeType) { + VertexAttributeType[VertexAttributeType["Float"] = 0] = "Float"; + })(VertexAttributeType = webgl.VertexAttributeType || (webgl.VertexAttributeType = {})); + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var PolygonBatcher = (function () { + function PolygonBatcher(context, twoColorTint, maxVertices) { + if (twoColorTint === void 0) { twoColorTint = true; } + if (maxVertices === void 0) { maxVertices = 10920; } + this.isDrawing = false; + this.shader = null; + this.lastTexture = null; + this.verticesLength = 0; + this.indicesLength = 0; + if (maxVertices > 10920) + throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + var attributes = twoColorTint ? + [new webgl.Position2Attribute(), new webgl.ColorAttribute(), new webgl.TexCoordAttribute(), new webgl.Color2Attribute()] : + [new webgl.Position2Attribute(), new webgl.ColorAttribute(), new webgl.TexCoordAttribute()]; + this.mesh = new webgl.Mesh(context, attributes, maxVertices, maxVertices * 3); + this.srcBlend = this.context.gl.SRC_ALPHA; + this.dstBlend = this.context.gl.ONE_MINUS_SRC_ALPHA; + } + PolygonBatcher.prototype.begin = function (shader) { + var gl = this.context.gl; + if (this.isDrawing) + throw new Error("PolygonBatch is already drawing. Call PolygonBatch.end() before calling PolygonBatch.begin()"); + this.drawCalls = 0; + this.shader = shader; + this.lastTexture = null; + this.isDrawing = true; + gl.enable(gl.BLEND); + gl.blendFunc(this.srcBlend, this.dstBlend); + }; + PolygonBatcher.prototype.setBlendMode = function (srcBlend, dstBlend) { + var gl = this.context.gl; + this.srcBlend = srcBlend; + this.dstBlend = dstBlend; + if (this.isDrawing) { + this.flush(); + gl.blendFunc(this.srcBlend, this.dstBlend); + } + }; + PolygonBatcher.prototype.draw = function (texture, vertices, indices) { + if (texture != this.lastTexture) { + this.flush(); + this.lastTexture = texture; + } + else if (this.verticesLength + vertices.length > this.mesh.getVertices().length || + this.indicesLength + indices.length > this.mesh.getIndices().length) { + this.flush(); + } + var indexStart = this.mesh.numVertices(); + this.mesh.getVertices().set(vertices, this.verticesLength); + this.verticesLength += vertices.length; + this.mesh.setVerticesLength(this.verticesLength); + var indicesArray = this.mesh.getIndices(); + for (var i = this.indicesLength, j = 0; j < indices.length; i++, j++) + indicesArray[i] = indices[j] + indexStart; + this.indicesLength += indices.length; + this.mesh.setIndicesLength(this.indicesLength); + }; + PolygonBatcher.prototype.flush = function () { + var gl = this.context.gl; + if (this.verticesLength == 0) + return; + this.lastTexture.bind(); + this.mesh.draw(this.shader, gl.TRIANGLES); + this.verticesLength = 0; + this.indicesLength = 0; + this.mesh.setVerticesLength(0); + this.mesh.setIndicesLength(0); + this.drawCalls++; + }; + PolygonBatcher.prototype.end = function () { + var gl = this.context.gl; + if (!this.isDrawing) + throw new Error("PolygonBatch is not drawing. Call PolygonBatch.begin() before calling PolygonBatch.end()"); + if (this.verticesLength > 0 || this.indicesLength > 0) + this.flush(); + this.shader = null; + this.lastTexture = null; + this.isDrawing = false; + gl.disable(gl.BLEND); + }; + PolygonBatcher.prototype.getDrawCalls = function () { return this.drawCalls; }; + PolygonBatcher.prototype.dispose = function () { + this.mesh.dispose(); + }; + return PolygonBatcher; + }()); + webgl.PolygonBatcher = PolygonBatcher; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var SceneRenderer = (function () { + function SceneRenderer(canvas, context, twoColorTint) { + if (twoColorTint === void 0) { twoColorTint = true; } + this.twoColorTint = false; + this.activeRenderer = null; + this.QUAD = [ + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + ]; + this.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + this.WHITE = new spine.Color(1, 1, 1, 1); + this.canvas = canvas; + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.twoColorTint = twoColorTint; + this.camera = new webgl.OrthoCamera(canvas.width, canvas.height); + this.batcherShader = twoColorTint ? webgl.Shader.newTwoColoredTextured(this.context) : webgl.Shader.newColoredTextured(this.context); + this.batcher = new webgl.PolygonBatcher(this.context, twoColorTint); + this.shapesShader = webgl.Shader.newColored(this.context); + this.shapes = new webgl.ShapeRenderer(this.context); + this.skeletonRenderer = new webgl.SkeletonRenderer(this.context, twoColorTint); + this.skeletonDebugRenderer = new webgl.SkeletonDebugRenderer(this.context); + } + SceneRenderer.prototype.begin = function () { + this.camera.update(); + this.enableRenderer(this.batcher); + }; + SceneRenderer.prototype.drawSkeleton = function (skeleton, premultipliedAlpha, slotRangeStart, slotRangeEnd) { + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + if (slotRangeStart === void 0) { slotRangeStart = -1; } + if (slotRangeEnd === void 0) { slotRangeEnd = -1; } + this.enableRenderer(this.batcher); + this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha; + this.skeletonRenderer.draw(this.batcher, skeleton, slotRangeStart, slotRangeEnd); + }; + SceneRenderer.prototype.drawSkeletonDebug = function (skeleton, premultipliedAlpha, ignoredBones) { + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + if (ignoredBones === void 0) { ignoredBones = null; } + this.enableRenderer(this.shapes); + this.skeletonDebugRenderer.premultipliedAlpha = premultipliedAlpha; + this.skeletonDebugRenderer.draw(this.shapes, skeleton, ignoredBones); + }; + SceneRenderer.prototype.drawTexture = function (texture, x, y, width, height, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.drawTextureUV = function (texture, x, y, width, height, u, v, u2, v2, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u; + quad[i++] = v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u2; + quad[i++] = v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u2; + quad[i++] = v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u; + quad[i++] = v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.drawTextureRotated = function (texture, x, y, width, height, pivotX, pivotY, angle, color, premultipliedAlpha) { + if (color === void 0) { color = null; } + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var worldOriginX = x + pivotX; + var worldOriginY = y + pivotY; + var fx = -pivotX; + var fy = -pivotY; + var fx2 = width - pivotX; + var fy2 = height - pivotY; + var p1x = fx; + var p1y = fy; + var p2x = fx; + var p2y = fy2; + var p3x = fx2; + var p3y = fy2; + var p4x = fx2; + var p4y = fy; + var x1 = 0; + var y1 = 0; + var x2 = 0; + var y2 = 0; + var x3 = 0; + var y3 = 0; + var x4 = 0; + var y4 = 0; + if (angle != 0) { + var cos = spine.MathUtils.cosDeg(angle); + var sin = spine.MathUtils.sinDeg(angle); + x1 = cos * p1x - sin * p1y; + y1 = sin * p1x + cos * p1y; + x4 = cos * p2x - sin * p2y; + y4 = sin * p2x + cos * p2y; + x3 = cos * p3x - sin * p3y; + y3 = sin * p3x + cos * p3y; + x2 = x3 + (x1 - x4); + y2 = y3 + (y1 - y4); + } + else { + x1 = p1x; + y1 = p1y; + x4 = p2x; + y4 = p2y; + x3 = p3x; + y3 = p3y; + x2 = p4x; + y2 = p4y; + } + x1 += worldOriginX; + y1 += worldOriginY; + x2 += worldOriginX; + y2 += worldOriginY; + x3 += worldOriginX; + y3 += worldOriginY; + x4 += worldOriginX; + y4 += worldOriginY; + var i = 0; + quad[i++] = x1; + quad[i++] = y1; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x2; + quad[i++] = y2; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x3; + quad[i++] = y3; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x4; + quad[i++] = y4; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.drawRegion = function (region, x, y, width, height, color, premultipliedAlpha) { + if (color === void 0) { color = null; } + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u; + quad[i++] = region.v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u2; + quad[i++] = region.v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u2; + quad[i++] = region.v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u; + quad[i++] = region.v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(region.texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.line = function (x, y, x2, y2, color, color2) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + this.enableRenderer(this.shapes); + this.shapes.line(x, y, x2, y2, color); + }; + SceneRenderer.prototype.triangle = function (filled, x, y, x2, y2, x3, y3, color, color2, color3) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + this.enableRenderer(this.shapes); + this.shapes.triangle(filled, x, y, x2, y2, x3, y3, color, color2, color3); + }; + SceneRenderer.prototype.quad = function (filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + if (color4 === void 0) { color4 = null; } + this.enableRenderer(this.shapes); + this.shapes.quad(filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4); + }; + SceneRenderer.prototype.rect = function (filled, x, y, width, height, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.rect(filled, x, y, width, height, color); + }; + SceneRenderer.prototype.rectLine = function (filled, x1, y1, x2, y2, width, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.rectLine(filled, x1, y1, x2, y2, width, color); + }; + SceneRenderer.prototype.polygon = function (polygonVertices, offset, count, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.polygon(polygonVertices, offset, count, color); + }; + SceneRenderer.prototype.circle = function (filled, x, y, radius, color, segments) { + if (color === void 0) { color = null; } + if (segments === void 0) { segments = 0; } + this.enableRenderer(this.shapes); + this.shapes.circle(filled, x, y, radius, color, segments); + }; + SceneRenderer.prototype.curve = function (x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color); + }; + SceneRenderer.prototype.end = function () { + if (this.activeRenderer === this.batcher) + this.batcher.end(); + else if (this.activeRenderer === this.shapes) + this.shapes.end(); + this.activeRenderer = null; + }; + SceneRenderer.prototype.resize = function (resizeMode) { + var canvas = this.canvas; + var w = canvas.clientWidth; + var h = canvas.clientHeight; + if (canvas.width != w || canvas.height != h) { + canvas.width = w; + canvas.height = h; + } + this.context.gl.viewport(0, 0, canvas.width, canvas.height); + if (resizeMode === ResizeMode.Stretch) { + } + else if (resizeMode === ResizeMode.Expand) { + this.camera.setViewport(w, h); + } + else if (resizeMode === ResizeMode.Fit) { + var sourceWidth = canvas.width, sourceHeight = canvas.height; + var targetWidth = this.camera.viewportWidth, targetHeight = this.camera.viewportHeight; + var targetRatio = targetHeight / targetWidth; + var sourceRatio = sourceHeight / sourceWidth; + var scale = targetRatio < sourceRatio ? targetWidth / sourceWidth : targetHeight / sourceHeight; + this.camera.viewportWidth = sourceWidth * scale; + this.camera.viewportHeight = sourceHeight * scale; + } + this.camera.update(); + }; + SceneRenderer.prototype.enableRenderer = function (renderer) { + if (this.activeRenderer === renderer) + return; + this.end(); + if (renderer instanceof webgl.PolygonBatcher) { + this.batcherShader.bind(); + this.batcherShader.setUniform4x4f(webgl.Shader.MVP_MATRIX, this.camera.projectionView.values); + this.batcherShader.setUniformi("u_texture", 0); + this.batcher.begin(this.batcherShader); + this.activeRenderer = this.batcher; + } + else if (renderer instanceof webgl.ShapeRenderer) { + this.shapesShader.bind(); + this.shapesShader.setUniform4x4f(webgl.Shader.MVP_MATRIX, this.camera.projectionView.values); + this.shapes.begin(this.shapesShader); + this.activeRenderer = this.shapes; + } + else { + this.activeRenderer = this.skeletonDebugRenderer; + } + }; + SceneRenderer.prototype.dispose = function () { + this.batcher.dispose(); + this.batcherShader.dispose(); + this.shapes.dispose(); + this.shapesShader.dispose(); + this.skeletonDebugRenderer.dispose(); + }; + return SceneRenderer; + }()); + webgl.SceneRenderer = SceneRenderer; + var ResizeMode; + (function (ResizeMode) { + ResizeMode[ResizeMode["Stretch"] = 0] = "Stretch"; + ResizeMode[ResizeMode["Expand"] = 1] = "Expand"; + ResizeMode[ResizeMode["Fit"] = 2] = "Fit"; + })(ResizeMode = webgl.ResizeMode || (webgl.ResizeMode = {})); + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Shader = (function () { + function Shader(context, vertexShader, fragmentShader) { + this.vertexShader = vertexShader; + this.fragmentShader = fragmentShader; + this.vs = null; + this.fs = null; + this.program = null; + this.tmp2x2 = new Float32Array(2 * 2); + this.tmp3x3 = new Float32Array(3 * 3); + this.tmp4x4 = new Float32Array(4 * 4); + this.vsSource = vertexShader; + this.fsSource = fragmentShader; + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.context.addRestorable(this); + this.compile(); + } + Shader.prototype.getProgram = function () { return this.program; }; + Shader.prototype.getVertexShader = function () { return this.vertexShader; }; + Shader.prototype.getFragmentShader = function () { return this.fragmentShader; }; + Shader.prototype.getVertexShaderSource = function () { return this.vsSource; }; + Shader.prototype.getFragmentSource = function () { return this.fsSource; }; + Shader.prototype.compile = function () { + var gl = this.context.gl; + try { + this.vs = this.compileShader(gl.VERTEX_SHADER, this.vertexShader); + this.fs = this.compileShader(gl.FRAGMENT_SHADER, this.fragmentShader); + this.program = this.compileProgram(this.vs, this.fs); + } + catch (e) { + this.dispose(); + throw e; + } + }; + Shader.prototype.compileShader = function (type, source) { + var gl = this.context.gl; + var shader = gl.createShader(type); + gl.shaderSource(shader, source); + gl.compileShader(shader); + if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { + var error = "Couldn't compile shader: " + gl.getShaderInfoLog(shader); + gl.deleteShader(shader); + if (!gl.isContextLost()) + throw new Error(error); + } + return shader; + }; + Shader.prototype.compileProgram = function (vs, fs) { + var gl = this.context.gl; + var program = gl.createProgram(); + gl.attachShader(program, vs); + gl.attachShader(program, fs); + gl.linkProgram(program); + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + var error = "Couldn't compile shader program: " + gl.getProgramInfoLog(program); + gl.deleteProgram(program); + if (!gl.isContextLost()) + throw new Error(error); + } + return program; + }; + Shader.prototype.restore = function () { + this.compile(); + }; + Shader.prototype.bind = function () { + this.context.gl.useProgram(this.program); + }; + Shader.prototype.unbind = function () { + this.context.gl.useProgram(null); + }; + Shader.prototype.setUniformi = function (uniform, value) { + this.context.gl.uniform1i(this.getUniformLocation(uniform), value); + }; + Shader.prototype.setUniformf = function (uniform, value) { + this.context.gl.uniform1f(this.getUniformLocation(uniform), value); + }; + Shader.prototype.setUniform2f = function (uniform, value, value2) { + this.context.gl.uniform2f(this.getUniformLocation(uniform), value, value2); + }; + Shader.prototype.setUniform3f = function (uniform, value, value2, value3) { + this.context.gl.uniform3f(this.getUniformLocation(uniform), value, value2, value3); + }; + Shader.prototype.setUniform4f = function (uniform, value, value2, value3, value4) { + this.context.gl.uniform4f(this.getUniformLocation(uniform), value, value2, value3, value4); + }; + Shader.prototype.setUniform2x2f = function (uniform, value) { + var gl = this.context.gl; + this.tmp2x2.set(value); + gl.uniformMatrix2fv(this.getUniformLocation(uniform), false, this.tmp2x2); + }; + Shader.prototype.setUniform3x3f = function (uniform, value) { + var gl = this.context.gl; + this.tmp3x3.set(value); + gl.uniformMatrix3fv(this.getUniformLocation(uniform), false, this.tmp3x3); + }; + Shader.prototype.setUniform4x4f = function (uniform, value) { + var gl = this.context.gl; + this.tmp4x4.set(value); + gl.uniformMatrix4fv(this.getUniformLocation(uniform), false, this.tmp4x4); + }; + Shader.prototype.getUniformLocation = function (uniform) { + var gl = this.context.gl; + var location = gl.getUniformLocation(this.program, uniform); + if (!location && !gl.isContextLost()) + throw new Error("Couldn't find location for uniform " + uniform); + return location; + }; + Shader.prototype.getAttributeLocation = function (attribute) { + var gl = this.context.gl; + var location = gl.getAttribLocation(this.program, attribute); + if (location == -1 && !gl.isContextLost()) + throw new Error("Couldn't find location for attribute " + attribute); + return location; + }; + Shader.prototype.dispose = function () { + this.context.removeRestorable(this); + var gl = this.context.gl; + if (this.vs) { + gl.deleteShader(this.vs); + this.vs = null; + } + if (this.fs) { + gl.deleteShader(this.fs); + this.fs = null; + } + if (this.program) { + gl.deleteProgram(this.program); + this.program = null; + } + }; + Shader.newColoredTextured = function (context) { + var vs = "\n\t\t\t\tattribute vec4 " + Shader.POSITION + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR + ";\n\t\t\t\tattribute vec2 " + Shader.TEXCOORDS + ";\n\t\t\t\tuniform mat4 " + Shader.MVP_MATRIX + ";\n\t\t\t\tvarying vec4 v_color;\n\t\t\t\tvarying vec2 v_texCoords;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_color = " + Shader.COLOR + ";\n\t\t\t\t\tv_texCoords = " + Shader.TEXCOORDS + ";\n\t\t\t\t\tgl_Position = " + Shader.MVP_MATRIX + " * " + Shader.POSITION + ";\n\t\t\t\t}\n\t\t\t"; + var fs = "\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_color;\n\t\t\t\tvarying vec2 v_texCoords;\n\t\t\t\tuniform sampler2D u_texture;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tgl_FragColor = v_color * texture2D(u_texture, v_texCoords);\n\t\t\t\t}\n\t\t\t"; + return new Shader(context, vs, fs); + }; + Shader.newTwoColoredTextured = function (context) { + var vs = "\n\t\t\t\tattribute vec4 " + Shader.POSITION + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR2 + ";\n\t\t\t\tattribute vec2 " + Shader.TEXCOORDS + ";\n\t\t\t\tuniform mat4 " + Shader.MVP_MATRIX + ";\n\t\t\t\tvarying vec4 v_light;\n\t\t\t\tvarying vec4 v_dark;\n\t\t\t\tvarying vec2 v_texCoords;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_light = " + Shader.COLOR + ";\n\t\t\t\t\tv_dark = " + Shader.COLOR2 + ";\n\t\t\t\t\tv_texCoords = " + Shader.TEXCOORDS + ";\n\t\t\t\t\tgl_Position = " + Shader.MVP_MATRIX + " * " + Shader.POSITION + ";\n\t\t\t\t}\n\t\t\t"; + var fs = "\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_light;\n\t\t\t\tvarying LOWP vec4 v_dark;\n\t\t\t\tvarying vec2 v_texCoords;\n\t\t\t\tuniform sampler2D u_texture;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tvec4 texColor = texture2D(u_texture, v_texCoords);\n\t\t\t\t\tgl_FragColor.a = texColor.a * v_light.a;\n\t\t\t\t\tgl_FragColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;\n\t\t\t\t}\n\t\t\t"; + return new Shader(context, vs, fs); + }; + Shader.newColored = function (context) { + var vs = "\n\t\t\t\tattribute vec4 " + Shader.POSITION + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR + ";\n\t\t\t\tuniform mat4 " + Shader.MVP_MATRIX + ";\n\t\t\t\tvarying vec4 v_color;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_color = " + Shader.COLOR + ";\n\t\t\t\t\tgl_Position = " + Shader.MVP_MATRIX + " * " + Shader.POSITION + ";\n\t\t\t\t}\n\t\t\t"; + var fs = "\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_color;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tgl_FragColor = v_color;\n\t\t\t\t}\n\t\t\t"; + return new Shader(context, vs, fs); + }; + Shader.MVP_MATRIX = "u_projTrans"; + Shader.POSITION = "a_position"; + Shader.COLOR = "a_color"; + Shader.COLOR2 = "a_color2"; + Shader.TEXCOORDS = "a_texCoords"; + Shader.SAMPLER = "u_texture"; + return Shader; + }()); + webgl.Shader = Shader; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var ShapeRenderer = (function () { + function ShapeRenderer(context, maxVertices) { + if (maxVertices === void 0) { maxVertices = 10920; } + this.isDrawing = false; + this.shapeType = ShapeType.Filled; + this.color = new spine.Color(1, 1, 1, 1); + this.vertexIndex = 0; + this.tmp = new spine.Vector2(); + if (maxVertices > 10920) + throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.mesh = new webgl.Mesh(context, [new webgl.Position2Attribute(), new webgl.ColorAttribute()], maxVertices, 0); + this.srcBlend = this.context.gl.SRC_ALPHA; + this.dstBlend = this.context.gl.ONE_MINUS_SRC_ALPHA; + } + ShapeRenderer.prototype.begin = function (shader) { + if (this.isDrawing) + throw new Error("ShapeRenderer.begin() has already been called"); + this.shader = shader; + this.vertexIndex = 0; + this.isDrawing = true; + var gl = this.context.gl; + gl.enable(gl.BLEND); + gl.blendFunc(this.srcBlend, this.dstBlend); + }; + ShapeRenderer.prototype.setBlendMode = function (srcBlend, dstBlend) { + var gl = this.context.gl; + this.srcBlend = srcBlend; + this.dstBlend = dstBlend; + if (this.isDrawing) { + this.flush(); + gl.blendFunc(this.srcBlend, this.dstBlend); + } + }; + ShapeRenderer.prototype.setColor = function (color) { + this.color.setFromColor(color); + }; + ShapeRenderer.prototype.setColorWith = function (r, g, b, a) { + this.color.set(r, g, b, a); + }; + ShapeRenderer.prototype.point = function (x, y, color) { + if (color === void 0) { color = null; } + this.check(ShapeType.Point, 1); + if (color === null) + color = this.color; + this.vertex(x, y, color); + }; + ShapeRenderer.prototype.line = function (x, y, x2, y2, color) { + if (color === void 0) { color = null; } + this.check(ShapeType.Line, 2); + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + if (color === null) + color = this.color; + this.vertex(x, y, color); + this.vertex(x2, y2, color); + }; + ShapeRenderer.prototype.triangle = function (filled, x, y, x2, y2, x3, y3, color, color2, color3) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + this.check(filled ? ShapeType.Filled : ShapeType.Line, 3); + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + if (color === null) + color = this.color; + if (color2 === null) + color2 = this.color; + if (color3 === null) + color3 = this.color; + if (filled) { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x3, y3, color3); + } + else { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x2, y2, color); + this.vertex(x3, y3, color2); + this.vertex(x3, y3, color); + this.vertex(x, y, color2); + } + }; + ShapeRenderer.prototype.quad = function (filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + if (color4 === void 0) { color4 = null; } + this.check(filled ? ShapeType.Filled : ShapeType.Line, 3); + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + if (color === null) + color = this.color; + if (color2 === null) + color2 = this.color; + if (color3 === null) + color3 = this.color; + if (color4 === null) + color4 = this.color; + if (filled) { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x3, y3, color3); + this.vertex(x3, y3, color3); + this.vertex(x4, y4, color4); + this.vertex(x, y, color); + } + else { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x2, y2, color2); + this.vertex(x3, y3, color3); + this.vertex(x3, y3, color3); + this.vertex(x4, y4, color4); + this.vertex(x4, y4, color4); + this.vertex(x, y, color); + } + }; + ShapeRenderer.prototype.rect = function (filled, x, y, width, height, color) { + if (color === void 0) { color = null; } + this.quad(filled, x, y, x + width, y, x + width, y + height, x, y + height, color, color, color, color); + }; + ShapeRenderer.prototype.rectLine = function (filled, x1, y1, x2, y2, width, color) { + if (color === void 0) { color = null; } + this.check(filled ? ShapeType.Filled : ShapeType.Line, 8); + if (color === null) + color = this.color; + var t = this.tmp.set(y2 - y1, x1 - x2); + t.normalize(); + width *= 0.5; + var tx = t.x * width; + var ty = t.y * width; + if (!filled) { + this.vertex(x1 + tx, y1 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x2 - tx, y2 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x1 + tx, y1 + ty, color); + this.vertex(x2 - tx, y2 - ty, color); + this.vertex(x1 - tx, y1 - ty, color); + } + else { + this.vertex(x1 + tx, y1 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x2 - tx, y2 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + } + }; + ShapeRenderer.prototype.x = function (x, y, size) { + this.line(x - size, y - size, x + size, y + size); + this.line(x - size, y + size, x + size, y - size); + }; + ShapeRenderer.prototype.polygon = function (polygonVertices, offset, count, color) { + if (color === void 0) { color = null; } + if (count < 3) + throw new Error("Polygon must contain at least 3 vertices"); + this.check(ShapeType.Line, count * 2); + if (color === null) + color = this.color; + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + offset <<= 1; + count <<= 1; + var firstX = polygonVertices[offset]; + var firstY = polygonVertices[offset + 1]; + var last = offset + count; + for (var i = offset, n = offset + count - 2; i < n; i += 2) { + var x1 = polygonVertices[i]; + var y1 = polygonVertices[i + 1]; + var x2 = 0; + var y2 = 0; + if (i + 2 >= last) { + x2 = firstX; + y2 = firstY; + } + else { + x2 = polygonVertices[i + 2]; + y2 = polygonVertices[i + 3]; + } + this.vertex(x1, y1, color); + this.vertex(x2, y2, color); + } + }; + ShapeRenderer.prototype.circle = function (filled, x, y, radius, color, segments) { + if (color === void 0) { color = null; } + if (segments === void 0) { segments = 0; } + if (segments === 0) + segments = Math.max(1, (6 * spine.MathUtils.cbrt(radius)) | 0); + if (segments <= 0) + throw new Error("segments must be > 0."); + if (color === null) + color = this.color; + var angle = 2 * spine.MathUtils.PI / segments; + var cos = Math.cos(angle); + var sin = Math.sin(angle); + var cx = radius, cy = 0; + if (!filled) { + this.check(ShapeType.Line, segments * 2 + 2); + for (var i = 0; i < segments; i++) { + this.vertex(x + cx, y + cy, color); + var temp_1 = cx; + cx = cos * cx - sin * cy; + cy = sin * temp_1 + cos * cy; + this.vertex(x + cx, y + cy, color); + } + this.vertex(x + cx, y + cy, color); + } + else { + this.check(ShapeType.Filled, segments * 3 + 3); + segments--; + for (var i = 0; i < segments; i++) { + this.vertex(x, y, color); + this.vertex(x + cx, y + cy, color); + var temp_2 = cx; + cx = cos * cx - sin * cy; + cy = sin * temp_2 + cos * cy; + this.vertex(x + cx, y + cy, color); + } + this.vertex(x, y, color); + this.vertex(x + cx, y + cy, color); + } + var temp = cx; + cx = radius; + cy = 0; + this.vertex(x + cx, y + cy, color); + }; + ShapeRenderer.prototype.curve = function (x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color) { + if (color === void 0) { color = null; } + this.check(ShapeType.Line, segments * 2 + 2); + if (color === null) + color = this.color; + var subdiv_step = 1 / segments; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step * subdiv_step * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = x1 - cx1 * 2 + cx2; + var tmp1y = y1 - cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 - x1 + x2; + var tmp2y = (cy1 - cy2) * 3 - y1 + y2; + var fx = x1; + var fy = y1; + var dfx = (cx1 - x1) * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + var dfy = (cy1 - y1) * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + var ddfx = tmp1x * pre4 + tmp2x * pre5; + var ddfy = tmp1y * pre4 + tmp2y * pre5; + var dddfx = tmp2x * pre5; + var dddfy = tmp2y * pre5; + while (segments-- > 0) { + this.vertex(fx, fy, color); + fx += dfx; + fy += dfy; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + this.vertex(fx, fy, color); + } + this.vertex(fx, fy, color); + this.vertex(x2, y2, color); + }; + ShapeRenderer.prototype.vertex = function (x, y, color) { + var idx = this.vertexIndex; + var vertices = this.mesh.getVertices(); + vertices[idx++] = x; + vertices[idx++] = y; + vertices[idx++] = color.r; + vertices[idx++] = color.g; + vertices[idx++] = color.b; + vertices[idx++] = color.a; + this.vertexIndex = idx; + }; + ShapeRenderer.prototype.end = function () { + if (!this.isDrawing) + throw new Error("ShapeRenderer.begin() has not been called"); + this.flush(); + this.context.gl.disable(this.context.gl.BLEND); + this.isDrawing = false; + }; + ShapeRenderer.prototype.flush = function () { + if (this.vertexIndex == 0) + return; + this.mesh.setVerticesLength(this.vertexIndex); + this.mesh.draw(this.shader, this.shapeType); + this.vertexIndex = 0; + }; + ShapeRenderer.prototype.check = function (shapeType, numVertices) { + if (!this.isDrawing) + throw new Error("ShapeRenderer.begin() has not been called"); + if (this.shapeType == shapeType) { + if (this.mesh.maxVertices() - this.mesh.numVertices() < numVertices) + this.flush(); + else + return; + } + else { + this.flush(); + this.shapeType = shapeType; + } + }; + ShapeRenderer.prototype.dispose = function () { + this.mesh.dispose(); + }; + return ShapeRenderer; + }()); + webgl.ShapeRenderer = ShapeRenderer; + var ShapeType; + (function (ShapeType) { + ShapeType[ShapeType["Point"] = 0] = "Point"; + ShapeType[ShapeType["Line"] = 1] = "Line"; + ShapeType[ShapeType["Filled"] = 4] = "Filled"; + })(ShapeType = webgl.ShapeType || (webgl.ShapeType = {})); + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var SkeletonDebugRenderer = (function () { + function SkeletonDebugRenderer(context) { + this.boneLineColor = new spine.Color(1, 0, 0, 1); + this.boneOriginColor = new spine.Color(0, 1, 0, 1); + this.attachmentLineColor = new spine.Color(0, 0, 1, 0.5); + this.triangleLineColor = new spine.Color(1, 0.64, 0, 0.5); + this.pathColor = new spine.Color().setFromString("FF7F00"); + this.clipColor = new spine.Color(0.8, 0, 0, 2); + this.aabbColor = new spine.Color(0, 1, 0, 0.5); + this.drawBones = true; + this.drawRegionAttachments = true; + this.drawBoundingBoxes = true; + this.drawMeshHull = true; + this.drawMeshTriangles = true; + this.drawPaths = true; + this.drawSkeletonXY = false; + this.drawClipping = true; + this.premultipliedAlpha = false; + this.scale = 1; + this.boneWidth = 2; + this.bounds = new spine.SkeletonBounds(); + this.temp = new Array(); + this.vertices = spine.Utils.newFloatArray(2 * 1024); + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + } + SkeletonDebugRenderer.prototype.draw = function (shapes, skeleton, ignoredBones) { + if (ignoredBones === void 0) { ignoredBones = null; } + var skeletonX = skeleton.x; + var skeletonY = skeleton.y; + var gl = this.context.gl; + var srcFunc = this.premultipliedAlpha ? gl.ONE : gl.SRC_ALPHA; + shapes.setBlendMode(srcFunc, gl.ONE_MINUS_SRC_ALPHA); + var bones = skeleton.bones; + if (this.drawBones) { + shapes.setColor(this.boneLineColor); + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) + continue; + if (bone.parent == null) + continue; + var x = skeletonX + bone.data.length * bone.a + bone.worldX; + var y = skeletonY + bone.data.length * bone.c + bone.worldY; + shapes.rectLine(true, skeletonX + bone.worldX, skeletonY + bone.worldY, x, y, this.boneWidth * this.scale); + } + if (this.drawSkeletonXY) + shapes.x(skeletonX, skeletonY, 4 * this.scale); + } + if (this.drawRegionAttachments) { + shapes.setColor(this.attachmentLineColor); + var slots = skeleton.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.RegionAttachment) { + var regionAttachment = attachment; + var vertices = this.vertices; + regionAttachment.computeWorldVertices(slot.bone, vertices, 0, 2); + shapes.line(vertices[0], vertices[1], vertices[2], vertices[3]); + shapes.line(vertices[2], vertices[3], vertices[4], vertices[5]); + shapes.line(vertices[4], vertices[5], vertices[6], vertices[7]); + shapes.line(vertices[6], vertices[7], vertices[0], vertices[1]); + } + } + } + if (this.drawMeshHull || this.drawMeshTriangles) { + var slots = skeleton.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (!(attachment instanceof spine.MeshAttachment)) + continue; + var mesh = attachment; + var vertices = this.vertices; + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, 2); + var triangles = mesh.triangles; + var hullLength = mesh.hullLength; + if (this.drawMeshTriangles) { + shapes.setColor(this.triangleLineColor); + for (var ii = 0, nn = triangles.length; ii < nn; ii += 3) { + var v1 = triangles[ii] * 2, v2 = triangles[ii + 1] * 2, v3 = triangles[ii + 2] * 2; + shapes.triangle(false, vertices[v1], vertices[v1 + 1], vertices[v2], vertices[v2 + 1], vertices[v3], vertices[v3 + 1]); + } + } + if (this.drawMeshHull && hullLength > 0) { + shapes.setColor(this.attachmentLineColor); + hullLength = (hullLength >> 1) * 2; + var lastX = vertices[hullLength - 2], lastY = vertices[hullLength - 1]; + for (var ii = 0, nn = hullLength; ii < nn; ii += 2) { + var x = vertices[ii], y = vertices[ii + 1]; + shapes.line(x, y, lastX, lastY); + lastX = x; + lastY = y; + } + } + } + } + if (this.drawBoundingBoxes) { + var bounds = this.bounds; + bounds.update(skeleton, true); + shapes.setColor(this.aabbColor); + shapes.rect(false, bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight()); + var polygons = bounds.polygons; + var boxes = bounds.boundingBoxes; + for (var i = 0, n = polygons.length; i < n; i++) { + var polygon = polygons[i]; + shapes.setColor(boxes[i].color); + shapes.polygon(polygon, 0, polygon.length); + } + } + if (this.drawPaths) { + var slots = skeleton.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (!(attachment instanceof spine.PathAttachment)) + continue; + var path = attachment; + var nn = path.worldVerticesLength; + var world = this.temp = spine.Utils.setArraySize(this.temp, nn, 0); + path.computeWorldVertices(slot, 0, nn, world, 0, 2); + var color = this.pathColor; + var x1 = world[2], y1 = world[3], x2 = 0, y2 = 0; + if (path.closed) { + shapes.setColor(color); + var cx1 = world[0], cy1 = world[1], cx2 = world[nn - 2], cy2 = world[nn - 1]; + x2 = world[nn - 4]; + y2 = world[nn - 3]; + shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32); + shapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY); + shapes.line(x1, y1, cx1, cy1); + shapes.line(x2, y2, cx2, cy2); + } + nn -= 4; + for (var ii = 4; ii < nn; ii += 6) { + var cx1 = world[ii], cy1 = world[ii + 1], cx2 = world[ii + 2], cy2 = world[ii + 3]; + x2 = world[ii + 4]; + y2 = world[ii + 5]; + shapes.setColor(color); + shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32); + shapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY); + shapes.line(x1, y1, cx1, cy1); + shapes.line(x2, y2, cx2, cy2); + x1 = x2; + y1 = y2; + } + } + } + if (this.drawBones) { + shapes.setColor(this.boneOriginColor); + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) + continue; + shapes.circle(true, skeletonX + bone.worldX, skeletonY + bone.worldY, 3 * this.scale, SkeletonDebugRenderer.GREEN, 8); + } + } + if (this.drawClipping) { + var slots = skeleton.slots; + shapes.setColor(this.clipColor); + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (!(attachment instanceof spine.ClippingAttachment)) + continue; + var clip = attachment; + var nn = clip.worldVerticesLength; + var world = this.temp = spine.Utils.setArraySize(this.temp, nn, 0); + clip.computeWorldVertices(slot, 0, nn, world, 0, 2); + for (var i_21 = 0, n_3 = world.length; i_21 < n_3; i_21 += 2) { + var x = world[i_21]; + var y = world[i_21 + 1]; + var x2 = world[(i_21 + 2) % world.length]; + var y2 = world[(i_21 + 3) % world.length]; + shapes.line(x, y, x2, y2); + } + } + } + }; + SkeletonDebugRenderer.prototype.dispose = function () { + }; + SkeletonDebugRenderer.LIGHT_GRAY = new spine.Color(192 / 255, 192 / 255, 192 / 255, 1); + SkeletonDebugRenderer.GREEN = new spine.Color(0, 1, 0, 1); + return SkeletonDebugRenderer; + }()); + webgl.SkeletonDebugRenderer = SkeletonDebugRenderer; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Renderable = (function () { + function Renderable(vertices, numVertices, numFloats) { + this.vertices = vertices; + this.numVertices = numVertices; + this.numFloats = numFloats; + } + return Renderable; + }()); + ; + var SkeletonRenderer = (function () { + function SkeletonRenderer(context, twoColorTint) { + if (twoColorTint === void 0) { twoColorTint = true; } + this.premultipliedAlpha = false; + this.vertexEffect = null; + this.tempColor = new spine.Color(); + this.tempColor2 = new spine.Color(); + this.vertexSize = 2 + 2 + 4; + this.twoColorTint = false; + this.renderable = new Renderable(null, 0, 0); + this.clipper = new spine.SkeletonClipping(); + this.temp = new spine.Vector2(); + this.temp2 = new spine.Vector2(); + this.temp3 = new spine.Color(); + this.temp4 = new spine.Color(); + this.twoColorTint = twoColorTint; + if (twoColorTint) + this.vertexSize += 4; + this.vertices = spine.Utils.newFloatArray(this.vertexSize * 1024); + } + SkeletonRenderer.prototype.draw = function (batcher, skeleton, slotRangeStart, slotRangeEnd) { + if (slotRangeStart === void 0) { slotRangeStart = -1; } + if (slotRangeEnd === void 0) { slotRangeEnd = -1; } + var clipper = this.clipper; + var premultipliedAlpha = this.premultipliedAlpha; + var twoColorTint = this.twoColorTint; + var blendMode = null; + var tempPos = this.temp; + var tempUv = this.temp2; + var tempLight = this.temp3; + var tempDark = this.temp4; + var renderable = this.renderable; + var uvs = null; + var triangles = null; + var drawOrder = skeleton.drawOrder; + var attachmentColor = null; + var skeletonColor = skeleton.color; + var vertexSize = twoColorTint ? 12 : 8; + var inRange = false; + if (slotRangeStart == -1) + inRange = true; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var clippedVertexSize = clipper.isClipping() ? 2 : vertexSize; + var slot = drawOrder[i]; + if (!slot.bone.active) { + clipper.clipEndWithSlot(slot); + continue; + } + if (slotRangeStart >= 0 && slotRangeStart == slot.data.index) { + inRange = true; + } + if (!inRange) { + clipper.clipEndWithSlot(slot); + continue; + } + if (slotRangeEnd >= 0 && slotRangeEnd == slot.data.index) { + inRange = false; + } + var attachment = slot.getAttachment(); + var texture = null; + if (attachment instanceof spine.RegionAttachment) { + var region = attachment; + renderable.vertices = this.vertices; + renderable.numVertices = 4; + renderable.numFloats = clippedVertexSize << 2; + region.computeWorldVertices(slot.bone, renderable.vertices, 0, clippedVertexSize); + triangles = SkeletonRenderer.QUAD_TRIANGLES; + uvs = region.uvs; + texture = region.region.renderObject.texture; + attachmentColor = region.color; + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + renderable.vertices = this.vertices; + renderable.numVertices = (mesh.worldVerticesLength >> 1); + renderable.numFloats = renderable.numVertices * clippedVertexSize; + if (renderable.numFloats > renderable.vertices.length) { + renderable.vertices = this.vertices = spine.Utils.newFloatArray(renderable.numFloats); + } + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, renderable.vertices, 0, clippedVertexSize); + triangles = mesh.triangles; + texture = mesh.region.renderObject.texture; + uvs = mesh.uvs; + attachmentColor = mesh.color; + } + else if (attachment instanceof spine.ClippingAttachment) { + var clip = (attachment); + clipper.clipStart(slot, clip); + continue; + } + else { + clipper.clipEndWithSlot(slot); + continue; + } + if (texture != null) { + var slotColor = slot.color; + var finalColor = this.tempColor; + finalColor.r = skeletonColor.r * slotColor.r * attachmentColor.r; + finalColor.g = skeletonColor.g * slotColor.g * attachmentColor.g; + finalColor.b = skeletonColor.b * slotColor.b * attachmentColor.b; + finalColor.a = skeletonColor.a * slotColor.a * attachmentColor.a; + if (premultipliedAlpha) { + finalColor.r *= finalColor.a; + finalColor.g *= finalColor.a; + finalColor.b *= finalColor.a; + } + var darkColor = this.tempColor2; + if (slot.darkColor == null) + darkColor.set(0, 0, 0, 1.0); + else { + if (premultipliedAlpha) { + darkColor.r = slot.darkColor.r * finalColor.a; + darkColor.g = slot.darkColor.g * finalColor.a; + darkColor.b = slot.darkColor.b * finalColor.a; + } + else { + darkColor.setFromColor(slot.darkColor); + } + darkColor.a = premultipliedAlpha ? 1.0 : 0.0; + } + var slotBlendMode = slot.data.blendMode; + if (slotBlendMode != blendMode) { + blendMode = slotBlendMode; + batcher.setBlendMode(webgl.WebGLBlendModeConverter.getSourceGLBlendMode(blendMode, premultipliedAlpha), webgl.WebGLBlendModeConverter.getDestGLBlendMode(blendMode)); + } + if (clipper.isClipping()) { + clipper.clipTriangles(renderable.vertices, renderable.numFloats, triangles, triangles.length, uvs, finalColor, darkColor, twoColorTint); + var clippedVertices = new Float32Array(clipper.clippedVertices); + var clippedTriangles = clipper.clippedTriangles; + if (this.vertexEffect != null) { + var vertexEffect = this.vertexEffect; + var verts = clippedVertices; + if (!twoColorTint) { + for (var v = 0, n_4 = clippedVertices.length; v < n_4; v += vertexSize) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.set(verts[v + 2], verts[v + 3], verts[v + 4], verts[v + 5]); + tempUv.x = verts[v + 6]; + tempUv.y = verts[v + 7]; + tempDark.set(0, 0, 0, 0); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } + else { + for (var v = 0, n_5 = clippedVertices.length; v < n_5; v += vertexSize) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.set(verts[v + 2], verts[v + 3], verts[v + 4], verts[v + 5]); + tempUv.x = verts[v + 6]; + tempUv.y = verts[v + 7]; + tempDark.set(verts[v + 8], verts[v + 9], verts[v + 10], verts[v + 11]); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + verts[v + 8] = tempDark.r; + verts[v + 9] = tempDark.g; + verts[v + 10] = tempDark.b; + verts[v + 11] = tempDark.a; + } + } + } + batcher.draw(texture, clippedVertices, clippedTriangles); + } + else { + var verts = renderable.vertices; + if (this.vertexEffect != null) { + var vertexEffect = this.vertexEffect; + if (!twoColorTint) { + for (var v = 0, u = 0, n_6 = renderable.numFloats; v < n_6; v += vertexSize, u += 2) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempUv.x = uvs[u]; + tempUv.y = uvs[u + 1]; + tempLight.setFromColor(finalColor); + tempDark.set(0, 0, 0, 0); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } + else { + for (var v = 0, u = 0, n_7 = renderable.numFloats; v < n_7; v += vertexSize, u += 2) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempUv.x = uvs[u]; + tempUv.y = uvs[u + 1]; + tempLight.setFromColor(finalColor); + tempDark.setFromColor(darkColor); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + verts[v + 8] = tempDark.r; + verts[v + 9] = tempDark.g; + verts[v + 10] = tempDark.b; + verts[v + 11] = tempDark.a; + } + } + } + else { + if (!twoColorTint) { + for (var v = 2, u = 0, n_8 = renderable.numFloats; v < n_8; v += vertexSize, u += 2) { + verts[v] = finalColor.r; + verts[v + 1] = finalColor.g; + verts[v + 2] = finalColor.b; + verts[v + 3] = finalColor.a; + verts[v + 4] = uvs[u]; + verts[v + 5] = uvs[u + 1]; + } + } + else { + for (var v = 2, u = 0, n_9 = renderable.numFloats; v < n_9; v += vertexSize, u += 2) { + verts[v] = finalColor.r; + verts[v + 1] = finalColor.g; + verts[v + 2] = finalColor.b; + verts[v + 3] = finalColor.a; + verts[v + 4] = uvs[u]; + verts[v + 5] = uvs[u + 1]; + verts[v + 6] = darkColor.r; + verts[v + 7] = darkColor.g; + verts[v + 8] = darkColor.b; + verts[v + 9] = darkColor.a; + } + } + } + var view = renderable.vertices.subarray(0, renderable.numFloats); + batcher.draw(texture, view, triangles); + } + } + clipper.clipEndWithSlot(slot); + } + clipper.clipEnd(); + }; + SkeletonRenderer.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + return SkeletonRenderer; + }()); + webgl.SkeletonRenderer = SkeletonRenderer; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Vector3 = (function () { + function Vector3(x, y, z) { + if (x === void 0) { x = 0; } + if (y === void 0) { y = 0; } + if (z === void 0) { z = 0; } + this.x = 0; + this.y = 0; + this.z = 0; + this.x = x; + this.y = y; + this.z = z; + } + Vector3.prototype.setFrom = function (v) { + this.x = v.x; + this.y = v.y; + this.z = v.z; + return this; + }; + Vector3.prototype.set = function (x, y, z) { + this.x = x; + this.y = y; + this.z = z; + return this; + }; + Vector3.prototype.add = function (v) { + this.x += v.x; + this.y += v.y; + this.z += v.z; + return this; + }; + Vector3.prototype.sub = function (v) { + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + return this; + }; + Vector3.prototype.scale = function (s) { + this.x *= s; + this.y *= s; + this.z *= s; + return this; + }; + Vector3.prototype.normalize = function () { + var len = this.length(); + if (len == 0) + return this; + len = 1 / len; + this.x *= len; + this.y *= len; + this.z *= len; + return this; + }; + Vector3.prototype.cross = function (v) { + return this.set(this.y * v.z - this.z * v.y, this.z * v.x - this.x * v.z, this.x * v.y - this.y * v.x); + }; + Vector3.prototype.multiply = function (matrix) { + var l_mat = matrix.values; + return this.set(this.x * l_mat[webgl.M00] + this.y * l_mat[webgl.M01] + this.z * l_mat[webgl.M02] + l_mat[webgl.M03], this.x * l_mat[webgl.M10] + this.y * l_mat[webgl.M11] + this.z * l_mat[webgl.M12] + l_mat[webgl.M13], this.x * l_mat[webgl.M20] + this.y * l_mat[webgl.M21] + this.z * l_mat[webgl.M22] + l_mat[webgl.M23]); + }; + Vector3.prototype.project = function (matrix) { + var l_mat = matrix.values; + var l_w = 1 / (this.x * l_mat[webgl.M30] + this.y * l_mat[webgl.M31] + this.z * l_mat[webgl.M32] + l_mat[webgl.M33]); + return this.set((this.x * l_mat[webgl.M00] + this.y * l_mat[webgl.M01] + this.z * l_mat[webgl.M02] + l_mat[webgl.M03]) * l_w, (this.x * l_mat[webgl.M10] + this.y * l_mat[webgl.M11] + this.z * l_mat[webgl.M12] + l_mat[webgl.M13]) * l_w, (this.x * l_mat[webgl.M20] + this.y * l_mat[webgl.M21] + this.z * l_mat[webgl.M22] + l_mat[webgl.M23]) * l_w); + }; + Vector3.prototype.dot = function (v) { + return this.x * v.x + this.y * v.y + this.z * v.z; + }; + Vector3.prototype.length = function () { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + }; + Vector3.prototype.distance = function (v) { + var a = v.x - this.x; + var b = v.y - this.y; + var c = v.z - this.z; + return Math.sqrt(a * a + b * b + c * c); + }; + return Vector3; + }()); + webgl.Vector3 = Vector3; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var ManagedWebGLRenderingContext = (function () { + function ManagedWebGLRenderingContext(canvasOrContext, contextConfig) { + if (contextConfig === void 0) { contextConfig = { alpha: "true" }; } + this.restorables = new Array(); + if (!((canvasOrContext instanceof WebGLRenderingContext) || (canvasOrContext instanceof WebGL2RenderingContext))) { + this.setupCanvas(canvasOrContext, contextConfig); + } + else { + this.gl = canvasOrContext; + this.canvas = this.gl.canvas; + } + } + ManagedWebGLRenderingContext.prototype.setupCanvas = function (canvas, contextConfig) { + var _this = this; + this.gl = (canvas.getContext("webgl2", contextConfig) || canvas.getContext("webgl", contextConfig)); + this.canvas = canvas; + canvas.addEventListener("webglcontextlost", function (e) { + var event = e; + if (e) { + e.preventDefault(); + } + }); + canvas.addEventListener("webglcontextrestored", function (e) { + for (var i = 0, n = _this.restorables.length; i < n; i++) { + _this.restorables[i].restore(); + } + }); + }; + ManagedWebGLRenderingContext.prototype.addRestorable = function (restorable) { + this.restorables.push(restorable); + }; + ManagedWebGLRenderingContext.prototype.removeRestorable = function (restorable) { + var index = this.restorables.indexOf(restorable); + if (index > -1) + this.restorables.splice(index, 1); + }; + return ManagedWebGLRenderingContext; + }()); + webgl.ManagedWebGLRenderingContext = ManagedWebGLRenderingContext; + var WebGLBlendModeConverter = (function () { + function WebGLBlendModeConverter() { + } + WebGLBlendModeConverter.getDestGLBlendMode = function (blendMode) { + switch (blendMode) { + case spine.BlendMode.Normal: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + case spine.BlendMode.Additive: return WebGLBlendModeConverter.ONE; + case spine.BlendMode.Multiply: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + case spine.BlendMode.Screen: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + default: throw new Error("Unknown blend mode: " + blendMode); + } + }; + WebGLBlendModeConverter.getSourceGLBlendMode = function (blendMode, premultipliedAlpha) { + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + switch (blendMode) { + case spine.BlendMode.Normal: return premultipliedAlpha ? WebGLBlendModeConverter.ONE : WebGLBlendModeConverter.SRC_ALPHA; + case spine.BlendMode.Additive: return premultipliedAlpha ? WebGLBlendModeConverter.ONE : WebGLBlendModeConverter.SRC_ALPHA; + case spine.BlendMode.Multiply: return WebGLBlendModeConverter.DST_COLOR; + case spine.BlendMode.Screen: return WebGLBlendModeConverter.ONE; + default: throw new Error("Unknown blend mode: " + blendMode); + } + }; + WebGLBlendModeConverter.ZERO = 0; + WebGLBlendModeConverter.ONE = 1; + WebGLBlendModeConverter.SRC_COLOR = 0x0300; + WebGLBlendModeConverter.ONE_MINUS_SRC_COLOR = 0x0301; + WebGLBlendModeConverter.SRC_ALPHA = 0x0302; + WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA = 0x0303; + WebGLBlendModeConverter.DST_ALPHA = 0x0304; + WebGLBlendModeConverter.ONE_MINUS_DST_ALPHA = 0x0305; + WebGLBlendModeConverter.DST_COLOR = 0x0306; + return WebGLBlendModeConverter; + }()); + webgl.WebGLBlendModeConverter = WebGLBlendModeConverter; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var threejs; + (function (threejs) { + var AssetManager = (function (_super) { + __extends(AssetManager, _super); + function AssetManager(pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + return _super.call(this, function (image) { + return new threejs.ThreeJsTexture(image); + }, pathPrefix) || this; + } + return AssetManager; + }(spine.AssetManager)); + threejs.AssetManager = AssetManager; + })(threejs = spine.threejs || (spine.threejs = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var threejs; + (function (threejs) { + var MeshBatcher = (function (_super) { + __extends(MeshBatcher, _super); + function MeshBatcher(maxVertices, materialCustomizer) { + if (maxVertices === void 0) { maxVertices = 10920; } + if (materialCustomizer === void 0) { materialCustomizer = function (parameters) { }; } + var _this = _super.call(this) || this; + _this.verticesLength = 0; + _this.indicesLength = 0; + if (maxVertices > 10920) + throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); + var vertices = _this.vertices = new Float32Array(maxVertices * MeshBatcher.VERTEX_SIZE); + var indices = _this.indices = new Uint16Array(maxVertices * 3); + var geo = new THREE.BufferGeometry(); + var vertexBuffer = _this.vertexBuffer = new THREE.InterleavedBuffer(vertices, MeshBatcher.VERTEX_SIZE); + vertexBuffer.usage = WebGLRenderingContext.DYNAMIC_DRAW; + geo.setAttribute("position", new THREE.InterleavedBufferAttribute(vertexBuffer, 3, 0, false)); + geo.setAttribute("color", new THREE.InterleavedBufferAttribute(vertexBuffer, 4, 3, false)); + geo.setAttribute("uv", new THREE.InterleavedBufferAttribute(vertexBuffer, 2, 7, false)); + geo.setIndex(new THREE.BufferAttribute(indices, 1)); + geo.getIndex().usage = WebGLRenderingContext.DYNAMIC_DRAW; + ; + geo.drawRange.start = 0; + geo.drawRange.count = 0; + _this.geometry = geo; + _this.material = new threejs.SkeletonMeshMaterial(materialCustomizer); + return _this; + } + MeshBatcher.prototype.dispose = function () { + this.geometry.dispose(); + if (this.material instanceof THREE.Material) + this.material.dispose(); + else if (this.material) { + for (var i = 0; i < this.material.length; i++) { + var material = this.material[i]; + if (material instanceof THREE.Material) + material.dispose(); + } + } + }; + MeshBatcher.prototype.clear = function () { + var geo = this.geometry; + geo.drawRange.start = 0; + geo.drawRange.count = 0; + this.material.uniforms.map.value = null; + }; + MeshBatcher.prototype.begin = function () { + this.verticesLength = 0; + this.indicesLength = 0; + }; + MeshBatcher.prototype.canBatch = function (verticesLength, indicesLength) { + if (this.indicesLength + indicesLength >= this.indices.byteLength / 2) + return false; + if (this.verticesLength + verticesLength >= this.vertices.byteLength / 2) + return false; + return true; + }; + MeshBatcher.prototype.batch = function (vertices, verticesLength, indices, indicesLength, z) { + if (z === void 0) { z = 0; } + var indexStart = this.verticesLength / MeshBatcher.VERTEX_SIZE; + var vertexBuffer = this.vertices; + var i = this.verticesLength; + var j = 0; + for (; j < verticesLength;) { + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = z; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + } + this.verticesLength = i; + var indicesArray = this.indices; + for (i = this.indicesLength, j = 0; j < indicesLength; i++, j++) + indicesArray[i] = indices[j] + indexStart; + this.indicesLength += indicesLength; + }; + MeshBatcher.prototype.end = function () { + this.vertexBuffer.needsUpdate = this.verticesLength > 0; + this.vertexBuffer.updateRange.offset = 0; + this.vertexBuffer.updateRange.count = this.verticesLength; + var geo = this.geometry; + geo.getIndex().needsUpdate = this.indicesLength > 0; + geo.getIndex().updateRange.offset = 0; + geo.getIndex().updateRange.count = this.indicesLength; + geo.drawRange.start = 0; + geo.drawRange.count = this.indicesLength; + }; + MeshBatcher.VERTEX_SIZE = 9; + return MeshBatcher; + }(THREE.Mesh)); + threejs.MeshBatcher = MeshBatcher; + })(threejs = spine.threejs || (spine.threejs = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var threejs; + (function (threejs) { + var SkeletonMeshMaterial = (function (_super) { + __extends(SkeletonMeshMaterial, _super); + function SkeletonMeshMaterial(customizer) { + var _this = this; + var vertexShader = "\n\t\t\t\tattribute vec4 color;\n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tvarying vec4 vColor;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvColor = color;\n\t\t\t\t\tgl_Position = projectionMatrix*modelViewMatrix*vec4(position,1.0);\n\t\t\t\t}\n\t\t\t"; + var fragmentShader = "\n\t\t\t\tuniform sampler2D map;\n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tvarying vec4 vColor;\n\t\t\t\tvoid main(void) {\n\t\t\t\t\tgl_FragColor = texture2D(map, vUv)*vColor;\n\t\t\t\t}\n\t\t\t"; + var parameters = { + uniforms: { + map: { type: "t", value: null } + }, + vertexShader: vertexShader, + fragmentShader: fragmentShader, + side: THREE.DoubleSide, + transparent: true, + alphaTest: 0.5 + }; + customizer(parameters); + _this = _super.call(this, parameters) || this; + return _this; + } + ; + return SkeletonMeshMaterial; + }(THREE.ShaderMaterial)); + threejs.SkeletonMeshMaterial = SkeletonMeshMaterial; + var SkeletonMesh = (function (_super) { + __extends(SkeletonMesh, _super); + function SkeletonMesh(skeletonData, materialCustomizer) { + if (materialCustomizer === void 0) { materialCustomizer = function (parameters) { }; } + var _this = _super.call(this) || this; + _this.tempPos = new spine.Vector2(); + _this.tempUv = new spine.Vector2(); + _this.tempLight = new spine.Color(); + _this.tempDark = new spine.Color(); + _this.zOffset = 0.1; + _this.batches = new Array(); + _this.nextBatchIndex = 0; + _this.clipper = new spine.SkeletonClipping(); + _this.vertices = spine.Utils.newFloatArray(1024); + _this.tempColor = new spine.Color(); + _this.materialCustomizer = materialCustomizer; + _this.skeleton = new spine.Skeleton(skeletonData); + var animData = new spine.AnimationStateData(skeletonData); + _this.state = new spine.AnimationState(animData); + return _this; + } + SkeletonMesh.prototype.update = function (deltaTime) { + var state = this.state; + var skeleton = this.skeleton; + state.update(deltaTime); + state.apply(skeleton); + skeleton.updateWorldTransform(); + this.updateGeometry(); + }; + SkeletonMesh.prototype.dispose = function () { + for (var i = 0; i < this.batches.length; i++) { + this.batches[i].dispose(); + } + }; + SkeletonMesh.prototype.clearBatches = function () { + for (var i = 0; i < this.batches.length; i++) { + this.batches[i].clear(); + this.batches[i].visible = false; + } + this.nextBatchIndex = 0; + }; + SkeletonMesh.prototype.nextBatch = function () { + if (this.batches.length == this.nextBatchIndex) { + var batch_1 = new threejs.MeshBatcher(10920, this.materialCustomizer); + this.add(batch_1); + this.batches.push(batch_1); + } + var batch = this.batches[this.nextBatchIndex++]; + batch.visible = true; + return batch; + }; + SkeletonMesh.prototype.updateGeometry = function () { + this.clearBatches(); + var tempPos = this.tempPos; + var tempUv = this.tempUv; + var tempLight = this.tempLight; + var tempDark = this.tempDark; + var numVertices = 0; + var verticesLength = 0; + var indicesLength = 0; + var blendMode = null; + var clipper = this.clipper; + var vertices = this.vertices; + var triangles = null; + var uvs = null; + var drawOrder = this.skeleton.drawOrder; + var batch = this.nextBatch(); + batch.begin(); + var z = 0; + var zOffset = this.zOffset; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var vertexSize = clipper.isClipping() ? 2 : SkeletonMesh.VERTEX_SIZE; + var slot = drawOrder[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + var attachmentColor = null; + var texture = null; + var numFloats = 0; + if (attachment instanceof spine.RegionAttachment) { + var region = attachment; + attachmentColor = region.color; + vertices = this.vertices; + numFloats = vertexSize * 4; + region.computeWorldVertices(slot.bone, vertices, 0, vertexSize); + triangles = SkeletonMesh.QUAD_TRIANGLES; + uvs = region.uvs; + texture = region.region.renderObject.texture; + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + attachmentColor = mesh.color; + vertices = this.vertices; + numFloats = (mesh.worldVerticesLength >> 1) * vertexSize; + if (numFloats > vertices.length) { + vertices = this.vertices = spine.Utils.newFloatArray(numFloats); + } + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, vertexSize); + triangles = mesh.triangles; + uvs = mesh.uvs; + texture = mesh.region.renderObject.texture; + } + else if (attachment instanceof spine.ClippingAttachment) { + var clip = (attachment); + clipper.clipStart(slot, clip); + continue; + } + else + continue; + if (texture != null) { + var skeleton = slot.bone.skeleton; + var skeletonColor = skeleton.color; + var slotColor = slot.color; + var alpha = skeletonColor.a * slotColor.a * attachmentColor.a; + var color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * attachmentColor.r, skeletonColor.g * slotColor.g * attachmentColor.g, skeletonColor.b * slotColor.b * attachmentColor.b, alpha); + var finalVertices = void 0; + var finalVerticesLength = void 0; + var finalIndices = void 0; + var finalIndicesLength = void 0; + if (clipper.isClipping()) { + clipper.clipTriangles(vertices, numFloats, triangles, triangles.length, uvs, color, null, false); + var clippedVertices = clipper.clippedVertices; + var clippedTriangles = clipper.clippedTriangles; + if (this.vertexEffect != null) { + var vertexEffect = this.vertexEffect; + var verts = clippedVertices; + for (var v = 0, n_10 = clippedVertices.length; v < n_10; v += vertexSize) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.setFromColor(color); + tempDark.set(0, 0, 0, 0); + tempUv.x = verts[v + 6]; + tempUv.y = verts[v + 7]; + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } + finalVertices = clippedVertices; + finalVerticesLength = clippedVertices.length; + finalIndices = clippedTriangles; + finalIndicesLength = clippedTriangles.length; + } + else { + var verts = vertices; + if (this.vertexEffect != null) { + var vertexEffect = this.vertexEffect; + for (var v = 0, u = 0, n_11 = numFloats; v < n_11; v += vertexSize, u += 2) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.setFromColor(color); + tempDark.set(0, 0, 0, 0); + tempUv.x = uvs[u]; + tempUv.y = uvs[u + 1]; + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } + else { + for (var v = 2, u = 0, n_12 = numFloats; v < n_12; v += vertexSize, u += 2) { + verts[v] = color.r; + verts[v + 1] = color.g; + verts[v + 2] = color.b; + verts[v + 3] = color.a; + verts[v + 4] = uvs[u]; + verts[v + 5] = uvs[u + 1]; + } + } + finalVertices = vertices; + finalVerticesLength = numFloats; + finalIndices = triangles; + finalIndicesLength = triangles.length; + } + if (finalVerticesLength == 0 || finalIndicesLength == 0) + continue; + if (!batch.canBatch(finalVerticesLength, finalIndicesLength)) { + batch.end(); + batch = this.nextBatch(); + batch.begin(); + } + var batchMaterial = batch.material; + if (batchMaterial.uniforms.map.value == null) { + batchMaterial.uniforms.map.value = texture.texture; + } + if (batchMaterial.uniforms.map.value != texture.texture) { + batch.end(); + batch = this.nextBatch(); + batch.begin(); + batchMaterial = batch.material; + batchMaterial.uniforms.map.value = texture.texture; + } + batchMaterial.needsUpdate = true; + batch.batch(finalVertices, finalVerticesLength, finalIndices, finalIndicesLength, z); + z += zOffset; + } + clipper.clipEndWithSlot(slot); + } + clipper.clipEnd(); + batch.end(); + }; + SkeletonMesh.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + SkeletonMesh.VERTEX_SIZE = 2 + 2 + 4; + return SkeletonMesh; + }(THREE.Object3D)); + threejs.SkeletonMesh = SkeletonMesh; + })(threejs = spine.threejs || (spine.threejs = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var threejs; + (function (threejs) { + var ThreeJsTexture = (function (_super) { + __extends(ThreeJsTexture, _super); + function ThreeJsTexture(image) { + var _this = _super.call(this, image) || this; + _this.texture = new THREE.Texture(image); + _this.texture.flipY = false; + _this.texture.needsUpdate = true; + return _this; + } + ThreeJsTexture.prototype.setFilters = function (minFilter, magFilter) { + this.texture.minFilter = ThreeJsTexture.toThreeJsTextureFilter(minFilter); + this.texture.magFilter = ThreeJsTexture.toThreeJsTextureFilter(magFilter); + }; + ThreeJsTexture.prototype.setWraps = function (uWrap, vWrap) { + this.texture.wrapS = ThreeJsTexture.toThreeJsTextureWrap(uWrap); + this.texture.wrapT = ThreeJsTexture.toThreeJsTextureWrap(vWrap); + }; + ThreeJsTexture.prototype.dispose = function () { + this.texture.dispose(); + }; + ThreeJsTexture.toThreeJsTextureFilter = function (filter) { + if (filter === spine.TextureFilter.Linear) + return THREE.LinearFilter; + else if (filter === spine.TextureFilter.MipMap) + return THREE.LinearMipMapLinearFilter; + else if (filter === spine.TextureFilter.MipMapLinearNearest) + return THREE.LinearMipMapNearestFilter; + else if (filter === spine.TextureFilter.MipMapNearestLinear) + return THREE.NearestMipMapLinearFilter; + else if (filter === spine.TextureFilter.MipMapNearestNearest) + return THREE.NearestMipMapNearestFilter; + else if (filter === spine.TextureFilter.Nearest) + return THREE.NearestFilter; + else + throw new Error("Unknown texture filter: " + filter); + }; + ThreeJsTexture.toThreeJsTextureWrap = function (wrap) { + if (wrap === spine.TextureWrap.ClampToEdge) + return THREE.ClampToEdgeWrapping; + else if (wrap === spine.TextureWrap.MirroredRepeat) + return THREE.MirroredRepeatWrapping; + else if (wrap === spine.TextureWrap.Repeat) + return THREE.RepeatWrapping; + else + throw new Error("Unknown texture wrap: " + wrap); + }; + return ThreeJsTexture; + }(spine.Texture)); + threejs.ThreeJsTexture = ThreeJsTexture; + })(threejs = spine.threejs || (spine.threejs = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Popup = (function () { + function Popup(player, parent, htmlContent) { + this.player = player; + this.dom = createElement("\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t"); + this.dom.innerHTML = htmlContent; + parent.appendChild(this.dom); + } + Popup.prototype.show = function (dismissedListener) { + var _this = this; + this.dom.classList.remove("spine-player-hidden"); + var dismissed = false; + var resize = function () { + if (!dismissed) + requestAnimationFrame(resize); + var bottomOffset = Math.abs(_this.dom.getBoundingClientRect().bottom - _this.player.getBoundingClientRect().bottom); + var rightOffset = Math.abs(_this.dom.getBoundingClientRect().right - _this.player.getBoundingClientRect().right); + var maxHeight = _this.player.clientHeight - bottomOffset - rightOffset; + _this.dom.style.maxHeight = maxHeight + "px"; + }; + requestAnimationFrame(resize); + var justClicked = true; + var windowClickListener = function (event) { + if (justClicked) { + justClicked = false; + return; + } + if (!isContained(_this.dom, event.target)) { + _this.dom.remove(); + window.removeEventListener("click", windowClickListener); + dismissedListener(); + dismissed = true; + } + }; + window.addEventListener("click", windowClickListener); + }; + return Popup; + }()); + var Switch = (function () { + function Switch(text) { + this.text = text; + this.enabled = false; + } + Switch.prototype.render = function () { + var _this = this; + this["switch"] = createElement("\n\t\t\t\t
\n\t\t\t\t\t" + this.text + "\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t"); + this["switch"].addEventListener("click", function () { + _this.setEnabled(!_this.enabled); + if (_this.change) + _this.change(_this.enabled); + }); + return this["switch"]; + }; + Switch.prototype.setEnabled = function (enabled) { + if (enabled) + this["switch"].classList.add("active"); + else + this["switch"].classList.remove("active"); + this.enabled = enabled; + }; + Switch.prototype.isEnabled = function () { + return this.enabled; + }; + return Switch; + }()); + var Slider = (function () { + function Slider(snaps, snapPercentage, big) { + if (snaps === void 0) { snaps = 0; } + if (snapPercentage === void 0) { snapPercentage = 0.1; } + if (big === void 0) { big = false; } + this.snaps = snaps; + this.snapPercentage = snapPercentage; + this.big = big; + } + Slider.prototype.render = function () { + var _this = this; + this.slider = createElement("\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t"); + this.value = findWithClass(this.slider, "spine-player-slider-value")[0]; + this.setValue(0); + var input = new spine.webgl.Input(this.slider); + var dragging = false; + input.addListener({ + down: function (x, y) { + dragging = true; + _this.value.classList.add("hovering"); + }, + up: function (x, y) { + dragging = false; + var percentage = x / _this.slider.clientWidth; + percentage = percentage = Math.max(0, Math.min(percentage, 1)); + _this.setValue(x / _this.slider.clientWidth); + if (_this.change) + _this.change(percentage); + _this.value.classList.remove("hovering"); + }, + moved: function (x, y) { + if (dragging) { + var percentage = x / _this.slider.clientWidth; + percentage = Math.max(0, Math.min(percentage, 1)); + percentage = _this.setValue(x / _this.slider.clientWidth); + if (_this.change) + _this.change(percentage); + } + }, + dragged: function (x, y) { + var percentage = x / _this.slider.clientWidth; + percentage = Math.max(0, Math.min(percentage, 1)); + percentage = _this.setValue(x / _this.slider.clientWidth); + if (_this.change) + _this.change(percentage); + } + }); + return this.slider; + }; + Slider.prototype.setValue = function (percentage) { + percentage = Math.max(0, Math.min(1, percentage)); + if (this.snaps > 0) { + var modulo = percentage % (1 / this.snaps); + if (modulo < (1 / this.snaps) * this.snapPercentage) { + percentage = percentage - modulo; + } + else if (modulo > (1 / this.snaps) - (1 / this.snaps) * this.snapPercentage) { + percentage = percentage - modulo + (1 / this.snaps); + } + percentage = Math.max(0, Math.min(1, percentage)); + } + this.value.style.width = "" + (percentage * 100) + "%"; + return percentage; + }; + return Slider; + }()); + var SpinePlayer = (function () { + function SpinePlayer(parent, config) { + this.config = config; + this.paused = true; + this.playTime = 0; + this.speed = 1; + this.time = new spine.TimeKeeper(); + this.animationViewports = {}; + this.currentViewport = null; + this.previousViewport = null; + this.viewportTransitionStart = 0; + this.stopRequestAnimationFrame = false; + this.cancelId = 0; + if (typeof parent === "string") + this.parent = document.getElementById(parent); + else + this.parent = parent; + this.parent.appendChild(this.render()); + } + SpinePlayer.prototype.validateConfig = function (config) { + if (!config) + throw new Error("Please pass a configuration to new.spine.SpinePlayer()."); + if (!config.jsonUrl && !config.skelUrl) + throw new Error("Please specify the URL of the skeleton JSON or .skel file."); + if (!config.atlasUrl) + throw new Error("Please specify the URL of the atlas file."); + if (!config.alpha) + config.alpha = false; + if (!config.backgroundColor) + config.backgroundColor = "#000000"; + if (!config.fullScreenBackgroundColor) + config.fullScreenBackgroundColor = config.backgroundColor; + if (typeof config.premultipliedAlpha === "undefined") + config.premultipliedAlpha = true; + if (!config.success) + config.success = function (widget) { }; + if (!config.error) + config.error = function (widget, msg) { }; + if (!config.debug) + config.debug = { + bones: false, + regions: false, + meshes: false, + bounds: false, + clipping: false, + paths: false, + points: false, + hulls: false + }; + if (typeof config.debug.bones === "undefined") + config.debug.bones = false; + if (typeof config.debug.bounds === "undefined") + config.debug.bounds = false; + if (typeof config.debug.clipping === "undefined") + config.debug.clipping = false; + if (typeof config.debug.hulls === "undefined") + config.debug.hulls = false; + if (typeof config.debug.paths === "undefined") + config.debug.paths = false; + if (typeof config.debug.points === "undefined") + config.debug.points = false; + if (typeof config.debug.regions === "undefined") + config.debug.regions = false; + if (typeof config.debug.meshes === "undefined") + config.debug.meshes = false; + if (config.animations && config.animation) { + if (config.animations.indexOf(config.animation) < 0) + throw new Error("Default animation '" + config.animation + "' is not contained in the list of selectable animations " + escapeHtml(JSON.stringify(this.config.animations)) + "."); + } + if (config.skins && config.skin) { + if (config.skins.indexOf(config.skin) < 0) + throw new Error("Default skin '" + config.skin + "' is not contained in the list of selectable skins " + escapeHtml(JSON.stringify(this.config.skins)) + "."); + } + if (!config.controlBones) + config.controlBones = []; + if (typeof config.showControls === "undefined") + config.showControls = true; + if (typeof config.defaultMix === "undefined") + config.defaultMix = 0.25; + return config; + }; + SpinePlayer.prototype.showError = function (error) { + var errorDom = findWithClass(this.dom, "spine-player-error")[0]; + errorDom.classList.remove("spine-player-hidden"); + errorDom.innerHTML = "

" + error + "

"; + this.config.error(this, error); + }; + SpinePlayer.prototype.render = function () { + var _this = this; + var config = this.config; + var dom = this.dom = createElement("\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t"); + try { + this.config = this.validateConfig(config); + } + catch (e) { + this.showError(e); + return dom; + } + try { + this.canvas = findWithClass(dom, "spine-player-canvas")[0]; + var webglConfig = { alpha: config.alpha }; + this.context = new spine.webgl.ManagedWebGLRenderingContext(this.canvas, webglConfig); + this.sceneRenderer = new spine.webgl.SceneRenderer(this.canvas, this.context, true); + this.loadingScreen = new spine.webgl.LoadingScreen(this.sceneRenderer); + } + catch (e) { + this.showError("Sorry, your browser does not support WebGL.

Please use the latest version of Firefox, Chrome, Edge, or Safari."); + return dom; + } + this.assetManager = new spine.webgl.AssetManager(this.context); + if (config.rawDataURIs) { + for (var path in config.rawDataURIs) { + var data = config.rawDataURIs[path]; + this.assetManager.setRawDataURI(path, data); + } + } + if (config.jsonUrl) + this.assetManager.loadText(config.jsonUrl); + else + this.assetManager.loadBinary(config.skelUrl); + this.assetManager.loadTextureAtlas(config.atlasUrl); + if (config.backgroundImage && config.backgroundImage.url) + this.assetManager.loadTexture(config.backgroundImage.url); + requestAnimationFrame(function () { return _this.drawFrame(); }); + this.playerControls = findWithClass(dom, "spine-player-controls")[0]; + var timeline = findWithClass(dom, "spine-player-timeline")[0]; + this.timelineSlider = new Slider(); + timeline.appendChild(this.timelineSlider.render()); + this.playButton = findWithId(dom, "spine-player-button-play-pause")[0]; + var speedButton = findWithId(dom, "spine-player-button-speed")[0]; + this.animationButton = findWithId(dom, "spine-player-button-animation")[0]; + this.skinButton = findWithId(dom, "spine-player-button-skin")[0]; + var settingsButton = findWithId(dom, "spine-player-button-settings")[0]; + var fullscreenButton = findWithId(dom, "spine-player-button-fullscreen")[0]; + var logoButton = findWithId(dom, "spine-player-button-logo")[0]; + this.playButton.onclick = function () { + if (_this.paused) + _this.play(); + else + _this.pause(); + }; + speedButton.onclick = function () { + _this.showSpeedDialog(speedButton); + }; + this.animationButton.onclick = function () { + _this.showAnimationsDialog(_this.animationButton); + }; + this.skinButton.onclick = function () { + _this.showSkinsDialog(_this.skinButton); + }; + settingsButton.onclick = function () { + _this.showSettingsDialog(settingsButton); + }; + var oldWidth = this.canvas.clientWidth; + var oldHeight = this.canvas.clientHeight; + var oldStyleWidth = this.canvas.style.width; + var oldStyleHeight = this.canvas.style.height; + var isFullscreen = false; + fullscreenButton.onclick = function () { + var fullscreenChanged = function () { + isFullscreen = !isFullscreen; + if (!isFullscreen) { + _this.canvas.style.width = "" + oldWidth + "px"; + _this.canvas.style.height = "" + oldHeight + "px"; + _this.drawFrame(false); + requestAnimationFrame(function () { + _this.canvas.style.width = oldStyleWidth; + _this.canvas.style.height = oldStyleHeight; + }); + } + }; + var doc = document; + dom.onfullscreenchange = fullscreenChanged; + dom.onwebkitfullscreenchange = fullscreenChanged; + if (doc.fullscreenElement || doc.webkitFullscreenElement || doc.mozFullScreenElement || doc.msFullscreenElement) { + if (doc.exitFullscreen) + doc.exitFullscreen(); + else if (doc.mozCancelFullScreen) + doc.mozCancelFullScreen(); + else if (doc.webkitExitFullscreen) + doc.webkitExitFullscreen(); + else if (doc.msExitFullscreen) + doc.msExitFullscreen(); + } + else { + oldWidth = _this.canvas.clientWidth; + oldHeight = _this.canvas.clientHeight; + oldStyleWidth = _this.canvas.style.width; + oldStyleHeight = _this.canvas.style.height; + var player = dom; + if (player.requestFullscreen) + player.requestFullscreen(); + else if (player.webkitRequestFullScreen) + player.webkitRequestFullScreen(); + else if (player.mozRequestFullScreen) + player.mozRequestFullScreen(); + else if (player.msRequestFullscreen) + player.msRequestFullscreen(); + } + }; + logoButton.onclick = function () { + window.open("http://esotericsoftware.com"); + }; + window.onresize = function () { + _this.drawFrame(false); + }; + return dom; + }; + SpinePlayer.prototype.showSpeedDialog = function (speedButton) { + var _this = this; + if (this.lastPopup) + this.lastPopup.dom.remove(); + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Speed") { + this.lastPopup = null; + speedButton.classList.remove("spine-player-button-icon-speed-selected"); + return; + } + var popup = new Popup(this.dom, this.playerControls, "\n\t\t\t\t
Speed
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
0.1x
\n\t\t\t\t\t\t\t
1x
\n\t\t\t\t\t\t\t
2x
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t"); + var sliderParent = findWithClass(popup.dom, "spine-player-speed-slider")[0]; + var slider = new Slider(2, 0.1, true); + sliderParent.appendChild(slider.render()); + slider.setValue(this.speed / 2); + slider.change = function (percentage) { + _this.speed = percentage * 2; + }; + speedButton.classList.add("spine-player-button-icon-speed-selected"); + popup.show(function () { + speedButton.classList.remove("spine-player-button-icon-speed-selected"); + popup.dom.remove(); + _this.lastPopup = null; + }); + this.lastPopup = popup; + }; + SpinePlayer.prototype.showAnimationsDialog = function (animationsButton) { + var _this = this; + if (this.lastPopup) + this.lastPopup.dom.remove(); + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Animations") { + this.lastPopup = null; + animationsButton.classList.remove("spine-player-button-icon-animations-selected"); + return; + } + if (!this.skeleton || this.skeleton.data.animations.length == 0) + return; + var popup = new Popup(this.dom, this.playerControls, "\n\t\t\t\t
Animations
\n\t\t\t\t
\n\t\t\t\t
    \n\t\t\t"); + var rows = findWithClass(popup.dom, "spine-player-list")[0]; + this.skeleton.data.animations.forEach(function (animation) { + if (_this.config.animations && _this.config.animations.indexOf(animation.name) < 0) { + return; + } + var row = createElement("\n\t\t\t\t\t
  • \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
  • \n\t\t\t\t"); + if (animation.name == _this.config.animation) + row.classList.add("selected"); + findWithClass(row, "selectable-text")[0].innerText = animation.name; + rows.appendChild(row); + row.onclick = function () { + removeClass(rows.children, "selected"); + row.classList.add("selected"); + _this.config.animation = animation.name; + _this.playTime = 0; + _this.setAnimation(animation.name); + }; + }); + animationsButton.classList.add("spine-player-button-icon-animations-selected"); + popup.show(function () { + animationsButton.classList.remove("spine-player-button-icon-animations-selected"); + popup.dom.remove(); + _this.lastPopup = null; + }); + this.lastPopup = popup; + }; + SpinePlayer.prototype.showSkinsDialog = function (skinButton) { + var _this = this; + if (this.lastPopup) + this.lastPopup.dom.remove(); + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Skins") { + this.lastPopup = null; + skinButton.classList.remove("spine-player-button-icon-skins-selected"); + return; + } + if (!this.skeleton || this.skeleton.data.animations.length == 0) + return; + var popup = new Popup(this.dom, this.playerControls, "\n\t\t\t\t
    Skins
    \n\t\t\t\t
    \n\t\t\t\t
      \n\t\t\t"); + var rows = findWithClass(popup.dom, "spine-player-list")[0]; + this.skeleton.data.skins.forEach(function (skin) { + if (_this.config.skins && _this.config.skins.indexOf(skin.name) < 0) { + return; + } + var row = createElement("\n\t\t\t\t\t
    • \n\t\t\t\t\t\t
      \n\t\t\t\t\t\t
      \n\t\t\t\t\t\t
      \n\t\t\t\t\t\t
      \n\t\t\t\t\t
    • \n\t\t\t\t"); + if (skin.name == _this.config.skin) + row.classList.add("selected"); + findWithClass(row, "selectable-text")[0].innerText = skin.name; + rows.appendChild(row); + row.onclick = function () { + removeClass(rows.children, "selected"); + row.classList.add("selected"); + _this.config.skin = skin.name; + _this.skeleton.setSkinByName(_this.config.skin); + _this.skeleton.setSlotsToSetupPose(); + }; + }); + skinButton.classList.add("spine-player-button-icon-skins-selected"); + popup.show(function () { + skinButton.classList.remove("spine-player-button-icon-skins-selected"); + popup.dom.remove(); + _this.lastPopup = null; + }); + this.lastPopup = popup; + }; + SpinePlayer.prototype.showSettingsDialog = function (settingsButton) { + var _this = this; + if (this.lastPopup) + this.lastPopup.dom.remove(); + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Debug") { + this.lastPopup = null; + settingsButton.classList.remove("spine-player-button-icon-settings-selected"); + return; + } + if (!this.skeleton || this.skeleton.data.animations.length == 0) + return; + var popup = new Popup(this.dom, this.playerControls, "\n\t\t\t\t
      Debug
      \n\t\t\t\t
      \n\t\t\t\t
        \n\t\t\t\t\n\t\t\t"); + var rows = findWithClass(popup.dom, "spine-player-list")[0]; + var makeItem = function (label, name) { + var row = createElement("
      • "); + var s = new Switch(label); + row.appendChild(s.render()); + s.setEnabled(_this.config.debug[name]); + s.change = function (value) { + _this.config.debug[name] = value; + }; + rows.appendChild(row); + }; + makeItem("Bones", "bones"); + makeItem("Regions", "regions"); + makeItem("Meshes", "meshes"); + makeItem("Bounds", "bounds"); + makeItem("Paths", "paths"); + makeItem("Clipping", "clipping"); + makeItem("Points", "points"); + makeItem("Hulls", "hulls"); + settingsButton.classList.add("spine-player-button-icon-settings-selected"); + popup.show(function () { + settingsButton.classList.remove("spine-player-button-icon-settings-selected"); + popup.dom.remove(); + _this.lastPopup = null; + }); + this.lastPopup = popup; + }; + SpinePlayer.prototype.drawFrame = function (requestNextFrame) { + var _this = this; + if (requestNextFrame === void 0) { requestNextFrame = true; } + if (requestNextFrame && !this.stopRequestAnimationFrame) + requestAnimationFrame(function () { return _this.drawFrame(); }); + var ctx = this.context; + var gl = ctx.gl; + var doc = document; + var isFullscreen = doc.fullscreenElement || doc.webkitFullscreenElement || doc.mozFullScreenElement || doc.msFullscreenElement; + var bg = new spine.Color().setFromString(isFullscreen ? this.config.fullScreenBackgroundColor : this.config.backgroundColor); + gl.clearColor(bg.r, bg.g, bg.b, bg.a); + gl.clear(gl.COLOR_BUFFER_BIT); + this.loadingScreen.backgroundColor.setFromColor(bg); + this.loadingScreen.draw(this.assetManager.isLoadingComplete()); + if (this.assetManager.isLoadingComplete() && this.skeleton == null) + this.loadSkeleton(); + this.sceneRenderer.resize(spine.webgl.ResizeMode.Expand); + if (this.loaded) { + if (!this.paused && this.config.animation) { + this.time.update(); + var delta = this.time.delta * this.speed; + var animationDuration = this.animationState.getCurrent(0).animation.duration; + this.playTime += delta; + while (this.playTime >= animationDuration && animationDuration != 0) { + this.playTime -= animationDuration; + } + this.playTime = Math.max(0, Math.min(this.playTime, animationDuration)); + this.timelineSlider.setValue(this.playTime / animationDuration); + this.animationState.update(delta); + this.animationState.apply(this.skeleton); + } + this.skeleton.updateWorldTransform(); + var viewport = { + x: this.currentViewport.x - this.currentViewport.padLeft, + y: this.currentViewport.y - this.currentViewport.padBottom, + width: this.currentViewport.width + this.currentViewport.padLeft + this.currentViewport.padRight, + height: this.currentViewport.height + this.currentViewport.padBottom + this.currentViewport.padTop + }; + var transitionAlpha = ((performance.now() - this.viewportTransitionStart) / 1000) / this.config.viewport.transitionTime; + if (this.previousViewport && transitionAlpha < 1) { + var oldViewport = { + x: this.previousViewport.x - this.previousViewport.padLeft, + y: this.previousViewport.y - this.previousViewport.padBottom, + width: this.previousViewport.width + this.previousViewport.padLeft + this.previousViewport.padRight, + height: this.previousViewport.height + this.previousViewport.padBottom + this.previousViewport.padTop + }; + viewport = { + x: oldViewport.x + (viewport.x - oldViewport.x) * transitionAlpha, + y: oldViewport.y + (viewport.y - oldViewport.y) * transitionAlpha, + width: oldViewport.width + (viewport.width - oldViewport.width) * transitionAlpha, + height: oldViewport.height + (viewport.height - oldViewport.height) * transitionAlpha + }; + } + var viewportSize = this.scale(viewport.width, viewport.height, this.canvas.width, this.canvas.height); + this.sceneRenderer.camera.zoom = viewport.width / viewportSize.x; + this.sceneRenderer.camera.position.x = viewport.x + viewport.width / 2; + this.sceneRenderer.camera.position.y = viewport.y + viewport.height / 2; + this.sceneRenderer.begin(); + if (this.config.backgroundImage && this.config.backgroundImage.url) { + var bgImage = this.assetManager.get(this.config.backgroundImage.url); + if (!(this.config.backgroundImage.hasOwnProperty("x") && this.config.backgroundImage.hasOwnProperty("y") && this.config.backgroundImage.hasOwnProperty("width") && this.config.backgroundImage.hasOwnProperty("height"))) { + this.sceneRenderer.drawTexture(bgImage, viewport.x, viewport.y, viewport.width, viewport.height); + } + else { + this.sceneRenderer.drawTexture(bgImage, this.config.backgroundImage.x, this.config.backgroundImage.y, this.config.backgroundImage.width, this.config.backgroundImage.height); + } + } + this.sceneRenderer.drawSkeleton(this.skeleton, this.config.premultipliedAlpha); + this.sceneRenderer.skeletonDebugRenderer.drawBones = this.config.debug.bones; + this.sceneRenderer.skeletonDebugRenderer.drawBoundingBoxes = this.config.debug.bounds; + this.sceneRenderer.skeletonDebugRenderer.drawClipping = this.config.debug.clipping; + this.sceneRenderer.skeletonDebugRenderer.drawMeshHull = this.config.debug.hulls; + this.sceneRenderer.skeletonDebugRenderer.drawPaths = this.config.debug.paths; + this.sceneRenderer.skeletonDebugRenderer.drawRegionAttachments = this.config.debug.regions; + this.sceneRenderer.skeletonDebugRenderer.drawMeshTriangles = this.config.debug.meshes; + this.sceneRenderer.drawSkeletonDebug(this.skeleton, this.config.premultipliedAlpha); + var controlBones = this.config.controlBones; + var selectedBones = this.selectedBones; + var skeleton = this.skeleton; + gl.lineWidth(2); + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + if (!bone) + continue; + var colorInner = selectedBones[i] !== null ? SpinePlayer.HOVER_COLOR_INNER : SpinePlayer.NON_HOVER_COLOR_INNER; + var colorOuter = selectedBones[i] !== null ? SpinePlayer.HOVER_COLOR_OUTER : SpinePlayer.NON_HOVER_COLOR_OUTER; + this.sceneRenderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner); + this.sceneRenderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter); + } + gl.lineWidth(1); + if (this.config.viewport.debugRender) { + this.sceneRenderer.rect(false, this.currentViewport.x, this.currentViewport.y, this.currentViewport.width, this.currentViewport.height, spine.Color.GREEN); + this.sceneRenderer.rect(false, viewport.x, viewport.y, viewport.width, viewport.height, spine.Color.RED); + } + this.sceneRenderer.end(); + this.sceneRenderer.camera.zoom = 0; + } + }; + SpinePlayer.prototype.scale = function (sourceWidth, sourceHeight, targetWidth, targetHeight) { + var targetRatio = targetHeight / targetWidth; + var sourceRatio = sourceHeight / sourceWidth; + var scale = targetRatio > sourceRatio ? targetWidth / sourceWidth : targetHeight / sourceHeight; + var temp = new spine.Vector2(); + temp.x = sourceWidth * scale; + temp.y = sourceHeight * scale; + return temp; + }; + SpinePlayer.prototype.loadSkeleton = function () { + var _this = this; + if (this.loaded) + return; + if (this.assetManager.hasErrors()) { + this.showError("Error: assets could not be loaded.

        " + escapeHtml(JSON.stringify(this.assetManager.getErrors()))); + return; + } + var atlas = this.assetManager.get(this.config.atlasUrl); + var skeletonData; + if (this.config.jsonUrl) { + var jsonText = this.assetManager.get(this.config.jsonUrl); + var json = new spine.SkeletonJson(new spine.AtlasAttachmentLoader(atlas)); + try { + skeletonData = json.readSkeletonData(jsonText); + } + catch (e) { + this.showError("Error: could not load skeleton .json.

        " + e.toString()); + return; + } + } + else { + var binaryData = this.assetManager.get(this.config.skelUrl); + var binary = new spine.SkeletonBinary(new spine.AtlasAttachmentLoader(atlas)); + try { + skeletonData = binary.readSkeletonData(binaryData); + } + catch (e) { + this.showError("Error: could not load skeleton .skel.

        " + e.toString()); + return; + } + } + this.skeleton = new spine.Skeleton(skeletonData); + var stateData = new spine.AnimationStateData(skeletonData); + stateData.defaultMix = this.config.defaultMix; + this.animationState = new spine.AnimationState(stateData); + if (this.config.controlBones) { + this.config.controlBones.forEach(function (bone) { + if (!skeletonData.findBone(bone)) { + _this.showError("Error: control bone '" + bone + "' does not exist in skeleton."); + } + }); + } + if (!this.config.skin) { + if (skeletonData.skins.length > 0) { + this.config.skin = skeletonData.skins[0].name; + } + } + if (this.config.skins && this.config.skin.length > 0) { + this.config.skins.forEach(function (skin) { + if (!_this.skeleton.data.findSkin(skin)) { + _this.showError("Error: skin '" + skin + "' in selectable skin list does not exist in skeleton."); + return; + } + }); + } + if (this.config.skin) { + if (!this.skeleton.data.findSkin(this.config.skin)) { + this.showError("Error: skin '" + this.config.skin + "' does not exist in skeleton."); + return; + } + this.skeleton.setSkinByName(this.config.skin); + this.skeleton.setSlotsToSetupPose(); + } + if (!this.config.viewport) { + this.config.viewport = { + animations: {}, + debugRender: false, + transitionTime: 0.2 + }; + } + if (typeof this.config.viewport.debugRender === "undefined") + this.config.viewport.debugRender = false; + if (typeof this.config.viewport.transitionTime === "undefined") + this.config.viewport.transitionTime = 0.2; + if (!this.config.viewport.animations) { + this.config.viewport.animations = {}; + } + else { + Object.getOwnPropertyNames(this.config.viewport.animations).forEach(function (animation) { + if (!skeletonData.findAnimation(animation)) { + _this.showError("Error: animation '" + animation + "' for which a viewport was specified does not exist in skeleton."); + return; + } + }); + } + if (this.config.animations && this.config.animations.length > 0) { + this.config.animations.forEach(function (animation) { + if (!_this.skeleton.data.findAnimation(animation)) { + _this.showError("Error: animation '" + animation + "' in selectable animation list does not exist in skeleton."); + return; + } + }); + if (!this.config.animation) { + this.config.animation = this.config.animations[0]; + } + } + if (!this.config.animation) { + if (skeletonData.animations.length > 0) { + this.config.animation = skeletonData.animations[0].name; + } + } + if (this.config.animation) { + if (!skeletonData.findAnimation(this.config.animation)) { + this.showError("Error: animation '" + this.config.animation + "' does not exist in skeleton."); + return; + } + this.play(); + this.timelineSlider.change = function (percentage) { + _this.pause(); + var animationDuration = _this.animationState.getCurrent(0).animation.duration; + var time = animationDuration * percentage; + _this.animationState.update(time - _this.playTime); + _this.animationState.apply(_this.skeleton); + _this.skeleton.updateWorldTransform(); + _this.playTime = time; + }; + } + this.setupInput(); + if (skeletonData.skins.length == 1 || (this.config.skins && this.config.skins.length == 1)) + this.skinButton.classList.add("spine-player-hidden"); + if (skeletonData.animations.length == 1 || (this.config.animations && this.config.animations.length == 1)) + this.animationButton.classList.add("spine-player-hidden"); + this.config.success(this); + this.loaded = true; + }; + SpinePlayer.prototype.setupInput = function () { + var _this = this; + var controlBones = this.config.controlBones; + var selectedBones = this.selectedBones = new Array(this.config.controlBones.length); + var canvas = this.canvas; + var input = new spine.webgl.Input(canvas); + var target = null; + var coords = new spine.webgl.Vector3(); + var temp = new spine.webgl.Vector3(); + var temp2 = new spine.Vector2(); + var skeleton = this.skeleton; + var renderer = this.sceneRenderer; + input.addListener({ + down: function (x, y) { + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + if (!bone) + continue; + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + target = bone; + } + } + }, + up: function (x, y) { + if (target) { + target = null; + } + else { + if (!_this.config.showControls) + return; + if (_this.paused) + _this.play(); + else + _this.pause(); + } + }, + dragged: function (x, y) { + if (target != null) { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (target.parent !== null) { + target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y)); + target.x = temp2.x; + target.y = temp2.y; + } + else { + target.x = coords.x - skeleton.x; + target.y = coords.y - skeleton.y; + } + } + }, + moved: function (x, y) { + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + if (!bone) + continue; + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + selectedBones[i] = bone; + } + else { + selectedBones[i] = null; + } + } + } + }); + var mouseOverControls = true; + var mouseOverCanvas = false; + document.addEventListener("mousemove", function (ev) { + if (ev instanceof MouseEvent) { + handleHover(ev.clientX, ev.clientY); + } + }); + document.addEventListener("touchmove", function (ev) { + if (ev instanceof TouchEvent) { + var touches = ev.changedTouches; + if (touches.length > 0) { + var touch = touches[0]; + handleHover(touch.clientX, touch.clientY); + } + } + }); + var handleHover = function (mouseX, mouseY) { + if (!_this.config.showControls) + return; + var popup = findWithClass(_this.dom, "spine-player-popup"); + mouseOverControls = overlap(mouseX, mouseY, _this.playerControls.getBoundingClientRect()); + mouseOverCanvas = overlap(mouseX, mouseY, _this.canvas.getBoundingClientRect()); + clearTimeout(_this.cancelId); + var hide = popup.length == 0 && !mouseOverControls && !mouseOverCanvas && !_this.paused; + if (hide) { + _this.playerControls.classList.add("spine-player-controls-hidden"); + } + else { + _this.playerControls.classList.remove("spine-player-controls-hidden"); + } + if (!mouseOverControls && popup.length == 0 && !_this.paused) { + var remove = function () { + if (!_this.paused) + _this.playerControls.classList.add("spine-player-controls-hidden"); + }; + _this.cancelId = setTimeout(remove, 1000); + } + }; + var overlap = function (mouseX, mouseY, rect) { + var x = mouseX - rect.left; + var y = mouseY - rect.top; + return x >= 0 && x <= rect.width && y >= 0 && y <= rect.height; + }; + }; + SpinePlayer.prototype.play = function () { + var _this = this; + this.paused = false; + var remove = function () { + if (!_this.paused) + _this.playerControls.classList.add("spine-player-controls-hidden"); + }; + this.cancelId = setTimeout(remove, 1000); + this.playButton.classList.remove("spine-player-button-icon-play"); + this.playButton.classList.add("spine-player-button-icon-pause"); + if (this.config.animation) { + if (!this.animationState.getCurrent(0)) { + this.setAnimation(this.config.animation); + } + } + }; + SpinePlayer.prototype.pause = function () { + this.paused = true; + this.playerControls.classList.remove("spine-player-controls-hidden"); + clearTimeout(this.cancelId); + this.playButton.classList.remove("spine-player-button-icon-pause"); + this.playButton.classList.add("spine-player-button-icon-play"); + }; + SpinePlayer.prototype.setAnimation = function (animation, loop) { + if (loop === void 0) { loop = true; } + this.previousViewport = this.currentViewport; + var animViewport = this.calculateAnimationViewport(animation); + var viewport = { + x: animViewport.x, + y: animViewport.y, + width: animViewport.width, + height: animViewport.height, + padLeft: "10%", + padRight: "10%", + padTop: "10%", + padBottom: "10%" + }; + var globalViewport = this.config.viewport; + if (typeof globalViewport.x !== "undefined" && typeof globalViewport.y !== "undefined" && typeof globalViewport.width !== "undefined" && typeof globalViewport.height !== "undefined") { + viewport.x = globalViewport.x; + viewport.y = globalViewport.y; + viewport.width = globalViewport.width; + viewport.height = globalViewport.height; + } + if (typeof globalViewport.padLeft !== "undefined") + viewport.padLeft = globalViewport.padLeft; + if (typeof globalViewport.padRight !== "undefined") + viewport.padRight = globalViewport.padRight; + if (typeof globalViewport.padTop !== "undefined") + viewport.padTop = globalViewport.padTop; + if (typeof globalViewport.padBottom !== "undefined") + viewport.padBottom = globalViewport.padBottom; + var userAnimViewport = this.config.viewport.animations[animation]; + if (userAnimViewport) { + if (typeof userAnimViewport.x !== "undefined" && typeof userAnimViewport.y !== "undefined" && typeof userAnimViewport.width !== "undefined" && typeof userAnimViewport.height !== "undefined") { + viewport.x = userAnimViewport.x; + viewport.y = userAnimViewport.y; + viewport.width = userAnimViewport.width; + viewport.height = userAnimViewport.height; + } + if (typeof userAnimViewport.padLeft !== "undefined") + viewport.padLeft = userAnimViewport.padLeft; + if (typeof userAnimViewport.padRight !== "undefined") + viewport.padRight = userAnimViewport.padRight; + if (typeof userAnimViewport.padTop !== "undefined") + viewport.padTop = userAnimViewport.padTop; + if (typeof userAnimViewport.padBottom !== "undefined") + viewport.padBottom = userAnimViewport.padBottom; + } + viewport.padLeft = this.percentageToWorldUnit(viewport.width, viewport.padLeft); + viewport.padRight = this.percentageToWorldUnit(viewport.width, viewport.padRight); + viewport.padBottom = this.percentageToWorldUnit(viewport.height, viewport.padBottom); + viewport.padTop = this.percentageToWorldUnit(viewport.height, viewport.padTop); + this.currentViewport = viewport; + this.viewportTransitionStart = performance.now(); + this.animationState.clearTracks(); + this.skeleton.setToSetupPose(); + this.animationState.setAnimation(0, animation, loop); + }; + SpinePlayer.prototype.percentageToWorldUnit = function (size, percentageOrAbsolute) { + if (typeof percentageOrAbsolute === "string") { + return size * parseFloat(percentageOrAbsolute.substr(0, percentageOrAbsolute.length - 1)) / 100; + } + else { + return percentageOrAbsolute; + } + }; + SpinePlayer.prototype.calculateAnimationViewport = function (animationName) { + var animation = this.skeleton.data.findAnimation(animationName); + this.animationState.clearTracks(); + this.skeleton.setToSetupPose(); + this.animationState.setAnimationWith(0, animation, true); + var steps = 100; + var stepTime = animation.duration > 0 ? animation.duration / steps : 0; + var minX = 100000000; + var maxX = -100000000; + var minY = 100000000; + var maxY = -100000000; + var offset = new spine.Vector2(); + var size = new spine.Vector2(); + for (var i = 0; i < steps; i++) { + this.animationState.update(stepTime); + this.animationState.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + this.skeleton.getBounds(offset, size); + if (!isNaN(offset.x) && !isNaN(offset.y) && !isNaN(size.x) && !isNaN(size.y)) { + minX = Math.min(offset.x, minX); + maxX = Math.max(offset.x + size.x, maxX); + minY = Math.min(offset.y, minY); + maxY = Math.max(offset.y + size.y, maxY); + } + else { + console.log("Bounds of animation " + animationName + " are NaN"); + } + } + offset.x = minX; + offset.y = minY; + size.x = maxX - minX; + size.y = maxY - minY; + return { + x: offset.x, + y: offset.y, + width: size.x, + height: size.y + }; + }; + SpinePlayer.prototype.stopRendering = function () { + this.stopRequestAnimationFrame = true; + }; + SpinePlayer.HOVER_COLOR_INNER = new spine.Color(0.478, 0, 0, 0.25); + SpinePlayer.HOVER_COLOR_OUTER = new spine.Color(1, 1, 1, 1); + SpinePlayer.NON_HOVER_COLOR_INNER = new spine.Color(0.478, 0, 0, 0.5); + SpinePlayer.NON_HOVER_COLOR_OUTER = new spine.Color(1, 0, 0, 0.8); + return SpinePlayer; + }()); + spine.SpinePlayer = SpinePlayer; + function isContained(dom, needle) { + if (dom === needle) + return true; + var findRecursive = function (dom, needle) { + for (var i = 0; i < dom.children.length; i++) { + var child = dom.children[i]; + if (child === needle) + return true; + if (findRecursive(child, needle)) + return true; + } + return false; + }; + return findRecursive(dom, needle); + } + function findWithId(dom, id) { + var found = new Array(); + var findRecursive = function (dom, id, found) { + for (var i = 0; i < dom.children.length; i++) { + var child = dom.children[i]; + if (child.id === id) + found.push(child); + findRecursive(child, id, found); + } + }; + findRecursive(dom, id, found); + return found; + } + function findWithClass(dom, className) { + var found = new Array(); + var findRecursive = function (dom, className, found) { + for (var i = 0; i < dom.children.length; i++) { + var child = dom.children[i]; + if (child.classList.contains(className)) + found.push(child); + findRecursive(child, className, found); + } + }; + findRecursive(dom, className, found); + return found; + } + function createElement(html) { + var dom = document.createElement("div"); + dom.innerHTML = html; + return dom.children[0]; + } + function removeClass(elements, clazz) { + for (var i = 0; i < elements.length; i++) { + elements[i].classList.remove(clazz); + } + } + function escapeHtml(str) { + if (!str) + return ""; + return str + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + } +})(spine || (spine = {})); +var spine; +(function (spine) { + var SpinePlayerEditor = (function () { + function SpinePlayerEditor(parent) { + this.prefix = "\n\n\n\n".trim(); + this.postfix = ""; + this.timerId = 0; + this.render(parent); + } + SpinePlayerEditor.prototype.render = function (parent) { + var _this = this; + var dom = "\n\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t\t\n\t\t\t\t
        \n\t\t\t"; + parent.innerHTML = dom; + var codeElement = parent.getElementsByClassName("spine-player-editor-code")[0]; + this.player = parent.getElementsByClassName("spine-player-editor-player")[0]; + requestAnimationFrame(function () { + _this.code = CodeMirror(codeElement, { + lineNumbers: true, + tabSize: 3, + indentUnit: 3, + indentWithTabs: true, + scrollBarStyle: "native", + mode: "htmlmixed", + theme: "monokai" + }); + _this.code.on("change", function () { + _this.startPlayer(); + }); + _this.setCode(SpinePlayerEditor.DEFAULT_CODE); + }); + }; + SpinePlayerEditor.prototype.setPreAndPostfix = function (prefix, postfix) { + this.prefix = prefix; + this.postfix = postfix; + this.startPlayer(); + }; + SpinePlayerEditor.prototype.setCode = function (code) { + this.code.setValue(code); + this.startPlayer(); + }; + SpinePlayerEditor.prototype.startPlayer = function () { + var _this = this; + clearTimeout(this.timerId); + this.timerId = setTimeout(function () { + var code = _this.code.getDoc().getValue(); + code = _this.prefix + code + _this.postfix; + code = window.btoa(code); + _this.player.src = ""; + _this.player.src = "data:text/html;base64," + code; + }, 500); + }; + SpinePlayerEditor.DEFAULT_CODE = "\n\n\n\n
        \n\n\n\t\t".trim(); + return SpinePlayerEditor; + }()); + spine.SpinePlayerEditor = SpinePlayerEditor; +})(spine || (spine = {})); +//# sourceMappingURL=spine-all.js.map \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-all.js.map b/apps/module-ts/src/spine-ts/build/spine-all.js.map new file mode 100755 index 0000000..aba79a3 --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-all.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spine-all.js","sourceRoot":"","sources":["../core/src/Animation.ts","../core/src/AnimationState.ts","../core/src/AnimationStateData.ts","../core/src/AssetManager.ts","../core/src/AtlasAttachmentLoader.ts","../core/src/BlendMode.ts","../core/src/Bone.ts","../core/src/BoneData.ts","../core/src/ConstraintData.ts","../core/src/Event.ts","../core/src/EventData.ts","../core/src/IkConstraint.ts","../core/src/IkConstraintData.ts","../core/src/PathConstraint.ts","../core/src/PathConstraintData.ts","../core/src/SharedAssetManager.ts","../core/src/Skeleton.ts","../core/src/SkeletonBinary.ts","../core/src/SkeletonBounds.ts","../core/src/SkeletonClipping.ts","../core/src/SkeletonData.ts","../core/src/SkeletonJson.ts","../core/src/Skin.ts","../core/src/Slot.ts","../core/src/SlotData.ts","../core/src/Texture.ts","../core/src/TextureAtlas.ts","../core/src/TransformConstraint.ts","../core/src/TransformConstraintData.ts","../core/src/Triangulator.ts","../core/src/Updatable.ts","../core/src/Utils.ts","../core/src/VertexEffect.ts","../core/src/polyfills.ts","../core/src/attachments/Attachment.ts","../core/src/attachments/AttachmentLoader.ts","../core/src/attachments/AttachmentType.ts","../core/src/attachments/BoundingBoxAttachment.ts","../core/src/attachments/ClippingAttachment.ts","../core/src/attachments/MeshAttachment.ts","../core/src/attachments/PathAttachment.ts","../core/src/attachments/PointAttachment.ts","../core/src/attachments/RegionAttachment.ts","../core/src/vertexeffects/JitterEffect.ts","../core/src/vertexeffects/SwirlEffect.ts","../canvas/src/AssetManager.ts","../canvas/src/CanvasTexture.ts","../canvas/src/SkeletonRenderer.ts","../webgl/src/AssetManager.ts","../webgl/src/Camera.ts","../webgl/src/GLTexture.ts","../webgl/src/Input.ts","../webgl/src/LoadingScreen.ts","../webgl/src/Matrix4.ts","../webgl/src/Mesh.ts","../webgl/src/PolygonBatcher.ts","../webgl/src/SceneRenderer.ts","../webgl/src/Shader.ts","../webgl/src/ShapeRenderer.ts","../webgl/src/SkeletonDebugRenderer.ts","../webgl/src/SkeletonRenderer.ts","../webgl/src/Vector3.ts","../webgl/src/WebGL.ts","../threejs/src/AssetManager.ts","../threejs/src/MeshBatcher.ts","../threejs/src/SkeletonMesh.ts","../threejs/src/ThreeJsTexture.ts","../player/src/Player.ts","../player/src/PlayerEditor.ts"],"names":[],"mappings":"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AAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC7G,IAAI,KAAK,IAAI,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACzD,IAAI,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACb,CAAC;YAED,6BAAW,GAAX;gBACC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBACpB,OAAO,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBAC7G,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,G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AC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAED,8BAAY,GAAZ,UAAc,MAAe;gBAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;gBAClB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBACpB,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;gBACtB,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAED,wBAAM,GAAN,UAAQ,QAAiB,EAAE,SAAkB,EAAE,EAAW;gBACzD,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBACxE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC;gBACrC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC;gBACrC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC5B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;gBACtB,GAAG,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACnB,GAAG,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACnB,GAAG,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACnB,GAAG,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACnB,GAAG,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACnB,GAAG,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACnB,GAAG,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpB,GAAG,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpB,GAAG,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBAEpB,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBAC7B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;gBAEhC,OAAO,IAAI,CAAC;YACb,CAAC;YAEM,iBAAS,GAAhB;gBACC,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI;oBAAE,OAAO,CAAC,KAAK,GAAG,IAAI,MAAA,OAAO,EAAE,CAAC;gBAC1D,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI;oBAAE,OAAO,CAAC,KAAK,GAAG,IAAI,MAAA,OAAO,EAAE,CAAC;gBAC1D,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI;oBAAE,OAAO,CAAC,KAAK,GAAG,IAAI,MAAA,OAAO,EAAE,CAAC;YAC3D,CAAC;YA9Rc,aAAK,GAAY,IAAI,CAAC;YACtB,aAAK,GAAY,IAAI,CAAC;YACtB,aAAK,GAAY,IAAI,CAAC;YACtB,iBAAS,GAAG,IAAI,OAAO,EAAE,CAAC;YA4R1C,cAAC;SAAA,AAnSD,IAmSC;QAnSY,aAAO,UAmSnB,CAAA;IACF,CAAC,EAtTY,KAAK,GAAL,WAAK,KAAL,WAAK,QAsTjB;AAAD,CAAC,EAtTM,KAAK,KAAL,KAAK,QAsTX;ACtTD,IAAO,KAAK,CAkLX;AAlLD,WAAO,KAAK;IAAC,IAAA,KAAK,CAkLjB;IAlLY,WAAA,KAAK;QACjB;YAuCC,cAAa,OAA6D,EAAU,UAA6B,EAAE,WAAmB,EAAE,UAAkB;gBAAtE,eAAU,GAAV,UAAU,CAAmB;gBAnCzG,mBAAc,GAAG,CAAC,CAAC;gBACnB,kBAAa,GAAG,KAAK,CAAC;gBAGtB,kBAAa,GAAG,CAAC,CAAC;gBAClB,iBAAY,GAAG,KAAK,CAAC;gBACrB,sBAAiB,GAAG,CAAC,CAAC;gBA8B7B,IAAI,CAAC,OAAO,GAAG,OAAO,YAAY,MAAA,4BAA4B,CAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAA,4BAA4B,CAAC,OAAO,CAAC,CAAC;gBACpH,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC3C,IAAI,CAAC,iBAAiB,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;iBACpD;gBACD,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACvE,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC3C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YApCD,4BAAa,GAAb,cAAsC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAE/D,0BAAW,GAAX,cAAyB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAChF,0BAAW,GAAX,cAAyB,OAAO,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC/E,gCAAiB,GAAjB,UAAmB,MAAc;gBAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;YAC9B,CAAC;YACD,0BAAW,GAAX,cAA+B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAEtD,yBAAU,GAAV,cAAwB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACrD,yBAAU,GAAV,cAAwB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YACpD,+BAAgB,GAAhB,UAAkB,MAAc;gBAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;YAC7B,CAAC;YACD,yBAAU,GAAV,cAA6B,OAAO,IAAI,CAAC,OAAO,CAAA,CAAC,CAAC;YAAA,CAAC;YAEnD,oCAAqB,GAArB;gBACC,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAChD,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBACnC,IAAI,IAAI,SAAS,CAAC,WAAW,CAAC;iBAC9B;gBACD,OAAO,IAAI,CAAC;YACb,CAAC;YAaD,0BAAW,GAAX,UAAa,QAAuB;gBACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;oBAAE,MAAM,KAAK,CAAC,6BAA6B,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,CAAC;gBAC1H,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;YACvC,CAAC;YAED,yBAAU,GAAV,UAAY,OAAsB;gBACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;oBAAE,MAAM,KAAK,CAAC,6BAA6B,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,CAAC;gBACtH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC7B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;YACrC,CAAC;YAED,mBAAI,GAAJ,UAAM,MAAc,EAAE,aAAqB;gBAC1C,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA,CAAC,CAAC,IAAI,CAAC,aAAa,CAAA,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACzI,CAAC;YAED,6BAAc,GAAd,UAAgB,MAAc,EAAE,aAAqB,EAAE,MAAc,EAAE,KAAa;gBACnF,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY;oBAAE,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClB,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;oBAC3B,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;iBACrE;qBAAM;oBACN,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;iBAC5C;gBACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;YAED,mBAAI,GAAJ,UAAM,MAAc;gBACnB,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBACpD,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAChD,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,UAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACxD,EAAE,CAAC,uBAAuB,CAAC,UAAQ,CAAC,CAAC;oBACrC,EAAE,CAAC,mBAAmB,CAAC,UAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC9G,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC;iBAC7B;gBACD,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;oBAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACxF,CAAC;YAED,qBAAM,GAAN,UAAQ,MAAc;gBACrB,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAChD,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,UAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACxD,EAAE,CAAC,wBAAwB,CAAC,UAAQ,CAAC,CAAC;iBACtC;gBACD,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBACrC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;oBAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;YAC1E,CAAC;YAEO,qBAAM,GAAd;gBACC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,aAAa,EAAE;oBACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;wBACzB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;qBACxC;oBACD,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBACpD,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;oBAChG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;iBAC3B;gBAED,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;wBACxB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;qBACvC;oBACD,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC3D,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;oBACtG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;iBAC1B;YACF,CAAC;YAED,sBAAO,GAAP;gBACC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,CAAC;YAED,sBAAO,GAAP;gBACC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACrC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACrC,CAAC;YACF,WAAC;QAAD,CAAC,AA1ID,IA0IC;QA1IY,UAAI,OA0IhB,CAAA;QAED;YACC,yBAAoB,IAAY,EAAS,IAAyB,EAAS,WAAmB;gBAA1E,SAAI,GAAJ,IAAI,CAAQ;gBAAS,SAAI,GAAJ,IAAI,CAAqB;gBAAS,gBAAW,GAAX,WAAW,CAAQ;YAAI,CAAC;YACpG,sBAAC;QAAD,CAAC,AAFD,IAEC;QAFY,qBAAe,kBAE3B,CAAA;QAED;YAAwC,sCAAe;YACtD;uBACC,kBAAM,MAAA,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC;YACrD,CAAC;YACF,yBAAC;QAAD,CAAC,AAJD,CAAwC,eAAe,GAItD;QAJY,wBAAkB,qBAI9B,CAAA;QAED;YAAwC,sCAAe;YACtD;uBACC,kBAAM,MAAA,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC;YACrD,CAAC;YACF,yBAAC;QAAD,CAAC,AAJD,CAAwC,eAAe,GAItD;QAJY,wBAAkB,qBAI9B,CAAA;QAED;YAAuC,qCAAe;YACrD,2BAAa,IAAgB;gBAAhB,qBAAA,EAAA,QAAgB;uBAC5B,kBAAM,MAAA,MAAM,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,CAAA,CAAC,CAAC,EAAE,CAAA,CAAC,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9E,CAAC;YACF,wBAAC;QAAD,CAAC,AAJD,CAAuC,eAAe,GAIrD;QAJY,uBAAiB,oBAI7B,CAAA;QAED;YAAoC,kCAAe;YAClD;uBACC,kBAAM,MAAA,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC;YAClD,CAAC;YACF,qBAAC;QAAD,CAAC,AAJD,CAAoC,eAAe,GAIlD;QAJY,oBAAc,iBAI1B,CAAA;QAED;YAAqC,mCAAe;YACnD;uBACC,kBAAM,MAAA,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC;YACnD,CAAC;YACF,sBAAC;QAAD,CAAC,AAJD,CAAqC,eAAe,GAInD;QAJY,qBAAe,kBAI3B,CAAA;QAED,IAAY,mBAEX;QAFD,WAAY,mBAAmB;YAC9B,+DAAK,CAAA;QACN,CAAC,EAFW,mBAAmB,GAAnB,yBAAmB,KAAnB,yBAAmB,QAE9B;IACF,CAAC,EAlLY,KAAK,GAAL,WAAK,KAAL,WAAK,QAkLjB;AAAD,CAAC,EAlLM,KAAK,KAAL,KAAK,QAkLX;AClLD,IAAO,KAAK,CAkGX;AAlGD,WAAO,KAAK;IAAC,IAAA,KAAK,CAkGjB;IAlGY,WAAA,KAAK;QACjB;YAYC,wBAAa,OAA6D,EAAE,YAA4B,EAAE,WAA2B;gBAAzD,6BAAA,EAAA,mBAA4B;gBAAE,4BAAA,EAAA,mBAA2B;gBAT7H,cAAS,GAAG,KAAK,CAAC;gBAElB,WAAM,GAAW,IAAI,CAAC;gBACtB,gBAAW,GAAc,IAAI,CAAC;gBAC9B,mBAAc,GAAG,CAAC,CAAC;gBACnB,kBAAa,GAAG,CAAC,CAAC;gBAKzB,IAAI,WAAW,GAAG,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,WAAW,CAAC,CAAC;gBAC3G,IAAI,CAAC,OAAO,GAAG,OAAO,YAAY,MAAA,4BAA4B,CAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAA,4BAA4B,CAAC,OAAO,CAAC,CAAC;gBACpH,IAAI,UAAU,GAAG,YAAY,CAAC,CAAC;oBAC7B,CAAC,IAAI,MAAA,kBAAkB,EAAE,EAAE,IAAI,MAAA,cAAc,EAAE,EAAE,IAAI,MAAA,iBAAiB,EAAE,EAAE,IAAI,MAAA,eAAe,EAAE,CAAC,CAAC,CAAC;oBAClG,CAAC,IAAI,MAAA,kBAAkB,EAAE,EAAE,IAAI,MAAA,cAAc,EAAE,EAAE,IAAI,MAAA,iBAAiB,EAAE,CAAC,CAAC;gBAC5E,IAAI,CAAC,IAAI,GAAG,IAAI,MAAA,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;gBACxE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;gBAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC;YACrD,CAAC;YAED,8BAAK,GAAL,UAAO,MAAc;gBACpB,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAC;gBACpI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBAEtB,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBACpB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAED,qCAAY,GAAZ,UAAc,QAAgB,EAAE,QAAgB;gBAC/C,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACzB,IAAI,IAAI,CAAC,SAAS,EAAE;oBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC3C;YACF,CAAC;YAED,6BAAI,GAAJ,UAAM,OAAkB,EAAE,QAA2B,EAAE,OAAsB;gBAC5E,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;oBAChC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;iBAC3B;qBAAM,IAAI,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;oBAC/E,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE;oBACtE,IAAI,CAAC,KAAK,EAAE,CAAC;iBACb;gBAED,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC3D,IAAI,CAAC,cAAc,IAAI,QAAQ,CAAC,MAAM,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gBAEhD,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;oBACnE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;gBAC3C,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChD,CAAC;YAEO,8BAAK,GAAb;gBACC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC;oBAAE,OAAO;gBAErC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;gBAE1C,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,CAAC;YAED,4BAAG,GAAH;gBACC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;gBACjI,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;oBAAE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACpE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBAEvB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YAED,qCAAY,GAAZ,cAAkB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAE1C,gCAAO,GAAP;gBACC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,CAAC;YACF,qBAAC;QAAD,CAAC,AAhGD,IAgGC;QAhGY,oBAAc,iBAgG1B,CAAA;IACF,CAAC,EAlGY,KAAK,GAAL,WAAK,KAAL,WAAK,QAkGjB;AAAD,CAAC,EAlGM,KAAK,KAAL,KAAK,QAkGX;AClGD,IAAO,KAAK,CAgeX;AAheD,WAAO,KAAK;IAAC,IAAA,KAAK,CAgejB;IAheY,WAAA,KAAK;QACjB;YAqBC,uBAAa,MAAyB,EAAE,OAA6D,EAAE,YAA4B;gBAA5B,6BAAA,EAAA,mBAA4B;gBAhB3H,iBAAY,GAAG,KAAK,CAAC;gBAIrB,mBAAc,GAA2D,IAAI,CAAC;gBAG9E,SAAI,GAAG;oBACd,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACtB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACtB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACtB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;iBACtB,CAAC;gBACM,mBAAc,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpC,UAAK,GAAG,IAAI,MAAA,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAGrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,IAAI,CAAC,OAAO,GAAG,OAAO,YAAY,MAAA,4BAA4B,CAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAA,4BAA4B,CAAC,OAAO,CAAC,CAAC;gBACpH,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;gBACjC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAA,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3D,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,MAAA,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAA,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzH,IAAI,CAAC,OAAO,GAAG,IAAI,MAAA,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBAC9D,IAAI,CAAC,YAAY,GAAG,MAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpD,IAAI,CAAC,MAAM,GAAG,IAAI,MAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,CAAC,gBAAgB,GAAG,IAAI,MAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBACzE,IAAI,CAAC,qBAAqB,GAAG,IAAI,MAAA,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtE,CAAC;YAED,6BAAK,GAAL;gBACC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YAED,oCAAY,GAAZ,UAAc,QAAkB,EAAE,kBAA0B,EAAE,cAAmB,EAAE,YAAiB;gBAAlE,mCAAA,EAAA,0BAA0B;gBAAE,+BAAA,EAAA,kBAAkB,CAAC;gBAAE,6BAAA,EAAA,gBAAgB,CAAC;gBACnG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;gBAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;YAClF,CAAC;YAED,yCAAiB,GAAjB,UAAkB,QAAkB,EAAE,kBAA0B,EAAE,YAAkC;gBAA9D,mCAAA,EAAA,0BAA0B;gBAAE,6BAAA,EAAA,mBAAkC;gBACnG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;gBACnE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YACtE,CAAC;YAED,mCAAW,GAAX,UAAa,OAAkB,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBACxG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACvB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACvB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACvD,CAAC;YAED,qCAAa,GAAb,UAAe,OAAkB,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBACxJ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACvB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACvB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACvD,CAAC;YAED,0CAAkB,GAAlB,UAAoB,OAAkB,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc,EAAE,KAAa,EAAE,KAAmB,EAAE,kBAAmC;gBAAxD,sBAAA,EAAA,YAAmB;gBAAE,mCAAA,EAAA,0BAAmC;gBACnM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAGrB,IAAI,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC;gBAC9B,IAAI,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC;gBAC9B,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;gBACjB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;gBACjB,IAAI,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC;gBACzB,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;gBAG1B,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,GAAG,GAAG,CAAC;gBACd,IAAI,GAAG,GAAG,GAAG,CAAC;gBACd,IAAI,GAAG,GAAG,GAAG,CAAC;gBACd,IAAI,GAAG,GAAG,GAAG,CAAC;gBACd,IAAI,GAAG,GAAG,EAAE,CAAC;gBAEb,IAAI,EAAE,GAAG,CAAC,CAAC;gBACX,IAAI,EAAE,GAAG,CAAC,CAAC;gBACX,IAAI,EAAE,GAAG,CAAC,CAAC;gBACX,IAAI,EAAE,GAAG,CAAC,CAAC;gBACX,IAAI,EAAE,GAAG,CAAC,CAAC;gBACX,IAAI,EAAE,GAAG,CAAC,CAAC;gBACX,IAAI,EAAE,GAAG,CAAC,CAAC;gBACX,IAAI,EAAE,GAAG,CAAC,CAAC;gBAGX,IAAI,KAAK,IAAI,CAAC,EAAE;oBACf,IAAI,GAAG,GAAG,MAAA,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAClC,IAAI,GAAG,GAAG,MAAA,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAElC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;oBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;oBAE3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;oBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;oBAE3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;oBAC3B,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;oBAE3B,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;iBACpB;qBAAM;oBACN,EAAE,GAAG,GAAG,CAAC;oBACT,EAAE,GAAG,GAAG,CAAC;oBAET,EAAE,GAAG,GAAG,CAAC;oBACT,EAAE,GAAG,GAAG,CAAC;oBAET,EAAE,GAAG,GAAG,CAAC;oBACT,EAAE,GAAG,GAAG,CAAC;oBAET,EAAE,GAAG,GAAG,CAAC;oBACT,EAAE,GAAG,GAAG,CAAC;iBACT;gBAED,EAAE,IAAI,YAAY,CAAC;gBACnB,EAAE,IAAI,YAAY,CAAC;gBACnB,EAAE,IAAI,YAAY,CAAC;gBACnB,EAAE,IAAI,YAAY,CAAC;gBACnB,EAAE,IAAI,YAAY,CAAC;gBACnB,EAAE,IAAI,YAAY,CAAC;gBACnB,EAAE,IAAI,YAAY,CAAC;gBACnB,EAAE,IAAI,YAAY,CAAC;gBAEnB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACvD,CAAC;YAED,kCAAU,GAAV,UAAY,MAA0B,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,KAAmB,EAAE,kBAAmC;gBAAxD,sBAAA,EAAA,YAAmB;gBAAE,mCAAA,EAAA,0BAAmC;gBACpJ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;gBACtB,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;gBACtB,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACvB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;gBACrB,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACvB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;gBACrB,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAY,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACzE,CAAC;YAED,4BAAI,GAAJ,UAAM,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,KAAmB,EAAE,MAAoB;gBAAzC,sBAAA,EAAA,YAAmB;gBAAE,uBAAA,EAAA,aAAoB;gBAC5F,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YACvC,CAAC;YAED,gCAAQ,GAAR,UAAU,MAAe,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,KAAmB,EAAE,MAAoB,EAAE,MAAoB;gBAA/D,sBAAA,EAAA,YAAmB;gBAAE,uBAAA,EAAA,aAAoB;gBAAE,uBAAA,EAAA,aAAoB;gBAC/J,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3E,CAAC;YAED,4BAAI,GAAJ,UAAM,MAAe,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,KAAmB,EAAE,MAAoB,EAAE,MAAoB,EAAE,MAAoB;gBAArF,sBAAA,EAAA,YAAmB;gBAAE,uBAAA,EAAA,aAAoB;gBAAE,uBAAA,EAAA,aAAoB;gBAAE,uBAAA,EAAA,aAAoB;gBACzM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACvF,CAAC;YAED,4BAAI,GAAJ,UAAM,MAAe,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBAC9F,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC;YAED,gCAAQ,GAAR,UAAU,MAAe,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,KAAa,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBAC5G,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC5D,CAAC;YAED,+BAAO,GAAP,UAAS,eAAkC,EAAE,MAAc,EAAE,KAAa,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBAC9F,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC5D,CAAC;YAED,8BAAM,GAAN,UAAQ,MAAe,EAAE,CAAS,EAAE,CAAS,EAAE,MAAc,EAAE,KAAmB,EAAE,QAAoB;gBAAzC,sBAAA,EAAA,YAAmB;gBAAE,yBAAA,EAAA,YAAoB;gBACvG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC3D,CAAC;YAED,6BAAK,GAAL,UAAO,EAAU,EAAE,EAAU,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,EAAU,EAAE,EAAU,EAAE,QAAgB,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBAC/I,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACxE,CAAC;YAED,2BAAG,GAAH;gBACC,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,OAAO;oBAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;qBACxD,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBAChE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC5B,CAAC;YAED,8BAAM,GAAN,UAAQ,UAAsB;gBAC7B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBACzB,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;gBAC3B,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;gBAC5B,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;oBAC5C,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;oBACjB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;iBAClB;gBACD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE5D,IAAI,UAAU,KAAK,UAAU,CAAC,OAAO,EAAE;iBAEtC;qBAAM,IAAI,UAAU,KAAK,UAAU,CAAC,MAAM,EAAE;oBAC5C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBAC9B;qBAAM,IAAI,UAAU,KAAK,UAAU,CAAC,GAAG,EAAE;oBACzC,IAAI,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;oBAC7D,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;oBACvF,IAAI,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;oBAC7C,IAAI,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;oBAC7C,IAAI,KAAK,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,GAAG,YAAY,CAAC;oBAChG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW,GAAG,KAAK,CAAC;oBAChD,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,YAAY,GAAG,KAAK,CAAC;iBAClD;gBACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,CAAC;YAEO,sCAAc,GAAtB,UAAuB,QAAgE;gBACtF,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ;oBAAE,OAAO;gBAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,IAAI,QAAQ,YAAY,MAAA,cAAc,EAAE;oBACvC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;oBAC1B,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,MAAA,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;oBACxF,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBAC/C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC;iBACnC;qBAAM,IAAI,QAAQ,YAAY,MAAA,aAAa,EAAE;oBAC7C,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;oBACzB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAA,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;oBACvF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;iBAClC;qBAAM;oBACN,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC;iBACjD;YACF,CAAC;YAED,+BAAO,GAAP;gBACC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;YACtC,CAAC;YACF,oBAAC;QAAD,CAAC,AAxdD,IAwdC;QAxdY,mBAAa,gBAwdzB,CAAA;QAED,IAAY,UAIX;QAJD,WAAY,UAAU;YACrB,iDAAO,CAAA;YACP,+CAAM,CAAA;YACN,yCAAG,CAAA;QACJ,CAAC,EAJW,UAAU,GAAV,gBAAU,KAAV,gBAAU,QAIrB;IACF,CAAC,EAheY,KAAK,GAAL,WAAK,KAAL,WAAK,QAgejB;AAAD,CAAC,EAheM,KAAK,KAAL,KAAK,QAgeX;ACheD,IAAO,KAAK,CAuQX;AAvQD,WAAO,KAAK;IAAC,IAAA,KAAK,CAuQjB;IAvQY,WAAA,KAAK;QACjB;YAwBC,gBAAa,OAA6D,EAAU,YAAoB,EAAU,cAAsB;gBAApD,iBAAY,GAAZ,YAAY,CAAQ;gBAAU,mBAAc,GAAd,cAAc,CAAQ;gBAfhI,OAAE,GAAgB,IAAI,CAAC;gBAEvB,OAAE,GAAgB,IAAI,CAAC;gBAEvB,YAAO,GAAiB,IAAI,CAAC;gBAC7B,WAAM,GAAiB,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/C,WAAM,GAAiB,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/C,WAAM,GAAiB,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAStD,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;gBAC7B,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC;gBAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,YAAY,MAAA,4BAA4B,CAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAA,4BAA4B,CAAC,OAAO,CAAC,CAAC;gBACpH,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,CAAC;YAZM,2BAAU,GAAjB,cAAuB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACtC,gCAAe,GAAtB,cAA4B,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAChD,kCAAiB,GAAxB,cAA8B,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACpD,sCAAqB,GAA5B,cAAkC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClD,kCAAiB,GAAxB,cAA8B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAU7C,wBAAO,GAAf;gBACC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI;oBACH,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;oBAClE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBACtE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;iBACrD;gBAAC,OAAO,CAAC,EAAE;oBACX,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,MAAM,CAAC,CAAC;iBACR;YACF,CAAC;YAEO,8BAAa,GAArB,UAAuB,IAAY,EAAE,MAAc;gBAClD,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAChC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACzB,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE;oBACtD,IAAI,KAAK,GAAG,2BAA2B,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBACtE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;oBACxB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;wBAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;iBAChD;gBACD,OAAO,MAAM,CAAC;YACf,CAAC;YAEO,+BAAc,GAAtB,UAAwB,EAAe,EAAE,EAAe;gBACvD,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,OAAO,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;gBACjC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC7B,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC7B,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAExB,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE;oBACrD,IAAI,KAAK,GAAG,mCAAmC,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;oBAChF,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAC1B,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;wBAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;iBAChD;gBACD,OAAO,OAAO,CAAC;YAChB,CAAC;YAED,wBAAO,GAAP;gBACC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,CAAC;YAEM,qBAAI,GAAX;gBACC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;YAEM,uBAAM,GAAb;gBACC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YAEM,4BAAW,GAAlB,UAAoB,OAAe,EAAE,KAAa;gBACjD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;YACpE,CAAC;YAEM,4BAAW,GAAlB,UAAoB,OAAe,EAAE,KAAa;gBACjD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;YACpE,CAAC;YAEM,6BAAY,GAAnB,UAAqB,OAAe,EAAE,KAAa,EAAE,MAAc;gBAClE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC5E,CAAC;YAEM,6BAAY,GAAnB,UAAqB,OAAe,EAAE,KAAa,EAAE,MAAc,EAAE,MAAc;gBAClF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACpF,CAAC;YAEM,6BAAY,GAAnB,UAAqB,OAAe,EAAE,KAAa,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc;gBAClG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5F,CAAC;YAEM,+BAAc,GAArB,UAAuB,OAAe,EAAE,KAAwB;gBAC/D,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACvB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3E,CAAC;YAEM,+BAAc,GAArB,UAAuB,OAAe,EAAE,KAAwB;gBAC/D,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACvB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3E,CAAC;YAEM,+BAAc,GAArB,UAAuB,OAAe,EAAE,KAAwB;gBAC/D,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACvB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3E,CAAC;YAEM,mCAAkB,GAAzB,UAA2B,OAAe;gBACzC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,QAAQ,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC5D,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,wCAAsC,OAAS,CAAC,CAAC;gBACvG,OAAO,QAAQ,CAAC;YACjB,CAAC;YAEM,qCAAoB,GAA3B,UAA6B,SAAiB;gBAC7C,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,QAAQ,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAC7D,IAAI,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,0CAAwC,SAAW,CAAC,CAAC;gBAChH,OAAO,QAAQ,CAAC;YACjB,CAAC;YAEM,wBAAO,GAAd;gBACC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAEpC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,EAAE,EAAE;oBACZ,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACzB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;iBACf;gBAED,IAAI,IAAI,CAAC,EAAE,EAAE;oBACZ,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACzB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;iBACf;gBAED,IAAI,IAAI,CAAC,OAAO,EAAE;oBACjB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;iBACpB;YACF,CAAC;YAEa,yBAAkB,GAAhC,UAAkC,OAA6D;gBAC9F,IAAI,EAAE,GAAG,8BACS,MAAM,CAAC,QAAQ,kCACf,MAAM,CAAC,KAAK,kCACZ,MAAM,CAAC,SAAS,gCAClB,MAAM,CAAC,UAAU,2HAKnB,MAAM,CAAC,KAAK,mCACR,MAAM,CAAC,SAAS,mCAChB,MAAM,CAAC,UAAU,WAAM,MAAM,CAAC,QAAQ,yBAEvD,CAAC;gBAEF,IAAI,EAAE,GAAG,iXAcR,CAAC;gBAEF,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACpC,CAAC;YAEa,4BAAqB,GAAnC,UAAqC,OAA6D;gBACjG,IAAI,EAAE,GAAG,8BACS,MAAM,CAAC,QAAQ,kCACf,MAAM,CAAC,KAAK,kCACZ,MAAM,CAAC,MAAM,kCACb,MAAM,CAAC,SAAS,gCAClB,MAAM,CAAC,UAAU,yJAMnB,MAAM,CAAC,KAAK,8BACb,MAAM,CAAC,MAAM,mCACR,MAAM,CAAC,SAAS,mCAChB,MAAM,CAAC,UAAU,WAAM,MAAM,CAAC,QAAQ,yBAEvD,CAAC;gBAEF,IAAI,EAAE,GAAG,6jBAiBR,CAAC;gBAEF,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACpC,CAAC;YAEa,iBAAU,GAAxB,UAA0B,OAA6D;gBACtF,IAAI,EAAE,GAAG,8BACS,MAAM,CAAC,QAAQ,kCACf,MAAM,CAAC,KAAK,gCACd,MAAM,CAAC,UAAU,wFAInB,MAAM,CAAC,KAAK,mCACR,MAAM,CAAC,UAAU,WAAM,MAAM,CAAC,QAAQ,yBAEvD,CAAC;gBAEF,IAAI,EAAE,GAAG,oQAYR,CAAC;gBAEF,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACpC,CAAC;YAnQa,iBAAU,GAAG,aAAa,CAAC;YAC3B,eAAQ,GAAG,YAAY,CAAC;YACxB,YAAK,GAAG,SAAS,CAAC;YAClB,aAAM,GAAG,UAAU,CAAC;YACpB,gBAAS,GAAG,aAAa,CAAC;YAC1B,cAAO,GAAG,WAAW,CAAC;YA+PrC,aAAC;SAAA,AArQD,IAqQC;QArQY,YAAM,SAqQlB,CAAA;IACF,CAAC,EAvQY,KAAK,GAAL,WAAK,KAAL,WAAK,QAuQjB;AAAD,CAAC,EAvQM,KAAK,KAAL,KAAK,QAuQX;ACvQD,IAAO,KAAK,CA0TX;AA1TD,WAAO,KAAK;IAAC,IAAA,KAAK,CA0TjB;IA1TY,WAAA,KAAK;QACjB;YAYC,uBAAa,OAA6D,EAAE,WAA2B;gBAA3B,4BAAA,EAAA,mBAA2B;gBAV/F,cAAS,GAAG,KAAK,CAAC;gBAElB,cAAS,GAAG,SAAS,CAAC,MAAM,CAAC;gBAC7B,UAAK,GAAG,IAAI,MAAA,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAE9B,gBAAW,GAAG,CAAC,CAAC;gBAChB,QAAG,GAAG,IAAI,MAAA,OAAO,EAAE,CAAC;gBAK3B,IAAI,WAAW,GAAG,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,WAAW,CAAC,CAAC;gBAC3G,IAAI,CAAC,OAAO,GAAG,OAAO,YAAY,MAAA,4BAA4B,CAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAA,4BAA4B,CAAC,OAAO,CAAC,CAAC;gBACpH,IAAI,CAAC,IAAI,GAAG,IAAI,MAAA,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,MAAA,kBAAkB,EAAE,EAAE,IAAI,MAAA,cAAc,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;gBAChG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;gBAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC;YACrD,CAAC;YAED,6BAAK,GAAL,UAAO,MAAc;gBACpB,IAAI,IAAI,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACrF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;gBACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBAEtB,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBACpB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAED,oCAAY,GAAZ,UAAc,QAAgB,EAAE,QAAgB;gBAC/C,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACzB,IAAI,IAAI,CAAC,SAAS,EAAE;oBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC3C;YACF,CAAC;YAED,gCAAQ,GAAR,UAAU,KAAY;gBACrB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YAED,oCAAY,GAAZ,UAAc,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;gBACvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;YAED,6BAAK,GAAL,UAAO,CAAS,EAAE,CAAS,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBAC/C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC/B,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC;YAED,4BAAI,GAAJ,UAAM,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBACtE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC3B,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YAED,gCAAQ,GAAR,UAAU,MAAe,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,KAAmB,EAAE,MAAoB,EAAE,MAAoB;gBAA/D,sBAAA,EAAA,YAAmB;gBAAE,uBAAA,EAAA,aAAoB;gBAAE,uBAAA,EAAA,aAAoB;gBAC/J,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1D,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC3B,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,MAAM,KAAK,IAAI;oBAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;gBACzC,IAAI,MAAM,KAAK,IAAI;oBAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;gBACzC,IAAI,MAAM,EAAE;oBACX,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBAC5B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;iBAC5B;qBAAM;oBACN,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBAE5B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBAE5B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC3B,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;iBAC1B;YACF,CAAC;YAED,4BAAI,GAAJ,UAAM,MAAe,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,KAAmB,EAAE,MAAoB,EAAE,MAAoB,EAAE,MAAoB;gBAArF,sBAAA,EAAA,YAAmB;gBAAE,uBAAA,EAAA,aAAoB;gBAAE,uBAAA,EAAA,aAAoB;gBAAE,uBAAA,EAAA,aAAoB;gBACzM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1D,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC3B,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,MAAM,KAAK,IAAI;oBAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;gBACzC,IAAI,MAAM,KAAK,IAAI;oBAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;gBACzC,IAAI,MAAM,KAAK,IAAI;oBAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;gBACzC,IAAI,MAAM,EAAE;oBACX,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBACnF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;iBACnF;qBAAM;oBACN,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBACtD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBACzD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBACzD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;iBACtD;YACF,CAAC;YAED,4BAAI,GAAJ,UAAM,MAAe,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBAC9F,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACzG,CAAC;YAED,gCAAQ,GAAR,UAAU,MAAe,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,KAAa,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBAC5G,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1D,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACd,KAAK,IAAI,GAAG,CAAC;gBACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;gBACrB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,MAAM,EAAE;oBACZ,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBAErC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBAErC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;iBACrC;qBAAM;oBACN,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBAErC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;iBACrC;YACF,CAAC;YAED,yBAAC,GAAD,UAAG,CAAS,EAAE,CAAS,EAAE,IAAY;gBACpC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACnD,CAAC;YAED,+BAAO,GAAP,UAAS,eAAkC,EAAE,MAAc,EAAE,KAAa,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBAC9F,IAAI,KAAK,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAC3E,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBACtC,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;gBAE3B,MAAM,KAAK,CAAC,CAAC;gBACb,KAAK,KAAK,CAAC,CAAC;gBAEZ,IAAI,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,MAAM,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC;gBAE1B,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;oBAC3D,IAAI,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,EAAE,GAAG,eAAe,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;oBAE9B,IAAI,EAAE,GAAG,CAAC,CAAC;oBACX,IAAI,EAAE,GAAG,CAAC,CAAC;oBAEX,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;wBAClB,EAAE,GAAG,MAAM,CAAC;wBACZ,EAAE,GAAG,MAAM,CAAC;qBACZ;yBAAM;wBACN,EAAE,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC5B,EAAE,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;qBAC5B;oBAED,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;iBAC3B;YACF,CAAC;YAED,8BAAM,GAAN,UAAQ,MAAe,EAAE,CAAS,EAAE,CAAS,EAAE,MAAc,EAAE,KAAmB,EAAE,QAAoB;gBAAzC,sBAAA,EAAA,YAAmB;gBAAE,yBAAA,EAAA,YAAoB;gBACvG,IAAI,QAAQ,KAAK,CAAC;oBAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7E,IAAI,QAAQ,IAAI,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAC5D,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,KAAK,GAAG,CAAC,GAAG,MAAA,SAAS,CAAC,EAAE,GAAG,QAAQ,CAAC;gBACxC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,EAAE;oBACZ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;wBAClC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;wBACnC,IAAI,MAAI,GAAG,EAAE,CAAC;wBACd,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;wBACzB,EAAE,GAAG,GAAG,GAAG,MAAI,GAAG,GAAG,GAAG,EAAE,CAAC;wBAC3B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;qBACnC;oBAED,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;iBACnC;qBAAM;oBACN,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/C,QAAQ,EAAE,CAAC;oBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;wBAClC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;wBACzB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;wBACnC,IAAI,MAAI,GAAG,EAAE,CAAC;wBACd,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;wBACzB,EAAE,GAAG,GAAG,GAAG,MAAI,GAAG,GAAG,GAAG,EAAE,CAAC;wBAC3B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;qBACnC;oBAED,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;iBACnC;gBAED,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,EAAE,GAAG,MAAM,CAAC;gBACZ,EAAE,GAAG,CAAC,CAAC;gBACP,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YACpC,CAAC;YAED,6BAAK,GAAL,UAAO,EAAU,EAAE,EAAU,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,EAAU,EAAE,EAAU,EAAE,QAAgB,EAAE,KAAmB;gBAAnB,sBAAA,EAAA,YAAmB;gBAC/I,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7C,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBAGvC,IAAI,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC;gBAC/B,IAAI,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;gBAC7C,IAAI,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;gBAE3D,IAAI,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC;gBAC3B,IAAI,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC;gBAC5B,IAAI,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC;gBAC5B,IAAI,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC;gBAE5B,IAAI,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBAC/B,IAAI,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBAE/B,IAAI,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBACtC,IAAI,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAEtC,IAAI,EAAE,GAAG,EAAE,CAAC;gBACZ,IAAI,EAAE,GAAG,EAAE,CAAC;gBAEZ,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,CAAC;gBAClE,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,CAAC;gBAElE,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;gBACvC,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;gBAEvC,IAAI,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;gBACzB,IAAI,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;gBAEzB,OAAO,QAAQ,EAAE,GAAG,CAAC,EAAE;oBACtB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC3B,EAAE,IAAI,GAAG,CAAC;oBACV,EAAE,IAAI,GAAG,CAAC;oBACV,GAAG,IAAI,IAAI,CAAC;oBACZ,GAAG,IAAI,IAAI,CAAC;oBACZ,IAAI,IAAI,KAAK,CAAC;oBACd,IAAI,IAAI,KAAK,CAAC;oBACd,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;iBAC3B;gBACD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YAEO,8BAAM,GAAd,UAAgB,CAAS,EAAE,CAAS,EAAE,KAAY;gBACjD,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBACpB,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBACpB,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAC1B,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAC1B,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAC1B,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAC1B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;YACxB,CAAC;YAED,2BAAG,GAAH;gBACC,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAClF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACxB,CAAC;YAEO,6BAAK,GAAb;gBACC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC;oBAAE,OAAO;gBAClC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC5C,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACtB,CAAC;YAEO,6BAAK,GAAb,UAAc,SAAoB,EAAE,WAAmB;gBACtD,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAClF,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;oBAChC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW;wBAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;wBAC7E,OAAO;iBACZ;qBAAM;oBACN,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;iBAC3B;YACF,CAAC;YAED,+BAAO,GAAP;gBACC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,CAAC;YACF,oBAAC;QAAD,CAAC,AAlTD,IAkTC;QAlTY,mBAAa,gBAkTzB,CAAA;QAED,IAAY,SAIX;QAJD,WAAY,SAAS;YACpB,2CAAc,CAAA;YACd,yCAAa,CAAA;YACb,6CAAe,CAAA;QAChB,CAAC,EAJW,SAAS,GAAT,eAAS,KAAT,eAAS,QAIpB;IACF,CAAC,EA1TY,KAAK,GAAL,WAAK,KAAL,WAAK,QA0TjB;AAAD,CAAC,EA1TM,KAAK,KAAL,KAAK,QA0TX;AC1TD,IAAO,KAAK,CAmMX;AAnMD,WAAO,KAAK;IAAC,IAAA,KAAK,CAmMjB;IAnMY,WAAA,KAAK;QACjB;YA2BC,+BAAa,OAA6D;gBA1B1E,kBAAa,GAAG,IAAI,MAAA,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtC,oBAAe,GAAG,IAAI,MAAA,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxC,wBAAmB,GAAG,IAAI,MAAA,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC9C,sBAAiB,GAAG,IAAI,MAAA,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC/C,cAAS,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAChD,cAAS,GAAG,IAAI,MAAA,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpC,cAAS,GAAG,IAAI,MAAA,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;gBACpC,cAAS,GAAG,IAAI,CAAC;gBACjB,0BAAqB,GAAG,IAAI,CAAC;gBAC7B,sBAAiB,GAAG,IAAI,CAAC;gBACzB,iBAAY,GAAG,IAAI,CAAC;gBACpB,sBAAiB,GAAG,IAAI,CAAC;gBACzB,cAAS,GAAG,IAAI,CAAC;gBACjB,mBAAc,GAAG,KAAK,CAAC;gBACvB,iBAAY,GAAG,IAAI,CAAC;gBACpB,uBAAkB,GAAG,KAAK,CAAC;gBAC3B,UAAK,GAAG,CAAC,CAAC;gBACV,cAAS,GAAG,CAAC,CAAC;gBAGN,WAAM,GAAG,IAAI,MAAA,cAAc,EAAE,CAAC;gBAC9B,SAAI,GAAG,IAAI,KAAK,EAAU,CAAC;gBAC3B,aAAQ,GAAG,MAAA,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAKhD,IAAI,CAAC,OAAO,GAAG,OAAO,YAAY,MAAA,4BAA4B,CAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAA,4BAA4B,CAAC,OAAO,CAAC,CAAC;YACrH,CAAC;YAED,oCAAI,GAAJ,UAAM,MAAqB,EAAE,QAAkB,EAAE,YAAkC;gBAAlC,6BAAA,EAAA,mBAAkC;gBAClF,IAAI,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;gBAC3B,IAAI,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;gBAC3B,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;gBAC9D,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC;gBAErD,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC3B,IAAI,IAAI,CAAC,SAAS,EAAE;oBACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,YAAY,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAAE,SAAS;wBACxE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;4BAAE,SAAS;wBAClC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;wBAC5D,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;wBAC5D,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;qBAC3G;oBACD,IAAI,IAAI,CAAC,cAAc;wBAAE,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;iBACxE;gBAED,IAAI,IAAI,CAAC,qBAAqB,EAAE;oBAC/B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;oBAC1C,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;oBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;wBACtC,IAAI,UAAU,YAAY,MAAA,gBAAgB,EAAE;4BAC3C,IAAI,gBAAgB,GAAqB,UAAU,CAAC;4BACpD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;4BAC7B,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;4BACjE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;4BAChE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;4BAChE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;4BAChE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;yBAChE;qBACD;iBACD;gBAED,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE;oBAChD,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;oBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;4BAAE,SAAS;wBAChC,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;wBACtC,IAAI,CAAC,CAAC,UAAU,YAAY,MAAA,cAAc,CAAC;4BAAE,SAAS;wBACtD,IAAI,IAAI,GAAmB,UAAU,CAAC;wBACtC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;wBAC7B,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC7E,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC/B,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;wBACjC,IAAI,IAAI,CAAC,iBAAiB,EAAE;4BAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;4BACxC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE;gCACzD,IAAI,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gCACnF,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,EACpD,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,EAC9B,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAC9B,CAAC;6BACF;yBACD;wBACD,IAAI,IAAI,CAAC,YAAY,IAAI,UAAU,GAAG,CAAC,EAAE;4BACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;4BAC1C,UAAU,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;4BACnC,IAAI,KAAK,GAAG,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;4BACvE,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE;gCACnD,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gCAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gCAChC,KAAK,GAAG,CAAC,CAAC;gCACV,KAAK,GAAG,CAAC,CAAC;6BACV;yBACD;qBACD;iBACD;gBAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;oBAC3B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACzB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;oBACpF,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAC/B,IAAI,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC;oBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAChD,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC1B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;wBAChC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;qBAC3C;iBACD;gBAED,IAAI,IAAI,CAAC,SAAS,EAAE;oBACnB,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;oBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;4BAAE,SAAS;wBAChC,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;wBACtC,IAAI,CAAC,CAAC,UAAU,YAAY,MAAA,cAAc,CAAC;4BAAE,SAAS;wBACtD,IAAI,IAAI,GAAmB,UAAU,CAAC;wBACtC,IAAI,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;wBAClC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;wBAC7D,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACpD,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC3B,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;wBACjD,IAAI,IAAI,CAAC,MAAM,EAAE;4BAChB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;4BACvB,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;4BAC7E,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;4BACnB,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;4BACnB,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;4BACrD,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;4BAClD,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;4BAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;yBAC9B;wBACD,EAAE,IAAI,CAAC,CAAC;wBACR,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE;4BAClC,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;4BACnF,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;4BACnB,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;4BACnB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;4BACvB,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;4BACrD,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;4BAClD,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;4BAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;4BAC9B,EAAE,GAAG,EAAE,CAAC;4BACR,EAAE,GAAG,EAAE,CAAC;yBACR;qBACD;iBACD;gBAED,IAAI,IAAI,CAAC,SAAS,EAAE;oBACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,YAAY,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAAE,SAAS;wBACxE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;qBACtH;iBACD;gBAED,IAAI,IAAI,CAAC,YAAY,EAAE;oBACtB,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;oBAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;4BAAE,SAAS;wBAChC,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;wBACtC,IAAI,CAAC,CAAC,UAAU,YAAY,MAAA,kBAAkB,CAAC;4BAAE,SAAS;wBAC1D,IAAI,IAAI,GAAuB,UAAU,CAAC;wBAC1C,IAAI,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;wBAClC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;wBAC7D,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACpD,KAAK,IAAI,IAAC,GAAG,CAAC,EAAE,GAAC,GAAG,KAAK,CAAC,MAAM,EAAE,IAAC,GAAG,GAAC,EAAE,IAAC,IAAE,CAAC,EAAE;4BAC9C,IAAI,CAAC,GAAG,KAAK,CAAC,IAAC,CAAC,CAAC;4BACjB,IAAI,CAAC,GAAG,KAAK,CAAC,IAAC,GAAG,CAAC,CAAC,CAAC;4BACrB,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,IAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;4BACvC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,IAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;4BACvC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;yBAC1B;qBACD;iBACD;YACF,CAAC;YAED,uCAAO,GAAP;YACA,CAAC;YAxKc,gCAAU,GAAG,IAAI,MAAA,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3D,2BAAK,GAAG,IAAI,MAAA,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAwK9C,4BAAC;SAAA,AAjMD,IAiMC;QAjMY,2BAAqB,wBAiMjC,CAAA;IACF,CAAC,EAnMY,KAAK,GAAL,WAAK,KAAL,WAAK,QAmMjB;AAAD,CAAC,EAnMM,KAAK,KAAL,KAAK,QAmMX;ACnMD,IAAO,KAAK,CA0QX;AA1QD,WAAO,KAAK;IAAC,IAAA,KAAK,CA0QjB;IA1QY,WAAA,KAAK;QACjB;YACC,oBAAmB,QAA2B,EAAS,WAAmB,EAAS,SAAiB;gBAAjF,aAAQ,GAAR,QAAQ,CAAmB;gBAAS,gBAAW,GAAX,WAAW,CAAQ;gBAAS,cAAS,GAAT,SAAS,CAAQ;YAAG,CAAC;YACzG,iBAAC;QAAD,CAAC,AAFD,IAEC;QAAA,CAAC;QAEF;YAiBC,0BAAa,OAAqC,EAAE,YAA4B;gBAA5B,6BAAA,EAAA,mBAA4B;gBAdhF,uBAAkB,GAAG,KAAK,CAAC;gBAC3B,iBAAY,GAAiB,IAAI,CAAC;gBAC1B,cAAS,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;gBACxB,eAAU,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;gBAEzB,eAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvB,iBAAY,GAAG,KAAK,CAAC;gBACrB,eAAU,GAAe,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpD,YAAO,GAAqB,IAAI,MAAA,gBAAgB,EAAE,CAAC;gBACnD,SAAI,GAAG,IAAI,MAAA,OAAO,EAAE,CAAC;gBACrB,UAAK,GAAG,IAAI,MAAA,OAAO,EAAE,CAAC;gBACtB,UAAK,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;gBACpB,UAAK,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;gBAG3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;gBACjC,IAAI,YAAY;oBACf,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;gBACtB,IAAI,CAAC,QAAQ,GAAG,MAAA,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;YAC7D,CAAC;YAED,+BAAI,GAAJ,UAAM,OAAuB,EAAE,QAAkB,EAAE,cAA2B,EAAE,YAAyB;gBAAtD,+BAAA,EAAA,kBAA0B,CAAC;gBAAE,6BAAA,EAAA,gBAAwB,CAAC;gBACxG,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC3B,IAAI,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACjD,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gBACrC,IAAI,SAAS,GAAc,IAAI,CAAC;gBAEhC,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;gBACxB,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;gBACxB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;gBAE1B,IAAI,UAAU,GAAe,IAAI,CAAC,UAAU,CAAC;gBAC7C,IAAI,GAAG,GAAsB,IAAI,CAAC;gBAClC,IAAI,SAAS,GAAkB,IAAI,CAAC;gBACpC,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;gBACnC,IAAI,eAAe,GAAU,IAAI,CAAC;gBAClC,IAAI,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;gBACnC,IAAI,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,IAAI,cAAc,IAAI,CAAC,CAAC;oBAAE,OAAO,GAAG,IAAI,CAAC;gBACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACjD,IAAI,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;oBAC9D,IAAI,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;wBACtB,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;wBAC9B,SAAS;qBACT;oBAED,IAAI,cAAc,IAAI,CAAC,IAAI,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;wBAC7D,OAAO,GAAG,IAAI,CAAC;qBACf;oBAED,IAAI,CAAC,OAAO,EAAE;wBACb,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;wBAC9B,SAAS;qBACT;oBAED,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;wBACzD,OAAO,GAAG,KAAK,CAAC;qBAChB;oBAED,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;oBACtC,IAAI,OAAO,GAAc,IAAI,CAAC;oBAC9B,IAAI,UAAU,YAAY,MAAA,gBAAgB,EAAE;wBAC3C,IAAI,MAAM,GAAqB,UAAU,CAAC;wBAC1C,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;wBACpC,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;wBAC3B,UAAU,CAAC,SAAS,GAAG,iBAAiB,IAAI,CAAC,CAAC;wBAC9C,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;wBAClF,SAAS,GAAG,gBAAgB,CAAC,cAAc,CAAC;wBAC5C,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;wBACjB,OAAO,GAAmC,MAAM,CAAC,MAAM,CAAC,YAAa,CAAC,OAAO,CAAC;wBAC9E,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC;qBAC/B;yBAAM,IAAI,UAAU,YAAY,MAAA,cAAc,EAAE;wBAChD,IAAI,IAAI,GAAmB,UAAU,CAAC;wBACtC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;wBACpC,UAAU,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC;wBACzD,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC,WAAW,GAAG,iBAAiB,CAAC;wBAClE,IAAI,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE;4BACtD,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;yBACtF;wBACD,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;wBACxG,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC3B,OAAO,GAAmC,IAAI,CAAC,MAAM,CAAC,YAAa,CAAC,OAAO,CAAC;wBAC5E,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;wBACf,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC;qBAC7B;yBAAM,IAAI,UAAU,YAAY,MAAA,kBAAkB,EAAE;wBACpD,IAAI,IAAI,GAAuB,CAAC,UAAU,CAAC,CAAC;wBAC5C,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;wBAC9B,SAAS;qBACT;yBAAM;wBACN,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;wBAC9B,SAAS;qBACT;oBAED,IAAI,OAAO,IAAI,IAAI,EAAE;wBACpB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;wBAC3B,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;wBAChC,UAAU,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;wBACjE,UAAU,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;wBACjE,UAAU,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;wBACjE,UAAU,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;wBACjE,IAAI,kBAAkB,EAAE;4BACvB,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;4BAC7B,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;4BAC7B,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;yBAC7B;wBACD,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;wBAChC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI;4BACzB,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;6BACxB;4BACJ,IAAI,kBAAkB,EAAE;gCACvB,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;gCAC9C,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;gCAC9C,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;6BAC9C;iCAAM;gCACN,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;6BACvC;4BACD,SAAS,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;yBAC7C;wBAED,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;wBACxC,IAAI,aAAa,IAAI,SAAS,EAAE;4BAC/B,SAAS,GAAG,aAAa,CAAC;4BAC1B,OAAO,CAAC,YAAY,CAAC,MAAA,uBAAuB,CAAC,oBAAoB,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,MAAA,uBAAuB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;yBACzJ;wBAED,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE;4BACzB,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;4BACxI,IAAI,eAAe,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;4BAChE,IAAI,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;4BAChD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gCAC9B,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gCACrC,IAAI,KAAK,GAAG,eAAe,CAAC;gCAC5B,IAAI,CAAC,YAAY,EAAE;oCAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,GAAC,EAAE,CAAC,IAAI,UAAU,EAAE;wCACnE,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wCACrB,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCACzB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wCACtE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCACxB,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCACxB,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wCACzB,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wCAC7D,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;wCACrB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;wCACzB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;wCACxB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAA;qCACvB;iCACD;qCAAM;oCACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,GAAC,EAAE,CAAC,IAAI,UAAU,EAAE;wCACnE,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wCACrB,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCACzB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wCACtE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCACxB,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCACxB,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;wCACvE,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wCAC7D,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;wCACrB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;wCACzB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;wCACxB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAA;wCACvB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;wCAC1B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;wCAC1B,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;qCAC3B;iCACD;6BACD;4BACD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;yBACzD;6BAAM;4BACN,IAAI,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC;4BAChC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gCAC9B,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gCACrC,IAAI,CAAC,YAAY,EAAE;oCAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAC,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,GAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;wCAChF,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wCACrB,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCACzB,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;wCAClB,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;wCACrB,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;wCACnC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wCACzB,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wCAC7D,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;wCACrB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;wCACzB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;wCACxB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAA;qCACvB;iCACD;qCAAM;oCACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAC,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,GAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;wCAChF,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wCACrB,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCACzB,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;wCAClB,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;wCACrB,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;wCACnC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;wCACjC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wCAC7D,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;wCACrB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;wCACzB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;wCACxB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAA;wCACvB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;wCAC1B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;wCAC1B,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;qCAC3B;iCACD;6BACD;iCAAM;gCACN,IAAI,CAAC,YAAY,EAAE;oCAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAC,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,GAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;wCAChF,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;wCACxB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;wCAC5B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;wCAC5B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;wCAC5B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;wCACtB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;qCAC1B;iCACD;qCAAM;oCACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAC,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,GAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;wCAChF,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;wCACxB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;wCAC5B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;wCAC5B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;wCAC5B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;wCACtB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCAC1B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;qCAC3B;iCACD;6BACD;4BACD,IAAI,IAAI,GAAI,UAAU,CAAC,QAAyB,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;4BACnF,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;yBACvC;qBACD;oBAED,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;iBAC9B;gBACD,OAAO,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;YAlQM,+BAAc,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAmQ5C,uBAAC;SAAA,AApQD,IAoQC;QApQY,sBAAgB,mBAoQ5B,CAAA;IACF,CAAC,EA1QY,KAAK,GAAL,WAAK,KAAL,WAAK,QA0QjB;AAAD,CAAC,EA1QM,KAAK,KAAL,KAAK,QA0QX;AC1QD,IAAO,KAAK,CA2FX;AA3FD,WAAO,KAAK;IAAC,IAAA,KAAK,CA2FjB;IA3FY,WAAA,KAAK;QACjB;YAKC,iBAAa,CAAa,EAAE,CAAa,EAAE,CAAa;gBAA3C,kBAAA,EAAA,KAAa;gBAAE,kBAAA,EAAA,KAAa;gBAAE,kBAAA,EAAA,KAAa;gBAJxD,MAAC,GAAG,CAAC,CAAC;gBACN,MAAC,GAAG,CAAC,CAAC;gBACN,MAAC,GAAG,CAAC,CAAC;gBAGL,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACZ,CAAC;YAED,yBAAO,GAAP,UAAQ,CAAU;gBACjB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACb,OAAO,IAAI,CAAC;YACb,CAAC;YAED,qBAAG,GAAH,UAAK,CAAS,EAAE,CAAS,EAAE,CAAS;gBACnC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,OAAO,IAAI,CAAC;YACb,CAAC;YAED,qBAAG,GAAH,UAAK,CAAU;gBACd,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,OAAO,IAAI,CAAC;YACb,CAAC;YAED,qBAAG,GAAH,UAAK,CAAU;gBACd,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,OAAO,IAAI,CAAC;YACb,CAAC;YAED,uBAAK,GAAL,UAAO,CAAS;gBACf,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBACZ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBACZ,OAAO,IAAI,CAAC;YACb,CAAC;YAED,2BAAS,GAAT;gBACC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,GAAG,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAC1B,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBACd,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;gBACd,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;gBACd,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;gBACd,OAAO,IAAI,CAAC;YACb,CAAC;YAED,uBAAK,GAAL,UAAO,CAAU;gBAChB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACvG,CAAC;YAED,0BAAQ,GAAR,UAAU,MAAe;gBACxB,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,EAC3F,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,EAC5E,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,CAAC,CAAC;YAChF,CAAC;YAED,yBAAO,GAAP,UAAS,MAAe;gBACvB,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC1B,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,CAAC,CAAC;gBAC7F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,CAAC,GAAG,GAAG,EACnG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,CAAC,GAAG,GAAG,EACpF,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,GAAG,KAAK,CAAC,MAAA,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACxF,CAAC;YAED,qBAAG,GAAH,UAAK,CAAU;gBACd,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;YAED,wBAAM,GAAN;gBACC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;YAED,0BAAQ,GAAR,UAAU,CAAU;gBACnB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBACrB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,CAAC;YACF,cAAC;QAAD,CAAC,AAzFD,IAyFC;QAzFY,aAAO,UAyFnB,CAAA;IACF,CAAC,EA3FY,KAAK,GAAL,WAAK,KAAL,WAAK,QA2FjB;AAAD,CAAC,EA3FM,KAAK,KAAL,KAAK,QA2FX;AC3FD,IAAO,KAAK,CAyEX;AAzED,WAAO,KAAK;IAAC,IAAA,KAAK,CAyEjB;IAzEY,WAAA,KAAK;QACjB;YAKC,sCAAY,eAAiG,EAAE,aAAsC;gBAAtC,8BAAA,EAAA,kBAAuB,KAAK,EAAE,MAAM,EAAE;gBAF7I,gBAAW,GAAG,IAAI,KAAK,EAAc,CAAC;gBAG7C,IAAI,CAAC,CAAC,CAAC,eAAe,YAAY,qBAAqB,CAAC,IAAI,CAAC,eAAe,YAAY,sBAAsB,CAAC,CAAC,EAAE;oBACjH,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;iBACjD;qBAAM;oBACN,IAAI,CAAC,EAAE,GAAG,eAAe,CAAC;oBAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;iBAC7B;YACF,CAAC;YAEO,kDAAW,GAAnB,UAAoB,MAAW,EAAE,aAAkB;gBAAnD,iBAeC;gBAdA,IAAI,CAAC,EAAE,GAA2B,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;gBAC5H,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,UAAC,CAAM;oBAClD,IAAI,KAAK,GAAsB,CAAC,CAAC;oBACjC,IAAI,CAAC,EAAE;wBACN,CAAC,CAAC,cAAc,EAAE,CAAC;qBACnB;gBACF,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,UAAC,CAAM;oBACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBACxD,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;qBAC9B;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC;YAED,oDAAa,GAAb,UAAc,UAAsB;gBACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;YAED,uDAAgB,GAAhB,UAAiB,UAAsB;gBACtC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACjD,IAAI,KAAK,GAAG,CAAC,CAAC;oBAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACnD,CAAC;YACF,mCAAC;QAAD,CAAC,AAvCD,IAuCC;QAvCY,kCAA4B,+BAuCxC,CAAA;QAED;YAAA;YA8BA,CAAC;YAnBO,0CAAkB,GAAzB,UAA2B,SAAoB;gBAC9C,QAAO,SAAS,EAAE;oBACjB,KAAK,MAAA,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,uBAAuB,CAAC,mBAAmB,CAAC;oBAC1E,KAAK,MAAA,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,uBAAuB,CAAC,GAAG,CAAC;oBAC5D,KAAK,MAAA,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,uBAAuB,CAAC,mBAAmB,CAAC;oBAC5E,KAAK,MAAA,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,uBAAuB,CAAC,mBAAmB,CAAC;oBAC1E,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAAC;iBAC7D;YACF,CAAC;YAEM,4CAAoB,GAA3B,UAA6B,SAAoB,EAAE,kBAAmC;gBAAnC,mCAAA,EAAA,0BAAmC;gBACrF,QAAO,SAAS,EAAE;oBACjB,KAAK,MAAA,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,kBAAkB,CAAA,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,SAAS,CAAC;oBAClH,KAAK,MAAA,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAA,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,SAAS,CAAC;oBACpH,KAAK,MAAA,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,uBAAuB,CAAC,SAAS,CAAC;oBAClE,KAAK,MAAA,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,uBAAuB,CAAC,GAAG,CAAC;oBAC1D,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAAC;iBAC7D;YACF,CAAC;YA5BM,4BAAI,GAAG,CAAC,CAAC;YACT,2BAAG,GAAG,CAAC,CAAC;YACR,iCAAS,GAAG,MAAM,CAAC;YACnB,2CAAmB,GAAG,MAAM,CAAC;YAC7B,iCAAS,GAAG,MAAM,CAAC;YACnB,2CAAmB,GAAG,MAAM,CAAC;YAC7B,iCAAS,GAAG,MAAM,CAAC;YACnB,2CAAmB,GAAG,MAAM,CAAC;YAC7B,iCAAS,GAAG,MAAM,CAAA;YAqB1B,8BAAC;SAAA,AA9BD,IA8BC;QA9BY,6BAAuB,0BA8BnC,CAAA;IACF,CAAC,EAzEY,KAAK,GAAL,WAAK,KAAL,WAAK,QAyEjB;AAAD,CAAC,EAzEM,KAAK,KAAL,KAAK,QAyEX;ACzED,IAAO,KAAK,CAQX;AARD,WAAO,KAAK;IAAC,IAAA,OAAO,CAQnB;IARY,WAAA,OAAO;QACnB;YAAkC,gCAAkB;YACnD,sBAAa,UAAuB;gBAAvB,2BAAA,EAAA,eAAuB;uBACnC,kBAAM,UAAC,KAAuB;oBAC7B,OAAO,IAAI,QAAA,cAAc,CAAC,KAAK,CAAC,CAAC;gBAClC,CAAC,EAAE,UAAU,CAAC;YACf,CAAC;YACF,mBAAC;QAAD,CAAC,AAND,CAAkC,KAAK,CAAC,YAAY,GAMnD;QANY,oBAAY,eAMxB,CAAA;IACF,CAAC,EARY,OAAO,GAAP,aAAO,KAAP,aAAO,QAQnB;AAAD,CAAC,EARM,KAAK,KAAL,KAAK,QAQX;ACRD,IAAO,KAAK,CA+FX;AA/FD,WAAO,KAAK;IAAC,IAAA,OAAO,CA+FnB;IA/FY,WAAA,OAAO;QACnB;YAAiC,+BAAU;YAQ1C,qBAAa,WAA2B,EAAE,kBAAkF;gBAA/G,4BAAA,EAAA,mBAA2B;gBAAE,mCAAA,EAAA,+BAAgE,UAAU,IAAO,CAAC;gBAA5H,YACC,iBAAO,SAgBP;gBArBO,oBAAc,GAAG,CAAC,CAAC;gBAEnB,mBAAa,GAAG,CAAC,CAAC;gBAIzB,IAAI,WAAW,GAAG,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,WAAW,CAAC,CAAC;gBAC3G,IAAI,QAAQ,GAAG,KAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;gBACvF,IAAI,OAAO,GAAG,KAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;gBAC9D,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACrC,IAAI,YAAY,GAAG,KAAI,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;gBACtG,YAAY,CAAC,KAAK,GAAG,qBAAqB,CAAC,YAAY,CAAC;gBACxD,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,0BAA0B,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC9F,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,0BAA0B,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC3F,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,0BAA0B,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACxF,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,qBAAqB,CAAC,YAAY,CAAC;gBAAA,CAAC;gBAC3D,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;gBACxB,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;gBACxB,KAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACpB,KAAI,CAAC,QAAQ,GAAG,IAAI,QAAA,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;;YAC9D,CAAC;YAED,6BAAO,GAAP;gBACC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,QAAQ,YAAY,KAAK,CAAC,QAAQ;oBAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;qBACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAC9C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAChC,IAAI,QAAQ,YAAY,KAAK,CAAC,QAAQ;4BACrC,QAAQ,CAAC,OAAO,EAAE,CAAC;qBACpB;iBACD;YACF,CAAC;YAED,2BAAK,GAAL;gBACC,IAAI,GAAG,GAA0B,IAAI,CAAC,QAAS,CAAC;gBAChD,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;gBACxB,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;gBACD,IAAI,CAAC,QAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;YACjE,CAAC;YAED,2BAAK,GAAL;gBACC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACxB,CAAC;YAED,8BAAQ,GAAR,UAAS,cAAsB,EAAE,aAAqB;gBACrD,IAAI,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACpF,IAAI,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACvF,OAAO,IAAI,CAAC;YACb,CAAC;YAED,2BAAK,GAAL,UAAO,QAA2B,EAAE,cAAsB,EAAE,OAA0B,EAAE,aAAqB,EAAE,CAAa;gBAAb,kBAAA,EAAA,KAAa;gBAC3H,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,WAAW,CAAC;gBAC/D,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACjC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAM,CAAC,GAAG,cAAc,GAAG;oBAC1B,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClC,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClC,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACtB,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClC,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClC,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClC,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClC,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClC,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;iBAClC;gBACD,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;gBAExB,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;gBAChC,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;oBAC9D,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;gBAC3C,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC;YACrC,CAAC;YAED,yBAAG,GAAH;gBACC,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;gBACxD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC1D,IAAI,GAAG,GAA0B,IAAI,CAAC,QAAS,CAAC;gBAChD,GAAG,CAAC,QAAQ,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;gBACpD,GAAG,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC,GAAG,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;gBACtD,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;gBACxB,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;YAC1C,CAAC;YA3Fc,uBAAW,GAAG,CAAC,CAAC;YA4FhC,kBAAC;SAAA,AA7FD,CAAiC,KAAK,CAAC,IAAI,GA6F1C;QA7FY,mBAAW,cA6FvB,CAAA;IACF,CAAC,EA/FY,OAAO,GAAP,aAAO,KAAP,aAAO,QA+FnB;AAAD,CAAC,EA/FM,KAAK,KAAL,KAAK,QA+FX;AC/FD,IAAO,KAAK,CA8RX;AA9RD,WAAO,KAAK;IAAC,IAAA,OAAO,CA8RnB;IA9RY,WAAA,OAAO;QAKnB;YAA0C,wCAAoB;YAC7D,8BAAa,UAAoD;gBAAjE,iBAgCC;gBA/BA,IAAI,YAAY,GAAG,kQASlB,CAAC;gBACF,IAAI,cAAc,GAAG,+LAOpB,CAAC;gBAEF,IAAI,UAAU,GAAmC;oBAChD,QAAQ,EAAE;wBACT,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;qBAC/B;oBACD,YAAY,EAAE,YAAY;oBAC1B,cAAc,EAAE,cAAc;oBAC9B,IAAI,EAAE,KAAK,CAAC,UAAU;oBACtB,WAAW,EAAE,IAAI;oBACjB,SAAS,EAAE,GAAG;iBACd,CAAC;gBACF,UAAU,CAAC,UAAU,CAAC,CAAC;gBACvB,QAAA,kBAAM,UAAU,CAAC,SAAC;;YACnB,CAAC;YAAA,CAAC;YACH,2BAAC;QAAD,CAAC,AAlCD,CAA0C,KAAK,CAAC,cAAc,GAkC7D;QAlCY,4BAAoB,uBAkChC,CAAA;QAED;YAAkC,gCAAc;YAqB/C,sBAAa,YAA0B,EAAE,kBAAkF;gBAAlF,mCAAA,EAAA,+BAAgE,UAAU,IAAO,CAAC;gBAA3H,YACC,iBAAO,SAKP;gBA1BD,aAAO,GAAY,IAAI,MAAA,OAAO,EAAE,CAAC;gBACjC,YAAM,GAAY,IAAI,MAAA,OAAO,EAAE,CAAC;gBAChC,eAAS,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;gBACxB,cAAQ,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;gBAGvB,aAAO,GAAW,GAAG,CAAC;gBAGd,aAAO,GAAG,IAAI,KAAK,EAAe,CAAC;gBACnC,oBAAc,GAAG,CAAC,CAAC;gBACnB,aAAO,GAAqB,IAAI,MAAA,gBAAgB,EAAE,CAAC;gBAKnD,cAAQ,GAAG,MAAA,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACrC,eAAS,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;gBAK/B,KAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;gBAC7C,KAAI,CAAC,QAAQ,GAAG,IAAI,MAAA,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAC3C,IAAI,QAAQ,GAAG,IAAI,MAAA,kBAAkB,CAAC,YAAY,CAAC,CAAC;gBACpD,KAAI,CAAC,KAAK,GAAG,IAAI,MAAA,cAAc,CAAC,QAAQ,CAAC,CAAC;;YAC3C,CAAC;YAED,6BAAM,GAAN,UAAO,SAAiB;gBACvB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAE7B,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACxB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACtB,QAAQ,CAAC,oBAAoB,EAAE,CAAC;gBAEhC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,CAAC;YAED,8BAAO,GAAP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC7C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC1B;YACF,CAAC;YAEO,mCAAY,GAApB;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC7C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;oBACxB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;iBAChC;gBACD,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACzB,CAAC;YAEO,gCAAS,GAAjB;gBACC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE;oBAC/C,IAAI,OAAK,GAAG,IAAI,QAAA,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;oBAC5D,IAAI,CAAC,GAAG,CAAC,OAAK,CAAC,CAAC;oBAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAK,CAAC,CAAC;iBACzB;gBACD,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;gBAChD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;gBACrB,OAAO,KAAK,CAAC;YACd,CAAC;YAEO,qCAAc,GAAtB;gBACC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAEpB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC3B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBACzB,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC/B,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAE7B,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,cAAc,GAAG,CAAC,CAAC;gBACvB,IAAI,aAAa,GAAG,CAAC,CAAC;gBAEtB,IAAI,SAAS,GAAc,IAAI,CAAC;gBAChC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAE3B,IAAI,QAAQ,GAAsB,IAAI,CAAC,QAAQ,CAAC;gBAChD,IAAI,SAAS,GAAkB,IAAI,CAAC;gBACpC,IAAI,GAAG,GAAsB,IAAI,CAAC;gBAClC,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACxC,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC7B,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACjD,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC;oBACrE,IAAI,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;wBAAE,SAAS;oBAChC,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;oBACtC,IAAI,eAAe,GAAU,IAAI,CAAC;oBAClC,IAAI,OAAO,GAAmB,IAAI,CAAC;oBACnC,IAAI,SAAS,GAAG,CAAC,CAAC;oBAClB,IAAI,UAAU,YAAY,MAAA,gBAAgB,EAAE;wBAC3C,IAAI,MAAM,GAAqB,UAAU,CAAC;wBAC1C,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC;wBAC/B,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;wBACzB,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC;wBAC3B,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;wBAChE,SAAS,GAAG,YAAY,CAAC,cAAc,CAAC;wBACxC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;wBACjB,OAAO,GAAwC,MAAM,CAAC,MAAM,CAAC,YAAa,CAAC,OAAO,CAAC;qBACnF;yBAAM,IAAI,UAAU,YAAY,MAAA,cAAc,EAAE;wBAChD,IAAI,IAAI,GAAmB,UAAU,CAAC;wBACtC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC;wBAC7B,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;wBACzB,SAAS,GAAG,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC;wBACzD,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE;4BAChC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;yBAChE;wBACD,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;wBACtF,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC3B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;wBACf,OAAO,GAAwC,IAAI,CAAC,MAAM,CAAC,YAAa,CAAC,OAAO,CAAC;qBACjF;yBAAM,IAAI,UAAU,YAAY,MAAA,kBAAkB,EAAE;wBACpD,IAAI,IAAI,GAAuB,CAAC,UAAU,CAAC,CAAC;wBAC5C,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;wBAC9B,SAAS;qBACT;;wBAAM,SAAS;oBAEhB,IAAI,OAAO,IAAI,IAAI,EAAE;wBACpB,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAClC,IAAI,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;wBACnC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;wBAC3B,IAAI,KAAK,GAAG,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;wBAC9D,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC3B,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,EACzD,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,EACjD,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,EACjD,KAAK,CAAC,CAAC;wBAET,IAAI,aAAa,SAAmB,CAAC;wBACrC,IAAI,mBAAmB,SAAQ,CAAC;wBAChC,IAAI,YAAY,SAAmB,CAAC;wBACpC,IAAI,kBAAkB,SAAQ,CAAC;wBAE/B,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE;4BACzB,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;4BACjG,IAAI,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;4BAC9C,IAAI,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;4BAChD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gCAC9B,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gCACrC,IAAI,KAAK,GAAG,eAAe,CAAC;gCAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,IAAC,EAAE,CAAC,IAAI,UAAU,EAAE;oCACnE,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oCACrB,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oCACzB,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oCAC9B,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oCACzB,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oCACxB,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oCACxB,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;oCAC7D,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;oCACrB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;oCACzB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;oCACxB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;iCACxB;6BACD;4BACD,aAAa,GAAG,eAAe,CAAC;4BAChC,mBAAmB,GAAG,eAAe,CAAC,MAAM,CAAC;4BAC7C,YAAY,GAAG,gBAAgB,CAAC;4BAChC,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,CAAC;yBAC7C;6BAAM;4BACN,IAAI,KAAK,GAAG,QAAQ,CAAC;4BACrB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gCAC9B,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gCACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;oCACrE,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oCACrB,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oCACzB,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oCAC9B,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oCACzB,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oCAClB,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oCACtB,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;oCAC7D,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;oCACrB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;oCACzB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oCAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;oCACxB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;iCACxB;6BACD;iCAAM;gCACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;oCACrE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oCACnB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oCACvB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oCACvB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oCACvB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oCACtB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;iCAC1B;6BACD;4BACD,aAAa,GAAG,QAAQ,CAAC;4BACzB,mBAAmB,GAAG,SAAS,CAAC;4BAChC,YAAY,GAAG,SAAS,CAAC;4BACzB,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC;yBACtC;wBAED,IAAI,mBAAmB,IAAI,CAAC,IAAI,kBAAkB,IAAI,CAAC;4BACtD,SAAS;wBAGV,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,EAAE;4BAC7D,KAAK,CAAC,GAAG,EAAE,CAAC;4BACZ,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;4BACzB,KAAK,CAAC,KAAK,EAAE,CAAC;yBACd;wBASD,IAAI,aAAa,GAAyB,KAAK,CAAC,QAAQ,CAAC;wBACzD,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE;4BAC7C,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;yBACnD;wBACD,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE;4BACxD,KAAK,CAAC,GAAG,EAAE,CAAC;4BACZ,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;4BACzB,KAAK,CAAC,KAAK,EAAE,CAAC;4BACd,aAAa,GAAyB,KAAK,CAAC,QAAQ,CAAC;4BACrD,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;yBACnD;wBACD,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;wBAEjC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;wBACrF,CAAC,IAAI,OAAO,CAAC;qBACb;oBAED,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;iBAC9B;gBACD,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,KAAK,CAAC,GAAG,EAAE,CAAC;YACb,CAAC;YArOM,2BAAc,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,wBAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAqOhC,mBAAC;SAAA,AApPD,CAAkC,KAAK,CAAC,QAAQ,GAoP/C;QApPY,oBAAY,eAoPxB,CAAA;IACF,CAAC,EA9RY,OAAO,GAAP,aAAO,KAAP,aAAO,QA8RnB;AAAD,CAAC,EA9RM,KAAK,KAAL,KAAK,QA8RX;AC9RD,IAAO,KAAK,CA0CX;AA1CD,WAAO,KAAK;IAAC,IAAA,OAAO,CA0CnB;IA1CY,WAAA,OAAO;QACnB;YAAoC,kCAAO;YAG1C,wBAAa,KAAuB;gBAApC,YACC,kBAAM,KAAK,CAAC,SAIZ;gBAHA,KAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxC,KAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC3B,KAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;;YACjC,CAAC;YAED,mCAAU,GAAV,UAAY,SAAwB,EAAE,SAAwB;gBAC7D,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,cAAc,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;gBAC1E,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,cAAc,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;YAC3E,CAAC;YAED,iCAAQ,GAAR,UAAU,KAAkB,EAAE,KAAkB;gBAC/C,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAChE,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACjE,CAAC;YAED,gCAAO,GAAP;gBACC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC;YAEM,qCAAsB,GAA7B,UAA8B,MAAqB;gBAClD,IAAI,MAAM,KAAK,MAAA,aAAa,CAAC,MAAM;oBAAE,OAAO,KAAK,CAAC,YAAY,CAAC;qBAC1D,IAAI,MAAM,KAAK,MAAA,aAAa,CAAC,MAAM;oBAAE,OAAO,KAAK,CAAC,wBAAwB,CAAC;qBAC3E,IAAI,MAAM,KAAK,MAAA,aAAa,CAAC,mBAAmB;oBAAE,OAAO,KAAK,CAAC,yBAAyB,CAAC;qBACzF,IAAI,MAAM,KAAK,MAAA,aAAa,CAAC,mBAAmB;oBAAE,OAAO,KAAK,CAAC,yBAAyB,CAAC;qBACzF,IAAI,MAAM,KAAK,MAAA,aAAa,CAAC,oBAAoB;oBAAE,OAAO,KAAK,CAAC,0BAA0B,CAAC;qBAC3F,IAAI,MAAM,KAAK,MAAA,aAAa,CAAC,OAAO;oBAAE,OAAO,KAAK,CAAC,aAAa,CAAC;;oBACjE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,MAAM,CAAC,CAAC;YAC3D,CAAC;YAEM,mCAAoB,GAA3B,UAA4B,IAAiB;gBAC5C,IAAI,IAAI,KAAK,MAAA,WAAW,CAAC,WAAW;oBAAE,OAAO,KAAK,CAAC,mBAAmB,CAAC;qBAClE,IAAI,IAAI,KAAK,MAAA,WAAW,CAAC,cAAc;oBAAE,OAAO,KAAK,CAAC,sBAAsB,CAAC;qBAC7E,IAAI,IAAI,KAAK,MAAA,WAAW,CAAC,MAAM;oBAAE,OAAO,KAAK,CAAC,cAAc,CAAC;;oBAC7D,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC;YACvD,CAAC;YACF,qBAAC;QAAD,CAAC,AAxCD,CAAoC,MAAA,OAAO,GAwC1C;QAxCY,sBAAc,iBAwC1B,CAAA;IACF,CAAC,EA1CY,OAAO,GAAP,aAAO,KAAP,aAAO,QA0CnB;AAAD,CAAC,EA1CM,KAAK,KAAL,KAAK,QA0CX;AC1CD,IAAO,KAAK,CAgwCV;AAhwCF,WAAO,KAAK;IA2GX;QAGC,eAAoB,MAAmB,EAAE,MAAmB,EAAE,WAAmB;YAA7D,WAAM,GAAN,MAAM,CAAa;YACtC,IAAI,CAAC,GAAG,GAAG,aAAa,CAAS,0FAGhC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC;YACjC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,oBAAI,GAAJ,UAAM,iBAA6B;YAAnC,iBA8BC;YA7BA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAGjD,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,MAAM,GAAG;gBACZ,IAAI,CAAC,SAAS;oBAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBAC9C,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,KAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC,CAAC;gBAClH,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,KAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC/G,IAAI,SAAS,GAAG,KAAI,CAAC,MAAM,CAAC,YAAY,GAAG,YAAY,GAAG,WAAW,CAAC;gBACtE,KAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC;YAC7C,CAAC,CAAA;YACD,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAI9B,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,IAAI,mBAAmB,GAAG,UAAC,KAAU;gBACpC,IAAI,WAAW,EAAE;oBAChB,WAAW,GAAG,KAAK,CAAC;oBACpB,OAAO;iBACP;gBACD,IAAI,CAAC,WAAW,CAAC,KAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;oBACzC,KAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;oBAClB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;oBACzD,iBAAiB,EAAE,CAAC;oBACpB,SAAS,GAAG,IAAI,CAAC;iBACjB;YACF,CAAC,CAAA;YACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QACvD,CAAC;QACF,YAAC;IAAD,CAAC,AA3CD,IA2CC;IAED;QAKC,gBAAoB,IAAY;YAAZ,SAAI,GAAJ,IAAI,CAAQ;YAHxB,YAAO,GAAG,KAAK,CAAC;QAGW,CAAC;QAEpC,uBAAM,GAAN;YAAA,iBAcC;YAbA,IAAI,CAAC,QAAM,CAAA,GAAG,aAAa,CAAS,uGAEO,IAAI,CAAC,IAAI,2KAKnD,CAAC,CAAC;YACH,IAAI,CAAC,QAAM,CAAA,CAAC,gBAAgB,CAAC,OAAO,EAAE;gBACrC,KAAI,CAAC,UAAU,CAAC,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;gBAC/B,IAAI,KAAI,CAAC,MAAM;oBAAE,KAAI,CAAC,MAAM,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAA;YACF,OAAO,IAAI,CAAC,QAAM,CAAA,CAAC;QACpB,CAAC;QAED,2BAAU,GAAV,UAAW,OAAgB;YAC1B,IAAI,OAAO;gBAAE,IAAI,CAAC,QAAM,CAAA,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;;gBAC5C,IAAI,CAAC,QAAM,CAAA,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACxB,CAAC;QAED,0BAAS,GAAT;YACC,OAAO,IAAI,CAAC,OAAO,CAAC;QACrB,CAAC;QACF,aAAC;IAAD,CAAC,AAhCD,IAgCC;IAED;QAMC,gBAAmB,KAAS,EAAS,cAAoB,EAAS,GAAW;YAA1D,sBAAA,EAAA,SAAS;YAAS,+BAAA,EAAA,oBAAoB;YAAS,oBAAA,EAAA,WAAW;YAA1D,UAAK,GAAL,KAAK,CAAI;YAAS,mBAAc,GAAd,cAAc,CAAM;YAAS,QAAG,GAAH,GAAG,CAAQ;QAAI,CAAC;QAElF,uBAAM,GAAN;YAAA,iBA4CC;YA3CA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAS,iDACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA,CAAC,CAAC,EAAE,6JAItD,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC;YAExE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEjB,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,KAAK,CAAC,WAAW,CAAC;gBACjB,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC;oBACV,QAAQ,GAAG,IAAI,CAAC;oBAChB,KAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACtC,CAAC;gBACD,EAAE,EAAE,UAAC,CAAC,EAAE,CAAC;oBACR,QAAQ,GAAG,KAAK,CAAC;oBACjB,IAAI,UAAU,GAAG,CAAC,GAAG,KAAI,CAAC,MAAM,CAAC,WAAW,CAAC;oBAC7C,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/D,KAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBAC3C,IAAI,KAAI,CAAC,MAAM;wBAAE,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBACzC,KAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACzC,CAAC;gBACD,KAAK,EAAE,UAAC,CAAC,EAAE,CAAC;oBACX,IAAI,QAAQ,EAAE;wBACb,IAAI,UAAU,GAAG,CAAC,GAAG,KAAI,CAAC,MAAM,CAAC,WAAW,CAAC;wBAC7C,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;wBAClD,UAAU,GAAG,KAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;wBACxD,IAAI,KAAI,CAAC,MAAM;4BAAE,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;qBACzC;gBACF,CAAC;gBACD,OAAO,EAAE,UAAC,CAAC,EAAE,CAAC;oBACb,IAAI,UAAU,GAAG,CAAC,GAAG,KAAI,CAAC,MAAM,CAAC,WAAW,CAAC;oBAC7C,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;oBAClD,UAAU,GAAG,KAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBACxD,IAAI,KAAI,CAAC,MAAM;wBAAE,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC1C,CAAC;aACD,CAAC,CAAC;YAGH,OAAO,IAAI,CAAC,MAAM,CAAC;QACpB,CAAC;QAED,yBAAQ,GAAR,UAAS,UAAkB;YAC1B,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;gBACnB,IAAI,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBAE3C,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE;oBACpD,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;iBACjC;qBAAM,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE;oBAC9E,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;iBACpD;gBACD,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;aAClD;YACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAEvD,OAAO,UAAU,CAAC;QACnB,CAAC;QACF,aAAC;IAAD,CAAC,AAtED,IAsEC;IAED;QAwCC,qBAAY,MAA4B,EAAU,MAAyB;YAAzB,WAAM,GAAN,MAAM,CAAmB;YAdnE,WAAM,GAAG,IAAI,CAAC;YACd,aAAQ,GAAG,CAAC,CAAC;YACb,UAAK,GAAG,CAAC,CAAC;YACV,SAAI,GAAG,IAAI,MAAA,UAAU,EAAE,CAAC;YACxB,uBAAkB,GAAkB,EAAE,CAAA;YACtC,oBAAe,GAAa,IAAI,CAAC;YACjC,qBAAgB,GAAa,IAAI,CAAC;YAClC,4BAAuB,GAAG,CAAC,CAAC;YAK5B,8BAAyB,GAAG,KAAK,CAAC;YA8pBlC,aAAQ,GAAG,CAAC,CAAC;YA3pBpB,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;;gBACzE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,oCAAc,GAAd,UAAe,MAAyB;YACvC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACxF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YACtH,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACnF,IAAI,CAAC,MAAM,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,eAAe;gBAAE,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC;YAChE,IAAI,CAAC,MAAM,CAAC,yBAAyB;gBAAE,MAAM,CAAC,yBAAyB,GAAG,MAAM,CAAC,eAAe,CAAC;YACjG,IAAI,OAAO,MAAM,CAAC,kBAAkB,KAAK,WAAW;gBAAE,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACvF,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,CAAC,OAAO,GAAG,UAAC,MAAM,IAAM,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,UAAC,MAAM,EAAE,GAAG,IAAM,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG;oBACjC,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,KAAK;oBACb,MAAM,EAAE,KAAK;oBACb,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,KAAK;iBACZ,CAAA;YACD,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,WAAW;gBAAE,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAC1E,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW;gBAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YAC5E,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,WAAW;gBAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;YAChF,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,WAAW;gBAAE,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAC1E,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,WAAW;gBAAE,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAC1E,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW;gBAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YAC5E,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,WAAW;gBAAE,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;YAC9E,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW;gBAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YAE5E,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS,EAAE;gBAC1C,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,MAAM,CAAC,SAAS,GAAG,0DAA0D,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;aACvO;YAED,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE;gBAChC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,GAAG,qDAAqD,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;aACzM;YAED,IAAI,CAAC,MAAM,CAAC,YAAY;gBAAE,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;YAEnD,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,WAAW;gBAC7C,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;YAE5B,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,WAAW;gBAC3C,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;YAE1B,OAAO,MAAM,CAAC;QACf,CAAC;QAED,+BAAS,GAAT,UAAU,KAAa;YACtB,IAAI,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACjD,QAAQ,CAAC,SAAS,GAAG,0DAAsD,KAAK,SAAM,CAAC;YACvF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,4BAAM,GAAN;YAAA,iBAoJC;YAnJA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,aAAa,CAAS,2iRAmB1C,CAAC,CAAA;YAEF,IAAI;gBAEH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;aAC1C;YAAC,OAAO,CAAC,EAAE;gBACX,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClB,OAAO,GAAG,CAAA;aACV;YAED,IAAI;gBAEH,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAsB,CAAC;gBAChF,IAAI,WAAW,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAEtF,IAAI,CAAC,aAAa,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACpF,IAAI,CAAC,aAAa,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACvE;YAAC,OAAO,CAAC,EAAE;gBACX,IAAI,CAAC,SAAS,CAAC,uHAAuH,CAAC,CAAC;gBACxI,OAAO,GAAG,CAAC;aACX;YAGD,IAAI,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/D,IAAI,MAAM,CAAC,WAAW,EAAE;gBACvB,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE;oBACpC,IAAI,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC5C;aACD;YACD,IAAI,MAAM,CAAC,OAAO;gBAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;;gBAC1D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,GAAG;gBACvD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAG3D,qBAAqB,CAAC,cAAM,OAAA,KAAI,CAAC,SAAS,EAAE,EAAhB,CAAgB,CAAC,CAAC;YAG9C,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,cAAc,GAAG,IAAI,MAAM,EAAE,CAAC;YACnC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE,+BAA+B,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,IAAI,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAI,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhE,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG;gBACzB,IAAI,KAAI,CAAC,MAAM;oBAAE,KAAI,CAAC,IAAI,EAAE,CAAA;;oBACvB,KAAI,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC,CAAA;YAED,WAAW,CAAC,OAAO,GAAG;gBACrB,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YACnC,CAAC,CAAA;YAED,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG;gBAC9B,KAAI,CAAC,oBAAoB,CAAC,KAAI,CAAC,eAAe,CAAC,CAAC;YACjD,CAAC,CAAA;YAED,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG;gBACzB,KAAI,CAAC,eAAe,CAAC,KAAI,CAAC,UAAU,CAAC,CAAC;YACvC,CAAC,CAAA;YAED,cAAc,CAAC,OAAO,GAAG;gBACxB,KAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;YACzC,CAAC,CAAA;YAED,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACvC,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YACzC,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5C,IAAI,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YAC9C,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,gBAAgB,CAAC,OAAO,GAAG;gBAC1B,IAAI,iBAAiB,GAAG;oBACvB,YAAY,GAAG,CAAC,YAAY,CAAC;oBAC7B,IAAI,CAAC,YAAY,EAAE;wBAClB,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC;wBAC/C,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC;wBACjD,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;wBAGtB,qBAAqB,CAAC;4BACrB,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC;4BACxC,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;wBAC3C,CAAC,CAAC,CAAC;qBACH;gBACF,CAAC,CAAC;gBAEF,IAAI,GAAG,GAAG,QAAe,CAAC;gBACzB,GAAW,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;gBACnD,GAAW,CAAC,wBAAwB,GAAG,iBAAiB,CAAC;gBAE1D,IAAG,GAAG,CAAC,iBAAiB,IAAI,GAAG,CAAC,uBAAuB,IAAI,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,mBAAmB,EAAE;oBAC/G,IAAI,GAAG,CAAC,cAAc;wBAAE,GAAG,CAAC,cAAc,EAAE,CAAC;yBACxC,IAAI,GAAG,CAAC,mBAAmB;wBAAE,GAAG,CAAC,mBAAmB,EAAE,CAAC;yBACvD,IAAI,GAAG,CAAC,oBAAoB;wBAAE,GAAG,CAAC,oBAAoB,EAAE,CAAA;yBACxD,IAAI,GAAG,CAAC,gBAAgB;wBAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC;iBACtD;qBAAM;oBACN,QAAQ,GAAG,KAAI,CAAC,MAAM,CAAC,WAAW,CAAC;oBACnC,SAAS,GAAG,KAAI,CAAC,MAAM,CAAC,YAAY,CAAC;oBACrC,aAAa,GAAG,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;oBACxC,cAAc,GAAG,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC1C,IAAI,MAAM,GAAG,GAAU,CAAC;oBACxB,IAAI,MAAM,CAAC,iBAAiB;wBAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC;yBACpD,IAAI,MAAM,CAAC,uBAAuB;wBAAE,MAAM,CAAC,uBAAuB,EAAE,CAAC;yBACrE,IAAI,MAAM,CAAC,oBAAoB;wBAAE,MAAM,CAAC,oBAAoB,EAAE,CAAC;yBAC/D,IAAI,MAAM,CAAC,mBAAmB;wBAAE,MAAM,CAAC,mBAAmB,EAAE,CAAC;iBAClE;YACF,CAAC,CAAC;YAEF,UAAU,CAAC,OAAO,GAAG;gBACpB,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC5C,CAAC,CAAC;YAGF,MAAM,CAAC,QAAQ,GAAG;gBACjB,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC,CAAA;YAED,OAAO,GAAG,CAAC;QACZ,CAAC;QAGD,qCAAe,GAAf,UAAiB,WAAwB;YAAzC,iBAmCC;YAlCA,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;YAC/C,IAAI,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,OAAO,EAAE;gBAC9G,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAA;gBACvE,OAAO;aACP;YACD,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAU,gjBAa5D,CAAC,CAAC;YACH,IAAI,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,GAAG,UAAC,UAAU;gBAC1B,KAAI,CAAC,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC;YAC7B,CAAC,CAAA;YACD,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;YACpE,KAAK,CAAC,IAAI,CAAC;gBACV,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAA;gBACvE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBACnB,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,0CAAoB,GAApB,UAAsB,gBAA6B;YAAnD,iBAgDC;YA/CA,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;YAC/C,IAAI,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,YAAY,EAAE;gBACnH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAA;gBACjF,OAAO;aACP;YACD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;gBAAE,OAAO;YAExE,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAU,yIAI5D,CAAC,CAAC;YAEH,IAAI,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,SAAS;gBAE/C,IAAI,KAAI,CAAC,MAAM,CAAC,UAAU,IAAI,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBACjF,OAAO;iBACP;gBAED,IAAI,GAAG,GAAG,aAAa,CAAS,6NAO/B,CAAC,CAAC;gBACH,IAAI,SAAS,CAAC,IAAI,IAAI,KAAI,CAAC,MAAM,CAAC,SAAS;oBAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC3E,aAAa,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;gBACpE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACtB,GAAG,CAAC,OAAO,GAAG;oBACb,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;oBACvC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC9B,KAAI,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;oBACvC,KAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;oBAClB,KAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACnC,CAAC,CAAA;YACF,CAAC,CAAC,CAAC;YACH,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;YAC9E,KAAK,CAAC,IAAI,CAAC;gBACV,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAA;gBACjF,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBACnB,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,qCAAe,GAAf,UAAiB,UAAuB;YAAxC,iBAiDC;YAhDA,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;YAC/C,IAAI,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,OAAO,EAAE;gBAC9G,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAA;gBACtE,OAAO;aACP;YACD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;gBAAE,OAAO;YAExE,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAU,oIAI5D,CAAC,CAAC;YAEH,IAAI,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;gBAErC,IAAI,KAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBAClE,OAAO;iBACP;gBAED,IAAI,GAAG,GAAG,aAAa,CAAS,6NAO/B,CAAC,CAAC;gBACH,IAAI,IAAI,CAAC,IAAI,IAAI,KAAI,CAAC,MAAM,CAAC,IAAI;oBAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACjE,aAAa,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC/D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACtB,GAAG,CAAC,OAAO,GAAG;oBACb,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;oBACvC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC9B,KAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBAC7B,KAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC9C,KAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;gBACrC,CAAC,CAAA;YACF,CAAC,CAAC,CAAC;YAEH,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;YACnE,KAAK,CAAC,IAAI,CAAC;gBACV,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAA;gBACtE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBACnB,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,wCAAkB,GAAlB,UAAoB,cAA2B;YAA/C,iBA4CC;YA3CA,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;YAC/C,IAAI,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,OAAO,EAAE;gBAC9G,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAA;gBAC7E,OAAO;aACP;YACD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;gBAAE,OAAO;YAExE,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAU,8IAK5D,CAAC,CAAC;YAEH,IAAI,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,QAAQ,GAAG,UAAC,KAAa,EAAE,IAAY;gBAC1C,IAAI,GAAG,GAAG,aAAa,CAAS,4CAA0C,CAAC,CAAC;gBAC5E,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,UAAU,CAAE,KAAI,CAAC,MAAM,CAAC,KAAa,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/C,CAAC,CAAC,MAAM,GAAG,UAAC,KAAK;oBACf,KAAI,CAAC,MAAM,CAAC,KAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBAC1C,CAAC,CAAA;gBACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC,CAAC;YAEF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE3B,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAA;YAC1E,KAAK,CAAC,IAAI,CAAC;gBACV,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAA;gBAC7E,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBACnB,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,+BAAS,GAAT,UAAW,gBAAuB;YAAlC,iBAyHC;YAzHU,iCAAA,EAAA,uBAAuB;YACjC,IAAI,gBAAgB,IAAI,CAAC,IAAI,CAAC,yBAAyB;gBAAE,qBAAqB,CAAC,cAAM,OAAA,KAAI,CAAC,SAAS,EAAE,EAAhB,CAAgB,CAAC,CAAC;YACvG,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YACvB,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;YAGhB,IAAI,GAAG,GAAG,QAAe,CAAC;YAC1B,IAAI,YAAY,GAAG,GAAG,CAAC,iBAAiB,IAAI,GAAG,CAAC,uBAAuB,IAAI,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,mBAAmB,CAAC;YAC/H,IAAI,EAAE,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YACvH,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACtC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;YAG9B,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAG/D,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;YAGxF,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAA,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAGnD,IAAI,IAAI,CAAC,MAAM,EAAE;gBAEhB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;oBAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACnB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAEzC,IAAI,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC;oBAC7E,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;oBACvB,OAAO,IAAI,CAAC,QAAQ,IAAI,iBAAiB,IAAI,iBAAiB,IAAI,CAAC,EAAE;wBACpE,IAAI,CAAC,QAAQ,IAAI,iBAAiB,CAAC;qBACnC;oBACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC;oBACxE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,CAAC;oBAEhE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAClC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACzC;gBAED,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;gBAErC,IAAI,QAAQ,GAAG;oBACd,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,GAAI,IAAI,CAAC,eAAe,CAAC,OAAkB;oBACpE,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,GAAI,IAAI,CAAC,eAAe,CAAC,SAAoB;oBACtE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,GAAI,IAAI,CAAC,eAAe,CAAC,OAAkB,GAAI,IAAI,CAAC,eAAe,CAAC,QAAmB;oBACxH,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,GAAI,IAAI,CAAC,eAAe,CAAC,SAAoB,GAAI,IAAI,CAAC,eAAe,CAAC,MAAiB;iBAC1H,CAAA;gBAED,IAAI,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;gBACxH,IAAI,IAAI,CAAC,gBAAgB,IAAI,eAAe,GAAG,CAAC,EAAE;oBACjD,IAAI,WAAW,GAAG;wBACjB,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAI,IAAI,CAAC,gBAAgB,CAAC,OAAkB;wBACtE,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAI,IAAI,CAAC,gBAAgB,CAAC,SAAoB;wBACxE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAI,IAAI,CAAC,gBAAgB,CAAC,OAAkB,GAAI,IAAI,CAAC,gBAAgB,CAAC,QAAmB;wBAC3H,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAI,IAAI,CAAC,gBAAgB,CAAC,SAAoB,GAAI,IAAI,CAAC,gBAAgB,CAAC,MAAiB;qBAC7H,CAAA;oBAED,QAAQ,GAAG;wBACV,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,eAAe;wBACjE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,eAAe;wBACjE,KAAK,EAAE,WAAW,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,eAAe;wBACjF,MAAM,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,eAAe;qBACrF,CAAA;iBACD;gBAED,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAEtG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC;gBACjE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;gBACvE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBAExE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAG3B,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;oBACnE,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;oBACrE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE;wBACzN,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;qBACjG;yBAAM;wBACN,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;qBAC7K;iBACD;gBAGD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAC/E,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC7E,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBACtF,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACnF,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBAChF,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC7E,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC3F,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBACtF,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAGpF,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC5C,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;gBACvC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC7B,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC7C,IAAI,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,IAAI,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC;oBAC/G,IAAI,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC;oBAC/G,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;oBACpG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;iBACrG;gBACD,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAGhB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE;oBACrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAA,KAAK,CAAC,KAAK,CAAC,CAAC;oBACrJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAA,KAAK,CAAC,GAAG,CAAC,CAAC;iBACnG;gBAED,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;gBAEzB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;aACnC;QACF,CAAC;QAED,2BAAK,GAAL,UAAM,WAAmB,EAAE,YAAoB,EAAE,WAAmB,EAAE,YAAoB;YACzF,IAAI,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;YAC7C,IAAI,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;YAC7C,IAAI,KAAK,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,GAAG,YAAY,CAAC;YAChG,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,CAAC,GAAG,YAAY,GAAG,KAAK,CAAC;YAC9B,OAAO,IAAI,CAAC;QACb,CAAC;QAED,kCAAY,GAAZ;YAAA,iBAyIC;YAxIA,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;YAExB,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE;gBAClC,IAAI,CAAC,SAAS,CAAC,4CAA4C,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzH,OAAO;aACP;YAED,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,YAA0B,CAAC;YAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;gBACxB,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,IAAI,GAAG,IAAI,MAAA,YAAY,CAAC,IAAI,MAAA,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9D,IAAI;oBACH,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;iBAC/C;gBAAC,OAAO,CAAC,EAAE;oBACX,IAAI,CAAC,SAAS,CAAC,+CAA+C,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC/E,OAAO;iBACP;aACD;iBAAM;gBACN,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5D,IAAI,MAAM,GAAG,IAAI,MAAA,cAAc,CAAC,IAAI,MAAA,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClE,IAAI;oBACH,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;iBACnD;gBAAC,OAAO,CAAC,EAAE;oBACX,IAAI,CAAC,SAAS,CAAC,+CAA+C,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC/E,OAAO;iBACP;aACD;YACD,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAA,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC3C,IAAI,SAAS,GAAG,IAAI,MAAA,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACrD,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,MAAA,cAAc,CAAC,SAAS,CAAC,CAAC;YAGpD,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;gBAC7B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAA,IAAI;oBACpC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;wBACjC,KAAI,CAAC,SAAS,CAAC,0BAAwB,IAAI,kCAA+B,CAAC,CAAC;qBAC5E;gBACF,CAAC,CAAC,CAAA;aACF;YAGD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBACtB,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;iBAC9C;aACD;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;oBAC7B,IAAI,CAAC,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;wBACvC,KAAI,CAAC,SAAS,CAAC,kBAAgB,IAAI,0DAAuD,CAAC,CAAC;wBAC5F,OAAO;qBACP;gBACF,CAAC,CAAC,CAAC;aACH;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;oBACnD,IAAI,CAAC,SAAS,CAAC,kBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,kCAA+B,CAAC,CAAC;oBAChF,OAAO;iBACP;gBACD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;aACpC;YAKD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACzB,IAAI,CAAC,MAAM,CAAC,QAAgB,GAAG;oBAC/B,UAAU,EAAE,EAAE;oBACd,WAAW,EAAE,KAAK;oBAClB,cAAc,EAAE,GAAG;iBACnB,CAAA;aACD;YACD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW;gBAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC;YACtG,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,KAAK,WAAW;gBAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,GAAG,GAAG,CAAC;YAC1G,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE;gBACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC;aACrC;iBAAM;gBACN,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAC,SAAiB;oBACrF,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;wBAC3C,KAAI,CAAC,SAAS,CAAC,uBAAqB,SAAS,qEAAkE,CAAC,CAAC;wBACjH,OAAO;qBACP;gBACF,CAAC,CAAC,CAAC;aACH;YAGD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,SAAS;oBACvC,IAAI,CAAC,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;wBACjD,KAAI,CAAC,SAAS,CAAC,uBAAqB,SAAS,+DAA4D,CAAC,CAAC;wBAC3G,OAAO;qBACP;gBACF,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;oBAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;iBAClD;aACD;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;gBAC3B,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;iBACxD;aACD;YAED,IAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;gBACzB,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;oBACvD,IAAI,CAAC,SAAS,CAAC,uBAAqB,IAAI,CAAC,MAAM,CAAC,SAAS,kCAA+B,CAAC,CAAC;oBAC1F,OAAO;iBACP;gBACD,IAAI,CAAC,IAAI,EAAE,CAAA;gBACX,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,UAAC,UAAU;oBACvC,KAAI,CAAC,KAAK,EAAE,CAAC;oBACb,IAAI,iBAAiB,GAAG,KAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC;oBAC7E,IAAI,IAAI,GAAG,iBAAiB,GAAG,UAAU,CAAC;oBAC1C,KAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,GAAG,KAAI,CAAC,QAAQ,CAAC,CAAC;oBACjD,KAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAI,CAAC,QAAQ,CAAC,CAAC;oBACzC,KAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;oBACrC,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACtB,CAAC,CAAA;aACD;YAGD,IAAI,CAAC,UAAU,EAAE,CAAC;YAGlB,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;gBAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACjJ,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;gBAAE,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YAErK,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,CAAC;QAGD,gCAAU,GAAV;YAAA,iBA6GC;YA5GA,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAC5C,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,KAAK,CAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1F,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;YAClC,KAAK,CAAC,WAAW,CAAC;gBACjB,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC;oBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC9C,IAAI,CAAC,IAAI;4BAAE,SAAS;wBACpB,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;wBAChF,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE;4BAC1F,MAAM,GAAG,IAAI,CAAC;yBACd;qBACD;gBACF,CAAC;gBACD,EAAE,EAAE,UAAC,CAAC,EAAE,CAAC;oBACR,IAAI,MAAM,EAAE;wBACX,MAAM,GAAG,IAAI,CAAC;qBACd;yBAAM;wBACN,IAAI,CAAC,KAAI,CAAC,MAAM,CAAC,YAAY;4BAAE,OAAO;wBACtC,IAAI,KAAI,CAAC,MAAM;4BACd,KAAI,CAAC,IAAI,EAAE,CAAA;;4BAEX,KAAI,CAAC,KAAK,EAAE,CAAC;qBACd;gBACF,CAAC;gBACD,OAAO,EAAE,UAAC,CAAC,EAAE,CAAC;oBACb,IAAI,MAAM,IAAI,IAAI,EAAE;wBACnB,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;wBAChF,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE;4BAC3B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;4BACpF,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;4BACnB,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;yBACnB;6BAAM;4BACN,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;4BACjC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;yBACjC;qBACD;gBACF,CAAC;gBACD,KAAK,EAAE,UAAC,CAAC,EAAE,CAAC;oBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC9C,IAAI,CAAC,IAAI;4BAAE,SAAS;wBACpB,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;wBAChF,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE;4BAC1F,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;yBACxB;6BAAM;4BACN,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;yBACxB;qBACD;gBACF,CAAC;aACD,CAAC,CAAC;YAQH,IAAI,iBAAiB,GAAG,IAAI,CAAC;YAC7B,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAC,EAAW;gBAClD,IAAI,EAAE,YAAY,UAAU,EAAE;oBAC7B,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;iBACpC;YACF,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAC,EAAW;gBAClD,IAAI,EAAE,YAAY,UAAU,EAAE;oBAC7B,IAAI,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC;oBAChC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;wBACvB,IAAI,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;wBACvB,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;qBAC1C;iBACD;YACF,CAAC,CAAC,CAAC;YAEH,IAAI,WAAW,GAAG,UAAC,MAAc,EAAE,MAAc;gBAChD,IAAI,CAAC,KAAI,CAAC,MAAM,CAAC,YAAY;oBAAE,OAAO;gBAEtC,IAAI,KAAK,GAAG,aAAa,CAAC,KAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;gBAC1D,iBAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,CAAC;gBACzF,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC;gBAC/E,YAAY,CAAC,KAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5B,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,eAAe,IAAI,CAAC,KAAI,CAAC,MAAM,CAAC;gBACvF,IAAI,IAAI,EAAE;oBACT,KAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;iBAClE;qBAAM;oBACN,KAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;iBACrE;gBACD,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAI,CAAC,MAAM,EAAE;oBAC5D,IAAI,MAAM,GAAG;wBACZ,IAAI,CAAC,KAAI,CAAC,MAAM;4BAAE,KAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;oBACrF,CAAC,CAAC;oBACF,KAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;iBACzC;YACF,CAAC,CAAA;YAED,IAAI,OAAO,GAAG,UAAC,MAAc,EAAE,MAAc,EAAE,IAA0B;gBACvE,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC3B,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;YACjE,CAAC,CAAA;QACF,CAAC;QAEO,0BAAI,GAAZ;YAAA,iBAcC;YAbA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,MAAM,GAAG;gBACZ,IAAI,CAAC,KAAI,CAAC,MAAM;oBAAE,KAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YACrF,CAAC,CAAC;YACF,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;YAClE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAEhE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;gBAC1B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;iBACzC;aACD;QACF,CAAC;QAEO,2BAAK,GAAb;YACC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;YACrE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE5B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;YACnE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAChE,CAAC;QAEM,kCAAY,GAAnB,UAAqB,SAAiB,EAAE,IAAoB;YAApB,qBAAA,EAAA,WAAoB;YAE3D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;YAC7C,IAAI,YAAY,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;YAG9D,IAAI,QAAQ,GAAa;gBACxB,CAAC,EAAE,YAAY,CAAC,CAAC;gBACjB,CAAC,EAAE,YAAY,CAAC,CAAC;gBACjB,KAAK,EAAE,YAAY,CAAC,KAAK;gBACzB,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,KAAK;aAChB,CAAA;YAGD,IAAI,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC1C,IAAI,OAAO,cAAc,CAAC,CAAC,KAAK,WAAW,IAAI,OAAO,cAAc,CAAC,CAAC,KAAK,WAAW,IAAI,OAAO,cAAc,CAAC,KAAK,KAAK,WAAW,IAAI,OAAO,cAAc,CAAC,MAAM,KAAK,WAAW,EAAE;gBACtL,QAAQ,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;gBAC9B,QAAQ,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;gBAC9B,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;gBACtC,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;aACxC;YACD,IAAI,OAAO,cAAc,CAAC,OAAO,KAAK,WAAW;gBAAE,QAAQ,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;YAC7F,IAAI,OAAO,cAAc,CAAC,QAAQ,KAAK,WAAW;gBAAE,QAAQ,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;YAChG,IAAI,OAAO,cAAc,CAAC,MAAM,KAAK,WAAW;gBAAE,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;YAC1F,IAAI,OAAO,cAAc,CAAC,SAAS,KAAK,WAAW;gBAAE,QAAQ,CAAC,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC;YAGnG,IAAI,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,gBAAgB,EAAE;gBACrB,IAAI,OAAO,gBAAgB,CAAC,CAAC,KAAK,WAAW,IAAI,OAAO,gBAAgB,CAAC,CAAC,KAAK,WAAW,IAAI,OAAO,gBAAgB,CAAC,KAAK,KAAK,WAAW,IAAI,OAAO,gBAAgB,CAAC,MAAM,KAAK,WAAW,EAAE;oBAC9L,QAAQ,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;oBAChC,QAAQ,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;oBAChC,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC;oBACxC,QAAQ,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;iBAC1C;gBACD,IAAI,OAAO,gBAAgB,CAAC,OAAO,KAAK,WAAW;oBAAE,QAAQ,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;gBACjG,IAAI,OAAO,gBAAgB,CAAC,QAAQ,KAAK,WAAW;oBAAE,QAAQ,CAAC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;gBACpG,IAAI,OAAO,gBAAgB,CAAC,MAAM,KAAK,WAAW;oBAAE,QAAQ,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;gBAC9F,IAAI,OAAO,gBAAgB,CAAC,SAAS,KAAK,WAAW;oBAAE,QAAQ,CAAC,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC;aACvG;YAGD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChF,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAClF,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrF,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAG/E,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;YAChC,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAEjD,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;QAEO,2CAAqB,GAA7B,UAA8B,IAAY,EAAE,oBAAqC;YAChF,IAAI,OAAO,oBAAoB,KAAK,QAAQ,EAAE;gBAC7C,OAAO,IAAI,GAAG,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;aAChG;iBAAM;gBACN,OAAO,oBAAoB,CAAC;aAC5B;QACF,CAAC;QAEO,gDAA0B,GAAlC,UAAoC,aAAqB;YACxD,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;YAChE,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAA;YAC9B,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAEzD,IAAI,KAAK,GAAG,GAAG,CAAC;YAChB,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,IAAI,GAAG,SAAS,CAAC;YACrB,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC;YACtB,IAAI,IAAI,GAAG,SAAS,CAAC;YACrB,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC;YACtB,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC/B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACrC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;gBACrC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAEtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;oBAC7E,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBAChC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBACzC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBAChC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;iBACzC;qBAAM;oBACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;iBACjE;aACD;YAED,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;YAChB,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;YAErB,OAAO;gBACN,CAAC,EAAE,MAAM,CAAC,CAAC;gBACX,CAAC,EAAE,MAAM,CAAC,CAAC;gBACX,KAAK,EAAE,IAAI,CAAC,CAAC;gBACb,MAAM,EAAE,IAAI,CAAC,CAAC;aACd,CAAC;QACH,CAAC;QAEM,mCAAa,GAApB;YACC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;QACvC,CAAC;QA97BM,6BAAiB,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACvD,6BAAiB,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,iCAAqB,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1D,iCAAqB,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QA47B9D,kBAAC;KAAA,AAh8BD,IAg8BC;IAh8BY,iBAAW,cAg8BvB,CAAA;IAED,SAAS,WAAW,CAAC,GAAgB,EAAE,MAAmB;QACzD,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,aAAa,GAAG,UAAC,GAAgB,EAAE,MAAmB;YACzD,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAgB,CAAC;gBAC3C,IAAI,KAAK,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAC;gBAClC,IAAI,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;oBAAE,OAAO,IAAI,CAAC;aAC9C;YACD,OAAO,KAAK,CAAC;QACd,CAAC,CAAC;QACF,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,SAAS,UAAU,CAAC,GAAgB,EAAE,EAAU;QAC/C,IAAI,KAAK,GAAG,IAAI,KAAK,EAAe,CAAA;QACpC,IAAI,aAAa,GAAG,UAAC,GAAgB,EAAE,EAAU,EAAE,KAAoB;YACtE,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAgB,CAAC;gBAC3C,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE;oBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvC,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;aAChC;QACF,CAAC,CAAC;QACF,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,SAAS,aAAa,CAAC,GAAgB,EAAE,SAAiB;QACzD,IAAI,KAAK,GAAG,IAAI,KAAK,EAAe,CAAA;QACpC,IAAI,aAAa,GAAG,UAAC,GAAgB,EAAE,SAAiB,EAAE,KAAoB;YAC7E,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAgB,CAAC;gBAC3C,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3D,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;aACvC;QACF,CAAC,CAAC;QACF,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACd,CAAC;IAED,SAAS,aAAa,CAAC,IAAY;QAClC,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;QACrB,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAgB,CAAC;IACvC,CAAC;IAED,SAAS,WAAW,CAAC,QAAwB,EAAE,KAAa;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACpC;IACF,CAAC;IAED,SAAS,UAAU,CAAC,GAAW;QAC9B,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,OAAO,GAAG;aACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;AACF,CAAC,EAhwCK,KAAK,KAAL,KAAK,QAgwCV;AC9vCF,IAAO,KAAK,CAuFX;AAvFD,WAAO,KAAK;IACX;QA8BC,2BAAY,MAAmB;YAdvB,WAAM,GAChB,+EAQO,CAAC,IAAI,EAAE,CAAA;YACJ,YAAO,GAAW,SAAS,CAAC;YAgD5B,YAAO,GAAG,CAAC,CAAC;YA3CnB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QAEO,kCAAM,GAAd,UAAgB,MAAmB;YAAnC,iBA2BC;YA1BA,IAAI,GAAG,GAAW,6MAKjB,CAAC;YACF,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;YACvB,IAAI,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,sBAAsB,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAsB,CAAC;YAElG,qBAAqB,CAAC;gBACrB,KAAI,CAAC,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE;oBACnC,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE,CAAC;oBACV,UAAU,EAAE,CAAC;oBACb,cAAc,EAAE,IAAI;oBACpB,cAAc,EAAE,QAAQ;oBACxB,IAAI,EAAE,WAAW;oBACjB,KAAK,EAAE,SAAS;iBAChB,CAAC,CAAC;gBACH,KAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;oBACtB,KAAI,CAAC,WAAW,EAAE,CAAC;gBACpB,CAAC,CAAC,CAAC;gBAEH,KAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAA;QACH,CAAC;QAED,4CAAgB,GAAhB,UAAiB,MAAc,EAAE,OAAe;YAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,WAAW,EAAE,CAAA;QACnB,CAAC;QAED,mCAAO,GAAP,UAAQ,IAAY;YACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACpB,CAAC;QAGD,uCAAW,GAAX;YAAA,iBASC;YARA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,UAAU,CAAE;gBAC1B,IAAI,IAAI,GAAG,KAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACzC,IAAI,GAAG,KAAI,CAAC,MAAM,GAAG,IAAI,GAAG,KAAI,CAAC,OAAO,CAAC;gBACzC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,KAAI,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;gBACrB,KAAI,CAAC,MAAM,CAAC,GAAG,GAAG,wBAAwB,GAAG,IAAI,CAAC;YACnD,CAAC,EAAE,GAAG,CAAC,CAAC;QACT,CAAC;QAnFc,8BAAY,GAC3B,uiBAYC,CAAC,IAAI,EAAE,CAAC;QAuEV,wBAAC;KAAA,AArFD,IAqFC;IArFY,uBAAiB,oBAqF7B,CAAA;AACF,CAAC,EAvFM,KAAK,KAAL,KAAK,QAuFX"} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-canvas.d.ts b/apps/module-ts/src/spine-ts/build/spine-canvas.d.ts new file mode 100755 index 0000000..c6966ad --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-canvas.d.ts @@ -0,0 +1,1369 @@ +declare module spine { + class Animation { + name: string; + timelines: Array; + timelineIds: Array; + duration: number; + constructor(name: string, timelines: Array, duration: number); + hasTimeline(id: number): boolean; + apply(skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + static binarySearch(values: ArrayLike, target: number, step?: number): number; + static linearSearch(values: ArrayLike, target: number, step: number): number; + } + interface Timeline { + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + getPropertyId(): number; + } + enum MixBlend { + setup = 0, + first = 1, + replace = 2, + add = 3 + } + enum MixDirection { + mixIn = 0, + mixOut = 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, degrees: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, x: number, y: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ScaleTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ShearTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class AttachmentTimeline implements Timeline { + slotIndex: number; + frames: ArrayLike; + attachmentNames: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, attachmentName: string): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string): void; + } + class DeformTimeline extends CurveTimeline { + slotIndex: number; + attachment: VertexAttachment; + frames: ArrayLike; + frameVertices: Array>; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, vertices: ArrayLike): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class EventTimeline implements Timeline { + frames: ArrayLike; + events: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, event: Event): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class DrawOrderTimeline implements Timeline { + frames: ArrayLike; + drawOrders: Array>; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, drawOrder: Array): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class IkConstraintTimeline extends CurveTimeline { + static ENTRIES: number; + static PREV_TIME: number; + static PREV_MIX: number; + static PREV_SOFTNESS: number; + static PREV_BEND_DIRECTION: number; + static PREV_COMPRESS: number; + static PREV_STRETCH: number; + static MIX: number; + static SOFTNESS: number; + static BEND_DIRECTION: number; + static COMPRESS: number; + static STRETCH: number; + ikConstraintIndex: number; + frames: ArrayLike; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, mix: number, softness: number, bendDirection: number, compress: boolean, stretch: boolean): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, value: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class PathConstraintSpacingTimeline extends PathConstraintPositionTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, rotateMix: number, translateMix: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } +} +declare module spine { + class AnimationState { + static emptyAnimation: Animation; + static SUBSEQUENT: number; + static FIRST: number; + static HOLD_SUBSEQUENT: number; + static HOLD_FIRST: number; + static HOLD_MIX: number; + static SETUP: number; + static CURRENT: number; + data: AnimationStateData; + tracks: TrackEntry[]; + timeScale: number; + unkeyedState: number; + events: Event[]; + listeners: AnimationStateListener[]; + queue: EventQueue; + propertyIDs: IntSet; + animationsChanged: boolean; + trackEntryPool: Pool; + constructor(data: AnimationStateData); + update(delta: number): void; + updateMixingFrom(to: TrackEntry, delta: number): boolean; + apply(skeleton: Skeleton): boolean; + applyMixingFrom(to: TrackEntry, skeleton: Skeleton, blend: MixBlend): number; + applyAttachmentTimeline(timeline: AttachmentTimeline, skeleton: Skeleton, time: number, blend: MixBlend, attachments: boolean): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string, attachments: boolean): void; + applyRotateTimeline(timeline: Timeline, skeleton: Skeleton, time: number, alpha: number, blend: MixBlend, timelinesRotation: Array, 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; + computeHold(entry: TrackEntry): void; + getCurrent(trackIndex: number): TrackEntry; + addListener(listener: AnimationStateListener): void; + removeListener(listener: AnimationStateListener): void; + clearListeners(): void; + clearListenerNotifications(): void; + } + class TrackEntry { + animation: Animation; + next: TrackEntry; + mixingFrom: TrackEntry; + mixingTo: TrackEntry; + listener: AnimationStateListener; + trackIndex: number; + loop: boolean; + holdPrevious: 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; + mixBlend: MixBlend; + timelineMode: number[]; + timelineHoldMix: TrackEntry[]; + timelinesRotation: number[]; + reset(): void; + getAnimationTime(): number; + setAnimationLast(animationLast: number): void; + isComplete(): boolean; + resetRotationDirections(): void; + } + class EventQueue { + objects: Array; + 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 AnimationStateListener { + 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 AnimationStateAdapter implements AnimationStateListener { + 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; + 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; + private rawDataUris; + constructor(textureLoader: (image: HTMLImageElement) => any, pathPrefix?: string); + private downloadText; + private downloadBinary; + setRawDataURI(path: string, data: string): void; + loadBinary(path: string, success?: (path: string, binary: Uint8Array) => void, error?: (path: string, error: string) => void): void; + 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; + loadTextureAtlas(path: string, success?: (path: string, atlas: TextureAtlas) => 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; + } +} +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; + } +} +declare module spine { + 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; + c: number; + d: number; + worldY: number; + worldX: number; + sorted: boolean; + active: boolean; + constructor(data: BoneData, skeleton: Skeleton, parent: Bone); + isActive(): boolean; + 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; + skinRequired: boolean; + color: Color; + constructor(index: number, name: string, parent: BoneData); + } + enum TransformMode { + Normal = 0, + OnlyTranslation = 1, + NoRotationOrReflection = 2, + NoScale = 3, + NoScaleOrReflection = 4 + } +} +declare module spine { + abstract class ConstraintData { + name: string; + order: number; + skinRequired: boolean; + constructor(name: string, order: number, skinRequired: boolean); + } +} +declare module spine { + class Event { + data: EventData; + intValue: number; + floatValue: number; + stringValue: string; + time: number; + volume: number; + balance: number; + constructor(time: number, data: EventData); + } +} +declare module spine { + class EventData { + name: string; + intValue: number; + floatValue: number; + stringValue: string; + audioPath: string; + volume: number; + balance: number; + constructor(name: string); + } +} +declare module spine { + class IkConstraint implements Updatable { + data: IkConstraintData; + bones: Array; + target: Bone; + bendDirection: number; + compress: boolean; + stretch: boolean; + mix: number; + softness: number; + active: boolean; + constructor(data: IkConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + apply1(bone: Bone, targetX: number, targetY: number, compress: boolean, stretch: boolean, uniform: boolean, alpha: number): void; + apply2(parent: Bone, child: Bone, targetX: number, targetY: number, bendDir: number, stretch: boolean, softness: number, alpha: number): void; + } +} +declare module spine { + class IkConstraintData extends ConstraintData { + bones: BoneData[]; + target: BoneData; + bendDirection: number; + compress: boolean; + stretch: boolean; + uniform: boolean; + mix: number; + softness: number; + constructor(name: string); + } +} +declare module spine { + class PathConstraint implements Updatable { + static NONE: number; + static BEFORE: number; + static AFTER: number; + static epsilon: number; + data: PathConstraintData; + bones: Array; + target: Slot; + position: number; + spacing: number; + rotateMix: number; + translateMix: number; + spaces: number[]; + positions: number[]; + world: number[]; + curves: number[]; + lengths: number[]; + segments: number[]; + active: boolean; + constructor(data: PathConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + computeWorldPositions(path: PathAttachment, spacesCount: number, tangents: boolean, percentPosition: boolean, percentSpacing: boolean): number[]; + addBeforePosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addAfterPosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addCurvePosition(p: number, x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, out: Array, o: number, tangents: boolean): void; + } +} +declare module spine { + class PathConstraintData extends ConstraintData { + 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 + } +} +declare module spine { + class SharedAssetManager implements Disposable { + private pathPrefix; + private clientAssets; + private queuedAssets; + private rawAssets; + private errors; + constructor(pathPrefix?: string); + private queueAsset; + loadText(clientId: string, path: string): void; + loadJson(clientId: string, path: string): void; + loadTexture(clientId: string, textureLoader: (image: HTMLImageElement | ImageBitmap) => any, path: string): void; + get(clientId: string, path: string): any; + private updateClientAssets; + isLoadingComplete(clientId: string): boolean; + dispose(): void; + hasErrors(): boolean; + getErrors(): Map; + } +} +declare module spine { + class Skeleton { + data: SkeletonData; + bones: Array; + slots: Array; + drawOrder: Array; + ikConstraints: Array; + transformConstraints: Array; + pathConstraints: Array; + _updateCache: Updatable[]; + updateCacheReset: Updatable[]; + skin: Skin; + color: Color; + time: number; + scaleX: number; + scaleY: number; + 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): 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): void; + update(delta: number): void; + } +} +declare module spine { + class SkeletonBinary { + static AttachmentTypeValues: number[]; + static TransformModeValues: TransformMode[]; + static PositionModeValues: PositionMode[]; + static SpacingModeValues: SpacingMode[]; + static RotateModeValues: RotateMode[]; + static BlendModeValues: BlendMode[]; + static BONE_ROTATE: number; + static BONE_TRANSLATE: number; + static BONE_SCALE: number; + static BONE_SHEAR: number; + static SLOT_ATTACHMENT: number; + static SLOT_COLOR: number; + static SLOT_TWO_COLOR: number; + static PATH_POSITION: number; + static PATH_SPACING: number; + static PATH_MIX: number; + static CURVE_LINEAR: number; + static CURVE_STEPPED: number; + static CURVE_BEZIER: number; + scale: number; + attachmentLoader: AttachmentLoader; + private linkedMeshes; + constructor(attachmentLoader: AttachmentLoader); + readSkeletonData(binary: Uint8Array): SkeletonData; + private readSkin; + private readAttachment; + private readVertices; + private readFloatArray; + private readShortArray; + private readAnimation; + private readCurve; + setCurve(timeline: CurveTimeline, frameIndex: number, cx1: number, cy1: number, cx2: number, cy2: number): void; + } +} +declare module spine { + class SkeletonBounds { + minX: number; + minY: number; + maxX: number; + maxY: number; + boundingBoxes: BoundingBoxAttachment[]; + polygons: ArrayLike[]; + 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, x: number, y: number): boolean; + intersectsSegment(x1: number, y1: number, x2: number, y2: number): BoundingBoxAttachment; + intersectsSegmentPolygon(polygon: ArrayLike, x1: number, y1: number, x2: number, y2: number): boolean; + getPolygon(boundingBox: BoundingBoxAttachment): ArrayLike; + 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, verticesLength: number, triangles: ArrayLike, trianglesLength: number, uvs: ArrayLike, light: Color, dark: Color, twoColor: boolean): void; + clip(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, clippingArea: Array, output: Array): boolean; + static makeClockwise(polygon: ArrayLike): 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[]; + x: number; + y: number; + width: number; + height: number; + version: string; + hash: string; + fps: number; + imagesPath: string; + audioPath: 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; + } +} +declare module spine { + class SkinEntry { + slotIndex: number; + name: string; + attachment: Attachment; + constructor(slotIndex: number, name: string, attachment: Attachment); + } + class Skin { + name: string; + attachments: Map[]; + bones: BoneData[]; + constraints: ConstraintData[]; + constructor(name: string); + setAttachment(slotIndex: number, name: string, attachment: Attachment): void; + addSkin(skin: Skin): void; + copySkin(skin: Skin): void; + getAttachment(slotIndex: number, name: string): Attachment; + removeAttachment(slotIndex: number, name: string): void; + getAttachments(): Array; + getAttachmentsForSlot(slotIndex: number, attachments: Array): void; + clear(): void; + attachAll(skeleton: Skeleton, oldSkin: Skin): void; + } +} +declare module spine { + class Slot { + data: SlotData; + bone: Bone; + color: Color; + darkColor: Color; + attachment: Attachment; + private attachmentTime; + attachmentState: number; + deform: number[]; + constructor(data: SlotData, bone: Bone); + getSkeleton(): Skeleton; + 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); + } +} +declare module spine { + abstract class Texture { + protected _image: HTMLImageElement | ImageBitmap; + constructor(image: HTMLImageElement | ImageBitmap); + getImage(): HTMLImageElement | ImageBitmap; + 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; + } + class FakeTexture extends Texture { + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void; + dispose(): void; + } +} +declare module spine { + class TextureAtlas implements Disposable { + pages: TextureAtlasPage[]; + regions: TextureAtlasRegion[]; + constructor(atlasText: string, textureLoader: (path: string) => any); + private load; + 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; + degrees: number; + texture: Texture; + } +} +declare module spine { + class TransformConstraint implements Updatable { + data: TransformConstraintData; + bones: Array; + target: Bone; + rotateMix: number; + translateMix: number; + scaleMix: number; + shearMix: number; + temp: Vector2; + active: boolean; + constructor(data: TransformConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + applyAbsoluteWorld(): void; + applyRelativeWorld(): void; + applyAbsoluteLocal(): void; + applyRelativeLocal(): void; + } +} +declare module spine { + class TransformConstraintData extends ConstraintData { + 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): Array; + decompose(verticesArray: Array, triangles: Array): Array>; + private static isConcave; + private static positiveArea; + private static winding; + } +} +declare module spine { + interface Updatable { + update(): void; + isActive(): boolean; + } +} +declare module spine { + interface Map { + [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; + static rgba8888ToColor(color: Color, value: number): void; + static rgb888ToColor(color: Color, value: number): void; + } + 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(source: ArrayLike, sourceStart: number, dest: ArrayLike, destStart: number, numElements: number): void; + static setArraySize(array: Array, size: number, value?: any): Array; + static ensureArrayCapacity(array: Array, size: number, value?: any): Array; + static newArray(size: number, defaultValue: T): Array; + static newFloatArray(size: number): ArrayLike; + static newShortArray(size: number): ArrayLike; + static toFloatArray(array: Array): number[] | Float32Array; + static toSinglePrecision(value: number): number; + static webkit602BugfixHelper(alpha: number, blend: MixBlend): void; + static contains(array: Array, element: T, identity?: boolean): boolean; + } + class DebugUtils { + static logBones(skeleton: Skeleton): void; + } + class Pool { + private items; + private instantiator; + constructor(instantiator: () => T); + obtain(): T; + free(item: T): void; + freeAll(items: ArrayLike): 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 { + length: number; + [n: number]: T; + } + class WindowedMean { + values: Array; + 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 Math { + fround(n: number): number; +} +declare module spine { + abstract class Attachment { + name: string; + constructor(name: string); + abstract copy(): Attachment; + } + abstract class VertexAttachment extends Attachment { + private static nextID; + id: number; + bones: Array; + vertices: ArrayLike; + worldVerticesLength: number; + deformAttachment: VertexAttachment; + constructor(name: string); + computeWorldVertices(slot: Slot, start: number, count: number, worldVertices: ArrayLike, offset: number, stride: number): void; + copyTo(attachment: VertexAttachment): void; + } +} +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; + } +} +declare module spine { + enum AttachmentType { + Region = 0, + BoundingBox = 1, + Mesh = 2, + LinkedMesh = 3, + Path = 4, + Point = 5, + Clipping = 6 + } +} +declare module spine { + class BoundingBoxAttachment extends VertexAttachment { + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class ClippingAttachment extends VertexAttachment { + endSlot: SlotData; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class MeshAttachment extends VertexAttachment { + region: TextureRegion; + path: string; + regionUVs: ArrayLike; + uvs: ArrayLike; + triangles: Array; + color: Color; + width: number; + height: number; + hullLength: number; + edges: Array; + private parentMesh; + tempColor: Color; + constructor(name: string); + updateUVs(): void; + getParentMesh(): MeshAttachment; + setParentMesh(parentMesh: MeshAttachment): void; + copy(): Attachment; + newLinkedMesh(): MeshAttachment; + } +} +declare module spine { + class PathAttachment extends VertexAttachment { + lengths: Array; + closed: boolean; + constantSpeed: boolean; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +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; + copy(): Attachment; + } +} +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; + uvs: ArrayLike; + tempColor: Color; + constructor(name: string); + updateOffset(): void; + setRegion(region: TextureRegion): void; + computeWorldVertices(bone: Bone, worldVertices: ArrayLike, offset: number, stride: number): void; + copy(): Attachment; + } +} +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; + } +} +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; + } +} +declare module spine.canvas { + class AssetManager extends spine.AssetManager { + constructor(pathPrefix?: string); + } +} +declare module spine.canvas { + class CanvasTexture extends Texture { + constructor(image: HTMLImageElement); + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void; + dispose(): void; + } +} +declare module spine.canvas { + class SkeletonRenderer { + static QUAD_TRIANGLES: number[]; + static VERTEX_SIZE: number; + private ctx; + triangleRendering: boolean; + debugRendering: boolean; + private vertices; + private tempColor; + constructor(context: CanvasRenderingContext2D); + draw(skeleton: Skeleton): void; + private drawImages; + private drawTriangles; + private drawTriangle; + private computeRegionVertices; + private computeMeshVertices; + } +} diff --git a/apps/module-ts/src/spine-ts/build/spine-canvas.js b/apps/module-ts/src/spine-ts/build/spine-canvas.js new file mode 100755 index 0000000..033550c --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-canvas.js @@ -0,0 +1,8472 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var spine; +(function (spine) { + var Animation = (function () { + function Animation(name, timelines, duration) { + if (name == null) + throw new Error("name cannot be null."); + if (timelines == null) + throw new Error("timelines cannot be null."); + this.name = name; + this.timelines = timelines; + this.timelineIds = []; + for (var i = 0; i < timelines.length; i++) + this.timelineIds[timelines[i].getPropertyId()] = true; + this.duration = duration; + } + Animation.prototype.hasTimeline = function (id) { + return this.timelineIds[id] == true; + }; + Animation.prototype.apply = function (skeleton, lastTime, time, loop, events, alpha, blend, direction) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (loop && this.duration != 0) { + time %= this.duration; + if (lastTime > 0) + lastTime %= this.duration; + } + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction); + }; + Animation.binarySearch = function (values, target, step) { + if (step === void 0) { step = 1; } + var low = 0; + var high = values.length / step - 2; + if (high == 0) + return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) + return (low + 1) * step; + current = (low + high) >>> 1; + } + }; + Animation.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) + return i; + return -1; + }; + return Animation; + }()); + spine.Animation = Animation; + var MixBlend; + (function (MixBlend) { + MixBlend[MixBlend["setup"] = 0] = "setup"; + MixBlend[MixBlend["first"] = 1] = "first"; + MixBlend[MixBlend["replace"] = 2] = "replace"; + MixBlend[MixBlend["add"] = 3] = "add"; + })(MixBlend = spine.MixBlend || (spine.MixBlend = {})); + var MixDirection; + (function (MixDirection) { + MixDirection[MixDirection["mixIn"] = 0] = "mixIn"; + MixDirection[MixDirection["mixOut"] = 1] = "mixOut"; + })(MixDirection = spine.MixDirection || (spine.MixDirection = {})); + var TimelineType; + (function (TimelineType) { + TimelineType[TimelineType["rotate"] = 0] = "rotate"; + TimelineType[TimelineType["translate"] = 1] = "translate"; + TimelineType[TimelineType["scale"] = 2] = "scale"; + TimelineType[TimelineType["shear"] = 3] = "shear"; + TimelineType[TimelineType["attachment"] = 4] = "attachment"; + TimelineType[TimelineType["color"] = 5] = "color"; + TimelineType[TimelineType["deform"] = 6] = "deform"; + TimelineType[TimelineType["event"] = 7] = "event"; + TimelineType[TimelineType["drawOrder"] = 8] = "drawOrder"; + TimelineType[TimelineType["ikConstraint"] = 9] = "ikConstraint"; + TimelineType[TimelineType["transformConstraint"] = 10] = "transformConstraint"; + TimelineType[TimelineType["pathConstraintPosition"] = 11] = "pathConstraintPosition"; + TimelineType[TimelineType["pathConstraintSpacing"] = 12] = "pathConstraintSpacing"; + TimelineType[TimelineType["pathConstraintMix"] = 13] = "pathConstraintMix"; + TimelineType[TimelineType["twoColor"] = 14] = "twoColor"; + })(TimelineType = spine.TimelineType || (spine.TimelineType = {})); + var CurveTimeline = (function () { + function CurveTimeline(frameCount) { + if (frameCount <= 0) + throw new Error("frameCount must be > 0: " + frameCount); + this.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE); + } + CurveTimeline.prototype.getFrameCount = function () { + return this.curves.length / CurveTimeline.BEZIER_SIZE + 1; + }; + CurveTimeline.prototype.setLinear = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR; + }; + CurveTimeline.prototype.setStepped = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED; + }; + CurveTimeline.prototype.getCurveType = function (frameIndex) { + var index = frameIndex * CurveTimeline.BEZIER_SIZE; + if (index == this.curves.length) + return CurveTimeline.LINEAR; + var type = this.curves[index]; + if (type == CurveTimeline.LINEAR) + return CurveTimeline.LINEAR; + if (type == CurveTimeline.STEPPED) + return CurveTimeline.STEPPED; + return CurveTimeline.BEZIER; + }; + CurveTimeline.prototype.setCurve = function (frameIndex, cx1, cy1, cx2, cy2) { + var tmpx = (-cx1 * 2 + cx2) * 0.03, tmpy = (-cy1 * 2 + cy2) * 0.03; + var dddfx = ((cx1 - cx2) * 3 + 1) * 0.006, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006; + var ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy; + var dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667, dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var curves = this.curves; + curves[i++] = CurveTimeline.BEZIER; + var x = dfx, y = dfy; + for (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + }; + CurveTimeline.prototype.getCurvePercent = function (frameIndex, percent) { + percent = spine.MathUtils.clamp(percent, 0, 1); + var curves = this.curves; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var type = curves[i]; + if (type == CurveTimeline.LINEAR) + return percent; + if (type == CurveTimeline.STEPPED) + return 0; + i++; + var x = 0; + for (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + x = curves[i]; + if (x >= percent) { + var prevX = void 0, prevY = void 0; + if (i == start) { + prevX = 0; + prevY = 0; + } + else { + prevX = curves[i - 2]; + prevY = curves[i - 1]; + } + return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX); + } + } + var y = curves[i - 1]; + return y + (1 - y) * (percent - x) / (1 - x); + }; + CurveTimeline.LINEAR = 0; + CurveTimeline.STEPPED = 1; + CurveTimeline.BEZIER = 2; + CurveTimeline.BEZIER_SIZE = 10 * 2 - 1; + return CurveTimeline; + }()); + spine.CurveTimeline = CurveTimeline; + var RotateTimeline = (function (_super) { + __extends(RotateTimeline, _super); + function RotateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount << 1); + return _this; + } + RotateTimeline.prototype.getPropertyId = function () { + return (TimelineType.rotate << 24) + this.boneIndex; + }; + RotateTimeline.prototype.setFrame = function (frameIndex, time, degrees) { + frameIndex <<= 1; + this.frames[frameIndex] = time; + this.frames[frameIndex + RotateTimeline.ROTATION] = degrees; + }; + RotateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + return; + case MixBlend.first: + var r_1 = bone.data.rotation - bone.rotation; + bone.rotation += (r_1 - (16384 - ((16384.499999999996 - r_1 / 360) | 0)) * 360) * alpha; + } + return; + } + if (time >= frames[frames.length - RotateTimeline.ENTRIES]) { + var r_2 = frames[frames.length + RotateTimeline.PREV_ROTATION]; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + r_2 * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r_2 += bone.data.rotation - bone.rotation; + r_2 -= (16384 - ((16384.499999999996 - r_2 / 360) | 0)) * 360; + case MixBlend.add: + bone.rotation += r_2 * alpha; + } + return; + } + var frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES); + var prevRotation = frames[frame + RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime)); + var r = frames[frame + RotateTimeline.ROTATION] - prevRotation; + r = prevRotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * percent; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r += bone.data.rotation - bone.rotation; + case MixBlend.add: + bone.rotation += (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + } + }; + RotateTimeline.ENTRIES = 2; + RotateTimeline.PREV_TIME = -2; + RotateTimeline.PREV_ROTATION = -1; + RotateTimeline.ROTATION = 1; + return RotateTimeline; + }(CurveTimeline)); + spine.RotateTimeline = RotateTimeline; + var TranslateTimeline = (function (_super) { + __extends(TranslateTimeline, _super); + function TranslateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES); + return _this; + } + TranslateTimeline.prototype.getPropertyId = function () { + return (TimelineType.translate << 24) + this.boneIndex; + }; + TranslateTimeline.prototype.setFrame = function (frameIndex, time, x, y) { + frameIndex *= TranslateTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TranslateTimeline.X] = x; + this.frames[frameIndex + TranslateTimeline.Y] = y; + }; + TranslateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + bone.y = bone.data.y; + return; + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) { + x = frames[frames.length + TranslateTimeline.PREV_X]; + y = frames[frames.length + TranslateTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES); + x = frames[frame + TranslateTimeline.PREV_X]; + y = frames[frame + TranslateTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime)); + x += (frames[frame + TranslateTimeline.X] - x) * percent; + y += (frames[frame + TranslateTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + bone.y = bone.data.y + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + bone.y += (bone.data.y + y - bone.y) * alpha; + break; + case MixBlend.add: + bone.x += x * alpha; + bone.y += y * alpha; + } + }; + TranslateTimeline.ENTRIES = 3; + TranslateTimeline.PREV_TIME = -3; + TranslateTimeline.PREV_X = -2; + TranslateTimeline.PREV_Y = -1; + TranslateTimeline.X = 1; + TranslateTimeline.Y = 2; + return TranslateTimeline; + }(CurveTimeline)); + spine.TranslateTimeline = TranslateTimeline; + var ScaleTimeline = (function (_super) { + __extends(ScaleTimeline, _super); + function ScaleTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ScaleTimeline.prototype.getPropertyId = function () { + return (TimelineType.scale << 24) + this.boneIndex; + }; + ScaleTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + bone.scaleY = bone.data.scaleY; + return; + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) { + x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX; + y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY; + } + else { + var frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES); + x = frames[frame + ScaleTimeline.PREV_X]; + y = frames[frame + ScaleTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime)); + x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX; + y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY; + } + if (alpha == 1) { + if (blend == MixBlend.add) { + bone.scaleX += x - bone.data.scaleX; + bone.scaleY += y - bone.data.scaleY; + } + else { + bone.scaleX = x; + bone.scaleY = y; + } + } + else { + var bx = 0, by = 0; + if (direction == MixDirection.mixOut) { + switch (blend) { + case MixBlend.setup: + bx = bone.data.scaleX; + by = bone.data.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.add: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bone.data.scaleX) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - bone.data.scaleY) * alpha; + } + } + else { + switch (blend) { + case MixBlend.setup: + bx = Math.abs(bone.data.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.data.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = Math.abs(bone.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.add: + bx = spine.MathUtils.signum(x); + by = spine.MathUtils.signum(y); + bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha; + bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha; + } + } + } + }; + return ScaleTimeline; + }(TranslateTimeline)); + spine.ScaleTimeline = ScaleTimeline; + var ShearTimeline = (function (_super) { + __extends(ShearTimeline, _super); + function ShearTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ShearTimeline.prototype.getPropertyId = function () { + return (TimelineType.shear << 24) + this.boneIndex; + }; + ShearTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + bone.shearY = bone.data.shearY; + return; + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ShearTimeline.ENTRIES]) { + x = frames[frames.length + ShearTimeline.PREV_X]; + y = frames[frames.length + ShearTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES); + x = frames[frame + ShearTimeline.PREV_X]; + y = frames[frame + ShearTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime)); + x = x + (frames[frame + ShearTimeline.X] - x) * percent; + y = y + (frames[frame + ShearTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + bone.shearY = bone.data.shearY + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + break; + case MixBlend.add: + bone.shearX += x * alpha; + bone.shearY += y * alpha; + } + }; + return ShearTimeline; + }(TranslateTimeline)); + spine.ShearTimeline = ShearTimeline; + var ColorTimeline = (function (_super) { + __extends(ColorTimeline, _super); + function ColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES); + return _this; + } + ColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.color << 24) + this.slotIndex; + }; + ColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a) { + frameIndex *= ColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + ColorTimeline.R] = r; + this.frames[frameIndex + ColorTimeline.G] = g; + this.frames[frameIndex + ColorTimeline.B] = b; + this.frames[frameIndex + ColorTimeline.A] = a; + }; + ColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + return; + case MixBlend.first: + var color = slot.color, setup = slot.data.color; + color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha); + } + return; + } + var r = 0, g = 0, b = 0, a = 0; + if (time >= frames[frames.length - ColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + ColorTimeline.PREV_R]; + g = frames[i + ColorTimeline.PREV_G]; + b = frames[i + ColorTimeline.PREV_B]; + a = frames[i + ColorTimeline.PREV_A]; + } + else { + var frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES); + r = frames[frame + ColorTimeline.PREV_R]; + g = frames[frame + ColorTimeline.PREV_G]; + b = frames[frame + ColorTimeline.PREV_B]; + a = frames[frame + ColorTimeline.PREV_A]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + ColorTimeline.R] - r) * percent; + g += (frames[frame + ColorTimeline.G] - g) * percent; + b += (frames[frame + ColorTimeline.B] - b) * percent; + a += (frames[frame + ColorTimeline.A] - a) * percent; + } + if (alpha == 1) + slot.color.set(r, g, b, a); + else { + var color = slot.color; + if (blend == MixBlend.setup) + color.setFromColor(slot.data.color); + color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha); + } + }; + ColorTimeline.ENTRIES = 5; + ColorTimeline.PREV_TIME = -5; + ColorTimeline.PREV_R = -4; + ColorTimeline.PREV_G = -3; + ColorTimeline.PREV_B = -2; + ColorTimeline.PREV_A = -1; + ColorTimeline.R = 1; + ColorTimeline.G = 2; + ColorTimeline.B = 3; + ColorTimeline.A = 4; + return ColorTimeline; + }(CurveTimeline)); + spine.ColorTimeline = ColorTimeline; + var TwoColorTimeline = (function (_super) { + __extends(TwoColorTimeline, _super); + function TwoColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES); + return _this; + } + TwoColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.twoColor << 24) + this.slotIndex; + }; + TwoColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a, r2, g2, b2) { + frameIndex *= TwoColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TwoColorTimeline.R] = r; + this.frames[frameIndex + TwoColorTimeline.G] = g; + this.frames[frameIndex + TwoColorTimeline.B] = b; + this.frames[frameIndex + TwoColorTimeline.A] = a; + this.frames[frameIndex + TwoColorTimeline.R2] = r2; + this.frames[frameIndex + TwoColorTimeline.G2] = g2; + this.frames[frameIndex + TwoColorTimeline.B2] = b2; + }; + TwoColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + slot.darkColor.setFromColor(slot.data.darkColor); + return; + case MixBlend.first: + var light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor; + light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha); + dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0); + } + return; + } + var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; + if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + TwoColorTimeline.PREV_R]; + g = frames[i + TwoColorTimeline.PREV_G]; + b = frames[i + TwoColorTimeline.PREV_B]; + a = frames[i + TwoColorTimeline.PREV_A]; + r2 = frames[i + TwoColorTimeline.PREV_R2]; + g2 = frames[i + TwoColorTimeline.PREV_G2]; + b2 = frames[i + TwoColorTimeline.PREV_B2]; + } + else { + var frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES); + r = frames[frame + TwoColorTimeline.PREV_R]; + g = frames[frame + TwoColorTimeline.PREV_G]; + b = frames[frame + TwoColorTimeline.PREV_B]; + a = frames[frame + TwoColorTimeline.PREV_A]; + r2 = frames[frame + TwoColorTimeline.PREV_R2]; + g2 = frames[frame + TwoColorTimeline.PREV_G2]; + b2 = frames[frame + TwoColorTimeline.PREV_B2]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + TwoColorTimeline.R] - r) * percent; + g += (frames[frame + TwoColorTimeline.G] - g) * percent; + b += (frames[frame + TwoColorTimeline.B] - b) * percent; + a += (frames[frame + TwoColorTimeline.A] - a) * percent; + r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent; + g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent; + b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent; + } + if (alpha == 1) { + slot.color.set(r, g, b, a); + slot.darkColor.set(r2, g2, b2, 1); + } + else { + var light = slot.color, dark = slot.darkColor; + if (blend == MixBlend.setup) { + light.setFromColor(slot.data.color); + dark.setFromColor(slot.data.darkColor); + } + light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha); + dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0); + } + }; + TwoColorTimeline.ENTRIES = 8; + TwoColorTimeline.PREV_TIME = -8; + TwoColorTimeline.PREV_R = -7; + TwoColorTimeline.PREV_G = -6; + TwoColorTimeline.PREV_B = -5; + TwoColorTimeline.PREV_A = -4; + TwoColorTimeline.PREV_R2 = -3; + TwoColorTimeline.PREV_G2 = -2; + TwoColorTimeline.PREV_B2 = -1; + TwoColorTimeline.R = 1; + TwoColorTimeline.G = 2; + TwoColorTimeline.B = 3; + TwoColorTimeline.A = 4; + TwoColorTimeline.R2 = 5; + TwoColorTimeline.G2 = 6; + TwoColorTimeline.B2 = 7; + return TwoColorTimeline; + }(CurveTimeline)); + spine.TwoColorTimeline = TwoColorTimeline; + var AttachmentTimeline = (function () { + function AttachmentTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.attachmentNames = new Array(frameCount); + } + AttachmentTimeline.prototype.getPropertyId = function () { + return (TimelineType.attachment << 24) + this.slotIndex; + }; + AttachmentTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + AttachmentTimeline.prototype.setFrame = function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }; + AttachmentTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frameIndex = 0; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = Animation.binarySearch(frames, time, 1) - 1; + var attachmentName = this.attachmentNames[frameIndex]; + skeleton.slots[this.slotIndex] + .setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + AttachmentTimeline.prototype.setAttachment = function (skeleton, slot, attachmentName) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + return AttachmentTimeline; + }()); + spine.AttachmentTimeline = AttachmentTimeline; + var zeros = null; + var DeformTimeline = (function (_super) { + __extends(DeformTimeline, _super); + function DeformTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount); + _this.frameVertices = new Array(frameCount); + if (zeros == null) + zeros = spine.Utils.newFloatArray(64); + return _this; + } + DeformTimeline.prototype.getPropertyId = function () { + return (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex; + }; + DeformTimeline.prototype.setFrame = function (frameIndex, time, vertices) { + this.frames[frameIndex] = time; + this.frameVertices[frameIndex] = vertices; + }; + DeformTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var slotAttachment = slot.getAttachment(); + if (!(slotAttachment instanceof spine.VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment)) + return; + var deformArray = slot.deform; + if (deformArray.length == 0) + blend = MixBlend.setup; + var frameVertices = this.frameVertices; + var vertexCount = frameVertices[0].length; + var frames = this.frames; + if (time < frames[0]) { + var vertexAttachment = slotAttachment; + switch (blend) { + case MixBlend.setup: + deformArray.length = 0; + return; + case MixBlend.first: + if (alpha == 1) { + deformArray.length = 0; + break; + } + var deform_1 = spine.Utils.setArraySize(deformArray, vertexCount); + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i = 0; i < vertexCount; i++) + deform_1[i] += (setupVertices[i] - deform_1[i]) * alpha; + } + else { + alpha = 1 - alpha; + for (var i = 0; i < vertexCount; i++) + deform_1[i] *= alpha; + } + } + return; + } + var deform = spine.Utils.setArraySize(deformArray, vertexCount); + if (time >= frames[frames.length - 1]) { + var lastVertices = frameVertices[frames.length - 1]; + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_1 = 0; i_1 < vertexCount; i_1++) { + deform[i_1] += lastVertices[i_1] - setupVertices[i_1]; + } + } + else { + for (var i_2 = 0; i_2 < vertexCount; i_2++) + deform[i_2] += lastVertices[i_2]; + } + } + else { + spine.Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount); + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_1 = slotAttachment; + if (vertexAttachment_1.bones == null) { + var setupVertices = vertexAttachment_1.vertices; + for (var i_3 = 0; i_3 < vertexCount; i_3++) { + var setup = setupVertices[i_3]; + deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha; + } + } + else { + for (var i_4 = 0; i_4 < vertexCount; i_4++) + deform[i_4] = lastVertices[i_4] * alpha; + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_5 = 0; i_5 < vertexCount; i_5++) + deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha; + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_6 = 0; i_6 < vertexCount; i_6++) { + deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha; + } + } + else { + for (var i_7 = 0; i_7 < vertexCount; i_7++) + deform[i_7] += lastVertices[i_7] * alpha; + } + } + } + return; + } + var frame = Animation.binarySearch(frames, time); + var prevVertices = frameVertices[frame - 1]; + var nextVertices = frameVertices[frame]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime)); + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_8 = 0; i_8 < vertexCount; i_8++) { + var prev = prevVertices[i_8]; + deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8]; + } + } + else { + for (var i_9 = 0; i_9 < vertexCount; i_9++) { + var prev = prevVertices[i_9]; + deform[i_9] += prev + (nextVertices[i_9] - prev) * percent; + } + } + } + else { + for (var i_10 = 0; i_10 < vertexCount; i_10++) { + var prev = prevVertices[i_10]; + deform[i_10] = prev + (nextVertices[i_10] - prev) * percent; + } + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_2 = slotAttachment; + if (vertexAttachment_2.bones == null) { + var setupVertices = vertexAttachment_2.vertices; + for (var i_11 = 0; i_11 < vertexCount; i_11++) { + var prev = prevVertices[i_11], setup = setupVertices[i_11]; + deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha; + } + } + else { + for (var i_12 = 0; i_12 < vertexCount; i_12++) { + var prev = prevVertices[i_12]; + deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha; + } + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_13 = 0; i_13 < vertexCount; i_13++) { + var prev = prevVertices[i_13]; + deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha; + } + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_14 = 0; i_14 < vertexCount; i_14++) { + var prev = prevVertices[i_14]; + deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha; + } + } + else { + for (var i_15 = 0; i_15 < vertexCount; i_15++) { + var prev = prevVertices[i_15]; + deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha; + } + } + } + } + }; + return DeformTimeline; + }(CurveTimeline)); + spine.DeformTimeline = DeformTimeline; + var EventTimeline = (function () { + function EventTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.events = new Array(frameCount); + } + EventTimeline.prototype.getPropertyId = function () { + return TimelineType.event << 24; + }; + EventTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + EventTimeline.prototype.setFrame = function (frameIndex, event) { + this.frames[frameIndex] = event.time; + this.events[frameIndex] = event; + }; + EventTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + if (firedEvents == null) + return; + var frames = this.frames; + var frameCount = this.frames.length; + if (lastTime > time) { + this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction); + lastTime = -1; + } + else if (lastTime >= frames[frameCount - 1]) + return; + if (time < frames[0]) + return; + var frame = 0; + if (lastTime < frames[0]) + frame = 0; + else { + frame = Animation.binarySearch(frames, lastTime); + var frameTime = frames[frame]; + while (frame > 0) { + if (frames[frame - 1] != frameTime) + break; + frame--; + } + } + for (; frame < frameCount && time >= frames[frame]; frame++) + firedEvents.push(this.events[frame]); + }; + return EventTimeline; + }()); + spine.EventTimeline = EventTimeline; + var DrawOrderTimeline = (function () { + function DrawOrderTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.drawOrders = new Array(frameCount); + } + DrawOrderTimeline.prototype.getPropertyId = function () { + return TimelineType.drawOrder << 24; + }; + DrawOrderTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + DrawOrderTimeline.prototype.setFrame = function (frameIndex, time, drawOrder) { + this.frames[frameIndex] = time; + this.drawOrders[frameIndex] = drawOrder; + }; + DrawOrderTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var drawOrder = skeleton.drawOrder; + var slots = skeleton.slots; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frame = 0; + if (time >= frames[frames.length - 1]) + frame = frames.length - 1; + else + frame = Animation.binarySearch(frames, time) - 1; + var drawOrderToSetupIndex = this.drawOrders[frame]; + if (drawOrderToSetupIndex == null) + spine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length); + else { + for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++) + drawOrder[i] = slots[drawOrderToSetupIndex[i]]; + } + }; + return DrawOrderTimeline; + }()); + spine.DrawOrderTimeline = DrawOrderTimeline; + var IkConstraintTimeline = (function (_super) { + __extends(IkConstraintTimeline, _super); + function IkConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES); + return _this; + } + IkConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex; + }; + IkConstraintTimeline.prototype.setFrame = function (frameIndex, time, mix, softness, bendDirection, compress, stretch) { + frameIndex *= IkConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + IkConstraintTimeline.MIX] = mix; + this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness; + this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection; + this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0; + this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0; + }; + IkConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.ikConstraints[this.ikConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + return; + case MixBlend.first: + constraint.mix += (constraint.data.mix - constraint.mix) * alpha; + constraint.softness += (constraint.data.softness - constraint.softness) * alpha; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + return; + } + if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) { + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha; + constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + return; + } + var frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES); + var mix = frames[frame + IkConstraintTimeline.PREV_MIX]; + var softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime)); + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha; + constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + }; + IkConstraintTimeline.ENTRIES = 6; + IkConstraintTimeline.PREV_TIME = -6; + IkConstraintTimeline.PREV_MIX = -5; + IkConstraintTimeline.PREV_SOFTNESS = -4; + IkConstraintTimeline.PREV_BEND_DIRECTION = -3; + IkConstraintTimeline.PREV_COMPRESS = -2; + IkConstraintTimeline.PREV_STRETCH = -1; + IkConstraintTimeline.MIX = 1; + IkConstraintTimeline.SOFTNESS = 2; + IkConstraintTimeline.BEND_DIRECTION = 3; + IkConstraintTimeline.COMPRESS = 4; + IkConstraintTimeline.STRETCH = 5; + return IkConstraintTimeline; + }(CurveTimeline)); + spine.IkConstraintTimeline = IkConstraintTimeline; + var TransformConstraintTimeline = (function (_super) { + __extends(TransformConstraintTimeline, _super); + function TransformConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES); + return _this; + } + TransformConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex; + }; + TransformConstraintTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) { + frameIndex *= TransformConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix; + this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix; + this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix; + }; + TransformConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.transformConstraints[this.transformConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + var data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + return; + case MixBlend.first: + constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha; + constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha; + constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha; + } + return; + } + var rotate = 0, translate = 0, scale = 0, shear = 0; + if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) { + var i = frames.length; + rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[i + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[i + TransformConstraintTimeline.PREV_SHEAR]; + } + else { + var frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES); + rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[frame + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent; + scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent; + shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent; + } + if (blend == MixBlend.setup) { + var data = constraint.data; + constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha; + constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha; + constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha; + constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + constraint.scaleMix += (scale - constraint.scaleMix) * alpha; + constraint.shearMix += (shear - constraint.shearMix) * alpha; + } + }; + TransformConstraintTimeline.ENTRIES = 5; + TransformConstraintTimeline.PREV_TIME = -5; + TransformConstraintTimeline.PREV_ROTATE = -4; + TransformConstraintTimeline.PREV_TRANSLATE = -3; + TransformConstraintTimeline.PREV_SCALE = -2; + TransformConstraintTimeline.PREV_SHEAR = -1; + TransformConstraintTimeline.ROTATE = 1; + TransformConstraintTimeline.TRANSLATE = 2; + TransformConstraintTimeline.SCALE = 3; + TransformConstraintTimeline.SHEAR = 4; + return TransformConstraintTimeline; + }(CurveTimeline)); + spine.TransformConstraintTimeline = TransformConstraintTimeline; + var PathConstraintPositionTimeline = (function (_super) { + __extends(PathConstraintPositionTimeline, _super); + function PathConstraintPositionTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES); + return _this; + } + PathConstraintPositionTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex; + }; + PathConstraintPositionTimeline.prototype.setFrame = function (frameIndex, time, value) { + frameIndex *= PathConstraintPositionTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value; + }; + PathConstraintPositionTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.position = constraint.data.position; + return; + case MixBlend.first: + constraint.position += (constraint.data.position - constraint.position) * alpha; + } + return; + } + var position = 0; + if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES]) + position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES); + position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime)); + position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent; + } + if (blend == MixBlend.setup) + constraint.position = constraint.data.position + (position - constraint.data.position) * alpha; + else + constraint.position += (position - constraint.position) * alpha; + }; + PathConstraintPositionTimeline.ENTRIES = 2; + PathConstraintPositionTimeline.PREV_TIME = -2; + PathConstraintPositionTimeline.PREV_VALUE = -1; + PathConstraintPositionTimeline.VALUE = 1; + return PathConstraintPositionTimeline; + }(CurveTimeline)); + spine.PathConstraintPositionTimeline = PathConstraintPositionTimeline; + var PathConstraintSpacingTimeline = (function (_super) { + __extends(PathConstraintSpacingTimeline, _super); + function PathConstraintSpacingTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + PathConstraintSpacingTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex; + }; + PathConstraintSpacingTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.spacing = constraint.data.spacing; + return; + case MixBlend.first: + constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha; + } + return; + } + var spacing = 0; + if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES]) + spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES); + spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime)); + spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent; + } + if (blend == MixBlend.setup) + constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha; + else + constraint.spacing += (spacing - constraint.spacing) * alpha; + }; + return PathConstraintSpacingTimeline; + }(PathConstraintPositionTimeline)); + spine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline; + var PathConstraintMixTimeline = (function (_super) { + __extends(PathConstraintMixTimeline, _super); + function PathConstraintMixTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES); + return _this; + } + PathConstraintMixTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex; + }; + PathConstraintMixTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix) { + frameIndex *= PathConstraintMixTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix; + }; + PathConstraintMixTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = constraint.data.rotateMix; + constraint.translateMix = constraint.data.translateMix; + return; + case MixBlend.first: + constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha; + } + return; + } + var rotate = 0, translate = 0; + if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) { + rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE]; + } + else { + var frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES); + rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent; + } + if (blend == MixBlend.setup) { + constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha; + constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + } + }; + PathConstraintMixTimeline.ENTRIES = 3; + PathConstraintMixTimeline.PREV_TIME = -3; + PathConstraintMixTimeline.PREV_ROTATE = -2; + PathConstraintMixTimeline.PREV_TRANSLATE = -1; + PathConstraintMixTimeline.ROTATE = 1; + PathConstraintMixTimeline.TRANSLATE = 2; + return PathConstraintMixTimeline; + }(CurveTimeline)); + spine.PathConstraintMixTimeline = PathConstraintMixTimeline; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationState = (function () { + function AnimationState(data) { + this.tracks = new Array(); + this.timeScale = 1; + this.unkeyedState = 0; + this.events = new Array(); + this.listeners = new Array(); + this.queue = new EventQueue(this); + this.propertyIDs = new spine.IntSet(); + this.animationsChanged = false; + this.trackEntryPool = new spine.Pool(function () { return new TrackEntry(); }); + this.data = data; + } + AnimationState.prototype.update = function (delta) { + delta *= this.timeScale; + var tracks = this.tracks; + for (var i = 0, n = tracks.length; i < n; i++) { + var current = tracks[i]; + if (current == null) + continue; + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + var currentDelta = delta * current.timeScale; + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) + continue; + currentDelta = -current.delay; + current.delay = 0; + } + var next = current.next; + if (next != null) { + var nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setCurrent(i, next, true); + while (next.mixingFrom != null) { + next.mixTime += delta; + next = next.mixingFrom; + } + continue; + } + } + else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) { + tracks[i] = null; + this.queue.end(current); + this.disposeNext(current); + continue; + } + if (current.mixingFrom != null && this.updateMixingFrom(current, delta)) { + var from = current.mixingFrom; + current.mixingFrom = null; + if (from != null) + from.mixingTo = null; + while (from != null) { + this.queue.end(from); + from = from.mixingFrom; + } + } + current.trackTime += currentDelta; + } + this.queue.drain(); + }; + AnimationState.prototype.updateMixingFrom = function (to, delta) { + var from = to.mixingFrom; + if (from == null) + return true; + var finished = this.updateMixingFrom(from, delta); + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { + if (from.totalAlpha == 0 || to.mixDuration == 0) { + to.mixingFrom = from.mixingFrom; + if (from.mixingFrom != null) + from.mixingFrom.mixingTo = to; + to.interruptAlpha = from.interruptAlpha; + this.queue.end(from); + } + return finished; + } + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + }; + AnimationState.prototype.apply = function (skeleton) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (this.animationsChanged) + this._animationsChanged(); + var events = this.events; + var tracks = this.tracks; + var applied = false; + for (var i_16 = 0, n_1 = tracks.length; i_16 < n_1; i_16++) { + var current = tracks[i_16]; + if (current == null || current.delay > 0) + continue; + applied = true; + var blend = i_16 == 0 ? spine.MixBlend.first : current.mixBlend; + var mix = current.alpha; + if (current.mixingFrom != null) + mix *= this.applyMixingFrom(current, skeleton, blend); + else if (current.trackTime >= current.trackEnd && current.next == null) + mix = 0; + var animationLast = current.animationLast, animationTime = current.getAnimationTime(); + var timelineCount = current.animation.timelines.length; + var timelines = current.animation.timelines; + if ((i_16 == 0 && mix == 1) || blend == spine.MixBlend.add) { + for (var ii = 0; ii < timelineCount; ii++) { + spine.Utils.webkit602BugfixHelper(mix, blend); + var timeline = timelines[ii]; + if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, blend, true); + else + timeline.apply(skeleton, animationLast, animationTime, events, mix, blend, spine.MixDirection.mixIn); + } + } + else { + var timelineMode = current.timelineMode; + var firstFrame = current.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = current.timelinesRotation; + for (var ii = 0; ii < timelineCount; ii++) { + var timeline_1 = timelines[ii]; + var timelineBlend = timelineMode[ii] == AnimationState.SUBSEQUENT ? blend : spine.MixBlend.setup; + if (timeline_1 instanceof spine.RotateTimeline) { + this.applyRotateTimeline(timeline_1, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); + } + else if (timeline_1 instanceof spine.AttachmentTimeline) { + this.applyAttachmentTimeline(timeline_1, skeleton, animationTime, blend, true); + } + else { + spine.Utils.webkit602BugfixHelper(mix, blend); + timeline_1.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, spine.MixDirection.mixIn); + } + } + } + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + var setupState = this.unkeyedState + AnimationState.SETUP; + var slots = skeleton.slots; + for (var i = 0, n = skeleton.slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.attachmentState == setupState) { + var attachmentName = slot.data.attachmentName; + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + } + } + this.unkeyedState += 2; + this.queue.drain(); + return applied; + }; + AnimationState.prototype.applyMixingFrom = function (to, skeleton, blend) { + var from = to.mixingFrom; + if (from.mixingFrom != null) + this.applyMixingFrom(from, skeleton, blend); + var mix = 0; + if (to.mixDuration == 0) { + mix = 1; + if (blend == spine.MixBlend.first) + blend = spine.MixBlend.setup; + } + else { + mix = to.mixTime / to.mixDuration; + if (mix > 1) + mix = 1; + if (blend != spine.MixBlend.first) + blend = from.mixBlend; + } + var events = mix < from.eventThreshold ? this.events : null; + var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold; + var animationLast = from.animationLast, animationTime = from.getAnimationTime(); + var timelineCount = from.animation.timelines.length; + var timelines = from.animation.timelines; + var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); + if (blend == spine.MixBlend.add) { + for (var i = 0; i < timelineCount; i++) + timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, spine.MixDirection.mixOut); + } + else { + var timelineMode = from.timelineMode; + var timelineHoldMix = from.timelineHoldMix; + var firstFrame = from.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = from.timelinesRotation; + from.totalAlpha = 0; + for (var i = 0; i < timelineCount; i++) { + var timeline = timelines[i]; + var direction = spine.MixDirection.mixOut; + var timelineBlend = void 0; + var alpha = 0; + switch (timelineMode[i]) { + case AnimationState.SUBSEQUENT: + if (!drawOrder && timeline instanceof spine.DrawOrderTimeline) + continue; + timelineBlend = blend; + alpha = alphaMix; + break; + case AnimationState.FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaMix; + break; + case AnimationState.HOLD_SUBSEQUENT: + timelineBlend = blend; + alpha = alphaHold; + break; + case AnimationState.HOLD_FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaHold; + break; + default: + timelineBlend = spine.MixBlend.setup; + var holdMix = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + break; + } + from.totalAlpha += alpha; + if (timeline instanceof spine.RotateTimeline) + this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); + else if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, timelineBlend, attachments); + else { + spine.Utils.webkit602BugfixHelper(alpha, blend); + if (drawOrder && timeline instanceof spine.DrawOrderTimeline && timelineBlend == spine.MixBlend.setup) + direction = spine.MixDirection.mixIn; + timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction); + } + } + } + if (to.mixDuration > 0) + this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + return mix; + }; + AnimationState.prototype.applyAttachmentTimeline = function (timeline, skeleton, time, blend, attachments) { + var slot = skeleton.slots[timeline.slotIndex]; + if (!slot.bone.active) + return; + var frames = timeline.frames; + if (time < frames[0]) { + if (blend == spine.MixBlend.setup || blend == spine.MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments); + } + else { + var frameIndex; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = spine.Animation.binarySearch(frames, time) - 1; + this.setAttachment(skeleton, slot, timeline.attachmentNames[frameIndex], attachments); + } + if (slot.attachmentState <= this.unkeyedState) + slot.attachmentState = this.unkeyedState + AnimationState.SETUP; + }; + AnimationState.prototype.setAttachment = function (skeleton, slot, attachmentName, attachments) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + if (attachments) + slot.attachmentState = this.unkeyedState + AnimationState.CURRENT; + }; + AnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) { + if (firstFrame) + timelinesRotation[i] = 0; + if (alpha == 1) { + timeline.apply(skeleton, 0, time, null, 1, blend, spine.MixDirection.mixIn); + return; + } + var rotateTimeline = timeline; + var frames = rotateTimeline.frames; + var bone = skeleton.bones[rotateTimeline.boneIndex]; + if (!bone.active) + return; + var r1 = 0, r2 = 0; + if (time < frames[0]) { + switch (blend) { + case spine.MixBlend.setup: + bone.rotation = bone.data.rotation; + default: + return; + case spine.MixBlend.first: + r1 = bone.rotation; + r2 = bone.data.rotation; + } + } + else { + r1 = blend == spine.MixBlend.setup ? bone.data.rotation : bone.rotation; + if (time >= frames[frames.length - spine.RotateTimeline.ENTRIES]) + r2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION]; + else { + var frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES); + var prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime)); + r2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + r2 = prevRotation + r2 * percent + bone.data.rotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + } + } + var total = 0, diff = r2 - r1; + diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360; + if (diff == 0) { + total = timelinesRotation[i]; + } + else { + var lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } + else { + lastTotal = timelinesRotation[i]; + lastDiff = timelinesRotation[i + 1]; + } + var current = diff > 0, dir = lastTotal >= 0; + if (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) { + if (Math.abs(lastTotal) > 180) + lastTotal += 360 * spine.MathUtils.signum(lastTotal); + dir = current; + } + total = diff + lastTotal - lastTotal % 360; + if (dir != current) + total += 360 * spine.MathUtils.signum(lastTotal); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + r1 += total * alpha; + bone.rotation = r1 - (16384 - ((16384.499999999996 - r1 / 360) | 0)) * 360; + }; + AnimationState.prototype.queueEvents = function (entry, animationTime) { + var animationStart = entry.animationStart, animationEnd = entry.animationEnd; + var duration = animationEnd - animationStart; + var trackLastWrapped = entry.trackLast % duration; + var events = this.events; + var i = 0, n = events.length; + for (; i < n; i++) { + var event_1 = events[i]; + if (event_1.time < trackLastWrapped) + break; + if (event_1.time > animationEnd) + continue; + this.queue.event(entry, event_1); + } + var complete = false; + if (entry.loop) + complete = duration == 0 || trackLastWrapped > entry.trackTime % duration; + else + complete = animationTime >= animationEnd && entry.animationLast < animationEnd; + if (complete) + this.queue.complete(entry); + for (; i < n; i++) { + var event_2 = events[i]; + if (event_2.time < animationStart) + continue; + this.queue.event(entry, events[i]); + } + }; + AnimationState.prototype.clearTracks = function () { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) + this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.clearTrack = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return; + var current = this.tracks[trackIndex]; + if (current == null) + return; + this.queue.end(current); + this.disposeNext(current); + var entry = current; + while (true) { + var from = entry.mixingFrom; + if (from == null) + break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + this.tracks[current.trackIndex] = null; + this.queue.drain(); + }; + AnimationState.prototype.setCurrent = function (index, current, interrupt) { + var from = this.expandToIndex(index); + this.tracks[index] = current; + if (from != null) { + if (interrupt) + this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + if (from.mixingFrom != null && from.mixDuration > 0) + current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration); + from.timelinesRotation.length = 0; + } + this.queue.start(current); + }; + AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.setAnimationWith(trackIndex, animation, loop); + }; + AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) { + if (animation == null) + throw new Error("animation cannot be null."); + var interrupt = true; + var current = this.expandToIndex(trackIndex); + if (current != null) { + if (current.nextTrackLast == -1) { + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.disposeNext(current); + current = current.mixingFrom; + interrupt = false; + } + else + this.disposeNext(current); + } + var entry = this.trackEntry(trackIndex, animation, loop, current); + this.setCurrent(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + }; + AnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.addAnimationWith(trackIndex, animation, loop, delay); + }; + AnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) { + if (animation == null) + throw new Error("animation cannot be null."); + var last = this.expandToIndex(trackIndex); + if (last != null) { + while (last.next != null) + last = last.next; + } + var entry = this.trackEntry(trackIndex, animation, loop, last); + if (last == null) { + this.setCurrent(trackIndex, entry, true); + this.queue.drain(); + } + else { + last.next = entry; + if (delay <= 0) { + var duration = last.animationEnd - last.animationStart; + if (duration != 0) { + if (last.loop) + delay += duration * (1 + ((last.trackTime / duration) | 0)); + else + delay += Math.max(duration, last.trackTime); + delay -= this.data.getMix(last.animation, animation); + } + else + delay = last.trackTime; + } + } + entry.delay = delay; + return entry; + }; + AnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) { + var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) { + if (delay <= 0) + delay -= mixDuration; + var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.setEmptyAnimations = function (mixDuration) { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) { + var current = this.tracks[i]; + if (current != null) + this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.expandToIndex = function (index) { + if (index < this.tracks.length) + return this.tracks[index]; + spine.Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + }; + AnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) { + var entry = this.trackEntryPool.obtain(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + entry.eventThreshold = 0; + entry.attachmentThreshold = 0; + entry.drawOrderThreshold = 0; + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + entry.alpha = 1; + entry.interruptAlpha = 1; + entry.mixTime = 0; + entry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation); + entry.mixBlend = spine.MixBlend.replace; + return entry; + }; + AnimationState.prototype.disposeNext = function (entry) { + var next = entry.next; + while (next != null) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + }; + AnimationState.prototype._animationsChanged = function () { + this.animationsChanged = false; + this.propertyIDs.clear(); + for (var i = 0, n = this.tracks.length; i < n; i++) { + var entry = this.tracks[i]; + if (entry == null) + continue; + while (entry.mixingFrom != null) + entry = entry.mixingFrom; + do { + if (entry.mixingFrom == null || entry.mixBlend != spine.MixBlend.add) + this.computeHold(entry); + entry = entry.mixingTo; + } while (entry != null); + } + }; + AnimationState.prototype.computeHold = function (entry) { + var to = entry.mixingTo; + var timelines = entry.animation.timelines; + var timelinesCount = entry.animation.timelines.length; + var timelineMode = spine.Utils.setArraySize(entry.timelineMode, timelinesCount); + entry.timelineHoldMix.length = 0; + var timelineDipMix = spine.Utils.setArraySize(entry.timelineHoldMix, timelinesCount); + var propertyIDs = this.propertyIDs; + if (to != null && to.holdPrevious) { + for (var i = 0; i < timelinesCount; i++) { + timelineMode[i] = propertyIDs.add(timelines[i].getPropertyId()) ? AnimationState.HOLD_FIRST : AnimationState.HOLD_SUBSEQUENT; + } + return; + } + outer: for (var i = 0; i < timelinesCount; i++) { + var timeline = timelines[i]; + var id = timeline.getPropertyId(); + if (!propertyIDs.add(id)) + timelineMode[i] = AnimationState.SUBSEQUENT; + else if (to == null || timeline instanceof spine.AttachmentTimeline || timeline instanceof spine.DrawOrderTimeline + || timeline instanceof spine.EventTimeline || !to.animation.hasTimeline(id)) { + timelineMode[i] = AnimationState.FIRST; + } + else { + for (var next = to.mixingTo; next != null; next = next.mixingTo) { + if (next.animation.hasTimeline(id)) + continue; + if (entry.mixDuration > 0) { + timelineMode[i] = AnimationState.HOLD_MIX; + timelineDipMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = AnimationState.HOLD_FIRST; + } + } + }; + AnimationState.prototype.getCurrent = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return null; + return this.tracks[trackIndex]; + }; + AnimationState.prototype.addListener = function (listener) { + if (listener == null) + throw new Error("listener cannot be null."); + this.listeners.push(listener); + }; + AnimationState.prototype.removeListener = function (listener) { + var index = this.listeners.indexOf(listener); + if (index >= 0) + this.listeners.splice(index, 1); + }; + AnimationState.prototype.clearListeners = function () { + this.listeners.length = 0; + }; + AnimationState.prototype.clearListenerNotifications = function () { + this.queue.clear(); + }; + AnimationState.emptyAnimation = new spine.Animation("", [], 0); + AnimationState.SUBSEQUENT = 0; + AnimationState.FIRST = 1; + AnimationState.HOLD_SUBSEQUENT = 2; + AnimationState.HOLD_FIRST = 3; + AnimationState.HOLD_MIX = 4; + AnimationState.SETUP = 1; + AnimationState.CURRENT = 2; + return AnimationState; + }()); + spine.AnimationState = AnimationState; + var TrackEntry = (function () { + function TrackEntry() { + this.mixBlend = spine.MixBlend.replace; + this.timelineMode = new Array(); + this.timelineHoldMix = new Array(); + this.timelinesRotation = new Array(); + } + TrackEntry.prototype.reset = function () { + this.next = null; + this.mixingFrom = null; + this.mixingTo = null; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + }; + TrackEntry.prototype.getAnimationTime = function () { + if (this.loop) { + var duration = this.animationEnd - this.animationStart; + if (duration == 0) + return this.animationStart; + return (this.trackTime % duration) + this.animationStart; + } + return Math.min(this.trackTime + this.animationStart, this.animationEnd); + }; + TrackEntry.prototype.setAnimationLast = function (animationLast) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + }; + TrackEntry.prototype.isComplete = function () { + return this.trackTime >= this.animationEnd - this.animationStart; + }; + TrackEntry.prototype.resetRotationDirections = function () { + this.timelinesRotation.length = 0; + }; + return TrackEntry; + }()); + spine.TrackEntry = TrackEntry; + var EventQueue = (function () { + function EventQueue(animState) { + this.objects = []; + this.drainDisabled = false; + this.animState = animState; + } + EventQueue.prototype.start = function (entry) { + this.objects.push(EventType.start); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.interrupt = function (entry) { + this.objects.push(EventType.interrupt); + this.objects.push(entry); + }; + EventQueue.prototype.end = function (entry) { + this.objects.push(EventType.end); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.dispose = function (entry) { + this.objects.push(EventType.dispose); + this.objects.push(entry); + }; + EventQueue.prototype.complete = function (entry) { + this.objects.push(EventType.complete); + this.objects.push(entry); + }; + EventQueue.prototype.event = function (entry, event) { + this.objects.push(EventType.event); + this.objects.push(entry); + this.objects.push(event); + }; + EventQueue.prototype.drain = function () { + if (this.drainDisabled) + return; + this.drainDisabled = true; + var objects = this.objects; + var listeners = this.animState.listeners; + for (var i = 0; i < objects.length; i += 2) { + var type = objects[i]; + var entry = objects[i + 1]; + switch (type) { + case EventType.start: + if (entry.listener != null && entry.listener.start) + entry.listener.start(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].start) + listeners[ii].start(entry); + break; + case EventType.interrupt: + if (entry.listener != null && entry.listener.interrupt) + entry.listener.interrupt(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].interrupt) + listeners[ii].interrupt(entry); + break; + case EventType.end: + if (entry.listener != null && entry.listener.end) + entry.listener.end(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].end) + listeners[ii].end(entry); + case EventType.dispose: + if (entry.listener != null && entry.listener.dispose) + entry.listener.dispose(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].dispose) + listeners[ii].dispose(entry); + this.animState.trackEntryPool.free(entry); + break; + case EventType.complete: + if (entry.listener != null && entry.listener.complete) + entry.listener.complete(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].complete) + listeners[ii].complete(entry); + break; + case EventType.event: + var event_3 = objects[i++ + 2]; + if (entry.listener != null && entry.listener.event) + entry.listener.event(entry, event_3); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].event) + listeners[ii].event(entry, event_3); + break; + } + } + this.clear(); + this.drainDisabled = false; + }; + EventQueue.prototype.clear = function () { + this.objects.length = 0; + }; + return EventQueue; + }()); + spine.EventQueue = EventQueue; + var EventType; + (function (EventType) { + EventType[EventType["start"] = 0] = "start"; + EventType[EventType["interrupt"] = 1] = "interrupt"; + EventType[EventType["end"] = 2] = "end"; + EventType[EventType["dispose"] = 3] = "dispose"; + EventType[EventType["complete"] = 4] = "complete"; + EventType[EventType["event"] = 5] = "event"; + })(EventType = spine.EventType || (spine.EventType = {})); + var AnimationStateAdapter = (function () { + function AnimationStateAdapter() { + } + AnimationStateAdapter.prototype.start = function (entry) { + }; + AnimationStateAdapter.prototype.interrupt = function (entry) { + }; + AnimationStateAdapter.prototype.end = function (entry) { + }; + AnimationStateAdapter.prototype.dispose = function (entry) { + }; + AnimationStateAdapter.prototype.complete = function (entry) { + }; + AnimationStateAdapter.prototype.event = function (entry, event) { + }; + return AnimationStateAdapter; + }()); + spine.AnimationStateAdapter = AnimationStateAdapter; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationStateData = (function () { + function AnimationStateData(skeletonData) { + this.animationToMixTime = {}; + this.defaultMix = 0; + if (skeletonData == null) + throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + AnimationStateData.prototype.setMix = function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (from == null) + throw new Error("Animation not found: " + fromName); + var to = this.skeletonData.findAnimation(toName); + if (to == null) + throw new Error("Animation not found: " + toName); + this.setMixWith(from, to, duration); + }; + AnimationStateData.prototype.setMixWith = function (from, to, duration) { + if (from == null) + throw new Error("from cannot be null."); + if (to == null) + throw new Error("to cannot be null."); + var key = from.name + "." + to.name; + this.animationToMixTime[key] = duration; + }; + AnimationStateData.prototype.getMix = function (from, to) { + var key = from.name + "." + to.name; + var value = this.animationToMixTime[key]; + return value === undefined ? this.defaultMix : value; + }; + return AnimationStateData; + }()); + spine.AnimationStateData = AnimationStateData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AssetManager = (function () { + function AssetManager(textureLoader, pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.assets = {}; + this.errors = {}; + this.toLoad = 0; + this.loaded = 0; + this.rawDataUris = {}; + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + } + AssetManager.prototype.downloadText = function (url, success, error) { + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.onload = function () { + if (request.status == 200) { + success(request.responseText); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.downloadBinary = function (url, success, error) { + var request = new XMLHttpRequest(); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.responseType = "arraybuffer"; + request.onload = function () { + if (request.status == 200) { + success(new Uint8Array(request.response)); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.setRawDataURI = function (path, data) { + this.rawDataUris[this.pathPrefix + path] = data; + }; + AssetManager.prototype.loadBinary = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadBinary(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load binary " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load binary " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadText = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load text " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load text " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadTexture = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + var storagePath = path; + this.toLoad++; + var img = new Image(); + img.crossOrigin = "anonymous"; + img.onload = function (ev) { + var texture = _this.textureLoader(img); + _this.assets[storagePath] = texture; + _this.toLoad--; + _this.loaded++; + if (success) + success(path, img); + }; + img.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + _this.toLoad--; + _this.loaded++; + if (error) + error(path, "Couldn't load image " + path); + }; + if (this.rawDataUris[path]) + path = this.rawDataUris[path]; + img.src = path; + }; + AssetManager.prototype.loadTextureAtlas = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + var parent = path.lastIndexOf("/") >= 0 ? path.substring(0, path.lastIndexOf("/")) : ""; + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (atlasData) { + var pagesLoaded = { count: 0 }; + var atlasPages = new Array(); + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + atlasPages.push(parent == "" ? path : parent + "/" + path); + var image = document.createElement("img"); + image.width = 16; + image.height = 16; + return new spine.FakeTexture(image); + }); + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + return; + } + var _loop_1 = function (atlasPage) { + var pageLoadError = false; + _this.loadTexture(atlasPage, function (imagePath, image) { + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + if (!pageLoadError) { + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + return _this.get(parent == "" ? path : parent + "/" + path); + }); + _this.assets[path] = atlas; + if (success) + success(path, atlas); + _this.toLoad--; + _this.loaded++; + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + } + } + else { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + } + }, function (imagePath, errorMessage) { + pageLoadError = true; + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + }); + }; + for (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) { + var atlasPage = atlasPages_1[_i]; + _loop_1(atlasPage); + } + }, function (state, responseText) { + _this.errors[path] = "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.get = function (path) { + path = this.pathPrefix + path; + return this.assets[path]; + }; + AssetManager.prototype.remove = function (path) { + path = this.pathPrefix + path; + var asset = this.assets[path]; + if (asset.dispose) + asset.dispose(); + this.assets[path] = null; + }; + AssetManager.prototype.removeAll = function () { + for (var key in this.assets) { + var asset = this.assets[key]; + if (asset.dispose) + asset.dispose(); + } + this.assets = {}; + }; + AssetManager.prototype.isLoadingComplete = function () { + return this.toLoad == 0; + }; + AssetManager.prototype.getToLoad = function () { + return this.toLoad; + }; + AssetManager.prototype.getLoaded = function () { + return this.loaded; + }; + AssetManager.prototype.dispose = function () { + this.removeAll(); + }; + AssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + AssetManager.prototype.getErrors = function () { + return this.errors; + }; + return AssetManager; + }()); + spine.AssetManager = AssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AtlasAttachmentLoader = (function () { + function AtlasAttachmentLoader(atlas) { + this.atlas = atlas; + } + AtlasAttachmentLoader.prototype.newRegionAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.RegionAttachment(name); + attachment.setRegion(region); + return attachment; + }; + AtlasAttachmentLoader.prototype.newMeshAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.MeshAttachment(name); + attachment.region = region; + return attachment; + }; + AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function (skin, name) { + return new spine.BoundingBoxAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPathAttachment = function (skin, name) { + return new spine.PathAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPointAttachment = function (skin, name) { + return new spine.PointAttachment(name); + }; + AtlasAttachmentLoader.prototype.newClippingAttachment = function (skin, name) { + return new spine.ClippingAttachment(name); + }; + return AtlasAttachmentLoader; + }()); + spine.AtlasAttachmentLoader = AtlasAttachmentLoader; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BlendMode; + (function (BlendMode) { + BlendMode[BlendMode["Normal"] = 0] = "Normal"; + BlendMode[BlendMode["Additive"] = 1] = "Additive"; + BlendMode[BlendMode["Multiply"] = 2] = "Multiply"; + BlendMode[BlendMode["Screen"] = 3] = "Screen"; + })(BlendMode = spine.BlendMode || (spine.BlendMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Bone = (function () { + function Bone(data, skeleton, parent) { + this.children = new Array(); + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 0; + this.scaleY = 0; + this.shearX = 0; + this.shearY = 0; + this.ax = 0; + this.ay = 0; + this.arotation = 0; + this.ascaleX = 0; + this.ascaleY = 0; + this.ashearX = 0; + this.ashearY = 0; + this.appliedValid = false; + this.a = 0; + this.b = 0; + this.c = 0; + this.d = 0; + this.worldY = 0; + this.worldX = 0; + this.sorted = false; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.skeleton = skeleton; + this.parent = parent; + this.setToSetupPose(); + } + Bone.prototype.isActive = function () { + return this.active; + }; + Bone.prototype.update = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransform = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransformWith = function (x, y, rotation, scaleX, scaleY, shearX, shearY) { + this.ax = x; + this.ay = y; + this.arotation = rotation; + this.ascaleX = scaleX; + this.ascaleY = scaleY; + this.ashearX = shearX; + this.ashearY = shearY; + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + var skeleton = this.skeleton; + var rotationY = rotation + 90 + shearY; + var sx = skeleton.scaleX; + var sy = skeleton.scaleY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX * sx; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY * sx; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX * sy; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY * sy; + this.worldX = x * sx + skeleton.x; + this.worldY = y * sy + skeleton.y; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + this.worldX = pa * x + pb * y + parent.worldX; + this.worldY = pc * x + pd * y + parent.worldY; + switch (this.data.transformMode) { + case spine.TransformMode.Normal: { + var rotationY = rotation + 90 + shearY; + var la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(rotationY) * scaleY; + var lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(rotationY) * scaleY; + this.a = pa * la + pb * lc; + this.b = pa * lb + pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + return; + } + case spine.TransformMode.OnlyTranslation: { + var rotationY = rotation + 90 + shearY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY; + break; + } + case spine.TransformMode.NoRotationOrReflection: { + var s = pa * pa + pc * pc; + var prx = 0; + if (s > 0.0001) { + s = Math.abs(pa * pd - pb * pc) / s; + pa /= this.skeleton.scaleX; + pc /= this.skeleton.scaleY; + pb = pc * s; + pd = pa * s; + prx = Math.atan2(pc, pa) * spine.MathUtils.radDeg; + } + else { + pa = 0; + pc = 0; + prx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg; + } + var rx = rotation + shearX - prx; + var ry = rotation + shearY - prx + 90; + var la = spine.MathUtils.cosDeg(rx) * scaleX; + var lb = spine.MathUtils.cosDeg(ry) * scaleY; + var lc = spine.MathUtils.sinDeg(rx) * scaleX; + var ld = spine.MathUtils.sinDeg(ry) * scaleY; + this.a = pa * la - pb * lc; + this.b = pa * lb - pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + break; + } + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: { + var cos = spine.MathUtils.cosDeg(rotation); + var sin = spine.MathUtils.sinDeg(rotation); + var za = (pa * cos + pb * sin) / this.skeleton.scaleX; + var zc = (pc * cos + pd * sin) / this.skeleton.scaleY; + var s = Math.sqrt(za * za + zc * zc); + if (s > 0.00001) + s = 1 / s; + za *= s; + zc *= s; + s = Math.sqrt(za * za + zc * zc); + if (this.data.transformMode == spine.TransformMode.NoScale + && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) + s = -s; + var r = Math.PI / 2 + Math.atan2(zc, za); + var zb = Math.cos(r) * s; + var zd = Math.sin(r) * s; + var la = spine.MathUtils.cosDeg(shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY; + var lc = spine.MathUtils.sinDeg(shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY; + this.a = za * la + zb * lc; + this.b = za * lb + zb * ld; + this.c = zc * la + zd * lc; + this.d = zc * lb + zd * ld; + break; + } + } + this.a *= this.skeleton.scaleX; + this.b *= this.skeleton.scaleX; + this.c *= this.skeleton.scaleY; + this.d *= this.skeleton.scaleY; + }; + Bone.prototype.setToSetupPose = function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + this.shearX = data.shearX; + this.shearY = data.shearY; + }; + Bone.prototype.getWorldRotationX = function () { + return Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldRotationY = function () { + return Math.atan2(this.d, this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldScaleX = function () { + return Math.sqrt(this.a * this.a + this.c * this.c); + }; + Bone.prototype.getWorldScaleY = function () { + return Math.sqrt(this.b * this.b + this.d * this.d); + }; + Bone.prototype.updateAppliedTransform = function () { + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + this.ax = this.worldX; + this.ay = this.worldY; + this.arotation = Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c); + this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d); + this.ashearX = 0; + this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + var pid = 1 / (pa * pd - pb * pc); + var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY; + this.ax = (dx * pd * pid - dy * pb * pid); + this.ay = (dy * pa * pid - dx * pc * pid); + var ia = pid * pd; + var id = pid * pa; + var ib = pid * pb; + var ic = pid * pc; + var ra = ia * this.a - ib * this.c; + var rb = ia * this.b - ib * this.d; + var rc = id * this.c - ic * this.a; + var rd = id * this.d - ic * this.b; + this.ashearX = 0; + this.ascaleX = Math.sqrt(ra * ra + rc * rc); + if (this.ascaleX > 0.0001) { + var det = ra * rd - rb * rc; + this.ascaleY = det / this.ascaleX; + this.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg; + this.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg; + } + else { + this.ascaleX = 0; + this.ascaleY = Math.sqrt(rb * rb + rd * rd); + this.ashearY = 0; + this.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg; + } + }; + Bone.prototype.worldToLocal = function (world) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var invDet = 1 / (a * d - b * c); + var x = world.x - this.worldX, y = world.y - this.worldY; + world.x = (x * d * invDet - y * b * invDet); + world.y = (y * a * invDet - x * c * invDet); + return world; + }; + Bone.prototype.localToWorld = function (local) { + var x = local.x, y = local.y; + local.x = x * this.a + y * this.b + this.worldX; + local.y = x * this.c + y * this.d + this.worldY; + return local; + }; + Bone.prototype.worldToLocalRotation = function (worldRotation) { + var sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation); + return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg + this.rotation - this.shearX; + }; + Bone.prototype.localToWorldRotation = function (localRotation) { + localRotation -= this.rotation - this.shearX; + var sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation); + return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.rotateWorld = function (degrees) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees); + this.a = cos * a - sin * c; + this.b = cos * b - sin * d; + this.c = sin * a + cos * c; + this.d = sin * b + cos * d; + this.appliedValid = false; + }; + return Bone; + }()); + spine.Bone = Bone; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoneData = (function () { + function BoneData(index, name, parent) { + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 1; + this.scaleY = 1; + this.shearX = 0; + this.shearY = 0; + this.transformMode = TransformMode.Normal; + this.skinRequired = false; + this.color = new spine.Color(); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + this.index = index; + this.name = name; + this.parent = parent; + } + return BoneData; + }()); + spine.BoneData = BoneData; + var TransformMode; + (function (TransformMode) { + TransformMode[TransformMode["Normal"] = 0] = "Normal"; + TransformMode[TransformMode["OnlyTranslation"] = 1] = "OnlyTranslation"; + TransformMode[TransformMode["NoRotationOrReflection"] = 2] = "NoRotationOrReflection"; + TransformMode[TransformMode["NoScale"] = 3] = "NoScale"; + TransformMode[TransformMode["NoScaleOrReflection"] = 4] = "NoScaleOrReflection"; + })(TransformMode = spine.TransformMode || (spine.TransformMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var ConstraintData = (function () { + function ConstraintData(name, order, skinRequired) { + this.name = name; + this.order = order; + this.skinRequired = skinRequired; + } + return ConstraintData; + }()); + spine.ConstraintData = ConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Event = (function () { + function Event(time, data) { + if (data == null) + throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + return Event; + }()); + spine.Event = Event; +})(spine || (spine = {})); +var spine; +(function (spine) { + var EventData = (function () { + function EventData(name) { + this.name = name; + } + return EventData; + }()); + spine.EventData = EventData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraint = (function () { + function IkConstraint(data, skeleton) { + this.bendDirection = 0; + this.compress = false; + this.stretch = false; + this.mix = 1; + this.softness = 0; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + IkConstraint.prototype.isActive = function () { + return this.active; + }; + IkConstraint.prototype.apply = function () { + this.update(); + }; + IkConstraint.prototype.update = function () { + var target = this.target; + var bones = this.bones; + switch (bones.length) { + case 1: + this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); + break; + case 2: + this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix); + break; + } + }; + IkConstraint.prototype.apply1 = function (bone, targetX, targetY, compress, stretch, uniform, alpha) { + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var p = bone.parent; + var pa = p.a, pb = p.b, pc = p.c, pd = p.d; + var rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0; + switch (bone.data.transformMode) { + case spine.TransformMode.OnlyTranslation: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + break; + case spine.TransformMode.NoRotationOrReflection: + var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + var sa = pa / bone.skeleton.scaleX; + var sc = pc / bone.skeleton.scaleY; + pb = -sc * s * bone.skeleton.scaleX; + pd = sa * s * bone.skeleton.scaleY; + rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg; + default: + var x = targetX - p.worldX, y = targetY - p.worldY; + var d = pa * pd - pb * pc; + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + } + rotationIK += Math.atan2(ty, tx) * spine.MathUtils.radDeg; + if (bone.ascaleX < 0) + rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; + else if (rotationIK < -180) + rotationIK += 360; + var sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { + switch (bone.data.transformMode) { + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + } + var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty); + if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) { + var s = (dd / b - 1) * alpha + 1; + sx *= s; + if (uniform) + sy *= s; + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); + }; + IkConstraint.prototype.apply2 = function (parent, child, targetX, targetY, bendDir, stretch, softness, alpha) { + if (alpha == 0) { + child.updateWorldTransform(); + return; + } + if (!parent.appliedValid) + parent.updateAppliedTransform(); + if (!child.appliedValid) + child.updateAppliedTransform(); + var px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX; + var os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } + else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } + else + os2 = 0; + var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + var u = Math.abs(psx - psy) <= 0.0001; + if (!u) { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } + else { + cy = child.ay; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } + var pp = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; + if (l1 < 0.0001) { + this.apply1(parent, targetX, targetY, false, stretch, false, alpha); + child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + var dd = tx * tx + ty * ty; + if (softness != 0) { + softness *= psx * (csx + 1) / 2; + var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + var p = Math.min(1, sd / (softness * 2)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: if (u) { + l2 *= psx; + var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) + cos = -1; + else if (cos > 1) { + cos = 1; + if (stretch) + sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + } + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } + else { + a = psx * l2; + b = psy * l2; + var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + var c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + var q = Math.sqrt(d); + if (c1 < 0) + q = -q; + q = -(c1 + q) / 2; + var r0 = q / c2, r1 = c / q; + var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + if (r * r <= dd) { + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; + } + } + var minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; + } + } + if (dd <= (minDist + maxDist) / 2) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } + else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + var os = Math.atan2(cy, cx) * s2; + var rotation = parent.arotation; + a1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) + a1 += 360; + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0); + rotation = child.arotation; + a2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) + a2 += 360; + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + }; + return IkConstraint; + }()); + spine.IkConstraint = IkConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraintData = (function (_super) { + __extends(IkConstraintData, _super); + function IkConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.bendDirection = 1; + _this.compress = false; + _this.stretch = false; + _this.uniform = false; + _this.mix = 1; + _this.softness = 0; + return _this; + } + return IkConstraintData; + }(spine.ConstraintData)); + spine.IkConstraintData = IkConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraint = (function () { + function PathConstraint(data, skeleton) { + this.position = 0; + this.spacing = 0; + this.rotateMix = 0; + this.translateMix = 0; + this.spaces = new Array(); + this.positions = new Array(); + this.world = new Array(); + this.curves = new Array(); + this.lengths = new Array(); + this.segments = new Array(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0, n = data.bones.length; i < n; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findSlot(data.target.name); + this.position = data.position; + this.spacing = data.spacing; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + } + PathConstraint.prototype.isActive = function () { + return this.active; + }; + PathConstraint.prototype.apply = function () { + this.update(); + }; + PathConstraint.prototype.update = function () { + var attachment = this.target.getAttachment(); + if (!(attachment instanceof spine.PathAttachment)) + return; + var rotateMix = this.rotateMix, translateMix = this.translateMix; + var translate = translateMix > 0, rotate = rotateMix > 0; + if (!translate && !rotate) + return; + var data = this.data; + var percentSpacing = data.spacingMode == spine.SpacingMode.Percent; + var rotateMode = data.rotateMode; + var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; + var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + var bones = this.bones; + var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; + var spacing = this.spacing; + if (scale || !percentSpacing) { + if (scale) + lengths = spine.Utils.setArraySize(this.lengths, boneCount); + var lengthSpacing = data.spacingMode == spine.SpacingMode.Length; + for (var i = 0, n = spacesCount - 1; i < n;) { + var bone = bones[i]; + var setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + if (scale) + lengths[i] = 0; + spaces[++i] = 0; + } + else if (percentSpacing) { + if (scale) { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_1 = Math.sqrt(x * x + y * y); + lengths[i] = length_1; + } + spaces[++i] = spacing; + } + else { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_2 = Math.sqrt(x * x + y * y); + if (scale) + lengths[i] = length_2; + spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength; + } + } + } + else { + for (var i = 1; i < spacesCount; i++) + spaces[i] = spacing; + } + var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing); + var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + var tip = false; + if (offsetRotation == 0) + tip = rotateMode == spine.RotateMode.Chain; + else { + tip = false; + var p = this.target.bone; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + } + for (var i = 0, p = 3; i < boneCount; i++, p += 3) { + var bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * translateMix; + bone.worldY += (boneY - bone.worldY) * translateMix; + var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + var length_3 = lengths[i]; + if (length_3 != 0) { + var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * rotateMix + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + if (tangents) + r = positions[p - 1]; + else if (spaces[i + 1] == 0) + r = positions[p + 2]; + else + r = Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + var length_4 = bone.data.length; + boneX += (length_4 * (cos * a - sin * c) - dx) * rotateMix; + boneY += (length_4 * (sin * a + cos * c) - dy) * rotateMix; + } + else { + r += offsetRotation; + } + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.appliedValid = false; + } + }; + PathConstraint.prototype.computeWorldPositions = function (path, spacesCount, tangents, percentPosition, percentSpacing) { + var target = this.target; + var position = this.position; + var spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null; + var closed = path.closed; + var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE; + if (!path.constantSpeed) { + var lengths = path.lengths; + curveCount -= closed ? 1 : 2; + var pathLength_1 = lengths[curveCount]; + if (percentPosition) + position *= pathLength_1; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength_1; + } + world = spine.Utils.setArraySize(this.world, 8); + for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength_1; + if (p < 0) + p += pathLength_1; + curve = 0; + } + else if (p < 0) { + if (prevCurve != PathConstraint.BEFORE) { + prevCurve = PathConstraint.BEFORE; + path.computeWorldVertices(target, 2, 4, world, 0, 2); + } + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength_1) { + if (prevCurve != PathConstraint.AFTER) { + prevCurve = PathConstraint.AFTER; + path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength_1, world, 0, out, o); + continue; + } + for (;; curve++) { + var length_5 = lengths[curve]; + if (p > length_5) + continue; + if (curve == 0) + p /= length_5; + else { + var prev = lengths[curve - 1]; + p = (p - prev) / (length_5 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); + path.computeWorldVertices(target, 0, 4, world, 4, 2); + } + else + path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2); + } + this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0)); + } + return out; + } + if (closed) { + verticesLength += 2; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); + path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } + else { + curveCount--; + verticesLength -= 4; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + var curves = spine.Utils.setArraySize(this.curves, curveCount); + var pathLength = 0; + var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (var i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (percentPosition) + position *= pathLength; + else + position *= pathLength / path.lengths[curveCount - 1]; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength; + } + var segments = this.segments; + var curveLength = 0; + for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength; + if (p < 0) + p += pathLength; + curve = 0; + } + else if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + for (;; curve++) { + var length_6 = curves[curve]; + if (p > length_6) + continue; + if (curve == 0) + p /= length_6; + else { + var prev = curves[curve - 1]; + p = (p - prev) / (length_6 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + var ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + p *= curveLength; + for (;; segment++) { + var length_7 = segments[segment]; + if (p > length_7) + continue; + if (segment == 0) + p /= length_7; + else { + var prev = segments[segment - 1]; + p = segment + (p - prev) / (length_7 - prev); + } + break; + } + this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); + } + return out; + }; + PathConstraint.prototype.addBeforePosition = function (p, temp, i, out, o) { + var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addAfterPosition = function (p, temp, i, out, o) { + var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addCurvePosition = function (p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { + if (p == 0 || isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + var ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) { + if (p < 0.001) + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + else + out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + }; + PathConstraint.NONE = -1; + PathConstraint.BEFORE = -2; + PathConstraint.AFTER = -3; + PathConstraint.epsilon = 0.00001; + return PathConstraint; + }()); + spine.PathConstraint = PathConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraintData = (function (_super) { + __extends(PathConstraintData, _super); + function PathConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + return _this; + } + return PathConstraintData; + }(spine.ConstraintData)); + spine.PathConstraintData = PathConstraintData; + var PositionMode; + (function (PositionMode) { + PositionMode[PositionMode["Fixed"] = 0] = "Fixed"; + PositionMode[PositionMode["Percent"] = 1] = "Percent"; + })(PositionMode = spine.PositionMode || (spine.PositionMode = {})); + var SpacingMode; + (function (SpacingMode) { + SpacingMode[SpacingMode["Length"] = 0] = "Length"; + SpacingMode[SpacingMode["Fixed"] = 1] = "Fixed"; + SpacingMode[SpacingMode["Percent"] = 2] = "Percent"; + })(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {})); + var RotateMode; + (function (RotateMode) { + RotateMode[RotateMode["Tangent"] = 0] = "Tangent"; + RotateMode[RotateMode["Chain"] = 1] = "Chain"; + RotateMode[RotateMode["ChainScale"] = 2] = "ChainScale"; + })(RotateMode = spine.RotateMode || (spine.RotateMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Assets = (function () { + function Assets(clientId) { + this.toLoad = new Array(); + this.assets = {}; + this.clientId = clientId; + } + Assets.prototype.loaded = function () { + var i = 0; + for (var v in this.assets) + i++; + return i; + }; + return Assets; + }()); + var SharedAssetManager = (function () { + function SharedAssetManager(pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.clientAssets = {}; + this.queuedAssets = {}; + this.rawAssets = {}; + this.errors = {}; + this.pathPrefix = pathPrefix; + } + SharedAssetManager.prototype.queueAsset = function (clientId, textureLoader, path) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) { + clientAssets = new Assets(clientId); + this.clientAssets[clientId] = clientAssets; + } + if (textureLoader !== null) + clientAssets.textureLoader = textureLoader; + clientAssets.toLoad.push(path); + if (this.queuedAssets[path] === path) { + return false; + } + else { + this.queuedAssets[path] = path; + return true; + } + }; + SharedAssetManager.prototype.loadText = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = request.responseText; + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadJson = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = JSON.parse(request.responseText); + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadTexture = function (clientId, textureLoader, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, textureLoader, path)) + return; + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + if (isWebWorker) { + var options = { mode: "cors" }; + fetch(path, options).then(function (response) { + if (!response.ok) { + _this.errors[path] = "Couldn't load image " + path; + } + return response.blob(); + }).then(function (blob) { + return createImageBitmap(blob, { + premultiplyAlpha: 'none', + colorSpaceConversion: 'none' + }); + }).then(function (bitmap) { + _this.rawAssets[path] = bitmap; + }); + } + else { + var img_1 = new Image(); + img_1.crossOrigin = "anonymous"; + img_1.onload = function (ev) { + _this.rawAssets[path] = img_1; + }; + img_1.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + }; + img_1.src = path; + } + }; + SharedAssetManager.prototype.get = function (clientId, path) { + path = this.pathPrefix + path; + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + return clientAssets.assets[path]; + }; + SharedAssetManager.prototype.updateClientAssets = function (clientAssets) { + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + for (var i = 0; i < clientAssets.toLoad.length; i++) { + var path = clientAssets.toLoad[i]; + var asset = clientAssets.assets[path]; + if (asset === null || asset === undefined) { + var rawAsset = this.rawAssets[path]; + if (rawAsset === null || rawAsset === undefined) + continue; + if (isWebWorker) { + if (rawAsset instanceof ImageBitmap) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + else { + if (rawAsset instanceof HTMLImageElement) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + } + } + }; + SharedAssetManager.prototype.isLoadingComplete = function (clientId) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + this.updateClientAssets(clientAssets); + return clientAssets.toLoad.length == clientAssets.loaded(); + }; + SharedAssetManager.prototype.dispose = function () { + }; + SharedAssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + SharedAssetManager.prototype.getErrors = function () { + return this.errors; + }; + return SharedAssetManager; + }()); + spine.SharedAssetManager = SharedAssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Skeleton = (function () { + function Skeleton(data) { + this._updateCache = new Array(); + this.updateCacheReset = new Array(); + this.time = 0; + this.scaleX = 1; + this.scaleY = 1; + this.x = 0; + this.y = 0; + if (data == null) + throw new Error("data cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) { + var boneData = data.bones[i]; + var bone = void 0; + if (boneData.parent == null) + bone = new spine.Bone(boneData, this, null); + else { + var parent_1 = this.bones[boneData.parent.index]; + bone = new spine.Bone(boneData, this, parent_1); + parent_1.children.push(bone); + } + this.bones.push(bone); + } + this.slots = new Array(); + this.drawOrder = new Array(); + for (var i = 0; i < data.slots.length; i++) { + var slotData = data.slots[i]; + var bone = this.bones[slotData.boneData.index]; + var slot = new spine.Slot(slotData, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } + this.ikConstraints = new Array(); + for (var i = 0; i < data.ikConstraints.length; i++) { + var ikConstraintData = data.ikConstraints[i]; + this.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this)); + } + this.transformConstraints = new Array(); + for (var i = 0; i < data.transformConstraints.length; i++) { + var transformConstraintData = data.transformConstraints[i]; + this.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this)); + } + this.pathConstraints = new Array(); + for (var i = 0; i < data.pathConstraints.length; i++) { + var pathConstraintData = data.pathConstraints[i]; + this.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this)); + } + this.color = new spine.Color(1, 1, 1, 1); + this.updateCache(); + } + Skeleton.prototype.updateCache = function () { + var updateCache = this._updateCache; + updateCache.length = 0; + this.updateCacheReset.length = 0; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + } + if (this.skin != null) { + var skinBones = this.skin.bones; + for (var i = 0, n = this.skin.bones.length; i < n; i++) { + var bone = this.bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (bone != null); + } + } + var ikConstraints = this.ikConstraints; + var transformConstraints = this.transformConstraints; + var pathConstraints = this.pathConstraints; + var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length; + var constraintCount = ikCount + transformCount + pathCount; + outer: for (var i = 0; i < constraintCount; i++) { + for (var ii = 0; ii < ikCount; ii++) { + var constraint = ikConstraints[ii]; + if (constraint.data.order == i) { + this.sortIkConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < transformCount; ii++) { + var constraint = transformConstraints[ii]; + if (constraint.data.order == i) { + this.sortTransformConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < pathCount; ii++) { + var constraint = pathConstraints[ii]; + if (constraint.data.order == i) { + this.sortPathConstraint(constraint); + continue outer; + } + } + } + for (var i = 0, n = bones.length; i < n; i++) + this.sortBone(bones[i]); + }; + Skeleton.prototype.sortIkConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var target = constraint.target; + this.sortBone(target); + var constrained = constraint.bones; + var parent = constrained[0]; + this.sortBone(parent); + if (constrained.length > 1) { + var child = constrained[constrained.length - 1]; + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + this._updateCache.push(constraint); + this.sortReset(parent.children); + constrained[constrained.length - 1].sorted = true; + }; + Skeleton.prototype.sortPathConstraint = function (constraint) { + constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var slot = constraint.target; + var slotIndex = slot.data.index; + var slotBone = slot.bone; + if (this.skin != null) + this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); + if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin) + this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); + for (var i = 0, n = this.data.skins.length; i < n; i++) + this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); + var attachment = slot.getAttachment(); + if (attachment instanceof spine.PathAttachment) + this.sortPathConstraintAttachmentWith(attachment, slotBone); + var constrained = constraint.bones; + var boneCount = constrained.length; + for (var i = 0; i < boneCount; i++) + this.sortBone(constrained[i]); + this._updateCache.push(constraint); + for (var i = 0; i < boneCount; i++) + this.sortReset(constrained[i].children); + for (var i = 0; i < boneCount; i++) + constrained[i].sorted = true; + }; + Skeleton.prototype.sortTransformConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + this.sortBone(constraint.target); + var constrained = constraint.bones; + var boneCount = constrained.length; + if (constraint.data.local) { + for (var i = 0; i < boneCount; i++) { + var child = constrained[i]; + this.sortBone(child.parent); + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + } + else { + for (var i = 0; i < boneCount; i++) { + this.sortBone(constrained[i]); + } + } + this._updateCache.push(constraint); + for (var ii = 0; ii < boneCount; ii++) + this.sortReset(constrained[ii].children); + for (var ii = 0; ii < boneCount; ii++) + constrained[ii].sorted = true; + }; + Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) { + var attachments = skin.attachments[slotIndex]; + if (!attachments) + return; + for (var key in attachments) { + this.sortPathConstraintAttachmentWith(attachments[key], slotBone); + } + }; + Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) { + if (!(attachment instanceof spine.PathAttachment)) + return; + var pathBones = attachment.bones; + if (pathBones == null) + this.sortBone(slotBone); + else { + var bones = this.bones; + var i = 0; + while (i < pathBones.length) { + var boneCount = pathBones[i++]; + for (var n = i + boneCount; i < n; i++) { + var boneIndex = pathBones[i]; + this.sortBone(bones[boneIndex]); + } + } + } + }; + Skeleton.prototype.sortBone = function (bone) { + if (bone.sorted) + return; + var parent = bone.parent; + if (parent != null) + this.sortBone(parent); + bone.sorted = true; + this._updateCache.push(bone); + }; + Skeleton.prototype.sortReset = function (bones) { + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.active) + continue; + if (bone.sorted) + this.sortReset(bone.children); + bone.sorted = false; + } + }; + Skeleton.prototype.updateWorldTransform = function () { + var updateCacheReset = this.updateCacheReset; + for (var i = 0, n = updateCacheReset.length; i < n; i++) { + var bone = updateCacheReset[i]; + bone.ax = bone.x; + bone.ay = bone.y; + bone.arotation = bone.rotation; + bone.ascaleX = bone.scaleX; + bone.ascaleY = bone.scaleY; + bone.ashearX = bone.shearX; + bone.ashearY = bone.shearY; + bone.appliedValid = true; + } + var updateCache = this._updateCache; + for (var i = 0, n = updateCache.length; i < n; i++) + updateCache[i].update(); + }; + Skeleton.prototype.setToSetupPose = function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }; + Skeleton.prototype.setBonesToSetupPose = function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + var data = constraint.data; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + } + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + var data = constraint.data; + constraint.position = data.position; + constraint.spacing = data.spacing; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + } + }; + Skeleton.prototype.setSlotsToSetupPose = function () { + var slots = this.slots; + spine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length); + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(); + }; + Skeleton.prototype.getRootBone = function () { + if (this.bones.length == 0) + return null; + return this.bones[0]; + }; + Skeleton.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.data.name == boneName) + return bone; + } + return null; + }; + Skeleton.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) + return i; + return -1; + }; + Skeleton.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) + return slot; + } + return null; + }; + Skeleton.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) + return i; + return -1; + }; + Skeleton.prototype.setSkinByName = function (skinName) { + var skin = this.data.findSkin(skinName); + if (skin == null) + throw new Error("Skin not found: " + skinName); + this.setSkin(skin); + }; + Skeleton.prototype.setSkin = function (newSkin) { + if (newSkin == this.skin) + return; + if (newSkin != null) { + if (this.skin != null) + newSkin.attachAll(this, this.skin); + else { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var name_1 = slot.data.attachmentName; + if (name_1 != null) { + var attachment = newSkin.getAttachment(i, name_1); + if (attachment != null) + slot.setAttachment(attachment); + } + } + } + } + this.skin = newSkin; + this.updateCache(); + }; + Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) { + return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName); + }; + Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) { + if (attachmentName == null) + throw new Error("attachmentName cannot be null."); + if (this.skin != null) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment != null) + return attachment; + } + if (this.data.defaultSkin != null) + return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }; + Skeleton.prototype.setAttachment = function (slotName, attachmentName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName != null) { + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) + throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); + } + slot.setAttachment(attachment); + return; + } + } + throw new Error("Slot not found: " + slotName); + }; + Skeleton.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var ikConstraint = ikConstraints[i]; + if (ikConstraint.data.name == constraintName) + return ikConstraint; + } + return null; + }; + Skeleton.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.getBounds = function (offset, size, temp) { + if (temp === void 0) { temp = new Array(2); } + if (offset == null) + throw new Error("offset cannot be null."); + if (size == null) + throw new Error("size cannot be null."); + var drawOrder = this.drawOrder; + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + if (!slot.bone.active) + continue; + var verticesLength = 0; + var vertices = null; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.RegionAttachment) { + verticesLength = 8; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + attachment.computeWorldVertices(slot.bone, vertices, 0, 2); + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + verticesLength = mesh.worldVerticesLength; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); + } + if (vertices != null) { + for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) { + var x = vertices[ii], y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + } + offset.set(minX, minY); + size.set(maxX - minX, maxY - minY); + }; + Skeleton.prototype.update = function (delta) { + this.time += delta; + }; + return Skeleton; + }()); + spine.Skeleton = Skeleton; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBinary = (function () { + function SkeletonBinary(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonBinary.prototype.readSkeletonData = function (binary) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + skeletonData.name = ""; + var input = new BinaryInput(binary); + skeletonData.hash = input.readString(); + skeletonData.version = input.readString(); + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + var nonessential = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + var n = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) + input.strings.push(input.readString()); + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var name_2 = input.readString(); + var parent_2 = i == 0 ? null : skeletonData.bones[input.readInt(true)]; + var data = new spine.BoneData(i, name_2, parent_2); + data.rotation = input.readFloat(); + data.x = input.readFloat() * scale; + data.y = input.readFloat() * scale; + data.scaleX = input.readFloat(); + data.scaleY = input.readFloat(); + data.shearX = input.readFloat(); + data.shearY = input.readFloat(); + data.length = input.readFloat() * scale; + data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)]; + data.skinRequired = input.readBoolean(); + if (nonessential) + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + skeletonData.bones.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var slotName = input.readString(); + var boneData = skeletonData.bones[input.readInt(true)]; + var data = new spine.SlotData(i, slotName, boneData); + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + var darkColor = input.readInt32(); + if (darkColor != -1) + spine.Color.rgb888ToColor(data.darkColor = new spine.Color(), darkColor); + data.attachmentName = input.readStringRef(); + data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)]; + skeletonData.slots.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.IkConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.mix = input.readFloat(); + data.softness = input.readFloat() * scale; + data.bendDirection = input.readByte(); + data.compress = input.readBoolean(); + data.stretch = input.readBoolean(); + data.uniform = input.readBoolean(); + skeletonData.ikConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.TransformConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.local = input.readBoolean(); + data.relative = input.readBoolean(); + data.offsetRotation = input.readFloat(); + data.offsetX = input.readFloat() * scale; + data.offsetY = input.readFloat() * scale; + data.offsetScaleX = input.readFloat(); + data.offsetScaleY = input.readFloat(); + data.offsetShearY = input.readFloat(); + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + data.scaleMix = input.readFloat(); + data.shearMix = input.readFloat(); + skeletonData.transformConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.PathConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.slots[input.readInt(true)]; + data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)]; + data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)]; + data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)]; + data.offsetRotation = input.readFloat(); + data.position = input.readFloat(); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = input.readFloat(); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + skeletonData.pathConstraints.push(data); + } + var defaultSkin = this.readSkin(input, skeletonData, true, nonessential); + if (defaultSkin != null) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + { + var i = skeletonData.skins.length; + spine.Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true)); + for (; i < n; i++) + skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential); + } + n = this.linkedMeshes.length; + for (var i = 0; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_3 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_3 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_3); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var data = new spine.EventData(input.readStringRef()); + data.intValue = input.readInt(false); + data.floatValue = input.readFloat(); + data.stringValue = input.readString(); + data.audioPath = input.readString(); + if (data.audioPath != null) { + data.volume = input.readFloat(); + data.balance = input.readFloat(); + } + skeletonData.events.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) + skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData)); + return skeletonData; + }; + SkeletonBinary.prototype.readSkin = function (input, skeletonData, defaultSkin, nonessential) { + var skin = null; + var slotCount = 0; + if (defaultSkin) { + slotCount = input.readInt(true); + if (slotCount == 0) + return null; + skin = new spine.Skin("default"); + } + else { + skin = new spine.Skin(input.readStringRef()); + skin.bones.length = input.readInt(true); + for (var i = 0, n = skin.bones.length; i < n; i++) + skin.bones[i] = skeletonData.bones[input.readInt(true)]; + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]); + slotCount = input.readInt(true); + } + for (var i = 0; i < slotCount; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var name_3 = input.readStringRef(); + var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_3, nonessential); + if (attachment != null) + skin.setAttachment(slotIndex, name_3, attachment); + } + } + return skin; + }; + SkeletonBinary.prototype.readAttachment = function (input, skeletonData, skin, slotIndex, attachmentName, nonessential) { + var scale = this.scale; + var name = input.readStringRef(); + if (name == null) + name = attachmentName; + var typeIndex = input.readByte(); + var type = SkeletonBinary.AttachmentTypeValues[typeIndex]; + switch (type) { + case spine.AttachmentType.Region: { + var path = input.readStringRef(); + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var scaleX = input.readFloat(); + var scaleY = input.readFloat(); + var width = input.readFloat(); + var height = input.readFloat(); + var color = input.readInt32(); + if (path == null) + path = name; + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = x * scale; + region.y = y * scale; + region.scaleX = scaleX; + region.scaleY = scaleY; + region.rotation = rotation; + region.width = width * scale; + region.height = height * scale; + spine.Color.rgba8888ToColor(region.color, color); + region.updateOffset(); + return region; + } + case spine.AttachmentType.BoundingBox: { + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + box.worldVerticesLength = vertexCount << 1; + box.vertices = vertices.vertices; + box.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(box.color, color); + return box; + } + case spine.AttachmentType.Mesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var vertexCount = input.readInt(true); + var uvs = this.readFloatArray(input, vertexCount << 1, 1); + var triangles = this.readShortArray(input); + var vertices = this.readVertices(input, vertexCount); + var hullLength = input.readInt(true); + var edges = null; + var width = 0, height = 0; + if (nonessential) { + edges = this.readShortArray(input); + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertexCount << 1; + mesh.triangles = triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.hullLength = hullLength << 1; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + return mesh; + } + case spine.AttachmentType.LinkedMesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var skinName = input.readStringRef(); + var parent_4 = input.readStringRef(); + var inheritDeform = input.readBoolean(); + var width = 0, height = 0; + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_4, inheritDeform)); + return mesh; + } + case spine.AttachmentType.Path: { + var closed_1 = input.readBoolean(); + var constantSpeed = input.readBoolean(); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0, n = lengths.length; i < n; i++) + lengths[i] = input.readFloat() * scale; + var color = nonessential ? input.readInt32() : 0; + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = closed_1; + path.constantSpeed = constantSpeed; + path.worldVerticesLength = vertexCount << 1; + path.vertices = vertices.vertices; + path.bones = vertices.bones; + path.lengths = lengths; + if (nonessential) + spine.Color.rgba8888ToColor(path.color, color); + return path; + } + case spine.AttachmentType.Point: { + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var color = nonessential ? input.readInt32() : 0; + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + if (nonessential) + spine.Color.rgba8888ToColor(point.color, color); + return point; + } + case spine.AttachmentType.Clipping: { + var endSlotIndex = input.readInt(true); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.worldVerticesLength = vertexCount << 1; + clip.vertices = vertices.vertices; + clip.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(clip.color, color); + return clip; + } + } + return null; + }; + SkeletonBinary.prototype.readVertices = function (input, vertexCount) { + var verticesLength = vertexCount << 1; + var vertices = new Vertices(); + var scale = this.scale; + if (!input.readBoolean()) { + vertices.vertices = this.readFloatArray(input, verticesLength, scale); + return vertices; + } + var weights = new Array(); + var bonesArray = new Array(); + for (var i = 0; i < vertexCount; i++) { + var boneCount = input.readInt(true); + bonesArray.push(boneCount); + for (var ii = 0; ii < boneCount; ii++) { + bonesArray.push(input.readInt(true)); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat()); + } + } + vertices.vertices = spine.Utils.toFloatArray(weights); + vertices.bones = bonesArray; + return vertices; + }; + SkeletonBinary.prototype.readFloatArray = function (input, n, scale) { + var array = new Array(n); + if (scale == 1) { + for (var i = 0; i < n; i++) + array[i] = input.readFloat(); + } + else { + for (var i = 0; i < n; i++) + array[i] = input.readFloat() * scale; + } + return array; + }; + SkeletonBinary.prototype.readShortArray = function (input) { + var n = input.readInt(true); + var array = new Array(n); + for (var i = 0; i < n; i++) + array[i] = input.readShort(); + return array; + }; + SkeletonBinary.prototype.readAnimation = function (input, name, skeletonData) { + var timelines = new Array(); + var scale = this.scale; + var duration = 0; + var tempColor1 = new spine.Color(); + var tempColor2 = new spine.Color(); + for (var i = 0, n = input.readInt(true); i < n; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.SLOT_ATTACHMENT: { + var timeline = new spine.AttachmentTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) + timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef()); + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + break; + } + case SkeletonBinary.SLOT_COLOR: { + var timeline = new spine.ColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.ColorTimeline.ENTRIES]); + break; + } + case SkeletonBinary.SLOT_TWO_COLOR: { + var timeline = new spine.TwoColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + spine.Color.rgb888ToColor(tempColor2, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TwoColorTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var boneIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.BONE_ROTATE: { + var timeline = new spine.RotateTimeline(frameCount); + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.RotateTimeline.ENTRIES]); + break; + } + case SkeletonBinary.BONE_TRANSLATE: + case SkeletonBinary.BONE_SCALE: + case SkeletonBinary.BONE_SHEAR: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.BONE_SCALE) + timeline = new spine.ScaleTimeline(frameCount); + else if (timelineType == SkeletonBinary.BONE_SHEAR) + timeline = new spine.ShearTimeline(frameCount); + else { + timeline = new spine.TranslateTimeline(frameCount); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TranslateTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.IkConstraintTimeline(frameCount); + timeline.ikConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.TransformConstraintTimeline(frameCount); + timeline.transformConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var data = skeletonData.pathConstraints[index]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.PATH_POSITION: + case SkeletonBinary.PATH_SPACING: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.PATH_SPACING) { + timeline = new spine.PathConstraintSpacingTimeline(frameCount); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(frameCount); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + break; + } + case SkeletonBinary.PATH_MIX: { + var timeline = new spine.PathConstraintMixTimeline(frameCount); + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var skin = skeletonData.skins[input.readInt(true)]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var slotIndex = input.readInt(true); + for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { + var attachment = skin.getAttachment(slotIndex, input.readStringRef()); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var frameCount = input.readInt(true); + var timeline = new spine.DeformTimeline(frameCount); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + var deform = void 0; + var end = input.readInt(true); + if (end == 0) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = input.readInt(true); + end += start; + if (scale == 1) { + for (var v = start; v < end; v++) + deform[v] = input.readFloat(); + } + else { + for (var v = start; v < end; v++) + deform[v] = input.readFloat() * scale; + } + if (!weighted) { + for (var v = 0, vn = deform.length; v < vn; v++) + deform[v] += vertices[v]; + } + } + timeline.setFrame(frameIndex, time, deform); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + } + } + } + var drawOrderCount = input.readInt(true); + if (drawOrderCount > 0) { + var timeline = new spine.DrawOrderTimeline(drawOrderCount); + var slotCount = skeletonData.slots.length; + for (var i = 0; i < drawOrderCount; i++) { + var time = input.readFloat(); + var offsetCount = input.readInt(true); + var drawOrder = spine.Utils.newArray(slotCount, 0); + for (var ii = slotCount - 1; ii >= 0; ii--) + drawOrder[ii] = -1; + var unchanged = spine.Utils.newArray(slotCount - offsetCount, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var ii = 0; ii < offsetCount; ii++) { + var slotIndex = input.readInt(true); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + input.readInt(true)] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var ii = slotCount - 1; ii >= 0; ii--) + if (drawOrder[ii] == -1) + drawOrder[ii] = unchanged[--unchangedIndex]; + timeline.setFrame(i, time, drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[drawOrderCount - 1]); + } + var eventCount = input.readInt(true); + if (eventCount > 0) { + var timeline = new spine.EventTimeline(eventCount); + for (var i = 0; i < eventCount; i++) { + var time = input.readFloat(); + var eventData = skeletonData.events[input.readInt(true)]; + var event_4 = new spine.Event(time, eventData); + event_4.intValue = input.readInt(false); + event_4.floatValue = input.readFloat(); + event_4.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue; + if (event_4.data.audioPath != null) { + event_4.volume = input.readFloat(); + event_4.balance = input.readFloat(); + } + timeline.setFrame(i, event_4); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[eventCount - 1]); + } + return new spine.Animation(name, timelines, duration); + }; + SkeletonBinary.prototype.readCurve = function (input, frameIndex, timeline) { + switch (input.readByte()) { + case SkeletonBinary.CURVE_STEPPED: + timeline.setStepped(frameIndex); + break; + case SkeletonBinary.CURVE_BEZIER: + this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + break; + } + }; + SkeletonBinary.prototype.setCurve = function (timeline, frameIndex, cx1, cy1, cx2, cy2) { + timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2); + }; + SkeletonBinary.AttachmentTypeValues = [0, 1, 2, 3, 4, 5, 6]; + SkeletonBinary.TransformModeValues = [spine.TransformMode.Normal, spine.TransformMode.OnlyTranslation, spine.TransformMode.NoRotationOrReflection, spine.TransformMode.NoScale, spine.TransformMode.NoScaleOrReflection]; + SkeletonBinary.PositionModeValues = [spine.PositionMode.Fixed, spine.PositionMode.Percent]; + SkeletonBinary.SpacingModeValues = [spine.SpacingMode.Length, spine.SpacingMode.Fixed, spine.SpacingMode.Percent]; + SkeletonBinary.RotateModeValues = [spine.RotateMode.Tangent, spine.RotateMode.Chain, spine.RotateMode.ChainScale]; + SkeletonBinary.BlendModeValues = [spine.BlendMode.Normal, spine.BlendMode.Additive, spine.BlendMode.Multiply, spine.BlendMode.Screen]; + SkeletonBinary.BONE_ROTATE = 0; + SkeletonBinary.BONE_TRANSLATE = 1; + SkeletonBinary.BONE_SCALE = 2; + SkeletonBinary.BONE_SHEAR = 3; + SkeletonBinary.SLOT_ATTACHMENT = 0; + SkeletonBinary.SLOT_COLOR = 1; + SkeletonBinary.SLOT_TWO_COLOR = 2; + SkeletonBinary.PATH_POSITION = 0; + SkeletonBinary.PATH_SPACING = 1; + SkeletonBinary.PATH_MIX = 2; + SkeletonBinary.CURVE_LINEAR = 0; + SkeletonBinary.CURVE_STEPPED = 1; + SkeletonBinary.CURVE_BEZIER = 2; + return SkeletonBinary; + }()); + spine.SkeletonBinary = SkeletonBinary; + var BinaryInput = (function () { + function BinaryInput(data, strings, index, buffer) { + if (strings === void 0) { strings = new Array(); } + if (index === void 0) { index = 0; } + if (buffer === void 0) { buffer = new DataView(data.buffer); } + this.strings = strings; + this.index = index; + this.buffer = buffer; + } + BinaryInput.prototype.readByte = function () { + return this.buffer.getInt8(this.index++); + }; + BinaryInput.prototype.readShort = function () { + var value = this.buffer.getInt16(this.index); + this.index += 2; + return value; + }; + BinaryInput.prototype.readInt32 = function () { + var value = this.buffer.getInt32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readInt = function (optimizePositive) { + var b = this.readByte(); + var result = b & 0x7F; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 7; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 14; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 21; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 28; + } + } + } + } + return optimizePositive ? result : ((result >>> 1) ^ -(result & 1)); + }; + BinaryInput.prototype.readStringRef = function () { + var index = this.readInt(true); + return index == 0 ? null : this.strings[index - 1]; + }; + BinaryInput.prototype.readString = function () { + var byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + case 1: + return ""; + } + byteCount--; + var chars = ""; + var charCount = 0; + for (var i = 0; i < byteCount;) { + var b = this.readByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F)); + i += 2; + break; + case 14: + chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F)); + i += 3; + break; + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + }; + BinaryInput.prototype.readFloat = function () { + var value = this.buffer.getFloat32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readBoolean = function () { + return this.readByte() != 0; + }; + return BinaryInput; + }()); + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); + var Vertices = (function () { + function Vertices(bones, vertices) { + if (bones === void 0) { bones = null; } + if (vertices === void 0) { vertices = null; } + this.bones = bones; + this.vertices = vertices; + } + return Vertices; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBounds = (function () { + function SkeletonBounds() { + this.minX = 0; + this.minY = 0; + this.maxX = 0; + this.maxY = 0; + this.boundingBoxes = new Array(); + this.polygons = new Array(); + this.polygonPool = new spine.Pool(function () { + return spine.Utils.newFloatArray(16); + }); + } + SkeletonBounds.prototype.update = function (skeleton, updateAabb) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + var boundingBoxes = this.boundingBoxes; + var polygons = this.polygons; + var polygonPool = this.polygonPool; + var slots = skeleton.slots; + var slotCount = slots.length; + boundingBoxes.length = 0; + polygonPool.freeAll(polygons); + polygons.length = 0; + for (var i = 0; i < slotCount; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.BoundingBoxAttachment) { + var boundingBox = attachment; + boundingBoxes.push(boundingBox); + var polygon = polygonPool.obtain(); + if (polygon.length != boundingBox.worldVerticesLength) { + polygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength); + } + polygons.push(polygon); + boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2); + } + } + if (updateAabb) { + this.aabbCompute(); + } + else { + this.minX = Number.POSITIVE_INFINITY; + this.minY = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.maxY = Number.NEGATIVE_INFINITY; + } + }; + SkeletonBounds.prototype.aabbCompute = function () { + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) { + var polygon = polygons[i]; + var vertices = polygon; + for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) { + var x = vertices[ii]; + var y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + }; + SkeletonBounds.prototype.aabbContainsPoint = function (x, y) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + }; + SkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) { + var minX = this.minX; + var minY = this.minY; + var maxX = this.maxX; + var maxY = this.maxY; + if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY)) + return false; + var m = (y2 - y1) / (x2 - x1); + var y = m * (minX - x1) + y1; + if (y > minY && y < maxY) + return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) + return true; + var x = (minY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + return false; + }; + SkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + }; + SkeletonBounds.prototype.containsPoint = function (x, y) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.containsPointPolygon(polygons[i], x, y)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) { + var vertices = polygon; + var nn = polygon.length; + var prevIndex = nn - 2; + var inside = false; + for (var ii = 0; ii < nn; ii += 2) { + var vertexY = vertices[ii + 1]; + var prevY = vertices[prevIndex + 1]; + if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) { + var vertexX = vertices[ii]; + if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) + inside = !inside; + } + prevIndex = ii; + } + return inside; + }; + SkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) { + var vertices = polygon; + var nn = polygon.length; + var width12 = x1 - x2, height12 = y1 - y2; + var det1 = x1 * y2 - y1 * x2; + var x3 = vertices[nn - 2], y3 = vertices[nn - 1]; + for (var ii = 0; ii < nn; ii += 2) { + var x4 = vertices[ii], y4 = vertices[ii + 1]; + var det2 = x3 * y4 - y3 * x4; + var width34 = x3 - x4, height34 = y3 - y4; + var det3 = width12 * height34 - height12 * width34; + var x = (det1 * width34 - width12 * det2) / det3; + if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) { + var y = (det1 * height34 - height12 * det2) / det3; + if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1))) + return true; + } + x3 = x4; + y3 = y4; + } + return false; + }; + SkeletonBounds.prototype.getPolygon = function (boundingBox) { + if (boundingBox == null) + throw new Error("boundingBox cannot be null."); + var index = this.boundingBoxes.indexOf(boundingBox); + return index == -1 ? null : this.polygons[index]; + }; + SkeletonBounds.prototype.getWidth = function () { + return this.maxX - this.minX; + }; + SkeletonBounds.prototype.getHeight = function () { + return this.maxY - this.minY; + }; + return SkeletonBounds; + }()); + spine.SkeletonBounds = SkeletonBounds; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonClipping = (function () { + function SkeletonClipping() { + this.triangulator = new spine.Triangulator(); + this.clippingPolygon = new Array(); + this.clipOutput = new Array(); + this.clippedVertices = new Array(); + this.clippedTriangles = new Array(); + this.scratch = new Array(); + } + SkeletonClipping.prototype.clipStart = function (slot, clip) { + if (this.clipAttachment != null) + return 0; + this.clipAttachment = clip; + var n = clip.worldVerticesLength; + var vertices = spine.Utils.setArraySize(this.clippingPolygon, n); + clip.computeWorldVertices(slot, 0, n, vertices, 0, 2); + var clippingPolygon = this.clippingPolygon; + SkeletonClipping.makeClockwise(clippingPolygon); + var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)); + for (var i = 0, n_2 = clippingPolygons.length; i < n_2; i++) { + var polygon = clippingPolygons[i]; + SkeletonClipping.makeClockwise(polygon); + polygon.push(polygon[0]); + polygon.push(polygon[1]); + } + return clippingPolygons.length; + }; + SkeletonClipping.prototype.clipEndWithSlot = function (slot) { + if (this.clipAttachment != null && this.clipAttachment.endSlot == slot.data) + this.clipEnd(); + }; + SkeletonClipping.prototype.clipEnd = function () { + if (this.clipAttachment == null) + return; + this.clipAttachment = null; + this.clippingPolygons = null; + this.clippedVertices.length = 0; + this.clippedTriangles.length = 0; + this.clippingPolygon.length = 0; + }; + SkeletonClipping.prototype.isClipping = function () { + return this.clipAttachment != null; + }; + SkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) { + var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; + var clippedTriangles = this.clippedTriangles; + var polygons = this.clippingPolygons; + var polygonsCount = this.clippingPolygons.length; + var vertexSize = twoColor ? 12 : 8; + var index = 0; + clippedVertices.length = 0; + clippedTriangles.length = 0; + outer: for (var i = 0; i < trianglesLength; i += 3) { + var vertexOffset = triangles[i] << 1; + var x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; + var u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 1] << 1; + var x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1]; + var u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 2] << 1; + var x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1]; + var u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1]; + for (var p = 0; p < polygonsCount; p++) { + var s = clippedVertices.length; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { + var clipOutputLength = clipOutput.length; + if (clipOutputLength == 0) + continue; + var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1; + var d = 1 / (d0 * d2 + d1 * (y1 - y3)); + var clipOutputCount = clipOutputLength >> 1; + var clipOutputItems = this.clipOutput; + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); + for (var ii = 0; ii < clipOutputLength; ii += 2) { + var x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + var c0 = x - x3, c1 = y - y3; + var a = (d0 * c0 + d1 * c1) * d; + var b = (d4 * c0 + d2 * c1) * d; + var c = 1 - a - b; + clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c; + clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + } + s += vertexSize; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (var ii = 1; ii < clipOutputCount; ii++) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + ii); + clippedTrianglesItems[s + 2] = (index + ii + 1); + s += 3; + } + index += clipOutputCount + 1; + } + else { + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + if (!twoColor) { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = x2; + clippedVerticesItems[s + 9] = y2; + clippedVerticesItems[s + 10] = light.r; + clippedVerticesItems[s + 11] = light.g; + clippedVerticesItems[s + 12] = light.b; + clippedVerticesItems[s + 13] = light.a; + clippedVerticesItems[s + 14] = u2; + clippedVerticesItems[s + 15] = v2; + clippedVerticesItems[s + 16] = x3; + clippedVerticesItems[s + 17] = y3; + clippedVerticesItems[s + 18] = light.r; + clippedVerticesItems[s + 19] = light.g; + clippedVerticesItems[s + 20] = light.b; + clippedVerticesItems[s + 21] = light.a; + clippedVerticesItems[s + 22] = u3; + clippedVerticesItems[s + 23] = v3; + } + else { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + clippedVerticesItems[s + 12] = x2; + clippedVerticesItems[s + 13] = y2; + clippedVerticesItems[s + 14] = light.r; + clippedVerticesItems[s + 15] = light.g; + clippedVerticesItems[s + 16] = light.b; + clippedVerticesItems[s + 17] = light.a; + clippedVerticesItems[s + 18] = u2; + clippedVerticesItems[s + 19] = v2; + clippedVerticesItems[s + 20] = dark.r; + clippedVerticesItems[s + 21] = dark.g; + clippedVerticesItems[s + 22] = dark.b; + clippedVerticesItems[s + 23] = dark.a; + clippedVerticesItems[s + 24] = x3; + clippedVerticesItems[s + 25] = y3; + clippedVerticesItems[s + 26] = light.r; + clippedVerticesItems[s + 27] = light.g; + clippedVerticesItems[s + 28] = light.b; + clippedVerticesItems[s + 29] = light.a; + clippedVerticesItems[s + 30] = u3; + clippedVerticesItems[s + 31] = v3; + clippedVerticesItems[s + 32] = dark.r; + clippedVerticesItems[s + 33] = dark.g; + clippedVerticesItems[s + 34] = dark.b; + clippedVerticesItems[s + 35] = dark.a; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + 1); + clippedTrianglesItems[s + 2] = (index + 2); + index += 3; + continue outer; + } + } + } + }; + SkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) { + var originalOutput = output; + var clipped = false; + var input = null; + if (clippingArea.length % 4 >= 2) { + input = output; + output = this.scratch; + } + else + input = this.scratch; + input.length = 0; + input.push(x1); + input.push(y1); + input.push(x2); + input.push(y2); + input.push(x3); + input.push(y3); + input.push(x1); + input.push(y1); + output.length = 0; + var clippingVertices = clippingArea; + var clippingVerticesLast = clippingArea.length - 4; + for (var i = 0;; i += 2) { + var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1]; + var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3]; + var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2; + var inputVertices = input; + var inputVerticesLength = input.length - 2, outputStart = output.length; + for (var ii = 0; ii < inputVerticesLength; ii += 2) { + var inputX = inputVertices[ii], inputY = inputVertices[ii + 1]; + var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3]; + var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0; + if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) { + if (side2) { + output.push(inputX2); + output.push(inputY2); + continue; + } + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + } + else if (side2) { + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + output.push(inputX2); + output.push(inputY2); + } + clipped = true; + } + if (outputStart == output.length) { + originalOutput.length = 0; + return true; + } + output.push(output[0]); + output.push(output[1]); + if (i == clippingVerticesLast) + break; + var temp = output; + output = input; + output.length = 0; + input = temp; + } + if (originalOutput != output) { + originalOutput.length = 0; + for (var i = 0, n = output.length - 2; i < n; i++) + originalOutput[i] = output[i]; + } + else + originalOutput.length = originalOutput.length - 2; + return clipped; + }; + SkeletonClipping.makeClockwise = function (polygon) { + var vertices = polygon; + var verticeslength = polygon.length; + var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0; + for (var i = 0, n = verticeslength - 3; i < n; i += 2) { + p1x = vertices[i]; + p1y = vertices[i + 1]; + p2x = vertices[i + 2]; + p2y = vertices[i + 3]; + area += p1x * p2y - p2x * p1y; + } + if (area < 0) + return; + for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) { + var x = vertices[i], y = vertices[i + 1]; + var other = lastX - i; + vertices[i] = vertices[other]; + vertices[i + 1] = vertices[other + 1]; + vertices[other] = x; + vertices[other + 1] = y; + } + }; + return SkeletonClipping; + }()); + spine.SkeletonClipping = SkeletonClipping; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonData = (function () { + function SkeletonData() { + this.bones = new Array(); + this.slots = new Array(); + this.skins = new Array(); + this.events = new Array(); + this.animations = new Array(); + this.ikConstraints = new Array(); + this.transformConstraints = new Array(); + this.pathConstraints = new Array(); + this.fps = 0; + } + SkeletonData.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.name == boneName) + return bone; + } + return null; + }; + SkeletonData.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) + return i; + return -1; + }; + SkeletonData.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.name == slotName) + return slot; + } + return null; + }; + SkeletonData.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) + return i; + return -1; + }; + SkeletonData.prototype.findSkin = function (skinName) { + if (skinName == null) + throw new Error("skinName cannot be null."); + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) { + var skin = skins[i]; + if (skin.name == skinName) + return skin; + } + return null; + }; + SkeletonData.prototype.findEvent = function (eventDataName) { + if (eventDataName == null) + throw new Error("eventDataName cannot be null."); + var events = this.events; + for (var i = 0, n = events.length; i < n; i++) { + var event_5 = events[i]; + if (event_5.name == eventDataName) + return event_5; + } + return null; + }; + SkeletonData.prototype.findAnimation = function (animationName) { + if (animationName == null) + throw new Error("animationName cannot be null."); + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) { + var animation = animations[i]; + if (animation.name == animationName) + return animation; + } + return null; + }; + SkeletonData.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraintIndex = function (pathConstraintName) { + if (pathConstraintName == null) + throw new Error("pathConstraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) + if (pathConstraints[i].name == pathConstraintName) + return i; + return -1; + }; + return SkeletonData; + }()); + spine.SkeletonData = SkeletonData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonJson = (function () { + function SkeletonJson(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonJson.prototype.readSkeletonData = function (json) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + var root = typeof (json) === "string" ? JSON.parse(json) : json; + var skeletonMap = root.skeleton; + if (skeletonMap != null) { + skeletonData.hash = skeletonMap.hash; + skeletonData.version = skeletonMap.spine; + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = skeletonMap.x; + skeletonData.y = skeletonMap.y; + skeletonData.width = skeletonMap.width; + skeletonData.height = skeletonMap.height; + skeletonData.fps = skeletonMap.fps; + skeletonData.imagesPath = skeletonMap.images; + } + if (root.bones) { + for (var i = 0; i < root.bones.length; i++) { + var boneMap = root.bones[i]; + var parent_5 = null; + var parentName = this.getValue(boneMap, "parent", null); + if (parentName != null) { + parent_5 = skeletonData.findBone(parentName); + if (parent_5 == null) + throw new Error("Parent bone not found: " + parentName); + } + var data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_5); + data.length = this.getValue(boneMap, "length", 0) * scale; + data.x = this.getValue(boneMap, "x", 0) * scale; + data.y = this.getValue(boneMap, "y", 0) * scale; + data.rotation = this.getValue(boneMap, "rotation", 0); + data.scaleX = this.getValue(boneMap, "scaleX", 1); + data.scaleY = this.getValue(boneMap, "scaleY", 1); + data.shearX = this.getValue(boneMap, "shearX", 0); + data.shearY = this.getValue(boneMap, "shearY", 0); + data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, "transform", "normal")); + data.skinRequired = this.getValue(boneMap, "skin", false); + skeletonData.bones.push(data); + } + } + if (root.slots) { + for (var i = 0; i < root.slots.length; i++) { + var slotMap = root.slots[i]; + var slotName = slotMap.name; + var boneName = slotMap.bone; + var boneData = skeletonData.findBone(boneName); + if (boneData == null) + throw new Error("Slot bone not found: " + boneName); + var data = new spine.SlotData(skeletonData.slots.length, slotName, boneData); + var color = this.getValue(slotMap, "color", null); + if (color != null) + data.color.setFromString(color); + var dark = this.getValue(slotMap, "dark", null); + if (dark != null) { + data.darkColor = new spine.Color(1, 1, 1, 1); + data.darkColor.setFromString(dark); + } + data.attachmentName = this.getValue(slotMap, "attachment", null); + data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, "blend", "normal")); + skeletonData.slots.push(data); + } + } + if (root.ik) { + for (var i = 0; i < root.ik.length; i++) { + var constraintMap = root.ik[i]; + var data = new spine.IkConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("IK bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("IK target bone not found: " + targetName); + data.mix = this.getValue(constraintMap, "mix", 1); + data.softness = this.getValue(constraintMap, "softness", 0) * scale; + data.bendDirection = this.getValue(constraintMap, "bendPositive", true) ? 1 : -1; + data.compress = this.getValue(constraintMap, "compress", false); + data.stretch = this.getValue(constraintMap, "stretch", false); + data.uniform = this.getValue(constraintMap, "uniform", false); + skeletonData.ikConstraints.push(data); + } + } + if (root.transform) { + for (var i = 0; i < root.transform.length; i++) { + var constraintMap = root.transform[i]; + var data = new spine.TransformConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("Transform constraint target bone not found: " + targetName); + data.local = this.getValue(constraintMap, "local", false); + data.relative = this.getValue(constraintMap, "relative", false); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.offsetX = this.getValue(constraintMap, "x", 0) * scale; + data.offsetY = this.getValue(constraintMap, "y", 0) * scale; + data.offsetScaleX = this.getValue(constraintMap, "scaleX", 0); + data.offsetScaleY = this.getValue(constraintMap, "scaleY", 0); + data.offsetShearY = this.getValue(constraintMap, "shearY", 0); + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + data.scaleMix = this.getValue(constraintMap, "scaleMix", 1); + data.shearMix = this.getValue(constraintMap, "shearMix", 1); + skeletonData.transformConstraints.push(data); + } + } + if (root.path) { + for (var i = 0; i < root.path.length; i++) { + var constraintMap = root.path[i]; + var data = new spine.PathConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findSlot(targetName); + if (data.target == null) + throw new Error("Path target slot not found: " + targetName); + data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, "positionMode", "percent")); + data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, "spacingMode", "length")); + data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, "rotateMode", "tangent")); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.position = this.getValue(constraintMap, "position", 0); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = this.getValue(constraintMap, "spacing", 0); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + skeletonData.pathConstraints.push(data); + } + } + if (root.skins) { + for (var i = 0; i < root.skins.length; i++) { + var skinMap = root.skins[i]; + var skin = new spine.Skin(skinMap.name); + if (skinMap.bones) { + for (var ii = 0; ii < skinMap.bones.length; ii++) { + var bone = skeletonData.findBone(skinMap.bones[ii]); + if (bone == null) + throw new Error("Skin bone not found: " + skinMap.bones[i]); + skin.bones.push(bone); + } + } + if (skinMap.ik) { + for (var ii = 0; ii < skinMap.ik.length; ii++) { + var constraint = skeletonData.findIkConstraint(skinMap.ik[ii]); + if (constraint == null) + throw new Error("Skin IK constraint not found: " + skinMap.ik[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.transform) { + for (var ii = 0; ii < skinMap.transform.length; ii++) { + var constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]); + if (constraint == null) + throw new Error("Skin transform constraint not found: " + skinMap.transform[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.path) { + for (var ii = 0; ii < skinMap.path.length; ii++) { + var constraint = skeletonData.findPathConstraint(skinMap.path[ii]); + if (constraint == null) + throw new Error("Skin path constraint not found: " + skinMap.path[i]); + skin.constraints.push(constraint); + } + } + for (var slotName in skinMap.attachments) { + var slot = skeletonData.findSlot(slotName); + if (slot == null) + throw new Error("Slot not found: " + slotName); + var slotMap = skinMap.attachments[slotName]; + for (var entryName in slotMap) { + var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); + if (attachment != null) + skin.setAttachment(slot.index, entryName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") + skeletonData.defaultSkin = skin; + } + } + for (var i = 0, n = this.linkedMeshes.length; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_6 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_6 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_6 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_6); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + if (root.events) { + for (var eventName in root.events) { + var eventMap = root.events[eventName]; + var data = new spine.EventData(eventName); + data.intValue = this.getValue(eventMap, "int", 0); + data.floatValue = this.getValue(eventMap, "float", 0); + data.stringValue = this.getValue(eventMap, "string", ""); + data.audioPath = this.getValue(eventMap, "audio", null); + if (data.audioPath != null) { + data.volume = this.getValue(eventMap, "volume", 1); + data.balance = this.getValue(eventMap, "balance", 0); + } + skeletonData.events.push(data); + } + } + if (root.animations) { + for (var animationName in root.animations) { + var animationMap = root.animations[animationName]; + this.readAnimation(animationMap, animationName, skeletonData); + } + } + return skeletonData; + }; + SkeletonJson.prototype.readAttachment = function (map, skin, slotIndex, name, skeletonData) { + var scale = this.scale; + name = this.getValue(map, "name", name); + var type = this.getValue(map, "type", "region"); + switch (type) { + case "region": { + var path = this.getValue(map, "path", name); + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = this.getValue(map, "x", 0) * scale; + region.y = this.getValue(map, "y", 0) * scale; + region.scaleX = this.getValue(map, "scaleX", 1); + region.scaleY = this.getValue(map, "scaleY", 1); + region.rotation = this.getValue(map, "rotation", 0); + region.width = map.width * scale; + region.height = map.height * scale; + var color = this.getValue(map, "color", null); + if (color != null) + region.color.setFromString(color); + region.updateOffset(); + return region; + } + case "boundingbox": { + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + this.readVertices(map, box, map.vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + box.color.setFromString(color); + return box; + } + case "mesh": + case "linkedmesh": { + var path = this.getValue(map, "path", name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + var color = this.getValue(map, "color", null); + if (color != null) + mesh.color.setFromString(color); + mesh.width = this.getValue(map, "width", 0) * scale; + mesh.height = this.getValue(map, "height", 0) * scale; + var parent_7 = this.getValue(map, "parent", null); + if (parent_7 != null) { + this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, "skin", null), slotIndex, parent_7, this.getValue(map, "deform", true))); + return mesh; + } + var uvs = map.uvs; + this.readVertices(map, mesh, uvs.length); + mesh.triangles = map.triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.edges = this.getValue(map, "edges", null); + mesh.hullLength = this.getValue(map, "hull", 0) * 2; + return mesh; + } + case "path": { + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = this.getValue(map, "closed", false); + path.constantSpeed = this.getValue(map, "constantSpeed", true); + var vertexCount = map.vertexCount; + this.readVertices(map, path, vertexCount << 1); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0; i < map.lengths.length; i++) + lengths[i] = map.lengths[i] * scale; + path.lengths = lengths; + var color = this.getValue(map, "color", null); + if (color != null) + path.color.setFromString(color); + return path; + } + case "point": { + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = this.getValue(map, "x", 0) * scale; + point.y = this.getValue(map, "y", 0) * scale; + point.rotation = this.getValue(map, "rotation", 0); + var color = this.getValue(map, "color", null); + if (color != null) + point.color.setFromString(color); + return point; + } + case "clipping": { + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + var end = this.getValue(map, "end", null); + if (end != null) { + var slot = skeletonData.findSlot(end); + if (slot == null) + throw new Error("Clipping end slot not found: " + end); + clip.endSlot = slot; + } + var vertexCount = map.vertexCount; + this.readVertices(map, clip, vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + clip.color.setFromString(color); + return clip; + } + } + return null; + }; + SkeletonJson.prototype.readVertices = function (map, attachment, verticesLength) { + var scale = this.scale; + attachment.worldVerticesLength = verticesLength; + var vertices = map.vertices; + if (verticesLength == vertices.length) { + var scaledVertices = spine.Utils.toFloatArray(vertices); + if (scale != 1) { + for (var i = 0, n = vertices.length; i < n; i++) + scaledVertices[i] *= scale; + } + attachment.vertices = scaledVertices; + return; + } + var weights = new Array(); + var bones = new Array(); + for (var i = 0, n = vertices.length; i < n;) { + var boneCount = vertices[i++]; + bones.push(boneCount); + for (var nn = i + boneCount * 4; i < nn; i += 4) { + bones.push(vertices[i]); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = spine.Utils.toFloatArray(weights); + }; + SkeletonJson.prototype.readAnimation = function (map, name, skeletonData) { + var scale = this.scale; + var timelines = new Array(); + var duration = 0; + if (map.slots) { + for (var slotName in map.slots) { + var slotMap = map.slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotName); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex++, this.getValue(valueMap, "time", 0), valueMap.name); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + else if (timelineName == "color") { + var timeline = new spine.ColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var color = new spine.Color(); + color.setFromString(valueMap.color); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), color.r, color.g, color.b, color.a); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]); + } + else if (timelineName == "twoColor") { + var timeline = new spine.TwoColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var light = new spine.Color(); + var dark = new spine.Color(); + light.setFromString(valueMap.light); + dark.setFromString(valueMap.dark); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"); + } + } + } + if (map.bones) { + for (var boneName in map.bones) { + var boneMap = map.bones[boneName]; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) + throw new Error("Bone not found: " + boneName); + for (var timelineName in boneMap) { + var timelineMap = boneMap[timelineName]; + if (timelineName === "rotate") { + var timeline = new spine.RotateTimeline(timelineMap.length); + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "angle", 0)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]); + } + else if (timelineName === "translate" || timelineName === "scale" || timelineName === "shear") { + var timeline = null; + var timelineScale = 1, defaultValue = 0; + if (timelineName === "scale") { + timeline = new spine.ScaleTimeline(timelineMap.length); + defaultValue = 1; + } + else if (timelineName === "shear") + timeline = new spine.ShearTimeline(timelineMap.length); + else { + timeline = new spine.TranslateTimeline(timelineMap.length); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var x = this.getValue(valueMap, "x", defaultValue), y = this.getValue(valueMap, "y", defaultValue); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), x * timelineScale, y * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); + } + } + } + if (map.ik) { + for (var constraintName in map.ik) { + var constraintMap = map.ik[constraintName]; + var constraint = skeletonData.findIkConstraint(constraintName); + var timeline = new spine.IkConstraintTimeline(constraintMap.length); + timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "mix", 1), this.getValue(valueMap, "softness", 0) * scale, this.getValue(valueMap, "bendPositive", true) ? 1 : -1, this.getValue(valueMap, "compress", false), this.getValue(valueMap, "stretch", false)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + } + if (map.transform) { + for (var constraintName in map.transform) { + var constraintMap = map.transform[constraintName]; + var constraint = skeletonData.findTransformConstraint(constraintName); + var timeline = new spine.TransformConstraintTimeline(constraintMap.length); + timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1), this.getValue(valueMap, "scaleMix", 1), this.getValue(valueMap, "shearMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + } + if (map.path) { + for (var constraintName in map.path) { + var constraintMap = map.path[constraintName]; + var index = skeletonData.findPathConstraintIndex(constraintName); + if (index == -1) + throw new Error("Path constraint not found: " + constraintName); + var data = skeletonData.pathConstraints[index]; + for (var timelineName in constraintMap) { + var timelineMap = constraintMap[timelineName]; + if (timelineName === "position" || timelineName === "spacing") { + var timeline = null; + var timelineScale = 1; + if (timelineName === "spacing") { + timeline = new spine.PathConstraintSpacingTimeline(timelineMap.length); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(timelineMap.length); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, timelineName, 0) * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + } + else if (timelineName === "mix") { + var timeline = new spine.PathConstraintMixTimeline(timelineMap.length); + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + } + } + } + } + if (map.deform) { + for (var deformName in map.deform) { + var deformMap = map.deform[deformName]; + var skin = skeletonData.findSkin(deformName); + if (skin == null) + throw new Error("Skin not found: " + deformName); + for (var slotName in deformMap) { + var slotMap = deformMap[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotMap.name); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + var attachment = skin.getAttachment(slotIndex, timelineName); + if (attachment == null) + throw new Error("Deform attachment not found: " + timelineMap.name); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var timeline = new spine.DeformTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + var frameIndex = 0; + for (var j = 0; j < timelineMap.length; j++) { + var valueMap = timelineMap[j]; + var deform = void 0; + var verticesValue = this.getValue(valueMap, "vertices", null); + if (verticesValue == null) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = this.getValue(valueMap, "offset", 0); + spine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length); + if (scale != 1) { + for (var i = start, n = i + verticesValue.length; i < n; i++) + deform[i] *= scale; + } + if (!weighted) { + for (var i = 0; i < deformLength; i++) + deform[i] += vertices[i]; + } + } + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), deform); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + } + } + } + var drawOrderNode = map.drawOrder; + if (drawOrderNode == null) + drawOrderNode = map.draworder; + if (drawOrderNode != null) { + var timeline = new spine.DrawOrderTimeline(drawOrderNode.length); + var slotCount = skeletonData.slots.length; + var frameIndex = 0; + for (var j = 0; j < drawOrderNode.length; j++) { + var drawOrderMap = drawOrderNode[j]; + var drawOrder = null; + var offsets = this.getValue(drawOrderMap, "offsets", null); + if (offsets != null) { + drawOrder = spine.Utils.newArray(slotCount, -1); + var unchanged = spine.Utils.newArray(slotCount - offsets.length, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var i = 0; i < offsets.length; i++) { + var offsetMap = offsets[i]; + var slotIndex = skeletonData.findSlotIndex(offsetMap.slot); + if (slotIndex == -1) + throw new Error("Slot not found: " + offsetMap.slot); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + offsetMap.offset] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var i = slotCount - 1; i >= 0; i--) + if (drawOrder[i] == -1) + drawOrder[i] = unchanged[--unchangedIndex]; + } + timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, "time", 0), drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (map.events) { + var timeline = new spine.EventTimeline(map.events.length); + var frameIndex = 0; + for (var i = 0; i < map.events.length; i++) { + var eventMap = map.events[i]; + var eventData = skeletonData.findEvent(eventMap.name); + if (eventData == null) + throw new Error("Event not found: " + eventMap.name); + var event_6 = new spine.Event(spine.Utils.toSinglePrecision(this.getValue(eventMap, "time", 0)), eventData); + event_6.intValue = this.getValue(eventMap, "int", eventData.intValue); + event_6.floatValue = this.getValue(eventMap, "float", eventData.floatValue); + event_6.stringValue = this.getValue(eventMap, "string", eventData.stringValue); + if (event_6.data.audioPath != null) { + event_6.volume = this.getValue(eventMap, "volume", 1); + event_6.balance = this.getValue(eventMap, "balance", 0); + } + timeline.setFrame(frameIndex++, event_6); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (isNaN(duration)) { + throw new Error("Error while parsing animation, duration is NaN"); + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + }; + SkeletonJson.prototype.readCurve = function (map, timeline, frameIndex) { + if (!map.hasOwnProperty("curve")) + return; + if (map.curve == "stepped") + timeline.setStepped(frameIndex); + else { + var curve = map.curve; + timeline.setCurve(frameIndex, curve, this.getValue(map, "c2", 0), this.getValue(map, "c3", 1), this.getValue(map, "c4", 1)); + } + }; + SkeletonJson.prototype.getValue = function (map, prop, defaultValue) { + return map[prop] !== undefined ? map[prop] : defaultValue; + }; + SkeletonJson.blendModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.BlendMode.Normal; + if (str == "additive") + return spine.BlendMode.Additive; + if (str == "multiply") + return spine.BlendMode.Multiply; + if (str == "screen") + return spine.BlendMode.Screen; + throw new Error("Unknown blend mode: " + str); + }; + SkeletonJson.positionModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "fixed") + return spine.PositionMode.Fixed; + if (str == "percent") + return spine.PositionMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.spacingModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "length") + return spine.SpacingMode.Length; + if (str == "fixed") + return spine.SpacingMode.Fixed; + if (str == "percent") + return spine.SpacingMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.rotateModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "tangent") + return spine.RotateMode.Tangent; + if (str == "chain") + return spine.RotateMode.Chain; + if (str == "chainscale") + return spine.RotateMode.ChainScale; + throw new Error("Unknown rotate mode: " + str); + }; + SkeletonJson.transformModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.TransformMode.Normal; + if (str == "onlytranslation") + return spine.TransformMode.OnlyTranslation; + if (str == "norotationorreflection") + return spine.TransformMode.NoRotationOrReflection; + if (str == "noscale") + return spine.TransformMode.NoScale; + if (str == "noscaleorreflection") + return spine.TransformMode.NoScaleOrReflection; + throw new Error("Unknown transform mode: " + str); + }; + return SkeletonJson; + }()); + spine.SkeletonJson = SkeletonJson; + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkinEntry = (function () { + function SkinEntry(slotIndex, name, attachment) { + this.slotIndex = slotIndex; + this.name = name; + this.attachment = attachment; + } + return SkinEntry; + }()); + spine.SkinEntry = SkinEntry; + var Skin = (function () { + function Skin(name) { + this.attachments = new Array(); + this.bones = Array(); + this.constraints = new Array(); + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + Skin.prototype.setAttachment = function (slotIndex, name, attachment) { + if (attachment == null) + throw new Error("attachment cannot be null."); + var attachments = this.attachments; + if (slotIndex >= attachments.length) + attachments.length = slotIndex + 1; + if (!attachments[slotIndex]) + attachments[slotIndex] = {}; + attachments[slotIndex][name] = attachment; + }; + Skin.prototype.addSkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + }; + Skin.prototype.copySkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + if (attachment.attachment == null) + continue; + if (attachment.attachment instanceof spine.MeshAttachment) { + attachment.attachment = attachment.attachment.newLinkedMesh(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + else { + attachment.attachment = attachment.attachment.copy(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + }; + Skin.prototype.getAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + return dictionary ? dictionary[name] : null; + }; + Skin.prototype.removeAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + if (dictionary) + dictionary[name] = null; + }; + Skin.prototype.getAttachments = function () { + var entries = new Array(); + for (var i = 0; i < this.attachments.length; i++) { + var slotAttachments = this.attachments[i]; + if (slotAttachments) { + for (var name_4 in slotAttachments) { + var attachment = slotAttachments[name_4]; + if (attachment) + entries.push(new SkinEntry(i, name_4, attachment)); + } + } + } + return entries; + }; + Skin.prototype.getAttachmentsForSlot = function (slotIndex, attachments) { + var slotAttachments = this.attachments[slotIndex]; + if (slotAttachments) { + for (var name_5 in slotAttachments) { + var attachment = slotAttachments[name_5]; + if (attachment) + attachments.push(new SkinEntry(slotIndex, name_5, attachment)); + } + } + }; + Skin.prototype.clear = function () { + this.attachments.length = 0; + this.bones.length = 0; + this.constraints.length = 0; + }; + Skin.prototype.attachAll = function (skeleton, oldSkin) { + var slotIndex = 0; + for (var i = 0; i < skeleton.slots.length; i++) { + var slot = skeleton.slots[i]; + var slotAttachment = slot.getAttachment(); + if (slotAttachment && slotIndex < oldSkin.attachments.length) { + var dictionary = oldSkin.attachments[slotIndex]; + for (var key in dictionary) { + var skinAttachment = dictionary[key]; + if (slotAttachment == skinAttachment) { + var attachment = this.getAttachment(slotIndex, key); + if (attachment != null) + slot.setAttachment(attachment); + break; + } + } + } + slotIndex++; + } + }; + return Skin; + }()); + spine.Skin = Skin; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Slot = (function () { + function Slot(data, bone) { + this.deform = new Array(); + if (data == null) + throw new Error("data cannot be null."); + if (bone == null) + throw new Error("bone cannot be null."); + this.data = data; + this.bone = bone; + this.color = new spine.Color(); + this.darkColor = data.darkColor == null ? null : new spine.Color(); + this.setToSetupPose(); + } + Slot.prototype.getSkeleton = function () { + return this.bone.skeleton; + }; + Slot.prototype.getAttachment = function () { + return this.attachment; + }; + Slot.prototype.setAttachment = function (attachment) { + if (this.attachment == attachment) + return; + this.attachment = attachment; + this.attachmentTime = this.bone.skeleton.time; + this.deform.length = 0; + }; + Slot.prototype.setAttachmentTime = function (time) { + this.attachmentTime = this.bone.skeleton.time - time; + }; + Slot.prototype.getAttachmentTime = function () { + return this.bone.skeleton.time - this.attachmentTime; + }; + Slot.prototype.setToSetupPose = function () { + this.color.setFromColor(this.data.color); + if (this.darkColor != null) + this.darkColor.setFromColor(this.data.darkColor); + if (this.data.attachmentName == null) + this.attachment = null; + else { + this.attachment = null; + this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + }; + return Slot; + }()); + spine.Slot = Slot; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SlotData = (function () { + function SlotData(index, name, boneData) { + this.color = new spine.Color(1, 1, 1, 1); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + if (boneData == null) + throw new Error("boneData cannot be null."); + this.index = index; + this.name = name; + this.boneData = boneData; + } + return SlotData; + }()); + spine.SlotData = SlotData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Texture = (function () { + function Texture(image) { + this._image = image; + } + Texture.prototype.getImage = function () { + return this._image; + }; + Texture.filterFromString = function (text) { + switch (text.toLowerCase()) { + case "nearest": return TextureFilter.Nearest; + case "linear": return TextureFilter.Linear; + case "mipmap": return TextureFilter.MipMap; + case "mipmapnearestnearest": return TextureFilter.MipMapNearestNearest; + case "mipmaplinearnearest": return TextureFilter.MipMapLinearNearest; + case "mipmapnearestlinear": return TextureFilter.MipMapNearestLinear; + case "mipmaplinearlinear": return TextureFilter.MipMapLinearLinear; + default: throw new Error("Unknown texture filter " + text); + } + }; + Texture.wrapFromString = function (text) { + switch (text.toLowerCase()) { + case "mirroredtepeat": return TextureWrap.MirroredRepeat; + case "clamptoedge": return TextureWrap.ClampToEdge; + case "repeat": return TextureWrap.Repeat; + default: throw new Error("Unknown texture wrap " + text); + } + }; + return Texture; + }()); + spine.Texture = Texture; + var TextureFilter; + (function (TextureFilter) { + TextureFilter[TextureFilter["Nearest"] = 9728] = "Nearest"; + TextureFilter[TextureFilter["Linear"] = 9729] = "Linear"; + TextureFilter[TextureFilter["MipMap"] = 9987] = "MipMap"; + TextureFilter[TextureFilter["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; + TextureFilter[TextureFilter["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; + TextureFilter[TextureFilter["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; + TextureFilter[TextureFilter["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; + })(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {})); + var TextureWrap; + (function (TextureWrap) { + TextureWrap[TextureWrap["MirroredRepeat"] = 33648] = "MirroredRepeat"; + TextureWrap[TextureWrap["ClampToEdge"] = 33071] = "ClampToEdge"; + TextureWrap[TextureWrap["Repeat"] = 10497] = "Repeat"; + })(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {})); + var TextureRegion = (function () { + function TextureRegion() { + this.u = 0; + this.v = 0; + this.u2 = 0; + this.v2 = 0; + this.width = 0; + this.height = 0; + this.rotate = false; + this.offsetX = 0; + this.offsetY = 0; + this.originalWidth = 0; + this.originalHeight = 0; + } + return TextureRegion; + }()); + spine.TextureRegion = TextureRegion; + var FakeTexture = (function (_super) { + __extends(FakeTexture, _super); + function FakeTexture() { + return _super !== null && _super.apply(this, arguments) || this; + } + FakeTexture.prototype.setFilters = function (minFilter, magFilter) { }; + FakeTexture.prototype.setWraps = function (uWrap, vWrap) { }; + FakeTexture.prototype.dispose = function () { }; + return FakeTexture; + }(Texture)); + spine.FakeTexture = FakeTexture; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TextureAtlas = (function () { + function TextureAtlas(atlasText, textureLoader) { + this.pages = new Array(); + this.regions = new Array(); + this.load(atlasText, textureLoader); + } + TextureAtlas.prototype.load = function (atlasText, textureLoader) { + if (textureLoader == null) + throw new Error("textureLoader cannot be null."); + var reader = new TextureAtlasReader(atlasText); + var tuple = new Array(4); + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) + break; + line = line.trim(); + if (line.length == 0) + page = null; + else if (!page) { + page = new TextureAtlasPage(); + page.name = line; + if (reader.readTuple(tuple) == 2) { + page.width = parseInt(tuple[0]); + page.height = parseInt(tuple[1]); + reader.readTuple(tuple); + } + reader.readTuple(tuple); + page.minFilter = spine.Texture.filterFromString(tuple[0]); + page.magFilter = spine.Texture.filterFromString(tuple[1]); + var direction = reader.readValue(); + page.uWrap = spine.TextureWrap.ClampToEdge; + page.vWrap = spine.TextureWrap.ClampToEdge; + if (direction == "x") + page.uWrap = spine.TextureWrap.Repeat; + else if (direction == "y") + page.vWrap = spine.TextureWrap.Repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.TextureWrap.Repeat; + page.texture = textureLoader(line); + page.texture.setFilters(page.minFilter, page.magFilter); + page.texture.setWraps(page.uWrap, page.vWrap); + page.width = page.texture.getImage().width; + page.height = page.texture.getImage().height; + this.pages.push(page); + } + else { + var region = new TextureAtlasRegion(); + region.name = line; + region.page = page; + var rotateValue = reader.readValue(); + if (rotateValue.toLocaleLowerCase() == "true") { + region.degrees = 90; + } + else if (rotateValue.toLocaleLowerCase() == "false") { + region.degrees = 0; + } + else { + region.degrees = parseFloat(rotateValue); + } + region.rotate = region.degrees == 90; + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } + else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + if (reader.readTuple(tuple) == 4) { + if (reader.readTuple(tuple) == 4) { + reader.readTuple(tuple); + } + } + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + region.index = parseInt(reader.readValue()); + region.texture = page.texture; + this.regions.push(region); + } + } + }; + TextureAtlas.prototype.findRegion = function (name) { + for (var i = 0; i < this.regions.length; i++) { + if (this.regions[i].name == name) { + return this.regions[i]; + } + } + return null; + }; + TextureAtlas.prototype.dispose = function () { + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].texture.dispose(); + } + }; + return TextureAtlas; + }()); + spine.TextureAtlas = TextureAtlas; + var TextureAtlasReader = (function () { + function TextureAtlasReader(text) { + this.index = 0; + this.lines = text.split(/\r\n|\r|\n/); + } + TextureAtlasReader.prototype.readLine = function () { + if (this.index >= this.lines.length) + return null; + return this.lines[this.index++]; + }; + TextureAtlasReader.prototype.readValue = function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + return line.substring(colon + 1).trim(); + }; + TextureAtlasReader.prototype.readTuple = function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + var i = 0, lastMatch = colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) + break; + tuple[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + } + tuple[i] = line.substring(lastMatch).trim(); + return i + 1; + }; + return TextureAtlasReader; + }()); + var TextureAtlasPage = (function () { + function TextureAtlasPage() { + } + return TextureAtlasPage; + }()); + spine.TextureAtlasPage = TextureAtlasPage; + var TextureAtlasRegion = (function (_super) { + __extends(TextureAtlasRegion, _super); + function TextureAtlasRegion() { + return _super !== null && _super.apply(this, arguments) || this; + } + return TextureAtlasRegion; + }(spine.TextureRegion)); + spine.TextureAtlasRegion = TextureAtlasRegion; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraint = (function () { + function TransformConstraint(data, skeleton) { + this.rotateMix = 0; + this.translateMix = 0; + this.scaleMix = 0; + this.shearMix = 0; + this.temp = new spine.Vector2(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + this.scaleMix = data.scaleMix; + this.shearMix = data.shearMix; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + TransformConstraint.prototype.isActive = function () { + return this.active; + }; + TransformConstraint.prototype.apply = function () { + this.update(); + }; + TransformConstraint.prototype.update = function () { + if (this.data.local) { + if (this.data.relative) + this.applyRelativeLocal(); + else + this.applyAbsoluteLocal(); + } + else { + if (this.data.relative) + this.applyRelativeWorld(); + else + this.applyAbsoluteWorld(); + } + }; + TransformConstraint.prototype.applyAbsoluteWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect; + var offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += (temp.x - bone.worldX) * translateMix; + bone.worldY += (temp.y - bone.worldY) * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + var ts = Math.sqrt(ta * ta + tc * tc); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s; + bone.a *= s; + bone.c *= s; + s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + ts = Math.sqrt(tb * tb + td * td); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var b = bone.b, d = bone.d; + var by = Math.atan2(d, b); + var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r = by + (r + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyRelativeWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += temp.x * translateMix; + bone.worldY += temp.y * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1; + bone.a *= s; + bone.c *= s; + s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var r = Math.atan2(td, tb) - Math.atan2(tc, ta); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + var b = bone.b, d = bone.d; + r = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyAbsoluteLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) { + var r = target.arotation - rotation + this.data.offsetRotation; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + rotation += r * rotateMix; + } + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax - x + this.data.offsetX) * translateMix; + y += (target.ay - y + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX; + if (scaleY > 0.00001) + scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY; + } + var shearY = bone.ashearY; + if (shearMix != 0) { + var r = target.ashearY - shearY + this.data.offsetShearY; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + bone.shearY += r * shearMix; + } + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + TransformConstraint.prototype.applyRelativeLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) + rotation += (target.arotation + this.data.offsetRotation) * rotateMix; + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax + this.data.offsetX) * translateMix; + y += (target.ay + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX *= ((target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix) + 1; + if (scaleY > 0.00001) + scaleY *= ((target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix) + 1; + } + var shearY = bone.ashearY; + if (shearMix != 0) + shearY += (target.ashearY + this.data.offsetShearY) * shearMix; + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + return TransformConstraint; + }()); + spine.TransformConstraint = TransformConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraintData = (function (_super) { + __extends(TransformConstraintData, _super); + function TransformConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.rotateMix = 0; + _this.translateMix = 0; + _this.scaleMix = 0; + _this.shearMix = 0; + _this.offsetRotation = 0; + _this.offsetX = 0; + _this.offsetY = 0; + _this.offsetScaleX = 0; + _this.offsetScaleY = 0; + _this.offsetShearY = 0; + _this.relative = false; + _this.local = false; + return _this; + } + return TransformConstraintData; + }(spine.ConstraintData)); + spine.TransformConstraintData = TransformConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Triangulator = (function () { + function Triangulator() { + this.convexPolygons = new Array(); + this.convexPolygonsIndices = new Array(); + this.indicesArray = new Array(); + this.isConcaveArray = new Array(); + this.triangles = new Array(); + this.polygonPool = new spine.Pool(function () { + return new Array(); + }); + this.polygonIndicesPool = new spine.Pool(function () { + return new Array(); + }); + } + Triangulator.prototype.triangulate = function (verticesArray) { + var vertices = verticesArray; + var vertexCount = verticesArray.length >> 1; + var indices = this.indicesArray; + indices.length = 0; + for (var i = 0; i < vertexCount; i++) + indices[i] = i; + var isConcave = this.isConcaveArray; + isConcave.length = 0; + for (var i = 0, n = vertexCount; i < n; ++i) + isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices); + var triangles = this.triangles; + triangles.length = 0; + while (vertexCount > 3) { + var previous = vertexCount - 1, i = 0, next = 1; + while (true) { + outer: if (!isConcave[i]) { + var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; + var p1x = vertices[p1], p1y = vertices[p1 + 1]; + var p2x = vertices[p2], p2y = vertices[p2 + 1]; + var p3x = vertices[p3], p3y = vertices[p3 + 1]; + for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) { + if (!isConcave[ii]) + continue; + var v = indices[ii] << 1; + var vx = vertices[v], vy = vertices[v + 1]; + if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) { + if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) { + if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) + break outer; + } + } + } + break; + } + if (next == 0) { + do { + if (!isConcave[i]) + break; + i--; + } while (i > 0); + break; + } + previous = i; + i = next; + next = (next + 1) % vertexCount; + } + triangles.push(indices[(vertexCount + i - 1) % vertexCount]); + triangles.push(indices[i]); + triangles.push(indices[(i + 1) % vertexCount]); + indices.splice(i, 1); + isConcave.splice(i, 1); + vertexCount--; + var previousIndex = (vertexCount + i - 1) % vertexCount; + var nextIndex = i == vertexCount ? 0 : i; + isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices); + isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices); + } + if (vertexCount == 3) { + triangles.push(indices[2]); + triangles.push(indices[0]); + triangles.push(indices[1]); + } + return triangles; + }; + Triangulator.prototype.decompose = function (verticesArray, triangles) { + var vertices = verticesArray; + var convexPolygons = this.convexPolygons; + this.polygonPool.freeAll(convexPolygons); + convexPolygons.length = 0; + var convexPolygonsIndices = this.convexPolygonsIndices; + this.polygonIndicesPool.freeAll(convexPolygonsIndices); + convexPolygonsIndices.length = 0; + var polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + var polygon = this.polygonPool.obtain(); + polygon.length = 0; + var fanBaseIndex = -1, lastWinding = 0; + for (var i = 0, n = triangles.length; i < n; i += 3) { + var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1; + var x1 = vertices[t1], y1 = vertices[t1 + 1]; + var x2 = vertices[t2], y2 = vertices[t2 + 1]; + var x3 = vertices[t3], y3 = vertices[t3 + 1]; + var merged = false; + if (fanBaseIndex == t1) { + var o = polygon.length - 4; + var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3); + var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]); + if (winding1 == lastWinding && winding2 == lastWinding) { + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(t3); + merged = true; + } + } + if (!merged) { + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + else { + this.polygonPool.free(polygon); + this.polygonIndicesPool.free(polygonIndices); + } + polygon = this.polygonPool.obtain(); + polygon.length = 0; + polygon.push(x1); + polygon.push(y1); + polygon.push(x2); + polygon.push(y2); + polygon.push(x3); + polygon.push(y3); + polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + polygonIndices.push(t1); + polygonIndices.push(t2); + polygonIndices.push(t3); + lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + } + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + for (var i = 0, n = convexPolygons.length; i < n; i++) { + polygonIndices = convexPolygonsIndices[i]; + if (polygonIndices.length == 0) + continue; + var firstIndex = polygonIndices[0]; + var lastIndex = polygonIndices[polygonIndices.length - 1]; + polygon = convexPolygons[i]; + var o = polygon.length - 4; + var prevPrevX = polygon[o], prevPrevY = polygon[o + 1]; + var prevX = polygon[o + 2], prevY = polygon[o + 3]; + var firstX = polygon[0], firstY = polygon[1]; + var secondX = polygon[2], secondY = polygon[3]; + var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + for (var ii = 0; ii < n; ii++) { + if (ii == i) + continue; + var otherIndices = convexPolygonsIndices[ii]; + if (otherIndices.length != 3) + continue; + var otherFirstIndex = otherIndices[0]; + var otherSecondIndex = otherIndices[1]; + var otherLastIndex = otherIndices[2]; + var otherPoly = convexPolygons[ii]; + var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1]; + if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) + continue; + var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); + var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY); + if (winding1 == winding && winding2 == winding) { + otherPoly.length = 0; + otherIndices.length = 0; + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(otherLastIndex); + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = 0; + } + } + } + for (var i = convexPolygons.length - 1; i >= 0; i--) { + polygon = convexPolygons[i]; + if (polygon.length == 0) { + convexPolygons.splice(i, 1); + this.polygonPool.free(polygon); + polygonIndices = convexPolygonsIndices[i]; + convexPolygonsIndices.splice(i, 1); + this.polygonIndicesPool.free(polygonIndices); + } + } + return convexPolygons; + }; + Triangulator.isConcave = function (index, vertexCount, vertices, indices) { + var previous = indices[(vertexCount + index - 1) % vertexCount] << 1; + var current = indices[index] << 1; + var next = indices[(index + 1) % vertexCount] << 1; + return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]); + }; + Triangulator.positiveArea = function (p1x, p1y, p2x, p2y, p3x, p3y) { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + }; + Triangulator.winding = function (p1x, p1y, p2x, p2y, p3x, p3y) { + var px = p2x - p1x, py = p2y - p1y; + return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; + }; + return Triangulator; + }()); + spine.Triangulator = Triangulator; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IntSet = (function () { + function IntSet() { + this.array = new Array(); + } + IntSet.prototype.add = function (value) { + var contains = this.contains(value); + this.array[value | 0] = value | 0; + return !contains; + }; + IntSet.prototype.contains = function (value) { + return this.array[value | 0] != undefined; + }; + IntSet.prototype.remove = function (value) { + this.array[value | 0] = undefined; + }; + IntSet.prototype.clear = function () { + this.array.length = 0; + }; + return IntSet; + }()); + spine.IntSet = IntSet; + var Color = (function () { + function Color(r, g, b, a) { + if (r === void 0) { r = 0; } + if (g === void 0) { g = 0; } + if (b === void 0) { b = 0; } + if (a === void 0) { a = 0; } + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + Color.prototype.set = function (r, g, b, a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + this.clamp(); + return this; + }; + Color.prototype.setFromColor = function (c) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + }; + Color.prototype.setFromString = function (hex) { + hex = hex.charAt(0) == '#' ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255.0; + this.g = parseInt(hex.substr(2, 2), 16) / 255.0; + this.b = parseInt(hex.substr(4, 2), 16) / 255.0; + this.a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0; + return this; + }; + Color.prototype.add = function (r, g, b, a) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + this.clamp(); + return this; + }; + Color.prototype.clamp = function () { + if (this.r < 0) + this.r = 0; + else if (this.r > 1) + this.r = 1; + if (this.g < 0) + this.g = 0; + else if (this.g > 1) + this.g = 1; + if (this.b < 0) + this.b = 0; + else if (this.b > 1) + this.b = 1; + if (this.a < 0) + this.a = 0; + else if (this.a > 1) + this.a = 1; + return this; + }; + Color.rgba8888ToColor = function (color, value) { + color.r = ((value & 0xff000000) >>> 24) / 255; + color.g = ((value & 0x00ff0000) >>> 16) / 255; + color.b = ((value & 0x0000ff00) >>> 8) / 255; + color.a = ((value & 0x000000ff)) / 255; + }; + Color.rgb888ToColor = function (color, value) { + color.r = ((value & 0x00ff0000) >>> 16) / 255; + color.g = ((value & 0x0000ff00) >>> 8) / 255; + color.b = ((value & 0x000000ff)) / 255; + }; + Color.WHITE = new Color(1, 1, 1, 1); + Color.RED = new Color(1, 0, 0, 1); + Color.GREEN = new Color(0, 1, 0, 1); + Color.BLUE = new Color(0, 0, 1, 1); + Color.MAGENTA = new Color(1, 0, 1, 1); + return Color; + }()); + spine.Color = Color; + var MathUtils = (function () { + function MathUtils() { + } + MathUtils.clamp = function (value, min, max) { + if (value < min) + return min; + if (value > max) + return max; + return value; + }; + MathUtils.cosDeg = function (degrees) { + return Math.cos(degrees * MathUtils.degRad); + }; + MathUtils.sinDeg = function (degrees) { + return Math.sin(degrees * MathUtils.degRad); + }; + MathUtils.signum = function (value) { + return value > 0 ? 1 : value < 0 ? -1 : 0; + }; + MathUtils.toInt = function (x) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + }; + MathUtils.cbrt = function (x) { + var y = Math.pow(Math.abs(x), 1 / 3); + return x < 0 ? -y : y; + }; + MathUtils.randomTriangular = function (min, max) { + return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); + }; + MathUtils.randomTriangularWith = function (min, max, mode) { + var u = Math.random(); + var d = max - min; + if (u <= (mode - min) / d) + return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + }; + MathUtils.PI = 3.1415927; + MathUtils.PI2 = MathUtils.PI * 2; + MathUtils.radiansToDegrees = 180 / MathUtils.PI; + MathUtils.radDeg = MathUtils.radiansToDegrees; + MathUtils.degreesToRadians = MathUtils.PI / 180; + MathUtils.degRad = MathUtils.degreesToRadians; + return MathUtils; + }()); + spine.MathUtils = MathUtils; + var Interpolation = (function () { + function Interpolation() { + } + Interpolation.prototype.apply = function (start, end, a) { + return start + (end - start) * this.applyInternal(a); + }; + return Interpolation; + }()); + spine.Interpolation = Interpolation; + var Pow = (function (_super) { + __extends(Pow, _super); + function Pow(power) { + var _this = _super.call(this) || this; + _this.power = 2; + _this.power = power; + return _this; + } + Pow.prototype.applyInternal = function (a) { + if (a <= 0.5) + return Math.pow(a * 2, this.power) / 2; + return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; + }; + return Pow; + }(Interpolation)); + spine.Pow = Pow; + var PowOut = (function (_super) { + __extends(PowOut, _super); + function PowOut(power) { + return _super.call(this, power) || this; + } + PowOut.prototype.applyInternal = function (a) { + return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; + }; + return PowOut; + }(Pow)); + spine.PowOut = PowOut; + var Utils = (function () { + function Utils() { + } + Utils.arrayCopy = function (source, sourceStart, dest, destStart, numElements) { + for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { + dest[j] = source[i]; + } + }; + Utils.setArraySize = function (array, size, value) { + if (value === void 0) { value = 0; } + var oldSize = array.length; + if (oldSize == size) + return array; + array.length = size; + if (oldSize < size) { + for (var i = oldSize; i < size; i++) + array[i] = value; + } + return array; + }; + Utils.ensureArrayCapacity = function (array, size, value) { + if (value === void 0) { value = 0; } + if (array.length >= size) + return array; + return Utils.setArraySize(array, size, value); + }; + Utils.newArray = function (size, defaultValue) { + var array = new Array(size); + for (var i = 0; i < size; i++) + array[i] = defaultValue; + return array; + }; + Utils.newFloatArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Float32Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.newShortArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Int16Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.toFloatArray = function (array) { + return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + }; + Utils.toSinglePrecision = function (value) { + return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + }; + Utils.webkit602BugfixHelper = function (alpha, blend) { + }; + Utils.contains = function (array, element, identity) { + if (identity === void 0) { identity = true; } + for (var i = 0; i < array.length; i++) { + if (array[i] == element) + return true; + } + return false; + }; + Utils.SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== "undefined"; + return Utils; + }()); + spine.Utils = Utils; + var DebugUtils = (function () { + function DebugUtils() { + } + DebugUtils.logBones = function (skeleton) { + for (var i = 0; i < skeleton.bones.length; i++) { + var bone = skeleton.bones[i]; + console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); + } + }; + return DebugUtils; + }()); + spine.DebugUtils = DebugUtils; + var Pool = (function () { + function Pool(instantiator) { + this.items = new Array(); + this.instantiator = instantiator; + } + Pool.prototype.obtain = function () { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + }; + Pool.prototype.free = function (item) { + if (item.reset) + item.reset(); + this.items.push(item); + }; + Pool.prototype.freeAll = function (items) { + for (var i = 0; i < items.length; i++) { + this.free(items[i]); + } + }; + Pool.prototype.clear = function () { + this.items.length = 0; + }; + return Pool; + }()); + spine.Pool = Pool; + var Vector2 = (function () { + function Vector2(x, y) { + if (x === void 0) { x = 0; } + if (y === void 0) { y = 0; } + this.x = x; + this.y = y; + } + Vector2.prototype.set = function (x, y) { + this.x = x; + this.y = y; + return this; + }; + Vector2.prototype.length = function () { + var x = this.x; + var y = this.y; + return Math.sqrt(x * x + y * y); + }; + Vector2.prototype.normalize = function () { + var len = this.length(); + if (len != 0) { + this.x /= len; + this.y /= len; + } + return this; + }; + return Vector2; + }()); + spine.Vector2 = Vector2; + var TimeKeeper = (function () { + function TimeKeeper() { + this.maxDelta = 0.064; + this.framesPerSecond = 0; + this.delta = 0; + this.totalTime = 0; + this.lastTime = Date.now() / 1000; + this.frameCount = 0; + this.frameTime = 0; + } + TimeKeeper.prototype.update = function () { + var now = Date.now() / 1000; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + if (this.delta > this.maxDelta) + this.delta = this.maxDelta; + this.lastTime = now; + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + }; + return TimeKeeper; + }()); + spine.TimeKeeper = TimeKeeper; + var WindowedMean = (function () { + function WindowedMean(windowSize) { + if (windowSize === void 0) { windowSize = 32; } + this.addedValues = 0; + this.lastValue = 0; + this.mean = 0; + this.dirty = true; + this.values = new Array(windowSize); + } + WindowedMean.prototype.hasEnoughData = function () { + return this.addedValues >= this.values.length; + }; + WindowedMean.prototype.addValue = function (value) { + if (this.addedValues < this.values.length) + this.addedValues++; + this.values[this.lastValue++] = value; + if (this.lastValue > this.values.length - 1) + this.lastValue = 0; + this.dirty = true; + }; + WindowedMean.prototype.getMean = function () { + if (this.hasEnoughData()) { + if (this.dirty) { + var mean = 0; + for (var i = 0; i < this.values.length; i++) { + mean += this.values[i]; + } + this.mean = mean / this.values.length; + this.dirty = false; + } + return this.mean; + } + else { + return 0; + } + }; + return WindowedMean; + }()); + spine.WindowedMean = WindowedMean; +})(spine || (spine = {})); +(function () { + if (!Math.fround) { + Math.fround = (function (array) { + return function (x) { + return array[0] = x, array[0]; + }; + })(new Float32Array(1)); + } +})(); +var spine; +(function (spine) { + var Attachment = (function () { + function Attachment(name) { + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + return Attachment; + }()); + spine.Attachment = Attachment; + var VertexAttachment = (function (_super) { + __extends(VertexAttachment, _super); + function VertexAttachment(name) { + var _this = _super.call(this, name) || this; + _this.id = (VertexAttachment.nextID++ & 65535) << 11; + _this.worldVerticesLength = 0; + _this.deformAttachment = _this; + return _this; + } + VertexAttachment.prototype.computeWorldVertices = function (slot, start, count, worldVertices, offset, stride) { + count = offset + (count >> 1) * stride; + var skeleton = slot.bone.skeleton; + var deformArray = slot.deform; + var vertices = this.vertices; + var bones = this.bones; + if (bones == null) { + if (deformArray.length > 0) + vertices = deformArray; + var bone = slot.bone; + var x = bone.worldX; + var y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) { + var vx = vertices[v_1], vy = vertices[v_1 + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + var v = 0, skip = 0; + for (var i = 0; i < start; i += 2) { + var n = bones[v]; + v += n + 1; + skip += n; + } + var skeletonBones = skeleton.bones; + if (deformArray.length == 0) { + for (var w = offset, b = skip * 3; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + else { + var deform = deformArray; + for (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + }; + VertexAttachment.prototype.copyTo = function (attachment) { + if (this.bones != null) { + attachment.bones = new Array(this.bones.length); + spine.Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); + } + else + attachment.bones = null; + if (this.vertices != null) { + attachment.vertices = spine.Utils.newFloatArray(this.vertices.length); + spine.Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); + } + else + attachment.vertices = null; + attachment.worldVerticesLength = this.worldVerticesLength; + attachment.deformAttachment = this.deformAttachment; + }; + VertexAttachment.nextID = 0; + return VertexAttachment; + }(Attachment)); + spine.VertexAttachment = VertexAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AttachmentType; + (function (AttachmentType) { + AttachmentType[AttachmentType["Region"] = 0] = "Region"; + AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox"; + AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh"; + AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh"; + AttachmentType[AttachmentType["Path"] = 4] = "Path"; + AttachmentType[AttachmentType["Point"] = 5] = "Point"; + AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping"; + })(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoundingBoxAttachment = (function (_super) { + __extends(BoundingBoxAttachment, _super); + function BoundingBoxAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + BoundingBoxAttachment.prototype.copy = function () { + var copy = new BoundingBoxAttachment(this.name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + }; + return BoundingBoxAttachment; + }(spine.VertexAttachment)); + spine.BoundingBoxAttachment = BoundingBoxAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var ClippingAttachment = (function (_super) { + __extends(ClippingAttachment, _super); + function ClippingAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.2275, 0.2275, 0.8078, 1); + return _this; + } + ClippingAttachment.prototype.copy = function () { + var copy = new ClippingAttachment(this.name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.color.setFromColor(this.color); + return copy; + }; + return ClippingAttachment; + }(spine.VertexAttachment)); + spine.ClippingAttachment = ClippingAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var MeshAttachment = (function (_super) { + __extends(MeshAttachment, _super); + function MeshAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + _this.tempColor = new spine.Color(0, 0, 0, 0); + return _this; + } + MeshAttachment.prototype.updateUVs = function () { + var regionUVs = this.regionUVs; + if (this.uvs == null || this.uvs.length != regionUVs.length) + this.uvs = spine.Utils.newFloatArray(regionUVs.length); + var uvs = this.uvs; + var n = this.uvs.length; + var u = this.region.u, v = this.region.v, width = 0, height = 0; + if (this.region instanceof spine.TextureAtlasRegion) { + var region = this.region; + var textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height; + switch (region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; + } + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } + else if (this.region == null) { + u = v = 0; + width = height = 1; + } + else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + }; + MeshAttachment.prototype.getParentMesh = function () { + return this.parentMesh; + }; + MeshAttachment.prototype.setParentMesh = function (parentMesh) { + this.parentMesh = parentMesh; + if (parentMesh != null) { + this.bones = parentMesh.bones; + this.vertices = parentMesh.vertices; + this.worldVerticesLength = parentMesh.worldVerticesLength; + this.regionUVs = parentMesh.regionUVs; + this.triangles = parentMesh.triangles; + this.hullLength = parentMesh.hullLength; + this.worldVerticesLength = parentMesh.worldVerticesLength; + } + }; + MeshAttachment.prototype.copy = function () { + if (this.parentMesh != null) + return this.newLinkedMesh(); + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + this.copyTo(copy); + copy.regionUVs = new Array(this.regionUVs.length); + spine.Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.uvs = new Array(this.uvs.length); + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); + copy.triangles = new Array(this.triangles.length); + spine.Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + if (this.edges != null) { + copy.edges = new Array(this.edges.length); + spine.Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + return copy; + }; + MeshAttachment.prototype.newLinkedMesh = function () { + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + copy.deformAttachment = this.deformAttachment; + copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this); + copy.updateUVs(); + return copy; + }; + return MeshAttachment; + }(spine.VertexAttachment)); + spine.MeshAttachment = MeshAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathAttachment = (function (_super) { + __extends(PathAttachment, _super); + function PathAttachment(name) { + var _this = _super.call(this, name) || this; + _this.closed = false; + _this.constantSpeed = false; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + PathAttachment.prototype.copy = function () { + var copy = new PathAttachment(this.name); + this.copyTo(copy); + copy.lengths = new Array(this.lengths.length); + spine.Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + }; + return PathAttachment; + }(spine.VertexAttachment)); + spine.PathAttachment = PathAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PointAttachment = (function (_super) { + __extends(PointAttachment, _super); + function PointAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.38, 0.94, 0, 1); + return _this; + } + PointAttachment.prototype.computeWorldPosition = function (bone, point) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + }; + PointAttachment.prototype.computeWorldRotation = function (bone) { + var cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation); + var x = cos * bone.a + sin * bone.b; + var y = cos * bone.c + sin * bone.d; + return Math.atan2(y, x) * spine.MathUtils.radDeg; + }; + PointAttachment.prototype.copy = function () { + var copy = new PointAttachment(this.name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + }; + return PointAttachment; + }(spine.VertexAttachment)); + spine.PointAttachment = PointAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var RegionAttachment = (function (_super) { + __extends(RegionAttachment, _super); + function RegionAttachment(name) { + var _this = _super.call(this, name) || this; + _this.x = 0; + _this.y = 0; + _this.scaleX = 1; + _this.scaleY = 1; + _this.rotation = 0; + _this.width = 0; + _this.height = 0; + _this.color = new spine.Color(1, 1, 1, 1); + _this.offset = spine.Utils.newFloatArray(8); + _this.uvs = spine.Utils.newFloatArray(8); + _this.tempColor = new spine.Color(1, 1, 1, 1); + return _this; + } + RegionAttachment.prototype.updateOffset = function () { + var regionScaleX = this.width / this.region.originalWidth * this.scaleX; + var regionScaleY = this.height / this.region.originalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY; + var localX2 = localX + this.region.width * regionScaleX; + var localY2 = localY + this.region.height * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[RegionAttachment.OX1] = localXCos - localYSin; + offset[RegionAttachment.OY1] = localYCos + localXSin; + offset[RegionAttachment.OX2] = localXCos - localY2Sin; + offset[RegionAttachment.OY2] = localY2Cos + localXSin; + offset[RegionAttachment.OX3] = localX2Cos - localY2Sin; + offset[RegionAttachment.OY3] = localY2Cos + localX2Sin; + offset[RegionAttachment.OX4] = localX2Cos - localYSin; + offset[RegionAttachment.OY4] = localYCos + localX2Sin; + }; + RegionAttachment.prototype.setRegion = function (region) { + this.region = region; + var uvs = this.uvs; + if (region.rotate) { + uvs[2] = region.u; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v; + uvs[0] = region.u2; + uvs[1] = region.v2; + } + else { + uvs[0] = region.u; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v2; + } + }; + RegionAttachment.prototype.computeWorldVertices = function (bone, worldVertices, offset, stride) { + var vertexOffset = this.offset; + var x = bone.worldX, y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var offsetX = 0, offsetY = 0; + offsetX = vertexOffset[RegionAttachment.OX1]; + offsetY = vertexOffset[RegionAttachment.OY1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX2]; + offsetY = vertexOffset[RegionAttachment.OY2]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX3]; + offsetY = vertexOffset[RegionAttachment.OY3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX4]; + offsetY = vertexOffset[RegionAttachment.OY4]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + }; + RegionAttachment.prototype.copy = function () { + var copy = new RegionAttachment(this.name); + copy.region = this.region; + copy.rendererObject = this.rendererObject; + copy.path = this.path; + copy.x = this.x; + copy.y = this.y; + copy.scaleX = this.scaleX; + copy.scaleY = this.scaleY; + copy.rotation = this.rotation; + copy.width = this.width; + copy.height = this.height; + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); + spine.Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); + copy.color.setFromColor(this.color); + return copy; + }; + RegionAttachment.OX1 = 0; + RegionAttachment.OY1 = 1; + RegionAttachment.OX2 = 2; + RegionAttachment.OY2 = 3; + RegionAttachment.OX3 = 4; + RegionAttachment.OY3 = 5; + RegionAttachment.OX4 = 6; + RegionAttachment.OY4 = 7; + RegionAttachment.X1 = 0; + RegionAttachment.Y1 = 1; + RegionAttachment.C1R = 2; + RegionAttachment.C1G = 3; + RegionAttachment.C1B = 4; + RegionAttachment.C1A = 5; + RegionAttachment.U1 = 6; + RegionAttachment.V1 = 7; + RegionAttachment.X2 = 8; + RegionAttachment.Y2 = 9; + RegionAttachment.C2R = 10; + RegionAttachment.C2G = 11; + RegionAttachment.C2B = 12; + RegionAttachment.C2A = 13; + RegionAttachment.U2 = 14; + RegionAttachment.V2 = 15; + RegionAttachment.X3 = 16; + RegionAttachment.Y3 = 17; + RegionAttachment.C3R = 18; + RegionAttachment.C3G = 19; + RegionAttachment.C3B = 20; + RegionAttachment.C3A = 21; + RegionAttachment.U3 = 22; + RegionAttachment.V3 = 23; + RegionAttachment.X4 = 24; + RegionAttachment.Y4 = 25; + RegionAttachment.C4R = 26; + RegionAttachment.C4G = 27; + RegionAttachment.C4B = 28; + RegionAttachment.C4A = 29; + RegionAttachment.U4 = 30; + RegionAttachment.V4 = 31; + return RegionAttachment; + }(spine.Attachment)); + spine.RegionAttachment = RegionAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var JitterEffect = (function () { + function JitterEffect(jitterX, jitterY) { + this.jitterX = 0; + this.jitterY = 0; + this.jitterX = jitterX; + this.jitterY = jitterY; + } + JitterEffect.prototype.begin = function (skeleton) { + }; + JitterEffect.prototype.transform = function (position, uv, light, dark) { + position.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + position.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + }; + JitterEffect.prototype.end = function () { + }; + return JitterEffect; + }()); + spine.JitterEffect = JitterEffect; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SwirlEffect = (function () { + function SwirlEffect(radius) { + this.centerX = 0; + this.centerY = 0; + this.radius = 0; + this.angle = 0; + this.worldX = 0; + this.worldY = 0; + this.radius = radius; + } + SwirlEffect.prototype.begin = function (skeleton) { + this.worldX = skeleton.x + this.centerX; + this.worldY = skeleton.y + this.centerY; + }; + SwirlEffect.prototype.transform = function (position, uv, light, dark) { + var radAngle = this.angle * spine.MathUtils.degreesToRadians; + var x = position.x - this.worldX; + var y = position.y - this.worldY; + var dist = Math.sqrt(x * x + y * y); + if (dist < this.radius) { + var theta = SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius); + var cos = Math.cos(theta); + var sin = Math.sin(theta); + position.x = cos * x - sin * y + this.worldX; + position.y = sin * x + cos * y + this.worldY; + } + }; + SwirlEffect.prototype.end = function () { + }; + SwirlEffect.interpolation = new spine.PowOut(2); + return SwirlEffect; + }()); + spine.SwirlEffect = SwirlEffect; +})(spine || (spine = {})); +var spine; +(function (spine) { + var canvas; + (function (canvas) { + var AssetManager = (function (_super) { + __extends(AssetManager, _super); + function AssetManager(pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + return _super.call(this, function (image) { return new spine.canvas.CanvasTexture(image); }, pathPrefix) || this; + } + return AssetManager; + }(spine.AssetManager)); + canvas.AssetManager = AssetManager; + })(canvas = spine.canvas || (spine.canvas = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var canvas; + (function (canvas) { + var CanvasTexture = (function (_super) { + __extends(CanvasTexture, _super); + function CanvasTexture(image) { + return _super.call(this, image) || this; + } + CanvasTexture.prototype.setFilters = function (minFilter, magFilter) { }; + CanvasTexture.prototype.setWraps = function (uWrap, vWrap) { }; + CanvasTexture.prototype.dispose = function () { }; + return CanvasTexture; + }(spine.Texture)); + canvas.CanvasTexture = CanvasTexture; + })(canvas = spine.canvas || (spine.canvas = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var canvas; + (function (canvas) { + var SkeletonRenderer = (function () { + function SkeletonRenderer(context) { + this.triangleRendering = false; + this.debugRendering = false; + this.vertices = spine.Utils.newFloatArray(8 * 1024); + this.tempColor = new spine.Color(); + this.ctx = context; + } + SkeletonRenderer.prototype.draw = function (skeleton) { + if (this.triangleRendering) + this.drawTriangles(skeleton); + else + this.drawImages(skeleton); + }; + SkeletonRenderer.prototype.drawImages = function (skeleton) { + var ctx = this.ctx; + var drawOrder = skeleton.drawOrder; + if (this.debugRendering) + ctx.strokeStyle = "green"; + ctx.save(); + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + var regionAttachment = null; + var region = null; + var image = null; + if (attachment instanceof spine.RegionAttachment) { + regionAttachment = attachment; + region = regionAttachment.region; + image = region.texture.getImage(); + } + else + continue; + var skeleton_1 = slot.bone.skeleton; + var skeletonColor = skeleton_1.color; + var slotColor = slot.color; + var regionColor = regionAttachment.color; + var alpha = skeletonColor.a * slotColor.a * regionColor.a; + var color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * regionColor.r, skeletonColor.g * slotColor.g * regionColor.g, skeletonColor.b * slotColor.b * regionColor.b, alpha); + var att = attachment; + var bone = slot.bone; + var w = region.width; + var h = region.height; + ctx.save(); + ctx.transform(bone.a, bone.c, bone.b, bone.d, bone.worldX, bone.worldY); + ctx.translate(attachment.offset[0], attachment.offset[1]); + ctx.rotate(attachment.rotation * Math.PI / 180); + var atlasScale = att.width / w; + ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY); + ctx.translate(w / 2, h / 2); + if (attachment.region.rotate) { + var t = w; + w = h; + h = t; + ctx.rotate(-Math.PI / 2); + } + ctx.scale(1, -1); + ctx.translate(-w / 2, -h / 2); + ctx.globalAlpha = color.a; + ctx.drawImage(image, region.x, region.y, w, h, 0, 0, w, h); + if (this.debugRendering) + ctx.strokeRect(0, 0, w, h); + ctx.restore(); + } + ctx.restore(); + }; + SkeletonRenderer.prototype.drawTriangles = function (skeleton) { + var blendMode = null; + var vertices = this.vertices; + var triangles = null; + var drawOrder = skeleton.drawOrder; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + var attachment = slot.getAttachment(); + var texture = null; + var region = null; + if (attachment instanceof spine.RegionAttachment) { + var regionAttachment = attachment; + vertices = this.computeRegionVertices(slot, regionAttachment, false); + triangles = SkeletonRenderer.QUAD_TRIANGLES; + region = regionAttachment.region; + texture = region.texture.getImage(); + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + vertices = this.computeMeshVertices(slot, mesh, false); + triangles = mesh.triangles; + texture = mesh.region.renderObject.texture.getImage(); + } + else + continue; + if (texture != null) { + var slotBlendMode = slot.data.blendMode; + if (slotBlendMode != blendMode) { + blendMode = slotBlendMode; + } + var skeleton_2 = slot.bone.skeleton; + var skeletonColor = skeleton_2.color; + var slotColor = slot.color; + var attachmentColor = attachment.color; + var alpha = skeletonColor.a * slotColor.a * attachmentColor.a; + var color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * attachmentColor.r, skeletonColor.g * slotColor.g * attachmentColor.g, skeletonColor.b * slotColor.b * attachmentColor.b, alpha); + var ctx = this.ctx; + ctx.globalAlpha = color.a; + for (var j = 0; j < triangles.length; j += 3) { + var t1 = triangles[j] * 8, t2 = triangles[j + 1] * 8, t3 = triangles[j + 2] * 8; + var x0 = vertices[t1], y0 = vertices[t1 + 1], u0 = vertices[t1 + 6], v0 = vertices[t1 + 7]; + var x1 = vertices[t2], y1 = vertices[t2 + 1], u1 = vertices[t2 + 6], v1 = vertices[t2 + 7]; + var x2 = vertices[t3], y2 = vertices[t3 + 1], u2 = vertices[t3 + 6], v2 = vertices[t3 + 7]; + this.drawTriangle(texture, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2); + if (this.debugRendering) { + ctx.strokeStyle = "green"; + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x0, y0); + ctx.stroke(); + } + } + } + } + this.ctx.globalAlpha = 1; + }; + SkeletonRenderer.prototype.drawTriangle = function (img, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2) { + var ctx = this.ctx; + u0 *= img.width; + v0 *= img.height; + u1 *= img.width; + v1 *= img.height; + u2 *= img.width; + v2 *= img.height; + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.closePath(); + x1 -= x0; + y1 -= y0; + x2 -= x0; + y2 -= y0; + u1 -= u0; + v1 -= v0; + u2 -= u0; + v2 -= v0; + var det = 1 / (u1 * v2 - u2 * v1), a = (v2 * x1 - v1 * x2) * det, b = (v2 * y1 - v1 * y2) * det, c = (u1 * x2 - u2 * x1) * det, d = (u1 * y2 - u2 * y1) * det, e = x0 - a * u0 - c * v0, f = y0 - b * u0 - d * v0; + ctx.save(); + ctx.transform(a, b, c, d, e, f); + ctx.clip(); + ctx.drawImage(img, 0, 0); + ctx.restore(); + }; + SkeletonRenderer.prototype.computeRegionVertices = function (slot, region, pma) { + var skeleton = slot.bone.skeleton; + var skeletonColor = skeleton.color; + var slotColor = slot.color; + var regionColor = region.color; + var alpha = skeletonColor.a * slotColor.a * regionColor.a; + var multiplier = pma ? alpha : 1; + var color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha); + region.computeWorldVertices(slot.bone, this.vertices, 0, SkeletonRenderer.VERTEX_SIZE); + var vertices = this.vertices; + var uvs = region.uvs; + vertices[spine.RegionAttachment.C1R] = color.r; + vertices[spine.RegionAttachment.C1G] = color.g; + vertices[spine.RegionAttachment.C1B] = color.b; + vertices[spine.RegionAttachment.C1A] = color.a; + vertices[spine.RegionAttachment.U1] = uvs[0]; + vertices[spine.RegionAttachment.V1] = uvs[1]; + vertices[spine.RegionAttachment.C2R] = color.r; + vertices[spine.RegionAttachment.C2G] = color.g; + vertices[spine.RegionAttachment.C2B] = color.b; + vertices[spine.RegionAttachment.C2A] = color.a; + vertices[spine.RegionAttachment.U2] = uvs[2]; + vertices[spine.RegionAttachment.V2] = uvs[3]; + vertices[spine.RegionAttachment.C3R] = color.r; + vertices[spine.RegionAttachment.C3G] = color.g; + vertices[spine.RegionAttachment.C3B] = color.b; + vertices[spine.RegionAttachment.C3A] = color.a; + vertices[spine.RegionAttachment.U3] = uvs[4]; + vertices[spine.RegionAttachment.V3] = uvs[5]; + vertices[spine.RegionAttachment.C4R] = color.r; + vertices[spine.RegionAttachment.C4G] = color.g; + vertices[spine.RegionAttachment.C4B] = color.b; + vertices[spine.RegionAttachment.C4A] = color.a; + vertices[spine.RegionAttachment.U4] = uvs[6]; + vertices[spine.RegionAttachment.V4] = uvs[7]; + return vertices; + }; + SkeletonRenderer.prototype.computeMeshVertices = function (slot, mesh, pma) { + var skeleton = slot.bone.skeleton; + var skeletonColor = skeleton.color; + var slotColor = slot.color; + var regionColor = mesh.color; + var alpha = skeletonColor.a * slotColor.a * regionColor.a; + var multiplier = pma ? alpha : 1; + var color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha); + var numVertices = mesh.worldVerticesLength / 2; + if (this.vertices.length < mesh.worldVerticesLength) { + this.vertices = spine.Utils.newFloatArray(mesh.worldVerticesLength); + } + var vertices = this.vertices; + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, SkeletonRenderer.VERTEX_SIZE); + var uvs = mesh.uvs; + for (var i = 0, n = numVertices, u = 0, v = 2; i < n; i++) { + vertices[v++] = color.r; + vertices[v++] = color.g; + vertices[v++] = color.b; + vertices[v++] = color.a; + vertices[v++] = uvs[u++]; + vertices[v++] = uvs[u++]; + v += 2; + } + return vertices; + }; + SkeletonRenderer.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + SkeletonRenderer.VERTEX_SIZE = 2 + 2 + 4; + return SkeletonRenderer; + }()); + canvas.SkeletonRenderer = SkeletonRenderer; + })(canvas = spine.canvas || (spine.canvas = {})); +})(spine || (spine = {})); +//# sourceMappingURL=spine-canvas.js.map \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-canvas.js.map b/apps/module-ts/src/spine-ts/build/spine-canvas.js.map new file mode 100755 index 0000000..8e56f99 --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-canvas.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spine-canvas.js","sourceRoot":"","sources":["../core/src/Animation.ts","../core/src/AnimationState.ts","../core/src/AnimationStateData.ts","../core/src/AssetManager.ts","../core/src/AtlasAttachmentLoader.ts","../core/src/BlendMode.ts","../core/src/Bone.ts","../core/src/BoneData.ts","../core/src/ConstraintData.ts","../core/src/Event.ts","../core/src/EventData.ts","../core/src/IkConstraint.ts","../core/src/IkConstraintData.ts","../core/src/PathConstraint.ts","../core/src/PathConstraintData.ts","../core/src/SharedAssetManager.ts","../core/src/Skeleton.ts","../core/src/SkeletonBinary.ts","../core/src/SkeletonBounds.ts","../core/src/SkeletonClipping.ts","../core/src/SkeletonData.ts","../core/src/SkeletonJson.ts","../core/src/Skin.ts","../core/src/Slot.ts","../core/src/SlotData.ts","../core/src/Texture.ts","../core/src/TextureAtlas.ts","../core/src/TransformConstraint.ts","../core/src/TransformConstraintData.ts","../core/src/Triangulator.ts","../core/src/Updatable.ts","../core/src/Utils.ts","../core/src/VertexEffect.ts","../core/src/polyfills.ts","../core/src/attachments/Attachment.ts","../core/src/attachments/AttachmentLoader.ts","../core/src/attachments/AttachmentType.ts","../core/src/attachments/BoundingBoxAttachment.ts","../core/src/attachments/ClippingAttachment.ts","../core/src/attachments/MeshAttachment.ts","../core/src/attachments/PathAttachment.ts","../core/src/attachments/PointAttachment.ts","../core/src/attachments/RegionAttachment.ts","../core/src/vertexeffects/JitterEffect.ts","../core/src/vertexeffects/SwirlEffect.ts","../canvas/src/AssetManager.ts","../canvas/src/CanvasTexture.ts","../canvas/src/SkeletonRenderer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-core.d.ts b/apps/module-ts/src/spine-ts/build/spine-core.d.ts new file mode 100755 index 0000000..737d17e --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-core.d.ts @@ -0,0 +1,1338 @@ +declare module spine { + class Animation { + name: string; + timelines: Array; + timelineIds: Array; + duration: number; + constructor(name: string, timelines: Array, duration: number); + hasTimeline(id: number): boolean; + apply(skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + static binarySearch(values: ArrayLike, target: number, step?: number): number; + static linearSearch(values: ArrayLike, target: number, step: number): number; + } + interface Timeline { + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + getPropertyId(): number; + } + enum MixBlend { + setup = 0, + first = 1, + replace = 2, + add = 3 + } + enum MixDirection { + mixIn = 0, + mixOut = 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, degrees: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, x: number, y: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ScaleTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ShearTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class AttachmentTimeline implements Timeline { + slotIndex: number; + frames: ArrayLike; + attachmentNames: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, attachmentName: string): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string): void; + } + class DeformTimeline extends CurveTimeline { + slotIndex: number; + attachment: VertexAttachment; + frames: ArrayLike; + frameVertices: Array>; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, vertices: ArrayLike): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class EventTimeline implements Timeline { + frames: ArrayLike; + events: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, event: Event): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class DrawOrderTimeline implements Timeline { + frames: ArrayLike; + drawOrders: Array>; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, drawOrder: Array): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class IkConstraintTimeline extends CurveTimeline { + static ENTRIES: number; + static PREV_TIME: number; + static PREV_MIX: number; + static PREV_SOFTNESS: number; + static PREV_BEND_DIRECTION: number; + static PREV_COMPRESS: number; + static PREV_STRETCH: number; + static MIX: number; + static SOFTNESS: number; + static BEND_DIRECTION: number; + static COMPRESS: number; + static STRETCH: number; + ikConstraintIndex: number; + frames: ArrayLike; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, mix: number, softness: number, bendDirection: number, compress: boolean, stretch: boolean): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, value: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class PathConstraintSpacingTimeline extends PathConstraintPositionTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, rotateMix: number, translateMix: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } +} +declare module spine { + class AnimationState { + static emptyAnimation: Animation; + static SUBSEQUENT: number; + static FIRST: number; + static HOLD_SUBSEQUENT: number; + static HOLD_FIRST: number; + static HOLD_MIX: number; + static SETUP: number; + static CURRENT: number; + data: AnimationStateData; + tracks: TrackEntry[]; + timeScale: number; + unkeyedState: number; + events: Event[]; + listeners: AnimationStateListener[]; + queue: EventQueue; + propertyIDs: IntSet; + animationsChanged: boolean; + trackEntryPool: Pool; + constructor(data: AnimationStateData); + update(delta: number): void; + updateMixingFrom(to: TrackEntry, delta: number): boolean; + apply(skeleton: Skeleton): boolean; + applyMixingFrom(to: TrackEntry, skeleton: Skeleton, blend: MixBlend): number; + applyAttachmentTimeline(timeline: AttachmentTimeline, skeleton: Skeleton, time: number, blend: MixBlend, attachments: boolean): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string, attachments: boolean): void; + applyRotateTimeline(timeline: Timeline, skeleton: Skeleton, time: number, alpha: number, blend: MixBlend, timelinesRotation: Array, 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; + computeHold(entry: TrackEntry): void; + getCurrent(trackIndex: number): TrackEntry; + addListener(listener: AnimationStateListener): void; + removeListener(listener: AnimationStateListener): void; + clearListeners(): void; + clearListenerNotifications(): void; + } + class TrackEntry { + animation: Animation; + next: TrackEntry; + mixingFrom: TrackEntry; + mixingTo: TrackEntry; + listener: AnimationStateListener; + trackIndex: number; + loop: boolean; + holdPrevious: 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; + mixBlend: MixBlend; + timelineMode: number[]; + timelineHoldMix: TrackEntry[]; + timelinesRotation: number[]; + reset(): void; + getAnimationTime(): number; + setAnimationLast(animationLast: number): void; + isComplete(): boolean; + resetRotationDirections(): void; + } + class EventQueue { + objects: Array; + 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 AnimationStateListener { + 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 AnimationStateAdapter implements AnimationStateListener { + 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; + 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; + private rawDataUris; + constructor(textureLoader: (image: HTMLImageElement) => any, pathPrefix?: string); + private downloadText; + private downloadBinary; + setRawDataURI(path: string, data: string): void; + loadBinary(path: string, success?: (path: string, binary: Uint8Array) => void, error?: (path: string, error: string) => void): void; + 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; + loadTextureAtlas(path: string, success?: (path: string, atlas: TextureAtlas) => 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; + } +} +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; + } +} +declare module spine { + 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; + c: number; + d: number; + worldY: number; + worldX: number; + sorted: boolean; + active: boolean; + constructor(data: BoneData, skeleton: Skeleton, parent: Bone); + isActive(): boolean; + 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; + skinRequired: boolean; + color: Color; + constructor(index: number, name: string, parent: BoneData); + } + enum TransformMode { + Normal = 0, + OnlyTranslation = 1, + NoRotationOrReflection = 2, + NoScale = 3, + NoScaleOrReflection = 4 + } +} +declare module spine { + abstract class ConstraintData { + name: string; + order: number; + skinRequired: boolean; + constructor(name: string, order: number, skinRequired: boolean); + } +} +declare module spine { + class Event { + data: EventData; + intValue: number; + floatValue: number; + stringValue: string; + time: number; + volume: number; + balance: number; + constructor(time: number, data: EventData); + } +} +declare module spine { + class EventData { + name: string; + intValue: number; + floatValue: number; + stringValue: string; + audioPath: string; + volume: number; + balance: number; + constructor(name: string); + } +} +declare module spine { + class IkConstraint implements Updatable { + data: IkConstraintData; + bones: Array; + target: Bone; + bendDirection: number; + compress: boolean; + stretch: boolean; + mix: number; + softness: number; + active: boolean; + constructor(data: IkConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + apply1(bone: Bone, targetX: number, targetY: number, compress: boolean, stretch: boolean, uniform: boolean, alpha: number): void; + apply2(parent: Bone, child: Bone, targetX: number, targetY: number, bendDir: number, stretch: boolean, softness: number, alpha: number): void; + } +} +declare module spine { + class IkConstraintData extends ConstraintData { + bones: BoneData[]; + target: BoneData; + bendDirection: number; + compress: boolean; + stretch: boolean; + uniform: boolean; + mix: number; + softness: number; + constructor(name: string); + } +} +declare module spine { + class PathConstraint implements Updatable { + static NONE: number; + static BEFORE: number; + static AFTER: number; + static epsilon: number; + data: PathConstraintData; + bones: Array; + target: Slot; + position: number; + spacing: number; + rotateMix: number; + translateMix: number; + spaces: number[]; + positions: number[]; + world: number[]; + curves: number[]; + lengths: number[]; + segments: number[]; + active: boolean; + constructor(data: PathConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + computeWorldPositions(path: PathAttachment, spacesCount: number, tangents: boolean, percentPosition: boolean, percentSpacing: boolean): number[]; + addBeforePosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addAfterPosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addCurvePosition(p: number, x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, out: Array, o: number, tangents: boolean): void; + } +} +declare module spine { + class PathConstraintData extends ConstraintData { + 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 + } +} +declare module spine { + class SharedAssetManager implements Disposable { + private pathPrefix; + private clientAssets; + private queuedAssets; + private rawAssets; + private errors; + constructor(pathPrefix?: string); + private queueAsset; + loadText(clientId: string, path: string): void; + loadJson(clientId: string, path: string): void; + loadTexture(clientId: string, textureLoader: (image: HTMLImageElement | ImageBitmap) => any, path: string): void; + get(clientId: string, path: string): any; + private updateClientAssets; + isLoadingComplete(clientId: string): boolean; + dispose(): void; + hasErrors(): boolean; + getErrors(): Map; + } +} +declare module spine { + class Skeleton { + data: SkeletonData; + bones: Array; + slots: Array; + drawOrder: Array; + ikConstraints: Array; + transformConstraints: Array; + pathConstraints: Array; + _updateCache: Updatable[]; + updateCacheReset: Updatable[]; + skin: Skin; + color: Color; + time: number; + scaleX: number; + scaleY: number; + 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): 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): void; + update(delta: number): void; + } +} +declare module spine { + class SkeletonBinary { + static AttachmentTypeValues: number[]; + static TransformModeValues: TransformMode[]; + static PositionModeValues: PositionMode[]; + static SpacingModeValues: SpacingMode[]; + static RotateModeValues: RotateMode[]; + static BlendModeValues: BlendMode[]; + static BONE_ROTATE: number; + static BONE_TRANSLATE: number; + static BONE_SCALE: number; + static BONE_SHEAR: number; + static SLOT_ATTACHMENT: number; + static SLOT_COLOR: number; + static SLOT_TWO_COLOR: number; + static PATH_POSITION: number; + static PATH_SPACING: number; + static PATH_MIX: number; + static CURVE_LINEAR: number; + static CURVE_STEPPED: number; + static CURVE_BEZIER: number; + scale: number; + attachmentLoader: AttachmentLoader; + private linkedMeshes; + constructor(attachmentLoader: AttachmentLoader); + readSkeletonData(binary: Uint8Array): SkeletonData; + private readSkin; + private readAttachment; + private readVertices; + private readFloatArray; + private readShortArray; + private readAnimation; + private readCurve; + setCurve(timeline: CurveTimeline, frameIndex: number, cx1: number, cy1: number, cx2: number, cy2: number): void; + } +} +declare module spine { + class SkeletonBounds { + minX: number; + minY: number; + maxX: number; + maxY: number; + boundingBoxes: BoundingBoxAttachment[]; + polygons: ArrayLike[]; + 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, x: number, y: number): boolean; + intersectsSegment(x1: number, y1: number, x2: number, y2: number): BoundingBoxAttachment; + intersectsSegmentPolygon(polygon: ArrayLike, x1: number, y1: number, x2: number, y2: number): boolean; + getPolygon(boundingBox: BoundingBoxAttachment): ArrayLike; + 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, verticesLength: number, triangles: ArrayLike, trianglesLength: number, uvs: ArrayLike, light: Color, dark: Color, twoColor: boolean): void; + clip(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, clippingArea: Array, output: Array): boolean; + static makeClockwise(polygon: ArrayLike): 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[]; + x: number; + y: number; + width: number; + height: number; + version: string; + hash: string; + fps: number; + imagesPath: string; + audioPath: 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; + } +} +declare module spine { + class SkinEntry { + slotIndex: number; + name: string; + attachment: Attachment; + constructor(slotIndex: number, name: string, attachment: Attachment); + } + class Skin { + name: string; + attachments: Map[]; + bones: BoneData[]; + constraints: ConstraintData[]; + constructor(name: string); + setAttachment(slotIndex: number, name: string, attachment: Attachment): void; + addSkin(skin: Skin): void; + copySkin(skin: Skin): void; + getAttachment(slotIndex: number, name: string): Attachment; + removeAttachment(slotIndex: number, name: string): void; + getAttachments(): Array; + getAttachmentsForSlot(slotIndex: number, attachments: Array): void; + clear(): void; + attachAll(skeleton: Skeleton, oldSkin: Skin): void; + } +} +declare module spine { + class Slot { + data: SlotData; + bone: Bone; + color: Color; + darkColor: Color; + attachment: Attachment; + private attachmentTime; + attachmentState: number; + deform: number[]; + constructor(data: SlotData, bone: Bone); + getSkeleton(): Skeleton; + 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); + } +} +declare module spine { + abstract class Texture { + protected _image: HTMLImageElement | ImageBitmap; + constructor(image: HTMLImageElement | ImageBitmap); + getImage(): HTMLImageElement | ImageBitmap; + 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; + } + class FakeTexture extends Texture { + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void; + dispose(): void; + } +} +declare module spine { + class TextureAtlas implements Disposable { + pages: TextureAtlasPage[]; + regions: TextureAtlasRegion[]; + constructor(atlasText: string, textureLoader: (path: string) => any); + private load; + 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; + degrees: number; + texture: Texture; + } +} +declare module spine { + class TransformConstraint implements Updatable { + data: TransformConstraintData; + bones: Array; + target: Bone; + rotateMix: number; + translateMix: number; + scaleMix: number; + shearMix: number; + temp: Vector2; + active: boolean; + constructor(data: TransformConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + applyAbsoluteWorld(): void; + applyRelativeWorld(): void; + applyAbsoluteLocal(): void; + applyRelativeLocal(): void; + } +} +declare module spine { + class TransformConstraintData extends ConstraintData { + 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): Array; + decompose(verticesArray: Array, triangles: Array): Array>; + private static isConcave; + private static positiveArea; + private static winding; + } +} +declare module spine { + interface Updatable { + update(): void; + isActive(): boolean; + } +} +declare module spine { + interface Map { + [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; + static rgba8888ToColor(color: Color, value: number): void; + static rgb888ToColor(color: Color, value: number): void; + } + 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(source: ArrayLike, sourceStart: number, dest: ArrayLike, destStart: number, numElements: number): void; + static setArraySize(array: Array, size: number, value?: any): Array; + static ensureArrayCapacity(array: Array, size: number, value?: any): Array; + static newArray(size: number, defaultValue: T): Array; + static newFloatArray(size: number): ArrayLike; + static newShortArray(size: number): ArrayLike; + static toFloatArray(array: Array): number[] | Float32Array; + static toSinglePrecision(value: number): number; + static webkit602BugfixHelper(alpha: number, blend: MixBlend): void; + static contains(array: Array, element: T, identity?: boolean): boolean; + } + class DebugUtils { + static logBones(skeleton: Skeleton): void; + } + class Pool { + private items; + private instantiator; + constructor(instantiator: () => T); + obtain(): T; + free(item: T): void; + freeAll(items: ArrayLike): 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 { + length: number; + [n: number]: T; + } + class WindowedMean { + values: Array; + 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 Math { + fround(n: number): number; +} +declare module spine { + abstract class Attachment { + name: string; + constructor(name: string); + abstract copy(): Attachment; + } + abstract class VertexAttachment extends Attachment { + private static nextID; + id: number; + bones: Array; + vertices: ArrayLike; + worldVerticesLength: number; + deformAttachment: VertexAttachment; + constructor(name: string); + computeWorldVertices(slot: Slot, start: number, count: number, worldVertices: ArrayLike, offset: number, stride: number): void; + copyTo(attachment: VertexAttachment): void; + } +} +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; + } +} +declare module spine { + enum AttachmentType { + Region = 0, + BoundingBox = 1, + Mesh = 2, + LinkedMesh = 3, + Path = 4, + Point = 5, + Clipping = 6 + } +} +declare module spine { + class BoundingBoxAttachment extends VertexAttachment { + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class ClippingAttachment extends VertexAttachment { + endSlot: SlotData; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class MeshAttachment extends VertexAttachment { + region: TextureRegion; + path: string; + regionUVs: ArrayLike; + uvs: ArrayLike; + triangles: Array; + color: Color; + width: number; + height: number; + hullLength: number; + edges: Array; + private parentMesh; + tempColor: Color; + constructor(name: string); + updateUVs(): void; + getParentMesh(): MeshAttachment; + setParentMesh(parentMesh: MeshAttachment): void; + copy(): Attachment; + newLinkedMesh(): MeshAttachment; + } +} +declare module spine { + class PathAttachment extends VertexAttachment { + lengths: Array; + closed: boolean; + constantSpeed: boolean; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +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; + copy(): Attachment; + } +} +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; + uvs: ArrayLike; + tempColor: Color; + constructor(name: string); + updateOffset(): void; + setRegion(region: TextureRegion): void; + computeWorldVertices(bone: Bone, worldVertices: ArrayLike, offset: number, stride: number): void; + copy(): Attachment; + } +} +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; + } +} +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; + } +} diff --git a/apps/module-ts/src/spine-ts/build/spine-core.js b/apps/module-ts/src/spine-ts/build/spine-core.js new file mode 100755 index 0000000..ef9dc5e --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-core.js @@ -0,0 +1,8208 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var spine; +(function (spine) { + var Animation = (function () { + function Animation(name, timelines, duration) { + if (name == null) + throw new Error("name cannot be null."); + if (timelines == null) + throw new Error("timelines cannot be null."); + this.name = name; + this.timelines = timelines; + this.timelineIds = []; + for (var i = 0; i < timelines.length; i++) + this.timelineIds[timelines[i].getPropertyId()] = true; + this.duration = duration; + } + Animation.prototype.hasTimeline = function (id) { + return this.timelineIds[id] == true; + }; + Animation.prototype.apply = function (skeleton, lastTime, time, loop, events, alpha, blend, direction) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (loop && this.duration != 0) { + time %= this.duration; + if (lastTime > 0) + lastTime %= this.duration; + } + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction); + }; + Animation.binarySearch = function (values, target, step) { + if (step === void 0) { step = 1; } + var low = 0; + var high = values.length / step - 2; + if (high == 0) + return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) + return (low + 1) * step; + current = (low + high) >>> 1; + } + }; + Animation.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) + return i; + return -1; + }; + return Animation; + }()); + spine.Animation = Animation; + var MixBlend; + (function (MixBlend) { + MixBlend[MixBlend["setup"] = 0] = "setup"; + MixBlend[MixBlend["first"] = 1] = "first"; + MixBlend[MixBlend["replace"] = 2] = "replace"; + MixBlend[MixBlend["add"] = 3] = "add"; + })(MixBlend = spine.MixBlend || (spine.MixBlend = {})); + var MixDirection; + (function (MixDirection) { + MixDirection[MixDirection["mixIn"] = 0] = "mixIn"; + MixDirection[MixDirection["mixOut"] = 1] = "mixOut"; + })(MixDirection = spine.MixDirection || (spine.MixDirection = {})); + var TimelineType; + (function (TimelineType) { + TimelineType[TimelineType["rotate"] = 0] = "rotate"; + TimelineType[TimelineType["translate"] = 1] = "translate"; + TimelineType[TimelineType["scale"] = 2] = "scale"; + TimelineType[TimelineType["shear"] = 3] = "shear"; + TimelineType[TimelineType["attachment"] = 4] = "attachment"; + TimelineType[TimelineType["color"] = 5] = "color"; + TimelineType[TimelineType["deform"] = 6] = "deform"; + TimelineType[TimelineType["event"] = 7] = "event"; + TimelineType[TimelineType["drawOrder"] = 8] = "drawOrder"; + TimelineType[TimelineType["ikConstraint"] = 9] = "ikConstraint"; + TimelineType[TimelineType["transformConstraint"] = 10] = "transformConstraint"; + TimelineType[TimelineType["pathConstraintPosition"] = 11] = "pathConstraintPosition"; + TimelineType[TimelineType["pathConstraintSpacing"] = 12] = "pathConstraintSpacing"; + TimelineType[TimelineType["pathConstraintMix"] = 13] = "pathConstraintMix"; + TimelineType[TimelineType["twoColor"] = 14] = "twoColor"; + })(TimelineType = spine.TimelineType || (spine.TimelineType = {})); + var CurveTimeline = (function () { + function CurveTimeline(frameCount) { + if (frameCount <= 0) + throw new Error("frameCount must be > 0: " + frameCount); + this.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE); + } + CurveTimeline.prototype.getFrameCount = function () { + return this.curves.length / CurveTimeline.BEZIER_SIZE + 1; + }; + CurveTimeline.prototype.setLinear = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR; + }; + CurveTimeline.prototype.setStepped = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED; + }; + CurveTimeline.prototype.getCurveType = function (frameIndex) { + var index = frameIndex * CurveTimeline.BEZIER_SIZE; + if (index == this.curves.length) + return CurveTimeline.LINEAR; + var type = this.curves[index]; + if (type == CurveTimeline.LINEAR) + return CurveTimeline.LINEAR; + if (type == CurveTimeline.STEPPED) + return CurveTimeline.STEPPED; + return CurveTimeline.BEZIER; + }; + CurveTimeline.prototype.setCurve = function (frameIndex, cx1, cy1, cx2, cy2) { + var tmpx = (-cx1 * 2 + cx2) * 0.03, tmpy = (-cy1 * 2 + cy2) * 0.03; + var dddfx = ((cx1 - cx2) * 3 + 1) * 0.006, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006; + var ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy; + var dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667, dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var curves = this.curves; + curves[i++] = CurveTimeline.BEZIER; + var x = dfx, y = dfy; + for (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + }; + CurveTimeline.prototype.getCurvePercent = function (frameIndex, percent) { + percent = spine.MathUtils.clamp(percent, 0, 1); + var curves = this.curves; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var type = curves[i]; + if (type == CurveTimeline.LINEAR) + return percent; + if (type == CurveTimeline.STEPPED) + return 0; + i++; + var x = 0; + for (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + x = curves[i]; + if (x >= percent) { + var prevX = void 0, prevY = void 0; + if (i == start) { + prevX = 0; + prevY = 0; + } + else { + prevX = curves[i - 2]; + prevY = curves[i - 1]; + } + return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX); + } + } + var y = curves[i - 1]; + return y + (1 - y) * (percent - x) / (1 - x); + }; + CurveTimeline.LINEAR = 0; + CurveTimeline.STEPPED = 1; + CurveTimeline.BEZIER = 2; + CurveTimeline.BEZIER_SIZE = 10 * 2 - 1; + return CurveTimeline; + }()); + spine.CurveTimeline = CurveTimeline; + var RotateTimeline = (function (_super) { + __extends(RotateTimeline, _super); + function RotateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount << 1); + return _this; + } + RotateTimeline.prototype.getPropertyId = function () { + return (TimelineType.rotate << 24) + this.boneIndex; + }; + RotateTimeline.prototype.setFrame = function (frameIndex, time, degrees) { + frameIndex <<= 1; + this.frames[frameIndex] = time; + this.frames[frameIndex + RotateTimeline.ROTATION] = degrees; + }; + RotateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + return; + case MixBlend.first: + var r_1 = bone.data.rotation - bone.rotation; + bone.rotation += (r_1 - (16384 - ((16384.499999999996 - r_1 / 360) | 0)) * 360) * alpha; + } + return; + } + if (time >= frames[frames.length - RotateTimeline.ENTRIES]) { + var r_2 = frames[frames.length + RotateTimeline.PREV_ROTATION]; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + r_2 * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r_2 += bone.data.rotation - bone.rotation; + r_2 -= (16384 - ((16384.499999999996 - r_2 / 360) | 0)) * 360; + case MixBlend.add: + bone.rotation += r_2 * alpha; + } + return; + } + var frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES); + var prevRotation = frames[frame + RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime)); + var r = frames[frame + RotateTimeline.ROTATION] - prevRotation; + r = prevRotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * percent; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r += bone.data.rotation - bone.rotation; + case MixBlend.add: + bone.rotation += (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + } + }; + RotateTimeline.ENTRIES = 2; + RotateTimeline.PREV_TIME = -2; + RotateTimeline.PREV_ROTATION = -1; + RotateTimeline.ROTATION = 1; + return RotateTimeline; + }(CurveTimeline)); + spine.RotateTimeline = RotateTimeline; + var TranslateTimeline = (function (_super) { + __extends(TranslateTimeline, _super); + function TranslateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES); + return _this; + } + TranslateTimeline.prototype.getPropertyId = function () { + return (TimelineType.translate << 24) + this.boneIndex; + }; + TranslateTimeline.prototype.setFrame = function (frameIndex, time, x, y) { + frameIndex *= TranslateTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TranslateTimeline.X] = x; + this.frames[frameIndex + TranslateTimeline.Y] = y; + }; + TranslateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + bone.y = bone.data.y; + return; + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) { + x = frames[frames.length + TranslateTimeline.PREV_X]; + y = frames[frames.length + TranslateTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES); + x = frames[frame + TranslateTimeline.PREV_X]; + y = frames[frame + TranslateTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime)); + x += (frames[frame + TranslateTimeline.X] - x) * percent; + y += (frames[frame + TranslateTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + bone.y = bone.data.y + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + bone.y += (bone.data.y + y - bone.y) * alpha; + break; + case MixBlend.add: + bone.x += x * alpha; + bone.y += y * alpha; + } + }; + TranslateTimeline.ENTRIES = 3; + TranslateTimeline.PREV_TIME = -3; + TranslateTimeline.PREV_X = -2; + TranslateTimeline.PREV_Y = -1; + TranslateTimeline.X = 1; + TranslateTimeline.Y = 2; + return TranslateTimeline; + }(CurveTimeline)); + spine.TranslateTimeline = TranslateTimeline; + var ScaleTimeline = (function (_super) { + __extends(ScaleTimeline, _super); + function ScaleTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ScaleTimeline.prototype.getPropertyId = function () { + return (TimelineType.scale << 24) + this.boneIndex; + }; + ScaleTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + bone.scaleY = bone.data.scaleY; + return; + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) { + x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX; + y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY; + } + else { + var frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES); + x = frames[frame + ScaleTimeline.PREV_X]; + y = frames[frame + ScaleTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime)); + x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX; + y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY; + } + if (alpha == 1) { + if (blend == MixBlend.add) { + bone.scaleX += x - bone.data.scaleX; + bone.scaleY += y - bone.data.scaleY; + } + else { + bone.scaleX = x; + bone.scaleY = y; + } + } + else { + var bx = 0, by = 0; + if (direction == MixDirection.mixOut) { + switch (blend) { + case MixBlend.setup: + bx = bone.data.scaleX; + by = bone.data.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.add: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bone.data.scaleX) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - bone.data.scaleY) * alpha; + } + } + else { + switch (blend) { + case MixBlend.setup: + bx = Math.abs(bone.data.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.data.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = Math.abs(bone.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.add: + bx = spine.MathUtils.signum(x); + by = spine.MathUtils.signum(y); + bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha; + bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha; + } + } + } + }; + return ScaleTimeline; + }(TranslateTimeline)); + spine.ScaleTimeline = ScaleTimeline; + var ShearTimeline = (function (_super) { + __extends(ShearTimeline, _super); + function ShearTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ShearTimeline.prototype.getPropertyId = function () { + return (TimelineType.shear << 24) + this.boneIndex; + }; + ShearTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + bone.shearY = bone.data.shearY; + return; + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ShearTimeline.ENTRIES]) { + x = frames[frames.length + ShearTimeline.PREV_X]; + y = frames[frames.length + ShearTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES); + x = frames[frame + ShearTimeline.PREV_X]; + y = frames[frame + ShearTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime)); + x = x + (frames[frame + ShearTimeline.X] - x) * percent; + y = y + (frames[frame + ShearTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + bone.shearY = bone.data.shearY + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + break; + case MixBlend.add: + bone.shearX += x * alpha; + bone.shearY += y * alpha; + } + }; + return ShearTimeline; + }(TranslateTimeline)); + spine.ShearTimeline = ShearTimeline; + var ColorTimeline = (function (_super) { + __extends(ColorTimeline, _super); + function ColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES); + return _this; + } + ColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.color << 24) + this.slotIndex; + }; + ColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a) { + frameIndex *= ColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + ColorTimeline.R] = r; + this.frames[frameIndex + ColorTimeline.G] = g; + this.frames[frameIndex + ColorTimeline.B] = b; + this.frames[frameIndex + ColorTimeline.A] = a; + }; + ColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + return; + case MixBlend.first: + var color = slot.color, setup = slot.data.color; + color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha); + } + return; + } + var r = 0, g = 0, b = 0, a = 0; + if (time >= frames[frames.length - ColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + ColorTimeline.PREV_R]; + g = frames[i + ColorTimeline.PREV_G]; + b = frames[i + ColorTimeline.PREV_B]; + a = frames[i + ColorTimeline.PREV_A]; + } + else { + var frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES); + r = frames[frame + ColorTimeline.PREV_R]; + g = frames[frame + ColorTimeline.PREV_G]; + b = frames[frame + ColorTimeline.PREV_B]; + a = frames[frame + ColorTimeline.PREV_A]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + ColorTimeline.R] - r) * percent; + g += (frames[frame + ColorTimeline.G] - g) * percent; + b += (frames[frame + ColorTimeline.B] - b) * percent; + a += (frames[frame + ColorTimeline.A] - a) * percent; + } + if (alpha == 1) + slot.color.set(r, g, b, a); + else { + var color = slot.color; + if (blend == MixBlend.setup) + color.setFromColor(slot.data.color); + color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha); + } + }; + ColorTimeline.ENTRIES = 5; + ColorTimeline.PREV_TIME = -5; + ColorTimeline.PREV_R = -4; + ColorTimeline.PREV_G = -3; + ColorTimeline.PREV_B = -2; + ColorTimeline.PREV_A = -1; + ColorTimeline.R = 1; + ColorTimeline.G = 2; + ColorTimeline.B = 3; + ColorTimeline.A = 4; + return ColorTimeline; + }(CurveTimeline)); + spine.ColorTimeline = ColorTimeline; + var TwoColorTimeline = (function (_super) { + __extends(TwoColorTimeline, _super); + function TwoColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES); + return _this; + } + TwoColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.twoColor << 24) + this.slotIndex; + }; + TwoColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a, r2, g2, b2) { + frameIndex *= TwoColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TwoColorTimeline.R] = r; + this.frames[frameIndex + TwoColorTimeline.G] = g; + this.frames[frameIndex + TwoColorTimeline.B] = b; + this.frames[frameIndex + TwoColorTimeline.A] = a; + this.frames[frameIndex + TwoColorTimeline.R2] = r2; + this.frames[frameIndex + TwoColorTimeline.G2] = g2; + this.frames[frameIndex + TwoColorTimeline.B2] = b2; + }; + TwoColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + slot.darkColor.setFromColor(slot.data.darkColor); + return; + case MixBlend.first: + var light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor; + light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha); + dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0); + } + return; + } + var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; + if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + TwoColorTimeline.PREV_R]; + g = frames[i + TwoColorTimeline.PREV_G]; + b = frames[i + TwoColorTimeline.PREV_B]; + a = frames[i + TwoColorTimeline.PREV_A]; + r2 = frames[i + TwoColorTimeline.PREV_R2]; + g2 = frames[i + TwoColorTimeline.PREV_G2]; + b2 = frames[i + TwoColorTimeline.PREV_B2]; + } + else { + var frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES); + r = frames[frame + TwoColorTimeline.PREV_R]; + g = frames[frame + TwoColorTimeline.PREV_G]; + b = frames[frame + TwoColorTimeline.PREV_B]; + a = frames[frame + TwoColorTimeline.PREV_A]; + r2 = frames[frame + TwoColorTimeline.PREV_R2]; + g2 = frames[frame + TwoColorTimeline.PREV_G2]; + b2 = frames[frame + TwoColorTimeline.PREV_B2]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + TwoColorTimeline.R] - r) * percent; + g += (frames[frame + TwoColorTimeline.G] - g) * percent; + b += (frames[frame + TwoColorTimeline.B] - b) * percent; + a += (frames[frame + TwoColorTimeline.A] - a) * percent; + r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent; + g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent; + b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent; + } + if (alpha == 1) { + slot.color.set(r, g, b, a); + slot.darkColor.set(r2, g2, b2, 1); + } + else { + var light = slot.color, dark = slot.darkColor; + if (blend == MixBlend.setup) { + light.setFromColor(slot.data.color); + dark.setFromColor(slot.data.darkColor); + } + light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha); + dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0); + } + }; + TwoColorTimeline.ENTRIES = 8; + TwoColorTimeline.PREV_TIME = -8; + TwoColorTimeline.PREV_R = -7; + TwoColorTimeline.PREV_G = -6; + TwoColorTimeline.PREV_B = -5; + TwoColorTimeline.PREV_A = -4; + TwoColorTimeline.PREV_R2 = -3; + TwoColorTimeline.PREV_G2 = -2; + TwoColorTimeline.PREV_B2 = -1; + TwoColorTimeline.R = 1; + TwoColorTimeline.G = 2; + TwoColorTimeline.B = 3; + TwoColorTimeline.A = 4; + TwoColorTimeline.R2 = 5; + TwoColorTimeline.G2 = 6; + TwoColorTimeline.B2 = 7; + return TwoColorTimeline; + }(CurveTimeline)); + spine.TwoColorTimeline = TwoColorTimeline; + var AttachmentTimeline = (function () { + function AttachmentTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.attachmentNames = new Array(frameCount); + } + AttachmentTimeline.prototype.getPropertyId = function () { + return (TimelineType.attachment << 24) + this.slotIndex; + }; + AttachmentTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + AttachmentTimeline.prototype.setFrame = function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }; + AttachmentTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frameIndex = 0; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = Animation.binarySearch(frames, time, 1) - 1; + var attachmentName = this.attachmentNames[frameIndex]; + skeleton.slots[this.slotIndex] + .setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + AttachmentTimeline.prototype.setAttachment = function (skeleton, slot, attachmentName) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + return AttachmentTimeline; + }()); + spine.AttachmentTimeline = AttachmentTimeline; + var zeros = null; + var DeformTimeline = (function (_super) { + __extends(DeformTimeline, _super); + function DeformTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount); + _this.frameVertices = new Array(frameCount); + if (zeros == null) + zeros = spine.Utils.newFloatArray(64); + return _this; + } + DeformTimeline.prototype.getPropertyId = function () { + return (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex; + }; + DeformTimeline.prototype.setFrame = function (frameIndex, time, vertices) { + this.frames[frameIndex] = time; + this.frameVertices[frameIndex] = vertices; + }; + DeformTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var slotAttachment = slot.getAttachment(); + if (!(slotAttachment instanceof spine.VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment)) + return; + var deformArray = slot.deform; + if (deformArray.length == 0) + blend = MixBlend.setup; + var frameVertices = this.frameVertices; + var vertexCount = frameVertices[0].length; + var frames = this.frames; + if (time < frames[0]) { + var vertexAttachment = slotAttachment; + switch (blend) { + case MixBlend.setup: + deformArray.length = 0; + return; + case MixBlend.first: + if (alpha == 1) { + deformArray.length = 0; + break; + } + var deform_1 = spine.Utils.setArraySize(deformArray, vertexCount); + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i = 0; i < vertexCount; i++) + deform_1[i] += (setupVertices[i] - deform_1[i]) * alpha; + } + else { + alpha = 1 - alpha; + for (var i = 0; i < vertexCount; i++) + deform_1[i] *= alpha; + } + } + return; + } + var deform = spine.Utils.setArraySize(deformArray, vertexCount); + if (time >= frames[frames.length - 1]) { + var lastVertices = frameVertices[frames.length - 1]; + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_1 = 0; i_1 < vertexCount; i_1++) { + deform[i_1] += lastVertices[i_1] - setupVertices[i_1]; + } + } + else { + for (var i_2 = 0; i_2 < vertexCount; i_2++) + deform[i_2] += lastVertices[i_2]; + } + } + else { + spine.Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount); + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_1 = slotAttachment; + if (vertexAttachment_1.bones == null) { + var setupVertices = vertexAttachment_1.vertices; + for (var i_3 = 0; i_3 < vertexCount; i_3++) { + var setup = setupVertices[i_3]; + deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha; + } + } + else { + for (var i_4 = 0; i_4 < vertexCount; i_4++) + deform[i_4] = lastVertices[i_4] * alpha; + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_5 = 0; i_5 < vertexCount; i_5++) + deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha; + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_6 = 0; i_6 < vertexCount; i_6++) { + deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha; + } + } + else { + for (var i_7 = 0; i_7 < vertexCount; i_7++) + deform[i_7] += lastVertices[i_7] * alpha; + } + } + } + return; + } + var frame = Animation.binarySearch(frames, time); + var prevVertices = frameVertices[frame - 1]; + var nextVertices = frameVertices[frame]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime)); + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_8 = 0; i_8 < vertexCount; i_8++) { + var prev = prevVertices[i_8]; + deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8]; + } + } + else { + for (var i_9 = 0; i_9 < vertexCount; i_9++) { + var prev = prevVertices[i_9]; + deform[i_9] += prev + (nextVertices[i_9] - prev) * percent; + } + } + } + else { + for (var i_10 = 0; i_10 < vertexCount; i_10++) { + var prev = prevVertices[i_10]; + deform[i_10] = prev + (nextVertices[i_10] - prev) * percent; + } + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_2 = slotAttachment; + if (vertexAttachment_2.bones == null) { + var setupVertices = vertexAttachment_2.vertices; + for (var i_11 = 0; i_11 < vertexCount; i_11++) { + var prev = prevVertices[i_11], setup = setupVertices[i_11]; + deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha; + } + } + else { + for (var i_12 = 0; i_12 < vertexCount; i_12++) { + var prev = prevVertices[i_12]; + deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha; + } + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_13 = 0; i_13 < vertexCount; i_13++) { + var prev = prevVertices[i_13]; + deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha; + } + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_14 = 0; i_14 < vertexCount; i_14++) { + var prev = prevVertices[i_14]; + deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha; + } + } + else { + for (var i_15 = 0; i_15 < vertexCount; i_15++) { + var prev = prevVertices[i_15]; + deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha; + } + } + } + } + }; + return DeformTimeline; + }(CurveTimeline)); + spine.DeformTimeline = DeformTimeline; + var EventTimeline = (function () { + function EventTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.events = new Array(frameCount); + } + EventTimeline.prototype.getPropertyId = function () { + return TimelineType.event << 24; + }; + EventTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + EventTimeline.prototype.setFrame = function (frameIndex, event) { + this.frames[frameIndex] = event.time; + this.events[frameIndex] = event; + }; + EventTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + if (firedEvents == null) + return; + var frames = this.frames; + var frameCount = this.frames.length; + if (lastTime > time) { + this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction); + lastTime = -1; + } + else if (lastTime >= frames[frameCount - 1]) + return; + if (time < frames[0]) + return; + var frame = 0; + if (lastTime < frames[0]) + frame = 0; + else { + frame = Animation.binarySearch(frames, lastTime); + var frameTime = frames[frame]; + while (frame > 0) { + if (frames[frame - 1] != frameTime) + break; + frame--; + } + } + for (; frame < frameCount && time >= frames[frame]; frame++) + firedEvents.push(this.events[frame]); + }; + return EventTimeline; + }()); + spine.EventTimeline = EventTimeline; + var DrawOrderTimeline = (function () { + function DrawOrderTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.drawOrders = new Array(frameCount); + } + DrawOrderTimeline.prototype.getPropertyId = function () { + return TimelineType.drawOrder << 24; + }; + DrawOrderTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + DrawOrderTimeline.prototype.setFrame = function (frameIndex, time, drawOrder) { + this.frames[frameIndex] = time; + this.drawOrders[frameIndex] = drawOrder; + }; + DrawOrderTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var drawOrder = skeleton.drawOrder; + var slots = skeleton.slots; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frame = 0; + if (time >= frames[frames.length - 1]) + frame = frames.length - 1; + else + frame = Animation.binarySearch(frames, time) - 1; + var drawOrderToSetupIndex = this.drawOrders[frame]; + if (drawOrderToSetupIndex == null) + spine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length); + else { + for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++) + drawOrder[i] = slots[drawOrderToSetupIndex[i]]; + } + }; + return DrawOrderTimeline; + }()); + spine.DrawOrderTimeline = DrawOrderTimeline; + var IkConstraintTimeline = (function (_super) { + __extends(IkConstraintTimeline, _super); + function IkConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES); + return _this; + } + IkConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex; + }; + IkConstraintTimeline.prototype.setFrame = function (frameIndex, time, mix, softness, bendDirection, compress, stretch) { + frameIndex *= IkConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + IkConstraintTimeline.MIX] = mix; + this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness; + this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection; + this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0; + this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0; + }; + IkConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.ikConstraints[this.ikConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + return; + case MixBlend.first: + constraint.mix += (constraint.data.mix - constraint.mix) * alpha; + constraint.softness += (constraint.data.softness - constraint.softness) * alpha; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + return; + } + if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) { + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha; + constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + return; + } + var frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES); + var mix = frames[frame + IkConstraintTimeline.PREV_MIX]; + var softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime)); + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha; + constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + }; + IkConstraintTimeline.ENTRIES = 6; + IkConstraintTimeline.PREV_TIME = -6; + IkConstraintTimeline.PREV_MIX = -5; + IkConstraintTimeline.PREV_SOFTNESS = -4; + IkConstraintTimeline.PREV_BEND_DIRECTION = -3; + IkConstraintTimeline.PREV_COMPRESS = -2; + IkConstraintTimeline.PREV_STRETCH = -1; + IkConstraintTimeline.MIX = 1; + IkConstraintTimeline.SOFTNESS = 2; + IkConstraintTimeline.BEND_DIRECTION = 3; + IkConstraintTimeline.COMPRESS = 4; + IkConstraintTimeline.STRETCH = 5; + return IkConstraintTimeline; + }(CurveTimeline)); + spine.IkConstraintTimeline = IkConstraintTimeline; + var TransformConstraintTimeline = (function (_super) { + __extends(TransformConstraintTimeline, _super); + function TransformConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES); + return _this; + } + TransformConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex; + }; + TransformConstraintTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) { + frameIndex *= TransformConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix; + this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix; + this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix; + }; + TransformConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.transformConstraints[this.transformConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + var data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + return; + case MixBlend.first: + constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha; + constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha; + constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha; + } + return; + } + var rotate = 0, translate = 0, scale = 0, shear = 0; + if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) { + var i = frames.length; + rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[i + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[i + TransformConstraintTimeline.PREV_SHEAR]; + } + else { + var frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES); + rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[frame + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent; + scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent; + shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent; + } + if (blend == MixBlend.setup) { + var data = constraint.data; + constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha; + constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha; + constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha; + constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + constraint.scaleMix += (scale - constraint.scaleMix) * alpha; + constraint.shearMix += (shear - constraint.shearMix) * alpha; + } + }; + TransformConstraintTimeline.ENTRIES = 5; + TransformConstraintTimeline.PREV_TIME = -5; + TransformConstraintTimeline.PREV_ROTATE = -4; + TransformConstraintTimeline.PREV_TRANSLATE = -3; + TransformConstraintTimeline.PREV_SCALE = -2; + TransformConstraintTimeline.PREV_SHEAR = -1; + TransformConstraintTimeline.ROTATE = 1; + TransformConstraintTimeline.TRANSLATE = 2; + TransformConstraintTimeline.SCALE = 3; + TransformConstraintTimeline.SHEAR = 4; + return TransformConstraintTimeline; + }(CurveTimeline)); + spine.TransformConstraintTimeline = TransformConstraintTimeline; + var PathConstraintPositionTimeline = (function (_super) { + __extends(PathConstraintPositionTimeline, _super); + function PathConstraintPositionTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES); + return _this; + } + PathConstraintPositionTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex; + }; + PathConstraintPositionTimeline.prototype.setFrame = function (frameIndex, time, value) { + frameIndex *= PathConstraintPositionTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value; + }; + PathConstraintPositionTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.position = constraint.data.position; + return; + case MixBlend.first: + constraint.position += (constraint.data.position - constraint.position) * alpha; + } + return; + } + var position = 0; + if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES]) + position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES); + position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime)); + position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent; + } + if (blend == MixBlend.setup) + constraint.position = constraint.data.position + (position - constraint.data.position) * alpha; + else + constraint.position += (position - constraint.position) * alpha; + }; + PathConstraintPositionTimeline.ENTRIES = 2; + PathConstraintPositionTimeline.PREV_TIME = -2; + PathConstraintPositionTimeline.PREV_VALUE = -1; + PathConstraintPositionTimeline.VALUE = 1; + return PathConstraintPositionTimeline; + }(CurveTimeline)); + spine.PathConstraintPositionTimeline = PathConstraintPositionTimeline; + var PathConstraintSpacingTimeline = (function (_super) { + __extends(PathConstraintSpacingTimeline, _super); + function PathConstraintSpacingTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + PathConstraintSpacingTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex; + }; + PathConstraintSpacingTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.spacing = constraint.data.spacing; + return; + case MixBlend.first: + constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha; + } + return; + } + var spacing = 0; + if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES]) + spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES); + spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime)); + spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent; + } + if (blend == MixBlend.setup) + constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha; + else + constraint.spacing += (spacing - constraint.spacing) * alpha; + }; + return PathConstraintSpacingTimeline; + }(PathConstraintPositionTimeline)); + spine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline; + var PathConstraintMixTimeline = (function (_super) { + __extends(PathConstraintMixTimeline, _super); + function PathConstraintMixTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES); + return _this; + } + PathConstraintMixTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex; + }; + PathConstraintMixTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix) { + frameIndex *= PathConstraintMixTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix; + }; + PathConstraintMixTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = constraint.data.rotateMix; + constraint.translateMix = constraint.data.translateMix; + return; + case MixBlend.first: + constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha; + } + return; + } + var rotate = 0, translate = 0; + if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) { + rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE]; + } + else { + var frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES); + rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent; + } + if (blend == MixBlend.setup) { + constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha; + constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + } + }; + PathConstraintMixTimeline.ENTRIES = 3; + PathConstraintMixTimeline.PREV_TIME = -3; + PathConstraintMixTimeline.PREV_ROTATE = -2; + PathConstraintMixTimeline.PREV_TRANSLATE = -1; + PathConstraintMixTimeline.ROTATE = 1; + PathConstraintMixTimeline.TRANSLATE = 2; + return PathConstraintMixTimeline; + }(CurveTimeline)); + spine.PathConstraintMixTimeline = PathConstraintMixTimeline; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationState = (function () { + function AnimationState(data) { + this.tracks = new Array(); + this.timeScale = 1; + this.unkeyedState = 0; + this.events = new Array(); + this.listeners = new Array(); + this.queue = new EventQueue(this); + this.propertyIDs = new spine.IntSet(); + this.animationsChanged = false; + this.trackEntryPool = new spine.Pool(function () { return new TrackEntry(); }); + this.data = data; + } + AnimationState.prototype.update = function (delta) { + delta *= this.timeScale; + var tracks = this.tracks; + for (var i = 0, n = tracks.length; i < n; i++) { + var current = tracks[i]; + if (current == null) + continue; + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + var currentDelta = delta * current.timeScale; + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) + continue; + currentDelta = -current.delay; + current.delay = 0; + } + var next = current.next; + if (next != null) { + var nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setCurrent(i, next, true); + while (next.mixingFrom != null) { + next.mixTime += delta; + next = next.mixingFrom; + } + continue; + } + } + else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) { + tracks[i] = null; + this.queue.end(current); + this.disposeNext(current); + continue; + } + if (current.mixingFrom != null && this.updateMixingFrom(current, delta)) { + var from = current.mixingFrom; + current.mixingFrom = null; + if (from != null) + from.mixingTo = null; + while (from != null) { + this.queue.end(from); + from = from.mixingFrom; + } + } + current.trackTime += currentDelta; + } + this.queue.drain(); + }; + AnimationState.prototype.updateMixingFrom = function (to, delta) { + var from = to.mixingFrom; + if (from == null) + return true; + var finished = this.updateMixingFrom(from, delta); + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { + if (from.totalAlpha == 0 || to.mixDuration == 0) { + to.mixingFrom = from.mixingFrom; + if (from.mixingFrom != null) + from.mixingFrom.mixingTo = to; + to.interruptAlpha = from.interruptAlpha; + this.queue.end(from); + } + return finished; + } + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + }; + AnimationState.prototype.apply = function (skeleton) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (this.animationsChanged) + this._animationsChanged(); + var events = this.events; + var tracks = this.tracks; + var applied = false; + for (var i_16 = 0, n_1 = tracks.length; i_16 < n_1; i_16++) { + var current = tracks[i_16]; + if (current == null || current.delay > 0) + continue; + applied = true; + var blend = i_16 == 0 ? spine.MixBlend.first : current.mixBlend; + var mix = current.alpha; + if (current.mixingFrom != null) + mix *= this.applyMixingFrom(current, skeleton, blend); + else if (current.trackTime >= current.trackEnd && current.next == null) + mix = 0; + var animationLast = current.animationLast, animationTime = current.getAnimationTime(); + var timelineCount = current.animation.timelines.length; + var timelines = current.animation.timelines; + if ((i_16 == 0 && mix == 1) || blend == spine.MixBlend.add) { + for (var ii = 0; ii < timelineCount; ii++) { + spine.Utils.webkit602BugfixHelper(mix, blend); + var timeline = timelines[ii]; + if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, blend, true); + else + timeline.apply(skeleton, animationLast, animationTime, events, mix, blend, spine.MixDirection.mixIn); + } + } + else { + var timelineMode = current.timelineMode; + var firstFrame = current.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = current.timelinesRotation; + for (var ii = 0; ii < timelineCount; ii++) { + var timeline_1 = timelines[ii]; + var timelineBlend = timelineMode[ii] == AnimationState.SUBSEQUENT ? blend : spine.MixBlend.setup; + if (timeline_1 instanceof spine.RotateTimeline) { + this.applyRotateTimeline(timeline_1, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); + } + else if (timeline_1 instanceof spine.AttachmentTimeline) { + this.applyAttachmentTimeline(timeline_1, skeleton, animationTime, blend, true); + } + else { + spine.Utils.webkit602BugfixHelper(mix, blend); + timeline_1.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, spine.MixDirection.mixIn); + } + } + } + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + var setupState = this.unkeyedState + AnimationState.SETUP; + var slots = skeleton.slots; + for (var i = 0, n = skeleton.slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.attachmentState == setupState) { + var attachmentName = slot.data.attachmentName; + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + } + } + this.unkeyedState += 2; + this.queue.drain(); + return applied; + }; + AnimationState.prototype.applyMixingFrom = function (to, skeleton, blend) { + var from = to.mixingFrom; + if (from.mixingFrom != null) + this.applyMixingFrom(from, skeleton, blend); + var mix = 0; + if (to.mixDuration == 0) { + mix = 1; + if (blend == spine.MixBlend.first) + blend = spine.MixBlend.setup; + } + else { + mix = to.mixTime / to.mixDuration; + if (mix > 1) + mix = 1; + if (blend != spine.MixBlend.first) + blend = from.mixBlend; + } + var events = mix < from.eventThreshold ? this.events : null; + var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold; + var animationLast = from.animationLast, animationTime = from.getAnimationTime(); + var timelineCount = from.animation.timelines.length; + var timelines = from.animation.timelines; + var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); + if (blend == spine.MixBlend.add) { + for (var i = 0; i < timelineCount; i++) + timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, spine.MixDirection.mixOut); + } + else { + var timelineMode = from.timelineMode; + var timelineHoldMix = from.timelineHoldMix; + var firstFrame = from.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = from.timelinesRotation; + from.totalAlpha = 0; + for (var i = 0; i < timelineCount; i++) { + var timeline = timelines[i]; + var direction = spine.MixDirection.mixOut; + var timelineBlend = void 0; + var alpha = 0; + switch (timelineMode[i]) { + case AnimationState.SUBSEQUENT: + if (!drawOrder && timeline instanceof spine.DrawOrderTimeline) + continue; + timelineBlend = blend; + alpha = alphaMix; + break; + case AnimationState.FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaMix; + break; + case AnimationState.HOLD_SUBSEQUENT: + timelineBlend = blend; + alpha = alphaHold; + break; + case AnimationState.HOLD_FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaHold; + break; + default: + timelineBlend = spine.MixBlend.setup; + var holdMix = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + break; + } + from.totalAlpha += alpha; + if (timeline instanceof spine.RotateTimeline) + this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); + else if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, timelineBlend, attachments); + else { + spine.Utils.webkit602BugfixHelper(alpha, blend); + if (drawOrder && timeline instanceof spine.DrawOrderTimeline && timelineBlend == spine.MixBlend.setup) + direction = spine.MixDirection.mixIn; + timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction); + } + } + } + if (to.mixDuration > 0) + this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + return mix; + }; + AnimationState.prototype.applyAttachmentTimeline = function (timeline, skeleton, time, blend, attachments) { + var slot = skeleton.slots[timeline.slotIndex]; + if (!slot.bone.active) + return; + var frames = timeline.frames; + if (time < frames[0]) { + if (blend == spine.MixBlend.setup || blend == spine.MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments); + } + else { + var frameIndex; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = spine.Animation.binarySearch(frames, time) - 1; + this.setAttachment(skeleton, slot, timeline.attachmentNames[frameIndex], attachments); + } + if (slot.attachmentState <= this.unkeyedState) + slot.attachmentState = this.unkeyedState + AnimationState.SETUP; + }; + AnimationState.prototype.setAttachment = function (skeleton, slot, attachmentName, attachments) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + if (attachments) + slot.attachmentState = this.unkeyedState + AnimationState.CURRENT; + }; + AnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) { + if (firstFrame) + timelinesRotation[i] = 0; + if (alpha == 1) { + timeline.apply(skeleton, 0, time, null, 1, blend, spine.MixDirection.mixIn); + return; + } + var rotateTimeline = timeline; + var frames = rotateTimeline.frames; + var bone = skeleton.bones[rotateTimeline.boneIndex]; + if (!bone.active) + return; + var r1 = 0, r2 = 0; + if (time < frames[0]) { + switch (blend) { + case spine.MixBlend.setup: + bone.rotation = bone.data.rotation; + default: + return; + case spine.MixBlend.first: + r1 = bone.rotation; + r2 = bone.data.rotation; + } + } + else { + r1 = blend == spine.MixBlend.setup ? bone.data.rotation : bone.rotation; + if (time >= frames[frames.length - spine.RotateTimeline.ENTRIES]) + r2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION]; + else { + var frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES); + var prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime)); + r2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + r2 = prevRotation + r2 * percent + bone.data.rotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + } + } + var total = 0, diff = r2 - r1; + diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360; + if (diff == 0) { + total = timelinesRotation[i]; + } + else { + var lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } + else { + lastTotal = timelinesRotation[i]; + lastDiff = timelinesRotation[i + 1]; + } + var current = diff > 0, dir = lastTotal >= 0; + if (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) { + if (Math.abs(lastTotal) > 180) + lastTotal += 360 * spine.MathUtils.signum(lastTotal); + dir = current; + } + total = diff + lastTotal - lastTotal % 360; + if (dir != current) + total += 360 * spine.MathUtils.signum(lastTotal); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + r1 += total * alpha; + bone.rotation = r1 - (16384 - ((16384.499999999996 - r1 / 360) | 0)) * 360; + }; + AnimationState.prototype.queueEvents = function (entry, animationTime) { + var animationStart = entry.animationStart, animationEnd = entry.animationEnd; + var duration = animationEnd - animationStart; + var trackLastWrapped = entry.trackLast % duration; + var events = this.events; + var i = 0, n = events.length; + for (; i < n; i++) { + var event_1 = events[i]; + if (event_1.time < trackLastWrapped) + break; + if (event_1.time > animationEnd) + continue; + this.queue.event(entry, event_1); + } + var complete = false; + if (entry.loop) + complete = duration == 0 || trackLastWrapped > entry.trackTime % duration; + else + complete = animationTime >= animationEnd && entry.animationLast < animationEnd; + if (complete) + this.queue.complete(entry); + for (; i < n; i++) { + var event_2 = events[i]; + if (event_2.time < animationStart) + continue; + this.queue.event(entry, events[i]); + } + }; + AnimationState.prototype.clearTracks = function () { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) + this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.clearTrack = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return; + var current = this.tracks[trackIndex]; + if (current == null) + return; + this.queue.end(current); + this.disposeNext(current); + var entry = current; + while (true) { + var from = entry.mixingFrom; + if (from == null) + break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + this.tracks[current.trackIndex] = null; + this.queue.drain(); + }; + AnimationState.prototype.setCurrent = function (index, current, interrupt) { + var from = this.expandToIndex(index); + this.tracks[index] = current; + if (from != null) { + if (interrupt) + this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + if (from.mixingFrom != null && from.mixDuration > 0) + current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration); + from.timelinesRotation.length = 0; + } + this.queue.start(current); + }; + AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.setAnimationWith(trackIndex, animation, loop); + }; + AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) { + if (animation == null) + throw new Error("animation cannot be null."); + var interrupt = true; + var current = this.expandToIndex(trackIndex); + if (current != null) { + if (current.nextTrackLast == -1) { + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.disposeNext(current); + current = current.mixingFrom; + interrupt = false; + } + else + this.disposeNext(current); + } + var entry = this.trackEntry(trackIndex, animation, loop, current); + this.setCurrent(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + }; + AnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.addAnimationWith(trackIndex, animation, loop, delay); + }; + AnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) { + if (animation == null) + throw new Error("animation cannot be null."); + var last = this.expandToIndex(trackIndex); + if (last != null) { + while (last.next != null) + last = last.next; + } + var entry = this.trackEntry(trackIndex, animation, loop, last); + if (last == null) { + this.setCurrent(trackIndex, entry, true); + this.queue.drain(); + } + else { + last.next = entry; + if (delay <= 0) { + var duration = last.animationEnd - last.animationStart; + if (duration != 0) { + if (last.loop) + delay += duration * (1 + ((last.trackTime / duration) | 0)); + else + delay += Math.max(duration, last.trackTime); + delay -= this.data.getMix(last.animation, animation); + } + else + delay = last.trackTime; + } + } + entry.delay = delay; + return entry; + }; + AnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) { + var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) { + if (delay <= 0) + delay -= mixDuration; + var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.setEmptyAnimations = function (mixDuration) { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) { + var current = this.tracks[i]; + if (current != null) + this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.expandToIndex = function (index) { + if (index < this.tracks.length) + return this.tracks[index]; + spine.Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + }; + AnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) { + var entry = this.trackEntryPool.obtain(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + entry.eventThreshold = 0; + entry.attachmentThreshold = 0; + entry.drawOrderThreshold = 0; + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + entry.alpha = 1; + entry.interruptAlpha = 1; + entry.mixTime = 0; + entry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation); + entry.mixBlend = spine.MixBlend.replace; + return entry; + }; + AnimationState.prototype.disposeNext = function (entry) { + var next = entry.next; + while (next != null) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + }; + AnimationState.prototype._animationsChanged = function () { + this.animationsChanged = false; + this.propertyIDs.clear(); + for (var i = 0, n = this.tracks.length; i < n; i++) { + var entry = this.tracks[i]; + if (entry == null) + continue; + while (entry.mixingFrom != null) + entry = entry.mixingFrom; + do { + if (entry.mixingFrom == null || entry.mixBlend != spine.MixBlend.add) + this.computeHold(entry); + entry = entry.mixingTo; + } while (entry != null); + } + }; + AnimationState.prototype.computeHold = function (entry) { + var to = entry.mixingTo; + var timelines = entry.animation.timelines; + var timelinesCount = entry.animation.timelines.length; + var timelineMode = spine.Utils.setArraySize(entry.timelineMode, timelinesCount); + entry.timelineHoldMix.length = 0; + var timelineDipMix = spine.Utils.setArraySize(entry.timelineHoldMix, timelinesCount); + var propertyIDs = this.propertyIDs; + if (to != null && to.holdPrevious) { + for (var i = 0; i < timelinesCount; i++) { + timelineMode[i] = propertyIDs.add(timelines[i].getPropertyId()) ? AnimationState.HOLD_FIRST : AnimationState.HOLD_SUBSEQUENT; + } + return; + } + outer: for (var i = 0; i < timelinesCount; i++) { + var timeline = timelines[i]; + var id = timeline.getPropertyId(); + if (!propertyIDs.add(id)) + timelineMode[i] = AnimationState.SUBSEQUENT; + else if (to == null || timeline instanceof spine.AttachmentTimeline || timeline instanceof spine.DrawOrderTimeline + || timeline instanceof spine.EventTimeline || !to.animation.hasTimeline(id)) { + timelineMode[i] = AnimationState.FIRST; + } + else { + for (var next = to.mixingTo; next != null; next = next.mixingTo) { + if (next.animation.hasTimeline(id)) + continue; + if (entry.mixDuration > 0) { + timelineMode[i] = AnimationState.HOLD_MIX; + timelineDipMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = AnimationState.HOLD_FIRST; + } + } + }; + AnimationState.prototype.getCurrent = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return null; + return this.tracks[trackIndex]; + }; + AnimationState.prototype.addListener = function (listener) { + if (listener == null) + throw new Error("listener cannot be null."); + this.listeners.push(listener); + }; + AnimationState.prototype.removeListener = function (listener) { + var index = this.listeners.indexOf(listener); + if (index >= 0) + this.listeners.splice(index, 1); + }; + AnimationState.prototype.clearListeners = function () { + this.listeners.length = 0; + }; + AnimationState.prototype.clearListenerNotifications = function () { + this.queue.clear(); + }; + AnimationState.emptyAnimation = new spine.Animation("", [], 0); + AnimationState.SUBSEQUENT = 0; + AnimationState.FIRST = 1; + AnimationState.HOLD_SUBSEQUENT = 2; + AnimationState.HOLD_FIRST = 3; + AnimationState.HOLD_MIX = 4; + AnimationState.SETUP = 1; + AnimationState.CURRENT = 2; + return AnimationState; + }()); + spine.AnimationState = AnimationState; + var TrackEntry = (function () { + function TrackEntry() { + this.mixBlend = spine.MixBlend.replace; + this.timelineMode = new Array(); + this.timelineHoldMix = new Array(); + this.timelinesRotation = new Array(); + } + TrackEntry.prototype.reset = function () { + this.next = null; + this.mixingFrom = null; + this.mixingTo = null; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + }; + TrackEntry.prototype.getAnimationTime = function () { + if (this.loop) { + var duration = this.animationEnd - this.animationStart; + if (duration == 0) + return this.animationStart; + return (this.trackTime % duration) + this.animationStart; + } + return Math.min(this.trackTime + this.animationStart, this.animationEnd); + }; + TrackEntry.prototype.setAnimationLast = function (animationLast) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + }; + TrackEntry.prototype.isComplete = function () { + return this.trackTime >= this.animationEnd - this.animationStart; + }; + TrackEntry.prototype.resetRotationDirections = function () { + this.timelinesRotation.length = 0; + }; + return TrackEntry; + }()); + spine.TrackEntry = TrackEntry; + var EventQueue = (function () { + function EventQueue(animState) { + this.objects = []; + this.drainDisabled = false; + this.animState = animState; + } + EventQueue.prototype.start = function (entry) { + this.objects.push(EventType.start); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.interrupt = function (entry) { + this.objects.push(EventType.interrupt); + this.objects.push(entry); + }; + EventQueue.prototype.end = function (entry) { + this.objects.push(EventType.end); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.dispose = function (entry) { + this.objects.push(EventType.dispose); + this.objects.push(entry); + }; + EventQueue.prototype.complete = function (entry) { + this.objects.push(EventType.complete); + this.objects.push(entry); + }; + EventQueue.prototype.event = function (entry, event) { + this.objects.push(EventType.event); + this.objects.push(entry); + this.objects.push(event); + }; + EventQueue.prototype.drain = function () { + if (this.drainDisabled) + return; + this.drainDisabled = true; + var objects = this.objects; + var listeners = this.animState.listeners; + for (var i = 0; i < objects.length; i += 2) { + var type = objects[i]; + var entry = objects[i + 1]; + switch (type) { + case EventType.start: + if (entry.listener != null && entry.listener.start) + entry.listener.start(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].start) + listeners[ii].start(entry); + break; + case EventType.interrupt: + if (entry.listener != null && entry.listener.interrupt) + entry.listener.interrupt(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].interrupt) + listeners[ii].interrupt(entry); + break; + case EventType.end: + if (entry.listener != null && entry.listener.end) + entry.listener.end(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].end) + listeners[ii].end(entry); + case EventType.dispose: + if (entry.listener != null && entry.listener.dispose) + entry.listener.dispose(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].dispose) + listeners[ii].dispose(entry); + this.animState.trackEntryPool.free(entry); + break; + case EventType.complete: + if (entry.listener != null && entry.listener.complete) + entry.listener.complete(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].complete) + listeners[ii].complete(entry); + break; + case EventType.event: + var event_3 = objects[i++ + 2]; + if (entry.listener != null && entry.listener.event) + entry.listener.event(entry, event_3); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].event) + listeners[ii].event(entry, event_3); + break; + } + } + this.clear(); + this.drainDisabled = false; + }; + EventQueue.prototype.clear = function () { + this.objects.length = 0; + }; + return EventQueue; + }()); + spine.EventQueue = EventQueue; + var EventType; + (function (EventType) { + EventType[EventType["start"] = 0] = "start"; + EventType[EventType["interrupt"] = 1] = "interrupt"; + EventType[EventType["end"] = 2] = "end"; + EventType[EventType["dispose"] = 3] = "dispose"; + EventType[EventType["complete"] = 4] = "complete"; + EventType[EventType["event"] = 5] = "event"; + })(EventType = spine.EventType || (spine.EventType = {})); + var AnimationStateAdapter = (function () { + function AnimationStateAdapter() { + } + AnimationStateAdapter.prototype.start = function (entry) { + }; + AnimationStateAdapter.prototype.interrupt = function (entry) { + }; + AnimationStateAdapter.prototype.end = function (entry) { + }; + AnimationStateAdapter.prototype.dispose = function (entry) { + }; + AnimationStateAdapter.prototype.complete = function (entry) { + }; + AnimationStateAdapter.prototype.event = function (entry, event) { + }; + return AnimationStateAdapter; + }()); + spine.AnimationStateAdapter = AnimationStateAdapter; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationStateData = (function () { + function AnimationStateData(skeletonData) { + this.animationToMixTime = {}; + this.defaultMix = 0; + if (skeletonData == null) + throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + AnimationStateData.prototype.setMix = function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (from == null) + throw new Error("Animation not found: " + fromName); + var to = this.skeletonData.findAnimation(toName); + if (to == null) + throw new Error("Animation not found: " + toName); + this.setMixWith(from, to, duration); + }; + AnimationStateData.prototype.setMixWith = function (from, to, duration) { + if (from == null) + throw new Error("from cannot be null."); + if (to == null) + throw new Error("to cannot be null."); + var key = from.name + "." + to.name; + this.animationToMixTime[key] = duration; + }; + AnimationStateData.prototype.getMix = function (from, to) { + var key = from.name + "." + to.name; + var value = this.animationToMixTime[key]; + return value === undefined ? this.defaultMix : value; + }; + return AnimationStateData; + }()); + spine.AnimationStateData = AnimationStateData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AssetManager = (function () { + function AssetManager(textureLoader, pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.assets = {}; + this.errors = {}; + this.toLoad = 0; + this.loaded = 0; + this.rawDataUris = {}; + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + } + AssetManager.prototype.downloadText = function (url, success, error) { + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.onload = function () { + if (request.status == 200) { + success(request.responseText); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.downloadBinary = function (url, success, error) { + var request = new XMLHttpRequest(); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.responseType = "arraybuffer"; + request.onload = function () { + if (request.status == 200) { + success(new Uint8Array(request.response)); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.setRawDataURI = function (path, data) { + this.rawDataUris[this.pathPrefix + path] = data; + }; + AssetManager.prototype.loadBinary = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadBinary(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load binary " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load binary " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadText = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load text " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load text " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadTexture = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + var storagePath = path; + this.toLoad++; + var img = new Image(); + img.crossOrigin = "anonymous"; + img.onload = function (ev) { + var texture = _this.textureLoader(img); + _this.assets[storagePath] = texture; + _this.toLoad--; + _this.loaded++; + if (success) + success(path, img); + }; + img.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + _this.toLoad--; + _this.loaded++; + if (error) + error(path, "Couldn't load image " + path); + }; + if (this.rawDataUris[path]) + path = this.rawDataUris[path]; + img.src = path; + }; + AssetManager.prototype.loadTextureAtlas = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + var parent = path.lastIndexOf("/") >= 0 ? path.substring(0, path.lastIndexOf("/")) : ""; + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (atlasData) { + var pagesLoaded = { count: 0 }; + var atlasPages = new Array(); + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + atlasPages.push(parent == "" ? path : parent + "/" + path); + var image = document.createElement("img"); + image.width = 16; + image.height = 16; + return new spine.FakeTexture(image); + }); + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + return; + } + var _loop_1 = function (atlasPage) { + var pageLoadError = false; + _this.loadTexture(atlasPage, function (imagePath, image) { + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + if (!pageLoadError) { + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + return _this.get(parent == "" ? path : parent + "/" + path); + }); + _this.assets[path] = atlas; + if (success) + success(path, atlas); + _this.toLoad--; + _this.loaded++; + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + } + } + else { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + } + }, function (imagePath, errorMessage) { + pageLoadError = true; + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + }); + }; + for (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) { + var atlasPage = atlasPages_1[_i]; + _loop_1(atlasPage); + } + }, function (state, responseText) { + _this.errors[path] = "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.get = function (path) { + path = this.pathPrefix + path; + return this.assets[path]; + }; + AssetManager.prototype.remove = function (path) { + path = this.pathPrefix + path; + var asset = this.assets[path]; + if (asset.dispose) + asset.dispose(); + this.assets[path] = null; + }; + AssetManager.prototype.removeAll = function () { + for (var key in this.assets) { + var asset = this.assets[key]; + if (asset.dispose) + asset.dispose(); + } + this.assets = {}; + }; + AssetManager.prototype.isLoadingComplete = function () { + return this.toLoad == 0; + }; + AssetManager.prototype.getToLoad = function () { + return this.toLoad; + }; + AssetManager.prototype.getLoaded = function () { + return this.loaded; + }; + AssetManager.prototype.dispose = function () { + this.removeAll(); + }; + AssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + AssetManager.prototype.getErrors = function () { + return this.errors; + }; + return AssetManager; + }()); + spine.AssetManager = AssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AtlasAttachmentLoader = (function () { + function AtlasAttachmentLoader(atlas) { + this.atlas = atlas; + } + AtlasAttachmentLoader.prototype.newRegionAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.RegionAttachment(name); + attachment.setRegion(region); + return attachment; + }; + AtlasAttachmentLoader.prototype.newMeshAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.MeshAttachment(name); + attachment.region = region; + return attachment; + }; + AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function (skin, name) { + return new spine.BoundingBoxAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPathAttachment = function (skin, name) { + return new spine.PathAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPointAttachment = function (skin, name) { + return new spine.PointAttachment(name); + }; + AtlasAttachmentLoader.prototype.newClippingAttachment = function (skin, name) { + return new spine.ClippingAttachment(name); + }; + return AtlasAttachmentLoader; + }()); + spine.AtlasAttachmentLoader = AtlasAttachmentLoader; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BlendMode; + (function (BlendMode) { + BlendMode[BlendMode["Normal"] = 0] = "Normal"; + BlendMode[BlendMode["Additive"] = 1] = "Additive"; + BlendMode[BlendMode["Multiply"] = 2] = "Multiply"; + BlendMode[BlendMode["Screen"] = 3] = "Screen"; + })(BlendMode = spine.BlendMode || (spine.BlendMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Bone = (function () { + function Bone(data, skeleton, parent) { + this.children = new Array(); + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 0; + this.scaleY = 0; + this.shearX = 0; + this.shearY = 0; + this.ax = 0; + this.ay = 0; + this.arotation = 0; + this.ascaleX = 0; + this.ascaleY = 0; + this.ashearX = 0; + this.ashearY = 0; + this.appliedValid = false; + this.a = 0; + this.b = 0; + this.c = 0; + this.d = 0; + this.worldY = 0; + this.worldX = 0; + this.sorted = false; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.skeleton = skeleton; + this.parent = parent; + this.setToSetupPose(); + } + Bone.prototype.isActive = function () { + return this.active; + }; + Bone.prototype.update = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransform = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransformWith = function (x, y, rotation, scaleX, scaleY, shearX, shearY) { + this.ax = x; + this.ay = y; + this.arotation = rotation; + this.ascaleX = scaleX; + this.ascaleY = scaleY; + this.ashearX = shearX; + this.ashearY = shearY; + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + var skeleton = this.skeleton; + var rotationY = rotation + 90 + shearY; + var sx = skeleton.scaleX; + var sy = skeleton.scaleY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX * sx; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY * sx; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX * sy; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY * sy; + this.worldX = x * sx + skeleton.x; + this.worldY = y * sy + skeleton.y; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + this.worldX = pa * x + pb * y + parent.worldX; + this.worldY = pc * x + pd * y + parent.worldY; + switch (this.data.transformMode) { + case spine.TransformMode.Normal: { + var rotationY = rotation + 90 + shearY; + var la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(rotationY) * scaleY; + var lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(rotationY) * scaleY; + this.a = pa * la + pb * lc; + this.b = pa * lb + pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + return; + } + case spine.TransformMode.OnlyTranslation: { + var rotationY = rotation + 90 + shearY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY; + break; + } + case spine.TransformMode.NoRotationOrReflection: { + var s = pa * pa + pc * pc; + var prx = 0; + if (s > 0.0001) { + s = Math.abs(pa * pd - pb * pc) / s; + pa /= this.skeleton.scaleX; + pc /= this.skeleton.scaleY; + pb = pc * s; + pd = pa * s; + prx = Math.atan2(pc, pa) * spine.MathUtils.radDeg; + } + else { + pa = 0; + pc = 0; + prx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg; + } + var rx = rotation + shearX - prx; + var ry = rotation + shearY - prx + 90; + var la = spine.MathUtils.cosDeg(rx) * scaleX; + var lb = spine.MathUtils.cosDeg(ry) * scaleY; + var lc = spine.MathUtils.sinDeg(rx) * scaleX; + var ld = spine.MathUtils.sinDeg(ry) * scaleY; + this.a = pa * la - pb * lc; + this.b = pa * lb - pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + break; + } + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: { + var cos = spine.MathUtils.cosDeg(rotation); + var sin = spine.MathUtils.sinDeg(rotation); + var za = (pa * cos + pb * sin) / this.skeleton.scaleX; + var zc = (pc * cos + pd * sin) / this.skeleton.scaleY; + var s = Math.sqrt(za * za + zc * zc); + if (s > 0.00001) + s = 1 / s; + za *= s; + zc *= s; + s = Math.sqrt(za * za + zc * zc); + if (this.data.transformMode == spine.TransformMode.NoScale + && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) + s = -s; + var r = Math.PI / 2 + Math.atan2(zc, za); + var zb = Math.cos(r) * s; + var zd = Math.sin(r) * s; + var la = spine.MathUtils.cosDeg(shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY; + var lc = spine.MathUtils.sinDeg(shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY; + this.a = za * la + zb * lc; + this.b = za * lb + zb * ld; + this.c = zc * la + zd * lc; + this.d = zc * lb + zd * ld; + break; + } + } + this.a *= this.skeleton.scaleX; + this.b *= this.skeleton.scaleX; + this.c *= this.skeleton.scaleY; + this.d *= this.skeleton.scaleY; + }; + Bone.prototype.setToSetupPose = function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + this.shearX = data.shearX; + this.shearY = data.shearY; + }; + Bone.prototype.getWorldRotationX = function () { + return Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldRotationY = function () { + return Math.atan2(this.d, this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldScaleX = function () { + return Math.sqrt(this.a * this.a + this.c * this.c); + }; + Bone.prototype.getWorldScaleY = function () { + return Math.sqrt(this.b * this.b + this.d * this.d); + }; + Bone.prototype.updateAppliedTransform = function () { + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + this.ax = this.worldX; + this.ay = this.worldY; + this.arotation = Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c); + this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d); + this.ashearX = 0; + this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + var pid = 1 / (pa * pd - pb * pc); + var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY; + this.ax = (dx * pd * pid - dy * pb * pid); + this.ay = (dy * pa * pid - dx * pc * pid); + var ia = pid * pd; + var id = pid * pa; + var ib = pid * pb; + var ic = pid * pc; + var ra = ia * this.a - ib * this.c; + var rb = ia * this.b - ib * this.d; + var rc = id * this.c - ic * this.a; + var rd = id * this.d - ic * this.b; + this.ashearX = 0; + this.ascaleX = Math.sqrt(ra * ra + rc * rc); + if (this.ascaleX > 0.0001) { + var det = ra * rd - rb * rc; + this.ascaleY = det / this.ascaleX; + this.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg; + this.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg; + } + else { + this.ascaleX = 0; + this.ascaleY = Math.sqrt(rb * rb + rd * rd); + this.ashearY = 0; + this.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg; + } + }; + Bone.prototype.worldToLocal = function (world) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var invDet = 1 / (a * d - b * c); + var x = world.x - this.worldX, y = world.y - this.worldY; + world.x = (x * d * invDet - y * b * invDet); + world.y = (y * a * invDet - x * c * invDet); + return world; + }; + Bone.prototype.localToWorld = function (local) { + var x = local.x, y = local.y; + local.x = x * this.a + y * this.b + this.worldX; + local.y = x * this.c + y * this.d + this.worldY; + return local; + }; + Bone.prototype.worldToLocalRotation = function (worldRotation) { + var sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation); + return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg + this.rotation - this.shearX; + }; + Bone.prototype.localToWorldRotation = function (localRotation) { + localRotation -= this.rotation - this.shearX; + var sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation); + return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.rotateWorld = function (degrees) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees); + this.a = cos * a - sin * c; + this.b = cos * b - sin * d; + this.c = sin * a + cos * c; + this.d = sin * b + cos * d; + this.appliedValid = false; + }; + return Bone; + }()); + spine.Bone = Bone; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoneData = (function () { + function BoneData(index, name, parent) { + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 1; + this.scaleY = 1; + this.shearX = 0; + this.shearY = 0; + this.transformMode = TransformMode.Normal; + this.skinRequired = false; + this.color = new spine.Color(); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + this.index = index; + this.name = name; + this.parent = parent; + } + return BoneData; + }()); + spine.BoneData = BoneData; + var TransformMode; + (function (TransformMode) { + TransformMode[TransformMode["Normal"] = 0] = "Normal"; + TransformMode[TransformMode["OnlyTranslation"] = 1] = "OnlyTranslation"; + TransformMode[TransformMode["NoRotationOrReflection"] = 2] = "NoRotationOrReflection"; + TransformMode[TransformMode["NoScale"] = 3] = "NoScale"; + TransformMode[TransformMode["NoScaleOrReflection"] = 4] = "NoScaleOrReflection"; + })(TransformMode = spine.TransformMode || (spine.TransformMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var ConstraintData = (function () { + function ConstraintData(name, order, skinRequired) { + this.name = name; + this.order = order; + this.skinRequired = skinRequired; + } + return ConstraintData; + }()); + spine.ConstraintData = ConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Event = (function () { + function Event(time, data) { + if (data == null) + throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + return Event; + }()); + spine.Event = Event; +})(spine || (spine = {})); +var spine; +(function (spine) { + var EventData = (function () { + function EventData(name) { + this.name = name; + } + return EventData; + }()); + spine.EventData = EventData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraint = (function () { + function IkConstraint(data, skeleton) { + this.bendDirection = 0; + this.compress = false; + this.stretch = false; + this.mix = 1; + this.softness = 0; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + IkConstraint.prototype.isActive = function () { + return this.active; + }; + IkConstraint.prototype.apply = function () { + this.update(); + }; + IkConstraint.prototype.update = function () { + var target = this.target; + var bones = this.bones; + switch (bones.length) { + case 1: + this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); + break; + case 2: + this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix); + break; + } + }; + IkConstraint.prototype.apply1 = function (bone, targetX, targetY, compress, stretch, uniform, alpha) { + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var p = bone.parent; + var pa = p.a, pb = p.b, pc = p.c, pd = p.d; + var rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0; + switch (bone.data.transformMode) { + case spine.TransformMode.OnlyTranslation: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + break; + case spine.TransformMode.NoRotationOrReflection: + var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + var sa = pa / bone.skeleton.scaleX; + var sc = pc / bone.skeleton.scaleY; + pb = -sc * s * bone.skeleton.scaleX; + pd = sa * s * bone.skeleton.scaleY; + rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg; + default: + var x = targetX - p.worldX, y = targetY - p.worldY; + var d = pa * pd - pb * pc; + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + } + rotationIK += Math.atan2(ty, tx) * spine.MathUtils.radDeg; + if (bone.ascaleX < 0) + rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; + else if (rotationIK < -180) + rotationIK += 360; + var sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { + switch (bone.data.transformMode) { + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + } + var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty); + if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) { + var s = (dd / b - 1) * alpha + 1; + sx *= s; + if (uniform) + sy *= s; + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); + }; + IkConstraint.prototype.apply2 = function (parent, child, targetX, targetY, bendDir, stretch, softness, alpha) { + if (alpha == 0) { + child.updateWorldTransform(); + return; + } + if (!parent.appliedValid) + parent.updateAppliedTransform(); + if (!child.appliedValid) + child.updateAppliedTransform(); + var px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX; + var os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } + else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } + else + os2 = 0; + var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + var u = Math.abs(psx - psy) <= 0.0001; + if (!u) { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } + else { + cy = child.ay; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } + var pp = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; + if (l1 < 0.0001) { + this.apply1(parent, targetX, targetY, false, stretch, false, alpha); + child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + var dd = tx * tx + ty * ty; + if (softness != 0) { + softness *= psx * (csx + 1) / 2; + var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + var p = Math.min(1, sd / (softness * 2)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: if (u) { + l2 *= psx; + var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) + cos = -1; + else if (cos > 1) { + cos = 1; + if (stretch) + sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + } + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } + else { + a = psx * l2; + b = psy * l2; + var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + var c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + var q = Math.sqrt(d); + if (c1 < 0) + q = -q; + q = -(c1 + q) / 2; + var r0 = q / c2, r1 = c / q; + var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + if (r * r <= dd) { + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; + } + } + var minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; + } + } + if (dd <= (minDist + maxDist) / 2) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } + else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + var os = Math.atan2(cy, cx) * s2; + var rotation = parent.arotation; + a1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) + a1 += 360; + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0); + rotation = child.arotation; + a2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) + a2 += 360; + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + }; + return IkConstraint; + }()); + spine.IkConstraint = IkConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraintData = (function (_super) { + __extends(IkConstraintData, _super); + function IkConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.bendDirection = 1; + _this.compress = false; + _this.stretch = false; + _this.uniform = false; + _this.mix = 1; + _this.softness = 0; + return _this; + } + return IkConstraintData; + }(spine.ConstraintData)); + spine.IkConstraintData = IkConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraint = (function () { + function PathConstraint(data, skeleton) { + this.position = 0; + this.spacing = 0; + this.rotateMix = 0; + this.translateMix = 0; + this.spaces = new Array(); + this.positions = new Array(); + this.world = new Array(); + this.curves = new Array(); + this.lengths = new Array(); + this.segments = new Array(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0, n = data.bones.length; i < n; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findSlot(data.target.name); + this.position = data.position; + this.spacing = data.spacing; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + } + PathConstraint.prototype.isActive = function () { + return this.active; + }; + PathConstraint.prototype.apply = function () { + this.update(); + }; + PathConstraint.prototype.update = function () { + var attachment = this.target.getAttachment(); + if (!(attachment instanceof spine.PathAttachment)) + return; + var rotateMix = this.rotateMix, translateMix = this.translateMix; + var translate = translateMix > 0, rotate = rotateMix > 0; + if (!translate && !rotate) + return; + var data = this.data; + var percentSpacing = data.spacingMode == spine.SpacingMode.Percent; + var rotateMode = data.rotateMode; + var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; + var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + var bones = this.bones; + var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; + var spacing = this.spacing; + if (scale || !percentSpacing) { + if (scale) + lengths = spine.Utils.setArraySize(this.lengths, boneCount); + var lengthSpacing = data.spacingMode == spine.SpacingMode.Length; + for (var i = 0, n = spacesCount - 1; i < n;) { + var bone = bones[i]; + var setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + if (scale) + lengths[i] = 0; + spaces[++i] = 0; + } + else if (percentSpacing) { + if (scale) { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_1 = Math.sqrt(x * x + y * y); + lengths[i] = length_1; + } + spaces[++i] = spacing; + } + else { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_2 = Math.sqrt(x * x + y * y); + if (scale) + lengths[i] = length_2; + spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength; + } + } + } + else { + for (var i = 1; i < spacesCount; i++) + spaces[i] = spacing; + } + var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing); + var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + var tip = false; + if (offsetRotation == 0) + tip = rotateMode == spine.RotateMode.Chain; + else { + tip = false; + var p = this.target.bone; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + } + for (var i = 0, p = 3; i < boneCount; i++, p += 3) { + var bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * translateMix; + bone.worldY += (boneY - bone.worldY) * translateMix; + var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + var length_3 = lengths[i]; + if (length_3 != 0) { + var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * rotateMix + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + if (tangents) + r = positions[p - 1]; + else if (spaces[i + 1] == 0) + r = positions[p + 2]; + else + r = Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + var length_4 = bone.data.length; + boneX += (length_4 * (cos * a - sin * c) - dx) * rotateMix; + boneY += (length_4 * (sin * a + cos * c) - dy) * rotateMix; + } + else { + r += offsetRotation; + } + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.appliedValid = false; + } + }; + PathConstraint.prototype.computeWorldPositions = function (path, spacesCount, tangents, percentPosition, percentSpacing) { + var target = this.target; + var position = this.position; + var spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null; + var closed = path.closed; + var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE; + if (!path.constantSpeed) { + var lengths = path.lengths; + curveCount -= closed ? 1 : 2; + var pathLength_1 = lengths[curveCount]; + if (percentPosition) + position *= pathLength_1; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength_1; + } + world = spine.Utils.setArraySize(this.world, 8); + for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength_1; + if (p < 0) + p += pathLength_1; + curve = 0; + } + else if (p < 0) { + if (prevCurve != PathConstraint.BEFORE) { + prevCurve = PathConstraint.BEFORE; + path.computeWorldVertices(target, 2, 4, world, 0, 2); + } + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength_1) { + if (prevCurve != PathConstraint.AFTER) { + prevCurve = PathConstraint.AFTER; + path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength_1, world, 0, out, o); + continue; + } + for (;; curve++) { + var length_5 = lengths[curve]; + if (p > length_5) + continue; + if (curve == 0) + p /= length_5; + else { + var prev = lengths[curve - 1]; + p = (p - prev) / (length_5 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); + path.computeWorldVertices(target, 0, 4, world, 4, 2); + } + else + path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2); + } + this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0)); + } + return out; + } + if (closed) { + verticesLength += 2; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); + path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } + else { + curveCount--; + verticesLength -= 4; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + var curves = spine.Utils.setArraySize(this.curves, curveCount); + var pathLength = 0; + var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (var i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (percentPosition) + position *= pathLength; + else + position *= pathLength / path.lengths[curveCount - 1]; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength; + } + var segments = this.segments; + var curveLength = 0; + for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength; + if (p < 0) + p += pathLength; + curve = 0; + } + else if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + for (;; curve++) { + var length_6 = curves[curve]; + if (p > length_6) + continue; + if (curve == 0) + p /= length_6; + else { + var prev = curves[curve - 1]; + p = (p - prev) / (length_6 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + var ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + p *= curveLength; + for (;; segment++) { + var length_7 = segments[segment]; + if (p > length_7) + continue; + if (segment == 0) + p /= length_7; + else { + var prev = segments[segment - 1]; + p = segment + (p - prev) / (length_7 - prev); + } + break; + } + this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); + } + return out; + }; + PathConstraint.prototype.addBeforePosition = function (p, temp, i, out, o) { + var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addAfterPosition = function (p, temp, i, out, o) { + var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addCurvePosition = function (p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { + if (p == 0 || isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + var ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) { + if (p < 0.001) + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + else + out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + }; + PathConstraint.NONE = -1; + PathConstraint.BEFORE = -2; + PathConstraint.AFTER = -3; + PathConstraint.epsilon = 0.00001; + return PathConstraint; + }()); + spine.PathConstraint = PathConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraintData = (function (_super) { + __extends(PathConstraintData, _super); + function PathConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + return _this; + } + return PathConstraintData; + }(spine.ConstraintData)); + spine.PathConstraintData = PathConstraintData; + var PositionMode; + (function (PositionMode) { + PositionMode[PositionMode["Fixed"] = 0] = "Fixed"; + PositionMode[PositionMode["Percent"] = 1] = "Percent"; + })(PositionMode = spine.PositionMode || (spine.PositionMode = {})); + var SpacingMode; + (function (SpacingMode) { + SpacingMode[SpacingMode["Length"] = 0] = "Length"; + SpacingMode[SpacingMode["Fixed"] = 1] = "Fixed"; + SpacingMode[SpacingMode["Percent"] = 2] = "Percent"; + })(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {})); + var RotateMode; + (function (RotateMode) { + RotateMode[RotateMode["Tangent"] = 0] = "Tangent"; + RotateMode[RotateMode["Chain"] = 1] = "Chain"; + RotateMode[RotateMode["ChainScale"] = 2] = "ChainScale"; + })(RotateMode = spine.RotateMode || (spine.RotateMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Assets = (function () { + function Assets(clientId) { + this.toLoad = new Array(); + this.assets = {}; + this.clientId = clientId; + } + Assets.prototype.loaded = function () { + var i = 0; + for (var v in this.assets) + i++; + return i; + }; + return Assets; + }()); + var SharedAssetManager = (function () { + function SharedAssetManager(pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.clientAssets = {}; + this.queuedAssets = {}; + this.rawAssets = {}; + this.errors = {}; + this.pathPrefix = pathPrefix; + } + SharedAssetManager.prototype.queueAsset = function (clientId, textureLoader, path) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) { + clientAssets = new Assets(clientId); + this.clientAssets[clientId] = clientAssets; + } + if (textureLoader !== null) + clientAssets.textureLoader = textureLoader; + clientAssets.toLoad.push(path); + if (this.queuedAssets[path] === path) { + return false; + } + else { + this.queuedAssets[path] = path; + return true; + } + }; + SharedAssetManager.prototype.loadText = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = request.responseText; + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadJson = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = JSON.parse(request.responseText); + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadTexture = function (clientId, textureLoader, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, textureLoader, path)) + return; + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + if (isWebWorker) { + var options = { mode: "cors" }; + fetch(path, options).then(function (response) { + if (!response.ok) { + _this.errors[path] = "Couldn't load image " + path; + } + return response.blob(); + }).then(function (blob) { + return createImageBitmap(blob, { + premultiplyAlpha: 'none', + colorSpaceConversion: 'none' + }); + }).then(function (bitmap) { + _this.rawAssets[path] = bitmap; + }); + } + else { + var img_1 = new Image(); + img_1.crossOrigin = "anonymous"; + img_1.onload = function (ev) { + _this.rawAssets[path] = img_1; + }; + img_1.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + }; + img_1.src = path; + } + }; + SharedAssetManager.prototype.get = function (clientId, path) { + path = this.pathPrefix + path; + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + return clientAssets.assets[path]; + }; + SharedAssetManager.prototype.updateClientAssets = function (clientAssets) { + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + for (var i = 0; i < clientAssets.toLoad.length; i++) { + var path = clientAssets.toLoad[i]; + var asset = clientAssets.assets[path]; + if (asset === null || asset === undefined) { + var rawAsset = this.rawAssets[path]; + if (rawAsset === null || rawAsset === undefined) + continue; + if (isWebWorker) { + if (rawAsset instanceof ImageBitmap) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + else { + if (rawAsset instanceof HTMLImageElement) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + } + } + }; + SharedAssetManager.prototype.isLoadingComplete = function (clientId) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + this.updateClientAssets(clientAssets); + return clientAssets.toLoad.length == clientAssets.loaded(); + }; + SharedAssetManager.prototype.dispose = function () { + }; + SharedAssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + SharedAssetManager.prototype.getErrors = function () { + return this.errors; + }; + return SharedAssetManager; + }()); + spine.SharedAssetManager = SharedAssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Skeleton = (function () { + function Skeleton(data) { + this._updateCache = new Array(); + this.updateCacheReset = new Array(); + this.time = 0; + this.scaleX = 1; + this.scaleY = 1; + this.x = 0; + this.y = 0; + if (data == null) + throw new Error("data cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) { + var boneData = data.bones[i]; + var bone = void 0; + if (boneData.parent == null) + bone = new spine.Bone(boneData, this, null); + else { + var parent_1 = this.bones[boneData.parent.index]; + bone = new spine.Bone(boneData, this, parent_1); + parent_1.children.push(bone); + } + this.bones.push(bone); + } + this.slots = new Array(); + this.drawOrder = new Array(); + for (var i = 0; i < data.slots.length; i++) { + var slotData = data.slots[i]; + var bone = this.bones[slotData.boneData.index]; + var slot = new spine.Slot(slotData, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } + this.ikConstraints = new Array(); + for (var i = 0; i < data.ikConstraints.length; i++) { + var ikConstraintData = data.ikConstraints[i]; + this.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this)); + } + this.transformConstraints = new Array(); + for (var i = 0; i < data.transformConstraints.length; i++) { + var transformConstraintData = data.transformConstraints[i]; + this.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this)); + } + this.pathConstraints = new Array(); + for (var i = 0; i < data.pathConstraints.length; i++) { + var pathConstraintData = data.pathConstraints[i]; + this.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this)); + } + this.color = new spine.Color(1, 1, 1, 1); + this.updateCache(); + } + Skeleton.prototype.updateCache = function () { + var updateCache = this._updateCache; + updateCache.length = 0; + this.updateCacheReset.length = 0; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + } + if (this.skin != null) { + var skinBones = this.skin.bones; + for (var i = 0, n = this.skin.bones.length; i < n; i++) { + var bone = this.bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (bone != null); + } + } + var ikConstraints = this.ikConstraints; + var transformConstraints = this.transformConstraints; + var pathConstraints = this.pathConstraints; + var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length; + var constraintCount = ikCount + transformCount + pathCount; + outer: for (var i = 0; i < constraintCount; i++) { + for (var ii = 0; ii < ikCount; ii++) { + var constraint = ikConstraints[ii]; + if (constraint.data.order == i) { + this.sortIkConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < transformCount; ii++) { + var constraint = transformConstraints[ii]; + if (constraint.data.order == i) { + this.sortTransformConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < pathCount; ii++) { + var constraint = pathConstraints[ii]; + if (constraint.data.order == i) { + this.sortPathConstraint(constraint); + continue outer; + } + } + } + for (var i = 0, n = bones.length; i < n; i++) + this.sortBone(bones[i]); + }; + Skeleton.prototype.sortIkConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var target = constraint.target; + this.sortBone(target); + var constrained = constraint.bones; + var parent = constrained[0]; + this.sortBone(parent); + if (constrained.length > 1) { + var child = constrained[constrained.length - 1]; + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + this._updateCache.push(constraint); + this.sortReset(parent.children); + constrained[constrained.length - 1].sorted = true; + }; + Skeleton.prototype.sortPathConstraint = function (constraint) { + constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var slot = constraint.target; + var slotIndex = slot.data.index; + var slotBone = slot.bone; + if (this.skin != null) + this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); + if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin) + this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); + for (var i = 0, n = this.data.skins.length; i < n; i++) + this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); + var attachment = slot.getAttachment(); + if (attachment instanceof spine.PathAttachment) + this.sortPathConstraintAttachmentWith(attachment, slotBone); + var constrained = constraint.bones; + var boneCount = constrained.length; + for (var i = 0; i < boneCount; i++) + this.sortBone(constrained[i]); + this._updateCache.push(constraint); + for (var i = 0; i < boneCount; i++) + this.sortReset(constrained[i].children); + for (var i = 0; i < boneCount; i++) + constrained[i].sorted = true; + }; + Skeleton.prototype.sortTransformConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + this.sortBone(constraint.target); + var constrained = constraint.bones; + var boneCount = constrained.length; + if (constraint.data.local) { + for (var i = 0; i < boneCount; i++) { + var child = constrained[i]; + this.sortBone(child.parent); + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + } + else { + for (var i = 0; i < boneCount; i++) { + this.sortBone(constrained[i]); + } + } + this._updateCache.push(constraint); + for (var ii = 0; ii < boneCount; ii++) + this.sortReset(constrained[ii].children); + for (var ii = 0; ii < boneCount; ii++) + constrained[ii].sorted = true; + }; + Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) { + var attachments = skin.attachments[slotIndex]; + if (!attachments) + return; + for (var key in attachments) { + this.sortPathConstraintAttachmentWith(attachments[key], slotBone); + } + }; + Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) { + if (!(attachment instanceof spine.PathAttachment)) + return; + var pathBones = attachment.bones; + if (pathBones == null) + this.sortBone(slotBone); + else { + var bones = this.bones; + var i = 0; + while (i < pathBones.length) { + var boneCount = pathBones[i++]; + for (var n = i + boneCount; i < n; i++) { + var boneIndex = pathBones[i]; + this.sortBone(bones[boneIndex]); + } + } + } + }; + Skeleton.prototype.sortBone = function (bone) { + if (bone.sorted) + return; + var parent = bone.parent; + if (parent != null) + this.sortBone(parent); + bone.sorted = true; + this._updateCache.push(bone); + }; + Skeleton.prototype.sortReset = function (bones) { + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.active) + continue; + if (bone.sorted) + this.sortReset(bone.children); + bone.sorted = false; + } + }; + Skeleton.prototype.updateWorldTransform = function () { + var updateCacheReset = this.updateCacheReset; + for (var i = 0, n = updateCacheReset.length; i < n; i++) { + var bone = updateCacheReset[i]; + bone.ax = bone.x; + bone.ay = bone.y; + bone.arotation = bone.rotation; + bone.ascaleX = bone.scaleX; + bone.ascaleY = bone.scaleY; + bone.ashearX = bone.shearX; + bone.ashearY = bone.shearY; + bone.appliedValid = true; + } + var updateCache = this._updateCache; + for (var i = 0, n = updateCache.length; i < n; i++) + updateCache[i].update(); + }; + Skeleton.prototype.setToSetupPose = function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }; + Skeleton.prototype.setBonesToSetupPose = function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + var data = constraint.data; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + } + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + var data = constraint.data; + constraint.position = data.position; + constraint.spacing = data.spacing; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + } + }; + Skeleton.prototype.setSlotsToSetupPose = function () { + var slots = this.slots; + spine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length); + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(); + }; + Skeleton.prototype.getRootBone = function () { + if (this.bones.length == 0) + return null; + return this.bones[0]; + }; + Skeleton.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.data.name == boneName) + return bone; + } + return null; + }; + Skeleton.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) + return i; + return -1; + }; + Skeleton.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) + return slot; + } + return null; + }; + Skeleton.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) + return i; + return -1; + }; + Skeleton.prototype.setSkinByName = function (skinName) { + var skin = this.data.findSkin(skinName); + if (skin == null) + throw new Error("Skin not found: " + skinName); + this.setSkin(skin); + }; + Skeleton.prototype.setSkin = function (newSkin) { + if (newSkin == this.skin) + return; + if (newSkin != null) { + if (this.skin != null) + newSkin.attachAll(this, this.skin); + else { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var name_1 = slot.data.attachmentName; + if (name_1 != null) { + var attachment = newSkin.getAttachment(i, name_1); + if (attachment != null) + slot.setAttachment(attachment); + } + } + } + } + this.skin = newSkin; + this.updateCache(); + }; + Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) { + return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName); + }; + Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) { + if (attachmentName == null) + throw new Error("attachmentName cannot be null."); + if (this.skin != null) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment != null) + return attachment; + } + if (this.data.defaultSkin != null) + return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }; + Skeleton.prototype.setAttachment = function (slotName, attachmentName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName != null) { + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) + throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); + } + slot.setAttachment(attachment); + return; + } + } + throw new Error("Slot not found: " + slotName); + }; + Skeleton.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var ikConstraint = ikConstraints[i]; + if (ikConstraint.data.name == constraintName) + return ikConstraint; + } + return null; + }; + Skeleton.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.getBounds = function (offset, size, temp) { + if (temp === void 0) { temp = new Array(2); } + if (offset == null) + throw new Error("offset cannot be null."); + if (size == null) + throw new Error("size cannot be null."); + var drawOrder = this.drawOrder; + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + if (!slot.bone.active) + continue; + var verticesLength = 0; + var vertices = null; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.RegionAttachment) { + verticesLength = 8; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + attachment.computeWorldVertices(slot.bone, vertices, 0, 2); + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + verticesLength = mesh.worldVerticesLength; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); + } + if (vertices != null) { + for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) { + var x = vertices[ii], y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + } + offset.set(minX, minY); + size.set(maxX - minX, maxY - minY); + }; + Skeleton.prototype.update = function (delta) { + this.time += delta; + }; + return Skeleton; + }()); + spine.Skeleton = Skeleton; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBinary = (function () { + function SkeletonBinary(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonBinary.prototype.readSkeletonData = function (binary) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + skeletonData.name = ""; + var input = new BinaryInput(binary); + skeletonData.hash = input.readString(); + skeletonData.version = input.readString(); + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + var nonessential = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + var n = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) + input.strings.push(input.readString()); + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var name_2 = input.readString(); + var parent_2 = i == 0 ? null : skeletonData.bones[input.readInt(true)]; + var data = new spine.BoneData(i, name_2, parent_2); + data.rotation = input.readFloat(); + data.x = input.readFloat() * scale; + data.y = input.readFloat() * scale; + data.scaleX = input.readFloat(); + data.scaleY = input.readFloat(); + data.shearX = input.readFloat(); + data.shearY = input.readFloat(); + data.length = input.readFloat() * scale; + data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)]; + data.skinRequired = input.readBoolean(); + if (nonessential) + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + skeletonData.bones.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var slotName = input.readString(); + var boneData = skeletonData.bones[input.readInt(true)]; + var data = new spine.SlotData(i, slotName, boneData); + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + var darkColor = input.readInt32(); + if (darkColor != -1) + spine.Color.rgb888ToColor(data.darkColor = new spine.Color(), darkColor); + data.attachmentName = input.readStringRef(); + data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)]; + skeletonData.slots.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.IkConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.mix = input.readFloat(); + data.softness = input.readFloat() * scale; + data.bendDirection = input.readByte(); + data.compress = input.readBoolean(); + data.stretch = input.readBoolean(); + data.uniform = input.readBoolean(); + skeletonData.ikConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.TransformConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.local = input.readBoolean(); + data.relative = input.readBoolean(); + data.offsetRotation = input.readFloat(); + data.offsetX = input.readFloat() * scale; + data.offsetY = input.readFloat() * scale; + data.offsetScaleX = input.readFloat(); + data.offsetScaleY = input.readFloat(); + data.offsetShearY = input.readFloat(); + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + data.scaleMix = input.readFloat(); + data.shearMix = input.readFloat(); + skeletonData.transformConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.PathConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.slots[input.readInt(true)]; + data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)]; + data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)]; + data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)]; + data.offsetRotation = input.readFloat(); + data.position = input.readFloat(); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = input.readFloat(); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + skeletonData.pathConstraints.push(data); + } + var defaultSkin = this.readSkin(input, skeletonData, true, nonessential); + if (defaultSkin != null) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + { + var i = skeletonData.skins.length; + spine.Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true)); + for (; i < n; i++) + skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential); + } + n = this.linkedMeshes.length; + for (var i = 0; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_3 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_3 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_3); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var data = new spine.EventData(input.readStringRef()); + data.intValue = input.readInt(false); + data.floatValue = input.readFloat(); + data.stringValue = input.readString(); + data.audioPath = input.readString(); + if (data.audioPath != null) { + data.volume = input.readFloat(); + data.balance = input.readFloat(); + } + skeletonData.events.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) + skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData)); + return skeletonData; + }; + SkeletonBinary.prototype.readSkin = function (input, skeletonData, defaultSkin, nonessential) { + var skin = null; + var slotCount = 0; + if (defaultSkin) { + slotCount = input.readInt(true); + if (slotCount == 0) + return null; + skin = new spine.Skin("default"); + } + else { + skin = new spine.Skin(input.readStringRef()); + skin.bones.length = input.readInt(true); + for (var i = 0, n = skin.bones.length; i < n; i++) + skin.bones[i] = skeletonData.bones[input.readInt(true)]; + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]); + slotCount = input.readInt(true); + } + for (var i = 0; i < slotCount; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var name_3 = input.readStringRef(); + var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_3, nonessential); + if (attachment != null) + skin.setAttachment(slotIndex, name_3, attachment); + } + } + return skin; + }; + SkeletonBinary.prototype.readAttachment = function (input, skeletonData, skin, slotIndex, attachmentName, nonessential) { + var scale = this.scale; + var name = input.readStringRef(); + if (name == null) + name = attachmentName; + var typeIndex = input.readByte(); + var type = SkeletonBinary.AttachmentTypeValues[typeIndex]; + switch (type) { + case spine.AttachmentType.Region: { + var path = input.readStringRef(); + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var scaleX = input.readFloat(); + var scaleY = input.readFloat(); + var width = input.readFloat(); + var height = input.readFloat(); + var color = input.readInt32(); + if (path == null) + path = name; + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = x * scale; + region.y = y * scale; + region.scaleX = scaleX; + region.scaleY = scaleY; + region.rotation = rotation; + region.width = width * scale; + region.height = height * scale; + spine.Color.rgba8888ToColor(region.color, color); + region.updateOffset(); + return region; + } + case spine.AttachmentType.BoundingBox: { + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + box.worldVerticesLength = vertexCount << 1; + box.vertices = vertices.vertices; + box.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(box.color, color); + return box; + } + case spine.AttachmentType.Mesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var vertexCount = input.readInt(true); + var uvs = this.readFloatArray(input, vertexCount << 1, 1); + var triangles = this.readShortArray(input); + var vertices = this.readVertices(input, vertexCount); + var hullLength = input.readInt(true); + var edges = null; + var width = 0, height = 0; + if (nonessential) { + edges = this.readShortArray(input); + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertexCount << 1; + mesh.triangles = triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.hullLength = hullLength << 1; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + return mesh; + } + case spine.AttachmentType.LinkedMesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var skinName = input.readStringRef(); + var parent_4 = input.readStringRef(); + var inheritDeform = input.readBoolean(); + var width = 0, height = 0; + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_4, inheritDeform)); + return mesh; + } + case spine.AttachmentType.Path: { + var closed_1 = input.readBoolean(); + var constantSpeed = input.readBoolean(); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0, n = lengths.length; i < n; i++) + lengths[i] = input.readFloat() * scale; + var color = nonessential ? input.readInt32() : 0; + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = closed_1; + path.constantSpeed = constantSpeed; + path.worldVerticesLength = vertexCount << 1; + path.vertices = vertices.vertices; + path.bones = vertices.bones; + path.lengths = lengths; + if (nonessential) + spine.Color.rgba8888ToColor(path.color, color); + return path; + } + case spine.AttachmentType.Point: { + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var color = nonessential ? input.readInt32() : 0; + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + if (nonessential) + spine.Color.rgba8888ToColor(point.color, color); + return point; + } + case spine.AttachmentType.Clipping: { + var endSlotIndex = input.readInt(true); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.worldVerticesLength = vertexCount << 1; + clip.vertices = vertices.vertices; + clip.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(clip.color, color); + return clip; + } + } + return null; + }; + SkeletonBinary.prototype.readVertices = function (input, vertexCount) { + var verticesLength = vertexCount << 1; + var vertices = new Vertices(); + var scale = this.scale; + if (!input.readBoolean()) { + vertices.vertices = this.readFloatArray(input, verticesLength, scale); + return vertices; + } + var weights = new Array(); + var bonesArray = new Array(); + for (var i = 0; i < vertexCount; i++) { + var boneCount = input.readInt(true); + bonesArray.push(boneCount); + for (var ii = 0; ii < boneCount; ii++) { + bonesArray.push(input.readInt(true)); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat()); + } + } + vertices.vertices = spine.Utils.toFloatArray(weights); + vertices.bones = bonesArray; + return vertices; + }; + SkeletonBinary.prototype.readFloatArray = function (input, n, scale) { + var array = new Array(n); + if (scale == 1) { + for (var i = 0; i < n; i++) + array[i] = input.readFloat(); + } + else { + for (var i = 0; i < n; i++) + array[i] = input.readFloat() * scale; + } + return array; + }; + SkeletonBinary.prototype.readShortArray = function (input) { + var n = input.readInt(true); + var array = new Array(n); + for (var i = 0; i < n; i++) + array[i] = input.readShort(); + return array; + }; + SkeletonBinary.prototype.readAnimation = function (input, name, skeletonData) { + var timelines = new Array(); + var scale = this.scale; + var duration = 0; + var tempColor1 = new spine.Color(); + var tempColor2 = new spine.Color(); + for (var i = 0, n = input.readInt(true); i < n; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.SLOT_ATTACHMENT: { + var timeline = new spine.AttachmentTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) + timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef()); + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + break; + } + case SkeletonBinary.SLOT_COLOR: { + var timeline = new spine.ColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.ColorTimeline.ENTRIES]); + break; + } + case SkeletonBinary.SLOT_TWO_COLOR: { + var timeline = new spine.TwoColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + spine.Color.rgb888ToColor(tempColor2, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TwoColorTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var boneIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.BONE_ROTATE: { + var timeline = new spine.RotateTimeline(frameCount); + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.RotateTimeline.ENTRIES]); + break; + } + case SkeletonBinary.BONE_TRANSLATE: + case SkeletonBinary.BONE_SCALE: + case SkeletonBinary.BONE_SHEAR: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.BONE_SCALE) + timeline = new spine.ScaleTimeline(frameCount); + else if (timelineType == SkeletonBinary.BONE_SHEAR) + timeline = new spine.ShearTimeline(frameCount); + else { + timeline = new spine.TranslateTimeline(frameCount); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TranslateTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.IkConstraintTimeline(frameCount); + timeline.ikConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.TransformConstraintTimeline(frameCount); + timeline.transformConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var data = skeletonData.pathConstraints[index]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.PATH_POSITION: + case SkeletonBinary.PATH_SPACING: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.PATH_SPACING) { + timeline = new spine.PathConstraintSpacingTimeline(frameCount); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(frameCount); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + break; + } + case SkeletonBinary.PATH_MIX: { + var timeline = new spine.PathConstraintMixTimeline(frameCount); + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var skin = skeletonData.skins[input.readInt(true)]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var slotIndex = input.readInt(true); + for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { + var attachment = skin.getAttachment(slotIndex, input.readStringRef()); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var frameCount = input.readInt(true); + var timeline = new spine.DeformTimeline(frameCount); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + var deform = void 0; + var end = input.readInt(true); + if (end == 0) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = input.readInt(true); + end += start; + if (scale == 1) { + for (var v = start; v < end; v++) + deform[v] = input.readFloat(); + } + else { + for (var v = start; v < end; v++) + deform[v] = input.readFloat() * scale; + } + if (!weighted) { + for (var v = 0, vn = deform.length; v < vn; v++) + deform[v] += vertices[v]; + } + } + timeline.setFrame(frameIndex, time, deform); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + } + } + } + var drawOrderCount = input.readInt(true); + if (drawOrderCount > 0) { + var timeline = new spine.DrawOrderTimeline(drawOrderCount); + var slotCount = skeletonData.slots.length; + for (var i = 0; i < drawOrderCount; i++) { + var time = input.readFloat(); + var offsetCount = input.readInt(true); + var drawOrder = spine.Utils.newArray(slotCount, 0); + for (var ii = slotCount - 1; ii >= 0; ii--) + drawOrder[ii] = -1; + var unchanged = spine.Utils.newArray(slotCount - offsetCount, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var ii = 0; ii < offsetCount; ii++) { + var slotIndex = input.readInt(true); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + input.readInt(true)] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var ii = slotCount - 1; ii >= 0; ii--) + if (drawOrder[ii] == -1) + drawOrder[ii] = unchanged[--unchangedIndex]; + timeline.setFrame(i, time, drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[drawOrderCount - 1]); + } + var eventCount = input.readInt(true); + if (eventCount > 0) { + var timeline = new spine.EventTimeline(eventCount); + for (var i = 0; i < eventCount; i++) { + var time = input.readFloat(); + var eventData = skeletonData.events[input.readInt(true)]; + var event_4 = new spine.Event(time, eventData); + event_4.intValue = input.readInt(false); + event_4.floatValue = input.readFloat(); + event_4.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue; + if (event_4.data.audioPath != null) { + event_4.volume = input.readFloat(); + event_4.balance = input.readFloat(); + } + timeline.setFrame(i, event_4); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[eventCount - 1]); + } + return new spine.Animation(name, timelines, duration); + }; + SkeletonBinary.prototype.readCurve = function (input, frameIndex, timeline) { + switch (input.readByte()) { + case SkeletonBinary.CURVE_STEPPED: + timeline.setStepped(frameIndex); + break; + case SkeletonBinary.CURVE_BEZIER: + this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + break; + } + }; + SkeletonBinary.prototype.setCurve = function (timeline, frameIndex, cx1, cy1, cx2, cy2) { + timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2); + }; + SkeletonBinary.AttachmentTypeValues = [0, 1, 2, 3, 4, 5, 6]; + SkeletonBinary.TransformModeValues = [spine.TransformMode.Normal, spine.TransformMode.OnlyTranslation, spine.TransformMode.NoRotationOrReflection, spine.TransformMode.NoScale, spine.TransformMode.NoScaleOrReflection]; + SkeletonBinary.PositionModeValues = [spine.PositionMode.Fixed, spine.PositionMode.Percent]; + SkeletonBinary.SpacingModeValues = [spine.SpacingMode.Length, spine.SpacingMode.Fixed, spine.SpacingMode.Percent]; + SkeletonBinary.RotateModeValues = [spine.RotateMode.Tangent, spine.RotateMode.Chain, spine.RotateMode.ChainScale]; + SkeletonBinary.BlendModeValues = [spine.BlendMode.Normal, spine.BlendMode.Additive, spine.BlendMode.Multiply, spine.BlendMode.Screen]; + SkeletonBinary.BONE_ROTATE = 0; + SkeletonBinary.BONE_TRANSLATE = 1; + SkeletonBinary.BONE_SCALE = 2; + SkeletonBinary.BONE_SHEAR = 3; + SkeletonBinary.SLOT_ATTACHMENT = 0; + SkeletonBinary.SLOT_COLOR = 1; + SkeletonBinary.SLOT_TWO_COLOR = 2; + SkeletonBinary.PATH_POSITION = 0; + SkeletonBinary.PATH_SPACING = 1; + SkeletonBinary.PATH_MIX = 2; + SkeletonBinary.CURVE_LINEAR = 0; + SkeletonBinary.CURVE_STEPPED = 1; + SkeletonBinary.CURVE_BEZIER = 2; + return SkeletonBinary; + }()); + spine.SkeletonBinary = SkeletonBinary; + var BinaryInput = (function () { + function BinaryInput(data, strings, index, buffer) { + if (strings === void 0) { strings = new Array(); } + if (index === void 0) { index = 0; } + if (buffer === void 0) { buffer = new DataView(data.buffer); } + this.strings = strings; + this.index = index; + this.buffer = buffer; + } + BinaryInput.prototype.readByte = function () { + return this.buffer.getInt8(this.index++); + }; + BinaryInput.prototype.readShort = function () { + var value = this.buffer.getInt16(this.index); + this.index += 2; + return value; + }; + BinaryInput.prototype.readInt32 = function () { + var value = this.buffer.getInt32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readInt = function (optimizePositive) { + var b = this.readByte(); + var result = b & 0x7F; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 7; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 14; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 21; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 28; + } + } + } + } + return optimizePositive ? result : ((result >>> 1) ^ -(result & 1)); + }; + BinaryInput.prototype.readStringRef = function () { + var index = this.readInt(true); + return index == 0 ? null : this.strings[index - 1]; + }; + BinaryInput.prototype.readString = function () { + var byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + case 1: + return ""; + } + byteCount--; + var chars = ""; + var charCount = 0; + for (var i = 0; i < byteCount;) { + var b = this.readByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F)); + i += 2; + break; + case 14: + chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F)); + i += 3; + break; + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + }; + BinaryInput.prototype.readFloat = function () { + var value = this.buffer.getFloat32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readBoolean = function () { + return this.readByte() != 0; + }; + return BinaryInput; + }()); + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); + var Vertices = (function () { + function Vertices(bones, vertices) { + if (bones === void 0) { bones = null; } + if (vertices === void 0) { vertices = null; } + this.bones = bones; + this.vertices = vertices; + } + return Vertices; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBounds = (function () { + function SkeletonBounds() { + this.minX = 0; + this.minY = 0; + this.maxX = 0; + this.maxY = 0; + this.boundingBoxes = new Array(); + this.polygons = new Array(); + this.polygonPool = new spine.Pool(function () { + return spine.Utils.newFloatArray(16); + }); + } + SkeletonBounds.prototype.update = function (skeleton, updateAabb) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + var boundingBoxes = this.boundingBoxes; + var polygons = this.polygons; + var polygonPool = this.polygonPool; + var slots = skeleton.slots; + var slotCount = slots.length; + boundingBoxes.length = 0; + polygonPool.freeAll(polygons); + polygons.length = 0; + for (var i = 0; i < slotCount; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.BoundingBoxAttachment) { + var boundingBox = attachment; + boundingBoxes.push(boundingBox); + var polygon = polygonPool.obtain(); + if (polygon.length != boundingBox.worldVerticesLength) { + polygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength); + } + polygons.push(polygon); + boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2); + } + } + if (updateAabb) { + this.aabbCompute(); + } + else { + this.minX = Number.POSITIVE_INFINITY; + this.minY = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.maxY = Number.NEGATIVE_INFINITY; + } + }; + SkeletonBounds.prototype.aabbCompute = function () { + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) { + var polygon = polygons[i]; + var vertices = polygon; + for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) { + var x = vertices[ii]; + var y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + }; + SkeletonBounds.prototype.aabbContainsPoint = function (x, y) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + }; + SkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) { + var minX = this.minX; + var minY = this.minY; + var maxX = this.maxX; + var maxY = this.maxY; + if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY)) + return false; + var m = (y2 - y1) / (x2 - x1); + var y = m * (minX - x1) + y1; + if (y > minY && y < maxY) + return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) + return true; + var x = (minY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + return false; + }; + SkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + }; + SkeletonBounds.prototype.containsPoint = function (x, y) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.containsPointPolygon(polygons[i], x, y)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) { + var vertices = polygon; + var nn = polygon.length; + var prevIndex = nn - 2; + var inside = false; + for (var ii = 0; ii < nn; ii += 2) { + var vertexY = vertices[ii + 1]; + var prevY = vertices[prevIndex + 1]; + if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) { + var vertexX = vertices[ii]; + if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) + inside = !inside; + } + prevIndex = ii; + } + return inside; + }; + SkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) { + var vertices = polygon; + var nn = polygon.length; + var width12 = x1 - x2, height12 = y1 - y2; + var det1 = x1 * y2 - y1 * x2; + var x3 = vertices[nn - 2], y3 = vertices[nn - 1]; + for (var ii = 0; ii < nn; ii += 2) { + var x4 = vertices[ii], y4 = vertices[ii + 1]; + var det2 = x3 * y4 - y3 * x4; + var width34 = x3 - x4, height34 = y3 - y4; + var det3 = width12 * height34 - height12 * width34; + var x = (det1 * width34 - width12 * det2) / det3; + if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) { + var y = (det1 * height34 - height12 * det2) / det3; + if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1))) + return true; + } + x3 = x4; + y3 = y4; + } + return false; + }; + SkeletonBounds.prototype.getPolygon = function (boundingBox) { + if (boundingBox == null) + throw new Error("boundingBox cannot be null."); + var index = this.boundingBoxes.indexOf(boundingBox); + return index == -1 ? null : this.polygons[index]; + }; + SkeletonBounds.prototype.getWidth = function () { + return this.maxX - this.minX; + }; + SkeletonBounds.prototype.getHeight = function () { + return this.maxY - this.minY; + }; + return SkeletonBounds; + }()); + spine.SkeletonBounds = SkeletonBounds; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonClipping = (function () { + function SkeletonClipping() { + this.triangulator = new spine.Triangulator(); + this.clippingPolygon = new Array(); + this.clipOutput = new Array(); + this.clippedVertices = new Array(); + this.clippedTriangles = new Array(); + this.scratch = new Array(); + } + SkeletonClipping.prototype.clipStart = function (slot, clip) { + if (this.clipAttachment != null) + return 0; + this.clipAttachment = clip; + var n = clip.worldVerticesLength; + var vertices = spine.Utils.setArraySize(this.clippingPolygon, n); + clip.computeWorldVertices(slot, 0, n, vertices, 0, 2); + var clippingPolygon = this.clippingPolygon; + SkeletonClipping.makeClockwise(clippingPolygon); + var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)); + for (var i = 0, n_2 = clippingPolygons.length; i < n_2; i++) { + var polygon = clippingPolygons[i]; + SkeletonClipping.makeClockwise(polygon); + polygon.push(polygon[0]); + polygon.push(polygon[1]); + } + return clippingPolygons.length; + }; + SkeletonClipping.prototype.clipEndWithSlot = function (slot) { + if (this.clipAttachment != null && this.clipAttachment.endSlot == slot.data) + this.clipEnd(); + }; + SkeletonClipping.prototype.clipEnd = function () { + if (this.clipAttachment == null) + return; + this.clipAttachment = null; + this.clippingPolygons = null; + this.clippedVertices.length = 0; + this.clippedTriangles.length = 0; + this.clippingPolygon.length = 0; + }; + SkeletonClipping.prototype.isClipping = function () { + return this.clipAttachment != null; + }; + SkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) { + var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; + var clippedTriangles = this.clippedTriangles; + var polygons = this.clippingPolygons; + var polygonsCount = this.clippingPolygons.length; + var vertexSize = twoColor ? 12 : 8; + var index = 0; + clippedVertices.length = 0; + clippedTriangles.length = 0; + outer: for (var i = 0; i < trianglesLength; i += 3) { + var vertexOffset = triangles[i] << 1; + var x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; + var u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 1] << 1; + var x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1]; + var u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 2] << 1; + var x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1]; + var u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1]; + for (var p = 0; p < polygonsCount; p++) { + var s = clippedVertices.length; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { + var clipOutputLength = clipOutput.length; + if (clipOutputLength == 0) + continue; + var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1; + var d = 1 / (d0 * d2 + d1 * (y1 - y3)); + var clipOutputCount = clipOutputLength >> 1; + var clipOutputItems = this.clipOutput; + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); + for (var ii = 0; ii < clipOutputLength; ii += 2) { + var x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + var c0 = x - x3, c1 = y - y3; + var a = (d0 * c0 + d1 * c1) * d; + var b = (d4 * c0 + d2 * c1) * d; + var c = 1 - a - b; + clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c; + clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + } + s += vertexSize; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (var ii = 1; ii < clipOutputCount; ii++) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + ii); + clippedTrianglesItems[s + 2] = (index + ii + 1); + s += 3; + } + index += clipOutputCount + 1; + } + else { + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + if (!twoColor) { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = x2; + clippedVerticesItems[s + 9] = y2; + clippedVerticesItems[s + 10] = light.r; + clippedVerticesItems[s + 11] = light.g; + clippedVerticesItems[s + 12] = light.b; + clippedVerticesItems[s + 13] = light.a; + clippedVerticesItems[s + 14] = u2; + clippedVerticesItems[s + 15] = v2; + clippedVerticesItems[s + 16] = x3; + clippedVerticesItems[s + 17] = y3; + clippedVerticesItems[s + 18] = light.r; + clippedVerticesItems[s + 19] = light.g; + clippedVerticesItems[s + 20] = light.b; + clippedVerticesItems[s + 21] = light.a; + clippedVerticesItems[s + 22] = u3; + clippedVerticesItems[s + 23] = v3; + } + else { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + clippedVerticesItems[s + 12] = x2; + clippedVerticesItems[s + 13] = y2; + clippedVerticesItems[s + 14] = light.r; + clippedVerticesItems[s + 15] = light.g; + clippedVerticesItems[s + 16] = light.b; + clippedVerticesItems[s + 17] = light.a; + clippedVerticesItems[s + 18] = u2; + clippedVerticesItems[s + 19] = v2; + clippedVerticesItems[s + 20] = dark.r; + clippedVerticesItems[s + 21] = dark.g; + clippedVerticesItems[s + 22] = dark.b; + clippedVerticesItems[s + 23] = dark.a; + clippedVerticesItems[s + 24] = x3; + clippedVerticesItems[s + 25] = y3; + clippedVerticesItems[s + 26] = light.r; + clippedVerticesItems[s + 27] = light.g; + clippedVerticesItems[s + 28] = light.b; + clippedVerticesItems[s + 29] = light.a; + clippedVerticesItems[s + 30] = u3; + clippedVerticesItems[s + 31] = v3; + clippedVerticesItems[s + 32] = dark.r; + clippedVerticesItems[s + 33] = dark.g; + clippedVerticesItems[s + 34] = dark.b; + clippedVerticesItems[s + 35] = dark.a; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + 1); + clippedTrianglesItems[s + 2] = (index + 2); + index += 3; + continue outer; + } + } + } + }; + SkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) { + var originalOutput = output; + var clipped = false; + var input = null; + if (clippingArea.length % 4 >= 2) { + input = output; + output = this.scratch; + } + else + input = this.scratch; + input.length = 0; + input.push(x1); + input.push(y1); + input.push(x2); + input.push(y2); + input.push(x3); + input.push(y3); + input.push(x1); + input.push(y1); + output.length = 0; + var clippingVertices = clippingArea; + var clippingVerticesLast = clippingArea.length - 4; + for (var i = 0;; i += 2) { + var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1]; + var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3]; + var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2; + var inputVertices = input; + var inputVerticesLength = input.length - 2, outputStart = output.length; + for (var ii = 0; ii < inputVerticesLength; ii += 2) { + var inputX = inputVertices[ii], inputY = inputVertices[ii + 1]; + var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3]; + var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0; + if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) { + if (side2) { + output.push(inputX2); + output.push(inputY2); + continue; + } + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + } + else if (side2) { + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + output.push(inputX2); + output.push(inputY2); + } + clipped = true; + } + if (outputStart == output.length) { + originalOutput.length = 0; + return true; + } + output.push(output[0]); + output.push(output[1]); + if (i == clippingVerticesLast) + break; + var temp = output; + output = input; + output.length = 0; + input = temp; + } + if (originalOutput != output) { + originalOutput.length = 0; + for (var i = 0, n = output.length - 2; i < n; i++) + originalOutput[i] = output[i]; + } + else + originalOutput.length = originalOutput.length - 2; + return clipped; + }; + SkeletonClipping.makeClockwise = function (polygon) { + var vertices = polygon; + var verticeslength = polygon.length; + var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0; + for (var i = 0, n = verticeslength - 3; i < n; i += 2) { + p1x = vertices[i]; + p1y = vertices[i + 1]; + p2x = vertices[i + 2]; + p2y = vertices[i + 3]; + area += p1x * p2y - p2x * p1y; + } + if (area < 0) + return; + for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) { + var x = vertices[i], y = vertices[i + 1]; + var other = lastX - i; + vertices[i] = vertices[other]; + vertices[i + 1] = vertices[other + 1]; + vertices[other] = x; + vertices[other + 1] = y; + } + }; + return SkeletonClipping; + }()); + spine.SkeletonClipping = SkeletonClipping; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonData = (function () { + function SkeletonData() { + this.bones = new Array(); + this.slots = new Array(); + this.skins = new Array(); + this.events = new Array(); + this.animations = new Array(); + this.ikConstraints = new Array(); + this.transformConstraints = new Array(); + this.pathConstraints = new Array(); + this.fps = 0; + } + SkeletonData.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.name == boneName) + return bone; + } + return null; + }; + SkeletonData.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) + return i; + return -1; + }; + SkeletonData.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.name == slotName) + return slot; + } + return null; + }; + SkeletonData.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) + return i; + return -1; + }; + SkeletonData.prototype.findSkin = function (skinName) { + if (skinName == null) + throw new Error("skinName cannot be null."); + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) { + var skin = skins[i]; + if (skin.name == skinName) + return skin; + } + return null; + }; + SkeletonData.prototype.findEvent = function (eventDataName) { + if (eventDataName == null) + throw new Error("eventDataName cannot be null."); + var events = this.events; + for (var i = 0, n = events.length; i < n; i++) { + var event_5 = events[i]; + if (event_5.name == eventDataName) + return event_5; + } + return null; + }; + SkeletonData.prototype.findAnimation = function (animationName) { + if (animationName == null) + throw new Error("animationName cannot be null."); + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) { + var animation = animations[i]; + if (animation.name == animationName) + return animation; + } + return null; + }; + SkeletonData.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraintIndex = function (pathConstraintName) { + if (pathConstraintName == null) + throw new Error("pathConstraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) + if (pathConstraints[i].name == pathConstraintName) + return i; + return -1; + }; + return SkeletonData; + }()); + spine.SkeletonData = SkeletonData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonJson = (function () { + function SkeletonJson(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonJson.prototype.readSkeletonData = function (json) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + var root = typeof (json) === "string" ? JSON.parse(json) : json; + var skeletonMap = root.skeleton; + if (skeletonMap != null) { + skeletonData.hash = skeletonMap.hash; + skeletonData.version = skeletonMap.spine; + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = skeletonMap.x; + skeletonData.y = skeletonMap.y; + skeletonData.width = skeletonMap.width; + skeletonData.height = skeletonMap.height; + skeletonData.fps = skeletonMap.fps; + skeletonData.imagesPath = skeletonMap.images; + } + if (root.bones) { + for (var i = 0; i < root.bones.length; i++) { + var boneMap = root.bones[i]; + var parent_5 = null; + var parentName = this.getValue(boneMap, "parent", null); + if (parentName != null) { + parent_5 = skeletonData.findBone(parentName); + if (parent_5 == null) + throw new Error("Parent bone not found: " + parentName); + } + var data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_5); + data.length = this.getValue(boneMap, "length", 0) * scale; + data.x = this.getValue(boneMap, "x", 0) * scale; + data.y = this.getValue(boneMap, "y", 0) * scale; + data.rotation = this.getValue(boneMap, "rotation", 0); + data.scaleX = this.getValue(boneMap, "scaleX", 1); + data.scaleY = this.getValue(boneMap, "scaleY", 1); + data.shearX = this.getValue(boneMap, "shearX", 0); + data.shearY = this.getValue(boneMap, "shearY", 0); + data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, "transform", "normal")); + data.skinRequired = this.getValue(boneMap, "skin", false); + skeletonData.bones.push(data); + } + } + if (root.slots) { + for (var i = 0; i < root.slots.length; i++) { + var slotMap = root.slots[i]; + var slotName = slotMap.name; + var boneName = slotMap.bone; + var boneData = skeletonData.findBone(boneName); + if (boneData == null) + throw new Error("Slot bone not found: " + boneName); + var data = new spine.SlotData(skeletonData.slots.length, slotName, boneData); + var color = this.getValue(slotMap, "color", null); + if (color != null) + data.color.setFromString(color); + var dark = this.getValue(slotMap, "dark", null); + if (dark != null) { + data.darkColor = new spine.Color(1, 1, 1, 1); + data.darkColor.setFromString(dark); + } + data.attachmentName = this.getValue(slotMap, "attachment", null); + data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, "blend", "normal")); + skeletonData.slots.push(data); + } + } + if (root.ik) { + for (var i = 0; i < root.ik.length; i++) { + var constraintMap = root.ik[i]; + var data = new spine.IkConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("IK bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("IK target bone not found: " + targetName); + data.mix = this.getValue(constraintMap, "mix", 1); + data.softness = this.getValue(constraintMap, "softness", 0) * scale; + data.bendDirection = this.getValue(constraintMap, "bendPositive", true) ? 1 : -1; + data.compress = this.getValue(constraintMap, "compress", false); + data.stretch = this.getValue(constraintMap, "stretch", false); + data.uniform = this.getValue(constraintMap, "uniform", false); + skeletonData.ikConstraints.push(data); + } + } + if (root.transform) { + for (var i = 0; i < root.transform.length; i++) { + var constraintMap = root.transform[i]; + var data = new spine.TransformConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("Transform constraint target bone not found: " + targetName); + data.local = this.getValue(constraintMap, "local", false); + data.relative = this.getValue(constraintMap, "relative", false); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.offsetX = this.getValue(constraintMap, "x", 0) * scale; + data.offsetY = this.getValue(constraintMap, "y", 0) * scale; + data.offsetScaleX = this.getValue(constraintMap, "scaleX", 0); + data.offsetScaleY = this.getValue(constraintMap, "scaleY", 0); + data.offsetShearY = this.getValue(constraintMap, "shearY", 0); + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + data.scaleMix = this.getValue(constraintMap, "scaleMix", 1); + data.shearMix = this.getValue(constraintMap, "shearMix", 1); + skeletonData.transformConstraints.push(data); + } + } + if (root.path) { + for (var i = 0; i < root.path.length; i++) { + var constraintMap = root.path[i]; + var data = new spine.PathConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findSlot(targetName); + if (data.target == null) + throw new Error("Path target slot not found: " + targetName); + data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, "positionMode", "percent")); + data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, "spacingMode", "length")); + data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, "rotateMode", "tangent")); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.position = this.getValue(constraintMap, "position", 0); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = this.getValue(constraintMap, "spacing", 0); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + skeletonData.pathConstraints.push(data); + } + } + if (root.skins) { + for (var i = 0; i < root.skins.length; i++) { + var skinMap = root.skins[i]; + var skin = new spine.Skin(skinMap.name); + if (skinMap.bones) { + for (var ii = 0; ii < skinMap.bones.length; ii++) { + var bone = skeletonData.findBone(skinMap.bones[ii]); + if (bone == null) + throw new Error("Skin bone not found: " + skinMap.bones[i]); + skin.bones.push(bone); + } + } + if (skinMap.ik) { + for (var ii = 0; ii < skinMap.ik.length; ii++) { + var constraint = skeletonData.findIkConstraint(skinMap.ik[ii]); + if (constraint == null) + throw new Error("Skin IK constraint not found: " + skinMap.ik[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.transform) { + for (var ii = 0; ii < skinMap.transform.length; ii++) { + var constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]); + if (constraint == null) + throw new Error("Skin transform constraint not found: " + skinMap.transform[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.path) { + for (var ii = 0; ii < skinMap.path.length; ii++) { + var constraint = skeletonData.findPathConstraint(skinMap.path[ii]); + if (constraint == null) + throw new Error("Skin path constraint not found: " + skinMap.path[i]); + skin.constraints.push(constraint); + } + } + for (var slotName in skinMap.attachments) { + var slot = skeletonData.findSlot(slotName); + if (slot == null) + throw new Error("Slot not found: " + slotName); + var slotMap = skinMap.attachments[slotName]; + for (var entryName in slotMap) { + var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); + if (attachment != null) + skin.setAttachment(slot.index, entryName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") + skeletonData.defaultSkin = skin; + } + } + for (var i = 0, n = this.linkedMeshes.length; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_6 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_6 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_6 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_6); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + if (root.events) { + for (var eventName in root.events) { + var eventMap = root.events[eventName]; + var data = new spine.EventData(eventName); + data.intValue = this.getValue(eventMap, "int", 0); + data.floatValue = this.getValue(eventMap, "float", 0); + data.stringValue = this.getValue(eventMap, "string", ""); + data.audioPath = this.getValue(eventMap, "audio", null); + if (data.audioPath != null) { + data.volume = this.getValue(eventMap, "volume", 1); + data.balance = this.getValue(eventMap, "balance", 0); + } + skeletonData.events.push(data); + } + } + if (root.animations) { + for (var animationName in root.animations) { + var animationMap = root.animations[animationName]; + this.readAnimation(animationMap, animationName, skeletonData); + } + } + return skeletonData; + }; + SkeletonJson.prototype.readAttachment = function (map, skin, slotIndex, name, skeletonData) { + var scale = this.scale; + name = this.getValue(map, "name", name); + var type = this.getValue(map, "type", "region"); + switch (type) { + case "region": { + var path = this.getValue(map, "path", name); + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = this.getValue(map, "x", 0) * scale; + region.y = this.getValue(map, "y", 0) * scale; + region.scaleX = this.getValue(map, "scaleX", 1); + region.scaleY = this.getValue(map, "scaleY", 1); + region.rotation = this.getValue(map, "rotation", 0); + region.width = map.width * scale; + region.height = map.height * scale; + var color = this.getValue(map, "color", null); + if (color != null) + region.color.setFromString(color); + region.updateOffset(); + return region; + } + case "boundingbox": { + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + this.readVertices(map, box, map.vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + box.color.setFromString(color); + return box; + } + case "mesh": + case "linkedmesh": { + var path = this.getValue(map, "path", name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + var color = this.getValue(map, "color", null); + if (color != null) + mesh.color.setFromString(color); + mesh.width = this.getValue(map, "width", 0) * scale; + mesh.height = this.getValue(map, "height", 0) * scale; + var parent_7 = this.getValue(map, "parent", null); + if (parent_7 != null) { + this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, "skin", null), slotIndex, parent_7, this.getValue(map, "deform", true))); + return mesh; + } + var uvs = map.uvs; + this.readVertices(map, mesh, uvs.length); + mesh.triangles = map.triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.edges = this.getValue(map, "edges", null); + mesh.hullLength = this.getValue(map, "hull", 0) * 2; + return mesh; + } + case "path": { + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = this.getValue(map, "closed", false); + path.constantSpeed = this.getValue(map, "constantSpeed", true); + var vertexCount = map.vertexCount; + this.readVertices(map, path, vertexCount << 1); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0; i < map.lengths.length; i++) + lengths[i] = map.lengths[i] * scale; + path.lengths = lengths; + var color = this.getValue(map, "color", null); + if (color != null) + path.color.setFromString(color); + return path; + } + case "point": { + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = this.getValue(map, "x", 0) * scale; + point.y = this.getValue(map, "y", 0) * scale; + point.rotation = this.getValue(map, "rotation", 0); + var color = this.getValue(map, "color", null); + if (color != null) + point.color.setFromString(color); + return point; + } + case "clipping": { + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + var end = this.getValue(map, "end", null); + if (end != null) { + var slot = skeletonData.findSlot(end); + if (slot == null) + throw new Error("Clipping end slot not found: " + end); + clip.endSlot = slot; + } + var vertexCount = map.vertexCount; + this.readVertices(map, clip, vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + clip.color.setFromString(color); + return clip; + } + } + return null; + }; + SkeletonJson.prototype.readVertices = function (map, attachment, verticesLength) { + var scale = this.scale; + attachment.worldVerticesLength = verticesLength; + var vertices = map.vertices; + if (verticesLength == vertices.length) { + var scaledVertices = spine.Utils.toFloatArray(vertices); + if (scale != 1) { + for (var i = 0, n = vertices.length; i < n; i++) + scaledVertices[i] *= scale; + } + attachment.vertices = scaledVertices; + return; + } + var weights = new Array(); + var bones = new Array(); + for (var i = 0, n = vertices.length; i < n;) { + var boneCount = vertices[i++]; + bones.push(boneCount); + for (var nn = i + boneCount * 4; i < nn; i += 4) { + bones.push(vertices[i]); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = spine.Utils.toFloatArray(weights); + }; + SkeletonJson.prototype.readAnimation = function (map, name, skeletonData) { + var scale = this.scale; + var timelines = new Array(); + var duration = 0; + if (map.slots) { + for (var slotName in map.slots) { + var slotMap = map.slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotName); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex++, this.getValue(valueMap, "time", 0), valueMap.name); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + else if (timelineName == "color") { + var timeline = new spine.ColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var color = new spine.Color(); + color.setFromString(valueMap.color); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), color.r, color.g, color.b, color.a); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]); + } + else if (timelineName == "twoColor") { + var timeline = new spine.TwoColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var light = new spine.Color(); + var dark = new spine.Color(); + light.setFromString(valueMap.light); + dark.setFromString(valueMap.dark); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"); + } + } + } + if (map.bones) { + for (var boneName in map.bones) { + var boneMap = map.bones[boneName]; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) + throw new Error("Bone not found: " + boneName); + for (var timelineName in boneMap) { + var timelineMap = boneMap[timelineName]; + if (timelineName === "rotate") { + var timeline = new spine.RotateTimeline(timelineMap.length); + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "angle", 0)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]); + } + else if (timelineName === "translate" || timelineName === "scale" || timelineName === "shear") { + var timeline = null; + var timelineScale = 1, defaultValue = 0; + if (timelineName === "scale") { + timeline = new spine.ScaleTimeline(timelineMap.length); + defaultValue = 1; + } + else if (timelineName === "shear") + timeline = new spine.ShearTimeline(timelineMap.length); + else { + timeline = new spine.TranslateTimeline(timelineMap.length); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var x = this.getValue(valueMap, "x", defaultValue), y = this.getValue(valueMap, "y", defaultValue); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), x * timelineScale, y * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); + } + } + } + if (map.ik) { + for (var constraintName in map.ik) { + var constraintMap = map.ik[constraintName]; + var constraint = skeletonData.findIkConstraint(constraintName); + var timeline = new spine.IkConstraintTimeline(constraintMap.length); + timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "mix", 1), this.getValue(valueMap, "softness", 0) * scale, this.getValue(valueMap, "bendPositive", true) ? 1 : -1, this.getValue(valueMap, "compress", false), this.getValue(valueMap, "stretch", false)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + } + if (map.transform) { + for (var constraintName in map.transform) { + var constraintMap = map.transform[constraintName]; + var constraint = skeletonData.findTransformConstraint(constraintName); + var timeline = new spine.TransformConstraintTimeline(constraintMap.length); + timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1), this.getValue(valueMap, "scaleMix", 1), this.getValue(valueMap, "shearMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + } + if (map.path) { + for (var constraintName in map.path) { + var constraintMap = map.path[constraintName]; + var index = skeletonData.findPathConstraintIndex(constraintName); + if (index == -1) + throw new Error("Path constraint not found: " + constraintName); + var data = skeletonData.pathConstraints[index]; + for (var timelineName in constraintMap) { + var timelineMap = constraintMap[timelineName]; + if (timelineName === "position" || timelineName === "spacing") { + var timeline = null; + var timelineScale = 1; + if (timelineName === "spacing") { + timeline = new spine.PathConstraintSpacingTimeline(timelineMap.length); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(timelineMap.length); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, timelineName, 0) * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + } + else if (timelineName === "mix") { + var timeline = new spine.PathConstraintMixTimeline(timelineMap.length); + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + } + } + } + } + if (map.deform) { + for (var deformName in map.deform) { + var deformMap = map.deform[deformName]; + var skin = skeletonData.findSkin(deformName); + if (skin == null) + throw new Error("Skin not found: " + deformName); + for (var slotName in deformMap) { + var slotMap = deformMap[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotMap.name); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + var attachment = skin.getAttachment(slotIndex, timelineName); + if (attachment == null) + throw new Error("Deform attachment not found: " + timelineMap.name); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var timeline = new spine.DeformTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + var frameIndex = 0; + for (var j = 0; j < timelineMap.length; j++) { + var valueMap = timelineMap[j]; + var deform = void 0; + var verticesValue = this.getValue(valueMap, "vertices", null); + if (verticesValue == null) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = this.getValue(valueMap, "offset", 0); + spine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length); + if (scale != 1) { + for (var i = start, n = i + verticesValue.length; i < n; i++) + deform[i] *= scale; + } + if (!weighted) { + for (var i = 0; i < deformLength; i++) + deform[i] += vertices[i]; + } + } + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), deform); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + } + } + } + var drawOrderNode = map.drawOrder; + if (drawOrderNode == null) + drawOrderNode = map.draworder; + if (drawOrderNode != null) { + var timeline = new spine.DrawOrderTimeline(drawOrderNode.length); + var slotCount = skeletonData.slots.length; + var frameIndex = 0; + for (var j = 0; j < drawOrderNode.length; j++) { + var drawOrderMap = drawOrderNode[j]; + var drawOrder = null; + var offsets = this.getValue(drawOrderMap, "offsets", null); + if (offsets != null) { + drawOrder = spine.Utils.newArray(slotCount, -1); + var unchanged = spine.Utils.newArray(slotCount - offsets.length, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var i = 0; i < offsets.length; i++) { + var offsetMap = offsets[i]; + var slotIndex = skeletonData.findSlotIndex(offsetMap.slot); + if (slotIndex == -1) + throw new Error("Slot not found: " + offsetMap.slot); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + offsetMap.offset] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var i = slotCount - 1; i >= 0; i--) + if (drawOrder[i] == -1) + drawOrder[i] = unchanged[--unchangedIndex]; + } + timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, "time", 0), drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (map.events) { + var timeline = new spine.EventTimeline(map.events.length); + var frameIndex = 0; + for (var i = 0; i < map.events.length; i++) { + var eventMap = map.events[i]; + var eventData = skeletonData.findEvent(eventMap.name); + if (eventData == null) + throw new Error("Event not found: " + eventMap.name); + var event_6 = new spine.Event(spine.Utils.toSinglePrecision(this.getValue(eventMap, "time", 0)), eventData); + event_6.intValue = this.getValue(eventMap, "int", eventData.intValue); + event_6.floatValue = this.getValue(eventMap, "float", eventData.floatValue); + event_6.stringValue = this.getValue(eventMap, "string", eventData.stringValue); + if (event_6.data.audioPath != null) { + event_6.volume = this.getValue(eventMap, "volume", 1); + event_6.balance = this.getValue(eventMap, "balance", 0); + } + timeline.setFrame(frameIndex++, event_6); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (isNaN(duration)) { + throw new Error("Error while parsing animation, duration is NaN"); + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + }; + SkeletonJson.prototype.readCurve = function (map, timeline, frameIndex) { + if (!map.hasOwnProperty("curve")) + return; + if (map.curve == "stepped") + timeline.setStepped(frameIndex); + else { + var curve = map.curve; + timeline.setCurve(frameIndex, curve, this.getValue(map, "c2", 0), this.getValue(map, "c3", 1), this.getValue(map, "c4", 1)); + } + }; + SkeletonJson.prototype.getValue = function (map, prop, defaultValue) { + return map[prop] !== undefined ? map[prop] : defaultValue; + }; + SkeletonJson.blendModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.BlendMode.Normal; + if (str == "additive") + return spine.BlendMode.Additive; + if (str == "multiply") + return spine.BlendMode.Multiply; + if (str == "screen") + return spine.BlendMode.Screen; + throw new Error("Unknown blend mode: " + str); + }; + SkeletonJson.positionModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "fixed") + return spine.PositionMode.Fixed; + if (str == "percent") + return spine.PositionMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.spacingModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "length") + return spine.SpacingMode.Length; + if (str == "fixed") + return spine.SpacingMode.Fixed; + if (str == "percent") + return spine.SpacingMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.rotateModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "tangent") + return spine.RotateMode.Tangent; + if (str == "chain") + return spine.RotateMode.Chain; + if (str == "chainscale") + return spine.RotateMode.ChainScale; + throw new Error("Unknown rotate mode: " + str); + }; + SkeletonJson.transformModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.TransformMode.Normal; + if (str == "onlytranslation") + return spine.TransformMode.OnlyTranslation; + if (str == "norotationorreflection") + return spine.TransformMode.NoRotationOrReflection; + if (str == "noscale") + return spine.TransformMode.NoScale; + if (str == "noscaleorreflection") + return spine.TransformMode.NoScaleOrReflection; + throw new Error("Unknown transform mode: " + str); + }; + return SkeletonJson; + }()); + spine.SkeletonJson = SkeletonJson; + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkinEntry = (function () { + function SkinEntry(slotIndex, name, attachment) { + this.slotIndex = slotIndex; + this.name = name; + this.attachment = attachment; + } + return SkinEntry; + }()); + spine.SkinEntry = SkinEntry; + var Skin = (function () { + function Skin(name) { + this.attachments = new Array(); + this.bones = Array(); + this.constraints = new Array(); + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + Skin.prototype.setAttachment = function (slotIndex, name, attachment) { + if (attachment == null) + throw new Error("attachment cannot be null."); + var attachments = this.attachments; + if (slotIndex >= attachments.length) + attachments.length = slotIndex + 1; + if (!attachments[slotIndex]) + attachments[slotIndex] = {}; + attachments[slotIndex][name] = attachment; + }; + Skin.prototype.addSkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + }; + Skin.prototype.copySkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + if (attachment.attachment == null) + continue; + if (attachment.attachment instanceof spine.MeshAttachment) { + attachment.attachment = attachment.attachment.newLinkedMesh(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + else { + attachment.attachment = attachment.attachment.copy(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + }; + Skin.prototype.getAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + return dictionary ? dictionary[name] : null; + }; + Skin.prototype.removeAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + if (dictionary) + dictionary[name] = null; + }; + Skin.prototype.getAttachments = function () { + var entries = new Array(); + for (var i = 0; i < this.attachments.length; i++) { + var slotAttachments = this.attachments[i]; + if (slotAttachments) { + for (var name_4 in slotAttachments) { + var attachment = slotAttachments[name_4]; + if (attachment) + entries.push(new SkinEntry(i, name_4, attachment)); + } + } + } + return entries; + }; + Skin.prototype.getAttachmentsForSlot = function (slotIndex, attachments) { + var slotAttachments = this.attachments[slotIndex]; + if (slotAttachments) { + for (var name_5 in slotAttachments) { + var attachment = slotAttachments[name_5]; + if (attachment) + attachments.push(new SkinEntry(slotIndex, name_5, attachment)); + } + } + }; + Skin.prototype.clear = function () { + this.attachments.length = 0; + this.bones.length = 0; + this.constraints.length = 0; + }; + Skin.prototype.attachAll = function (skeleton, oldSkin) { + var slotIndex = 0; + for (var i = 0; i < skeleton.slots.length; i++) { + var slot = skeleton.slots[i]; + var slotAttachment = slot.getAttachment(); + if (slotAttachment && slotIndex < oldSkin.attachments.length) { + var dictionary = oldSkin.attachments[slotIndex]; + for (var key in dictionary) { + var skinAttachment = dictionary[key]; + if (slotAttachment == skinAttachment) { + var attachment = this.getAttachment(slotIndex, key); + if (attachment != null) + slot.setAttachment(attachment); + break; + } + } + } + slotIndex++; + } + }; + return Skin; + }()); + spine.Skin = Skin; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Slot = (function () { + function Slot(data, bone) { + this.deform = new Array(); + if (data == null) + throw new Error("data cannot be null."); + if (bone == null) + throw new Error("bone cannot be null."); + this.data = data; + this.bone = bone; + this.color = new spine.Color(); + this.darkColor = data.darkColor == null ? null : new spine.Color(); + this.setToSetupPose(); + } + Slot.prototype.getSkeleton = function () { + return this.bone.skeleton; + }; + Slot.prototype.getAttachment = function () { + return this.attachment; + }; + Slot.prototype.setAttachment = function (attachment) { + if (this.attachment == attachment) + return; + this.attachment = attachment; + this.attachmentTime = this.bone.skeleton.time; + this.deform.length = 0; + }; + Slot.prototype.setAttachmentTime = function (time) { + this.attachmentTime = this.bone.skeleton.time - time; + }; + Slot.prototype.getAttachmentTime = function () { + return this.bone.skeleton.time - this.attachmentTime; + }; + Slot.prototype.setToSetupPose = function () { + this.color.setFromColor(this.data.color); + if (this.darkColor != null) + this.darkColor.setFromColor(this.data.darkColor); + if (this.data.attachmentName == null) + this.attachment = null; + else { + this.attachment = null; + this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + }; + return Slot; + }()); + spine.Slot = Slot; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SlotData = (function () { + function SlotData(index, name, boneData) { + this.color = new spine.Color(1, 1, 1, 1); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + if (boneData == null) + throw new Error("boneData cannot be null."); + this.index = index; + this.name = name; + this.boneData = boneData; + } + return SlotData; + }()); + spine.SlotData = SlotData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Texture = (function () { + function Texture(image) { + this._image = image; + } + Texture.prototype.getImage = function () { + return this._image; + }; + Texture.filterFromString = function (text) { + switch (text.toLowerCase()) { + case "nearest": return TextureFilter.Nearest; + case "linear": return TextureFilter.Linear; + case "mipmap": return TextureFilter.MipMap; + case "mipmapnearestnearest": return TextureFilter.MipMapNearestNearest; + case "mipmaplinearnearest": return TextureFilter.MipMapLinearNearest; + case "mipmapnearestlinear": return TextureFilter.MipMapNearestLinear; + case "mipmaplinearlinear": return TextureFilter.MipMapLinearLinear; + default: throw new Error("Unknown texture filter " + text); + } + }; + Texture.wrapFromString = function (text) { + switch (text.toLowerCase()) { + case "mirroredtepeat": return TextureWrap.MirroredRepeat; + case "clamptoedge": return TextureWrap.ClampToEdge; + case "repeat": return TextureWrap.Repeat; + default: throw new Error("Unknown texture wrap " + text); + } + }; + return Texture; + }()); + spine.Texture = Texture; + var TextureFilter; + (function (TextureFilter) { + TextureFilter[TextureFilter["Nearest"] = 9728] = "Nearest"; + TextureFilter[TextureFilter["Linear"] = 9729] = "Linear"; + TextureFilter[TextureFilter["MipMap"] = 9987] = "MipMap"; + TextureFilter[TextureFilter["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; + TextureFilter[TextureFilter["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; + TextureFilter[TextureFilter["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; + TextureFilter[TextureFilter["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; + })(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {})); + var TextureWrap; + (function (TextureWrap) { + TextureWrap[TextureWrap["MirroredRepeat"] = 33648] = "MirroredRepeat"; + TextureWrap[TextureWrap["ClampToEdge"] = 33071] = "ClampToEdge"; + TextureWrap[TextureWrap["Repeat"] = 10497] = "Repeat"; + })(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {})); + var TextureRegion = (function () { + function TextureRegion() { + this.u = 0; + this.v = 0; + this.u2 = 0; + this.v2 = 0; + this.width = 0; + this.height = 0; + this.rotate = false; + this.offsetX = 0; + this.offsetY = 0; + this.originalWidth = 0; + this.originalHeight = 0; + } + return TextureRegion; + }()); + spine.TextureRegion = TextureRegion; + var FakeTexture = (function (_super) { + __extends(FakeTexture, _super); + function FakeTexture() { + return _super !== null && _super.apply(this, arguments) || this; + } + FakeTexture.prototype.setFilters = function (minFilter, magFilter) { }; + FakeTexture.prototype.setWraps = function (uWrap, vWrap) { }; + FakeTexture.prototype.dispose = function () { }; + return FakeTexture; + }(Texture)); + spine.FakeTexture = FakeTexture; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TextureAtlas = (function () { + function TextureAtlas(atlasText, textureLoader) { + this.pages = new Array(); + this.regions = new Array(); + this.load(atlasText, textureLoader); + } + TextureAtlas.prototype.load = function (atlasText, textureLoader) { + if (textureLoader == null) + throw new Error("textureLoader cannot be null."); + var reader = new TextureAtlasReader(atlasText); + var tuple = new Array(4); + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) + break; + line = line.trim(); + if (line.length == 0) + page = null; + else if (!page) { + page = new TextureAtlasPage(); + page.name = line; + if (reader.readTuple(tuple) == 2) { + page.width = parseInt(tuple[0]); + page.height = parseInt(tuple[1]); + reader.readTuple(tuple); + } + reader.readTuple(tuple); + page.minFilter = spine.Texture.filterFromString(tuple[0]); + page.magFilter = spine.Texture.filterFromString(tuple[1]); + var direction = reader.readValue(); + page.uWrap = spine.TextureWrap.ClampToEdge; + page.vWrap = spine.TextureWrap.ClampToEdge; + if (direction == "x") + page.uWrap = spine.TextureWrap.Repeat; + else if (direction == "y") + page.vWrap = spine.TextureWrap.Repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.TextureWrap.Repeat; + page.texture = textureLoader(line); + page.texture.setFilters(page.minFilter, page.magFilter); + page.texture.setWraps(page.uWrap, page.vWrap); + page.width = page.texture.getImage().width; + page.height = page.texture.getImage().height; + this.pages.push(page); + } + else { + var region = new TextureAtlasRegion(); + region.name = line; + region.page = page; + var rotateValue = reader.readValue(); + if (rotateValue.toLocaleLowerCase() == "true") { + region.degrees = 90; + } + else if (rotateValue.toLocaleLowerCase() == "false") { + region.degrees = 0; + } + else { + region.degrees = parseFloat(rotateValue); + } + region.rotate = region.degrees == 90; + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } + else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + if (reader.readTuple(tuple) == 4) { + if (reader.readTuple(tuple) == 4) { + reader.readTuple(tuple); + } + } + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + region.index = parseInt(reader.readValue()); + region.texture = page.texture; + this.regions.push(region); + } + } + }; + TextureAtlas.prototype.findRegion = function (name) { + for (var i = 0; i < this.regions.length; i++) { + if (this.regions[i].name == name) { + return this.regions[i]; + } + } + return null; + }; + TextureAtlas.prototype.dispose = function () { + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].texture.dispose(); + } + }; + return TextureAtlas; + }()); + spine.TextureAtlas = TextureAtlas; + var TextureAtlasReader = (function () { + function TextureAtlasReader(text) { + this.index = 0; + this.lines = text.split(/\r\n|\r|\n/); + } + TextureAtlasReader.prototype.readLine = function () { + if (this.index >= this.lines.length) + return null; + return this.lines[this.index++]; + }; + TextureAtlasReader.prototype.readValue = function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + return line.substring(colon + 1).trim(); + }; + TextureAtlasReader.prototype.readTuple = function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + var i = 0, lastMatch = colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) + break; + tuple[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + } + tuple[i] = line.substring(lastMatch).trim(); + return i + 1; + }; + return TextureAtlasReader; + }()); + var TextureAtlasPage = (function () { + function TextureAtlasPage() { + } + return TextureAtlasPage; + }()); + spine.TextureAtlasPage = TextureAtlasPage; + var TextureAtlasRegion = (function (_super) { + __extends(TextureAtlasRegion, _super); + function TextureAtlasRegion() { + return _super !== null && _super.apply(this, arguments) || this; + } + return TextureAtlasRegion; + }(spine.TextureRegion)); + spine.TextureAtlasRegion = TextureAtlasRegion; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraint = (function () { + function TransformConstraint(data, skeleton) { + this.rotateMix = 0; + this.translateMix = 0; + this.scaleMix = 0; + this.shearMix = 0; + this.temp = new spine.Vector2(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + this.scaleMix = data.scaleMix; + this.shearMix = data.shearMix; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + TransformConstraint.prototype.isActive = function () { + return this.active; + }; + TransformConstraint.prototype.apply = function () { + this.update(); + }; + TransformConstraint.prototype.update = function () { + if (this.data.local) { + if (this.data.relative) + this.applyRelativeLocal(); + else + this.applyAbsoluteLocal(); + } + else { + if (this.data.relative) + this.applyRelativeWorld(); + else + this.applyAbsoluteWorld(); + } + }; + TransformConstraint.prototype.applyAbsoluteWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect; + var offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += (temp.x - bone.worldX) * translateMix; + bone.worldY += (temp.y - bone.worldY) * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + var ts = Math.sqrt(ta * ta + tc * tc); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s; + bone.a *= s; + bone.c *= s; + s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + ts = Math.sqrt(tb * tb + td * td); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var b = bone.b, d = bone.d; + var by = Math.atan2(d, b); + var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r = by + (r + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyRelativeWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += temp.x * translateMix; + bone.worldY += temp.y * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1; + bone.a *= s; + bone.c *= s; + s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var r = Math.atan2(td, tb) - Math.atan2(tc, ta); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + var b = bone.b, d = bone.d; + r = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyAbsoluteLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) { + var r = target.arotation - rotation + this.data.offsetRotation; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + rotation += r * rotateMix; + } + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax - x + this.data.offsetX) * translateMix; + y += (target.ay - y + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX; + if (scaleY > 0.00001) + scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY; + } + var shearY = bone.ashearY; + if (shearMix != 0) { + var r = target.ashearY - shearY + this.data.offsetShearY; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + bone.shearY += r * shearMix; + } + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + TransformConstraint.prototype.applyRelativeLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) + rotation += (target.arotation + this.data.offsetRotation) * rotateMix; + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax + this.data.offsetX) * translateMix; + y += (target.ay + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX *= ((target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix) + 1; + if (scaleY > 0.00001) + scaleY *= ((target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix) + 1; + } + var shearY = bone.ashearY; + if (shearMix != 0) + shearY += (target.ashearY + this.data.offsetShearY) * shearMix; + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + return TransformConstraint; + }()); + spine.TransformConstraint = TransformConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraintData = (function (_super) { + __extends(TransformConstraintData, _super); + function TransformConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.rotateMix = 0; + _this.translateMix = 0; + _this.scaleMix = 0; + _this.shearMix = 0; + _this.offsetRotation = 0; + _this.offsetX = 0; + _this.offsetY = 0; + _this.offsetScaleX = 0; + _this.offsetScaleY = 0; + _this.offsetShearY = 0; + _this.relative = false; + _this.local = false; + return _this; + } + return TransformConstraintData; + }(spine.ConstraintData)); + spine.TransformConstraintData = TransformConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Triangulator = (function () { + function Triangulator() { + this.convexPolygons = new Array(); + this.convexPolygonsIndices = new Array(); + this.indicesArray = new Array(); + this.isConcaveArray = new Array(); + this.triangles = new Array(); + this.polygonPool = new spine.Pool(function () { + return new Array(); + }); + this.polygonIndicesPool = new spine.Pool(function () { + return new Array(); + }); + } + Triangulator.prototype.triangulate = function (verticesArray) { + var vertices = verticesArray; + var vertexCount = verticesArray.length >> 1; + var indices = this.indicesArray; + indices.length = 0; + for (var i = 0; i < vertexCount; i++) + indices[i] = i; + var isConcave = this.isConcaveArray; + isConcave.length = 0; + for (var i = 0, n = vertexCount; i < n; ++i) + isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices); + var triangles = this.triangles; + triangles.length = 0; + while (vertexCount > 3) { + var previous = vertexCount - 1, i = 0, next = 1; + while (true) { + outer: if (!isConcave[i]) { + var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; + var p1x = vertices[p1], p1y = vertices[p1 + 1]; + var p2x = vertices[p2], p2y = vertices[p2 + 1]; + var p3x = vertices[p3], p3y = vertices[p3 + 1]; + for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) { + if (!isConcave[ii]) + continue; + var v = indices[ii] << 1; + var vx = vertices[v], vy = vertices[v + 1]; + if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) { + if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) { + if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) + break outer; + } + } + } + break; + } + if (next == 0) { + do { + if (!isConcave[i]) + break; + i--; + } while (i > 0); + break; + } + previous = i; + i = next; + next = (next + 1) % vertexCount; + } + triangles.push(indices[(vertexCount + i - 1) % vertexCount]); + triangles.push(indices[i]); + triangles.push(indices[(i + 1) % vertexCount]); + indices.splice(i, 1); + isConcave.splice(i, 1); + vertexCount--; + var previousIndex = (vertexCount + i - 1) % vertexCount; + var nextIndex = i == vertexCount ? 0 : i; + isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices); + isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices); + } + if (vertexCount == 3) { + triangles.push(indices[2]); + triangles.push(indices[0]); + triangles.push(indices[1]); + } + return triangles; + }; + Triangulator.prototype.decompose = function (verticesArray, triangles) { + var vertices = verticesArray; + var convexPolygons = this.convexPolygons; + this.polygonPool.freeAll(convexPolygons); + convexPolygons.length = 0; + var convexPolygonsIndices = this.convexPolygonsIndices; + this.polygonIndicesPool.freeAll(convexPolygonsIndices); + convexPolygonsIndices.length = 0; + var polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + var polygon = this.polygonPool.obtain(); + polygon.length = 0; + var fanBaseIndex = -1, lastWinding = 0; + for (var i = 0, n = triangles.length; i < n; i += 3) { + var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1; + var x1 = vertices[t1], y1 = vertices[t1 + 1]; + var x2 = vertices[t2], y2 = vertices[t2 + 1]; + var x3 = vertices[t3], y3 = vertices[t3 + 1]; + var merged = false; + if (fanBaseIndex == t1) { + var o = polygon.length - 4; + var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3); + var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]); + if (winding1 == lastWinding && winding2 == lastWinding) { + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(t3); + merged = true; + } + } + if (!merged) { + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + else { + this.polygonPool.free(polygon); + this.polygonIndicesPool.free(polygonIndices); + } + polygon = this.polygonPool.obtain(); + polygon.length = 0; + polygon.push(x1); + polygon.push(y1); + polygon.push(x2); + polygon.push(y2); + polygon.push(x3); + polygon.push(y3); + polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + polygonIndices.push(t1); + polygonIndices.push(t2); + polygonIndices.push(t3); + lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + } + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + for (var i = 0, n = convexPolygons.length; i < n; i++) { + polygonIndices = convexPolygonsIndices[i]; + if (polygonIndices.length == 0) + continue; + var firstIndex = polygonIndices[0]; + var lastIndex = polygonIndices[polygonIndices.length - 1]; + polygon = convexPolygons[i]; + var o = polygon.length - 4; + var prevPrevX = polygon[o], prevPrevY = polygon[o + 1]; + var prevX = polygon[o + 2], prevY = polygon[o + 3]; + var firstX = polygon[0], firstY = polygon[1]; + var secondX = polygon[2], secondY = polygon[3]; + var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + for (var ii = 0; ii < n; ii++) { + if (ii == i) + continue; + var otherIndices = convexPolygonsIndices[ii]; + if (otherIndices.length != 3) + continue; + var otherFirstIndex = otherIndices[0]; + var otherSecondIndex = otherIndices[1]; + var otherLastIndex = otherIndices[2]; + var otherPoly = convexPolygons[ii]; + var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1]; + if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) + continue; + var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); + var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY); + if (winding1 == winding && winding2 == winding) { + otherPoly.length = 0; + otherIndices.length = 0; + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(otherLastIndex); + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = 0; + } + } + } + for (var i = convexPolygons.length - 1; i >= 0; i--) { + polygon = convexPolygons[i]; + if (polygon.length == 0) { + convexPolygons.splice(i, 1); + this.polygonPool.free(polygon); + polygonIndices = convexPolygonsIndices[i]; + convexPolygonsIndices.splice(i, 1); + this.polygonIndicesPool.free(polygonIndices); + } + } + return convexPolygons; + }; + Triangulator.isConcave = function (index, vertexCount, vertices, indices) { + var previous = indices[(vertexCount + index - 1) % vertexCount] << 1; + var current = indices[index] << 1; + var next = indices[(index + 1) % vertexCount] << 1; + return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]); + }; + Triangulator.positiveArea = function (p1x, p1y, p2x, p2y, p3x, p3y) { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + }; + Triangulator.winding = function (p1x, p1y, p2x, p2y, p3x, p3y) { + var px = p2x - p1x, py = p2y - p1y; + return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; + }; + return Triangulator; + }()); + spine.Triangulator = Triangulator; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IntSet = (function () { + function IntSet() { + this.array = new Array(); + } + IntSet.prototype.add = function (value) { + var contains = this.contains(value); + this.array[value | 0] = value | 0; + return !contains; + }; + IntSet.prototype.contains = function (value) { + return this.array[value | 0] != undefined; + }; + IntSet.prototype.remove = function (value) { + this.array[value | 0] = undefined; + }; + IntSet.prototype.clear = function () { + this.array.length = 0; + }; + return IntSet; + }()); + spine.IntSet = IntSet; + var Color = (function () { + function Color(r, g, b, a) { + if (r === void 0) { r = 0; } + if (g === void 0) { g = 0; } + if (b === void 0) { b = 0; } + if (a === void 0) { a = 0; } + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + Color.prototype.set = function (r, g, b, a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + this.clamp(); + return this; + }; + Color.prototype.setFromColor = function (c) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + }; + Color.prototype.setFromString = function (hex) { + hex = hex.charAt(0) == '#' ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255.0; + this.g = parseInt(hex.substr(2, 2), 16) / 255.0; + this.b = parseInt(hex.substr(4, 2), 16) / 255.0; + this.a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0; + return this; + }; + Color.prototype.add = function (r, g, b, a) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + this.clamp(); + return this; + }; + Color.prototype.clamp = function () { + if (this.r < 0) + this.r = 0; + else if (this.r > 1) + this.r = 1; + if (this.g < 0) + this.g = 0; + else if (this.g > 1) + this.g = 1; + if (this.b < 0) + this.b = 0; + else if (this.b > 1) + this.b = 1; + if (this.a < 0) + this.a = 0; + else if (this.a > 1) + this.a = 1; + return this; + }; + Color.rgba8888ToColor = function (color, value) { + color.r = ((value & 0xff000000) >>> 24) / 255; + color.g = ((value & 0x00ff0000) >>> 16) / 255; + color.b = ((value & 0x0000ff00) >>> 8) / 255; + color.a = ((value & 0x000000ff)) / 255; + }; + Color.rgb888ToColor = function (color, value) { + color.r = ((value & 0x00ff0000) >>> 16) / 255; + color.g = ((value & 0x0000ff00) >>> 8) / 255; + color.b = ((value & 0x000000ff)) / 255; + }; + Color.WHITE = new Color(1, 1, 1, 1); + Color.RED = new Color(1, 0, 0, 1); + Color.GREEN = new Color(0, 1, 0, 1); + Color.BLUE = new Color(0, 0, 1, 1); + Color.MAGENTA = new Color(1, 0, 1, 1); + return Color; + }()); + spine.Color = Color; + var MathUtils = (function () { + function MathUtils() { + } + MathUtils.clamp = function (value, min, max) { + if (value < min) + return min; + if (value > max) + return max; + return value; + }; + MathUtils.cosDeg = function (degrees) { + return Math.cos(degrees * MathUtils.degRad); + }; + MathUtils.sinDeg = function (degrees) { + return Math.sin(degrees * MathUtils.degRad); + }; + MathUtils.signum = function (value) { + return value > 0 ? 1 : value < 0 ? -1 : 0; + }; + MathUtils.toInt = function (x) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + }; + MathUtils.cbrt = function (x) { + var y = Math.pow(Math.abs(x), 1 / 3); + return x < 0 ? -y : y; + }; + MathUtils.randomTriangular = function (min, max) { + return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); + }; + MathUtils.randomTriangularWith = function (min, max, mode) { + var u = Math.random(); + var d = max - min; + if (u <= (mode - min) / d) + return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + }; + MathUtils.PI = 3.1415927; + MathUtils.PI2 = MathUtils.PI * 2; + MathUtils.radiansToDegrees = 180 / MathUtils.PI; + MathUtils.radDeg = MathUtils.radiansToDegrees; + MathUtils.degreesToRadians = MathUtils.PI / 180; + MathUtils.degRad = MathUtils.degreesToRadians; + return MathUtils; + }()); + spine.MathUtils = MathUtils; + var Interpolation = (function () { + function Interpolation() { + } + Interpolation.prototype.apply = function (start, end, a) { + return start + (end - start) * this.applyInternal(a); + }; + return Interpolation; + }()); + spine.Interpolation = Interpolation; + var Pow = (function (_super) { + __extends(Pow, _super); + function Pow(power) { + var _this = _super.call(this) || this; + _this.power = 2; + _this.power = power; + return _this; + } + Pow.prototype.applyInternal = function (a) { + if (a <= 0.5) + return Math.pow(a * 2, this.power) / 2; + return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; + }; + return Pow; + }(Interpolation)); + spine.Pow = Pow; + var PowOut = (function (_super) { + __extends(PowOut, _super); + function PowOut(power) { + return _super.call(this, power) || this; + } + PowOut.prototype.applyInternal = function (a) { + return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; + }; + return PowOut; + }(Pow)); + spine.PowOut = PowOut; + var Utils = (function () { + function Utils() { + } + Utils.arrayCopy = function (source, sourceStart, dest, destStart, numElements) { + for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { + dest[j] = source[i]; + } + }; + Utils.setArraySize = function (array, size, value) { + if (value === void 0) { value = 0; } + var oldSize = array.length; + if (oldSize == size) + return array; + array.length = size; + if (oldSize < size) { + for (var i = oldSize; i < size; i++) + array[i] = value; + } + return array; + }; + Utils.ensureArrayCapacity = function (array, size, value) { + if (value === void 0) { value = 0; } + if (array.length >= size) + return array; + return Utils.setArraySize(array, size, value); + }; + Utils.newArray = function (size, defaultValue) { + var array = new Array(size); + for (var i = 0; i < size; i++) + array[i] = defaultValue; + return array; + }; + Utils.newFloatArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Float32Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.newShortArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Int16Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.toFloatArray = function (array) { + return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + }; + Utils.toSinglePrecision = function (value) { + return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + }; + Utils.webkit602BugfixHelper = function (alpha, blend) { + }; + Utils.contains = function (array, element, identity) { + if (identity === void 0) { identity = true; } + for (var i = 0; i < array.length; i++) { + if (array[i] == element) + return true; + } + return false; + }; + Utils.SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== "undefined"; + return Utils; + }()); + spine.Utils = Utils; + var DebugUtils = (function () { + function DebugUtils() { + } + DebugUtils.logBones = function (skeleton) { + for (var i = 0; i < skeleton.bones.length; i++) { + var bone = skeleton.bones[i]; + console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); + } + }; + return DebugUtils; + }()); + spine.DebugUtils = DebugUtils; + var Pool = (function () { + function Pool(instantiator) { + this.items = new Array(); + this.instantiator = instantiator; + } + Pool.prototype.obtain = function () { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + }; + Pool.prototype.free = function (item) { + if (item.reset) + item.reset(); + this.items.push(item); + }; + Pool.prototype.freeAll = function (items) { + for (var i = 0; i < items.length; i++) { + this.free(items[i]); + } + }; + Pool.prototype.clear = function () { + this.items.length = 0; + }; + return Pool; + }()); + spine.Pool = Pool; + var Vector2 = (function () { + function Vector2(x, y) { + if (x === void 0) { x = 0; } + if (y === void 0) { y = 0; } + this.x = x; + this.y = y; + } + Vector2.prototype.set = function (x, y) { + this.x = x; + this.y = y; + return this; + }; + Vector2.prototype.length = function () { + var x = this.x; + var y = this.y; + return Math.sqrt(x * x + y * y); + }; + Vector2.prototype.normalize = function () { + var len = this.length(); + if (len != 0) { + this.x /= len; + this.y /= len; + } + return this; + }; + return Vector2; + }()); + spine.Vector2 = Vector2; + var TimeKeeper = (function () { + function TimeKeeper() { + this.maxDelta = 0.064; + this.framesPerSecond = 0; + this.delta = 0; + this.totalTime = 0; + this.lastTime = Date.now() / 1000; + this.frameCount = 0; + this.frameTime = 0; + } + TimeKeeper.prototype.update = function () { + var now = Date.now() / 1000; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + if (this.delta > this.maxDelta) + this.delta = this.maxDelta; + this.lastTime = now; + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + }; + return TimeKeeper; + }()); + spine.TimeKeeper = TimeKeeper; + var WindowedMean = (function () { + function WindowedMean(windowSize) { + if (windowSize === void 0) { windowSize = 32; } + this.addedValues = 0; + this.lastValue = 0; + this.mean = 0; + this.dirty = true; + this.values = new Array(windowSize); + } + WindowedMean.prototype.hasEnoughData = function () { + return this.addedValues >= this.values.length; + }; + WindowedMean.prototype.addValue = function (value) { + if (this.addedValues < this.values.length) + this.addedValues++; + this.values[this.lastValue++] = value; + if (this.lastValue > this.values.length - 1) + this.lastValue = 0; + this.dirty = true; + }; + WindowedMean.prototype.getMean = function () { + if (this.hasEnoughData()) { + if (this.dirty) { + var mean = 0; + for (var i = 0; i < this.values.length; i++) { + mean += this.values[i]; + } + this.mean = mean / this.values.length; + this.dirty = false; + } + return this.mean; + } + else { + return 0; + } + }; + return WindowedMean; + }()); + spine.WindowedMean = WindowedMean; +})(spine || (spine = {})); +(function () { + if (!Math.fround) { + Math.fround = (function (array) { + return function (x) { + return array[0] = x, array[0]; + }; + })(new Float32Array(1)); + } +})(); +var spine; +(function (spine) { + var Attachment = (function () { + function Attachment(name) { + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + return Attachment; + }()); + spine.Attachment = Attachment; + var VertexAttachment = (function (_super) { + __extends(VertexAttachment, _super); + function VertexAttachment(name) { + var _this = _super.call(this, name) || this; + _this.id = (VertexAttachment.nextID++ & 65535) << 11; + _this.worldVerticesLength = 0; + _this.deformAttachment = _this; + return _this; + } + VertexAttachment.prototype.computeWorldVertices = function (slot, start, count, worldVertices, offset, stride) { + count = offset + (count >> 1) * stride; + var skeleton = slot.bone.skeleton; + var deformArray = slot.deform; + var vertices = this.vertices; + var bones = this.bones; + if (bones == null) { + if (deformArray.length > 0) + vertices = deformArray; + var bone = slot.bone; + var x = bone.worldX; + var y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) { + var vx = vertices[v_1], vy = vertices[v_1 + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + var v = 0, skip = 0; + for (var i = 0; i < start; i += 2) { + var n = bones[v]; + v += n + 1; + skip += n; + } + var skeletonBones = skeleton.bones; + if (deformArray.length == 0) { + for (var w = offset, b = skip * 3; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + else { + var deform = deformArray; + for (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + }; + VertexAttachment.prototype.copyTo = function (attachment) { + if (this.bones != null) { + attachment.bones = new Array(this.bones.length); + spine.Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); + } + else + attachment.bones = null; + if (this.vertices != null) { + attachment.vertices = spine.Utils.newFloatArray(this.vertices.length); + spine.Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); + } + else + attachment.vertices = null; + attachment.worldVerticesLength = this.worldVerticesLength; + attachment.deformAttachment = this.deformAttachment; + }; + VertexAttachment.nextID = 0; + return VertexAttachment; + }(Attachment)); + spine.VertexAttachment = VertexAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AttachmentType; + (function (AttachmentType) { + AttachmentType[AttachmentType["Region"] = 0] = "Region"; + AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox"; + AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh"; + AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh"; + AttachmentType[AttachmentType["Path"] = 4] = "Path"; + AttachmentType[AttachmentType["Point"] = 5] = "Point"; + AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping"; + })(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoundingBoxAttachment = (function (_super) { + __extends(BoundingBoxAttachment, _super); + function BoundingBoxAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + BoundingBoxAttachment.prototype.copy = function () { + var copy = new BoundingBoxAttachment(this.name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + }; + return BoundingBoxAttachment; + }(spine.VertexAttachment)); + spine.BoundingBoxAttachment = BoundingBoxAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var ClippingAttachment = (function (_super) { + __extends(ClippingAttachment, _super); + function ClippingAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.2275, 0.2275, 0.8078, 1); + return _this; + } + ClippingAttachment.prototype.copy = function () { + var copy = new ClippingAttachment(this.name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.color.setFromColor(this.color); + return copy; + }; + return ClippingAttachment; + }(spine.VertexAttachment)); + spine.ClippingAttachment = ClippingAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var MeshAttachment = (function (_super) { + __extends(MeshAttachment, _super); + function MeshAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + _this.tempColor = new spine.Color(0, 0, 0, 0); + return _this; + } + MeshAttachment.prototype.updateUVs = function () { + var regionUVs = this.regionUVs; + if (this.uvs == null || this.uvs.length != regionUVs.length) + this.uvs = spine.Utils.newFloatArray(regionUVs.length); + var uvs = this.uvs; + var n = this.uvs.length; + var u = this.region.u, v = this.region.v, width = 0, height = 0; + if (this.region instanceof spine.TextureAtlasRegion) { + var region = this.region; + var textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height; + switch (region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; + } + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } + else if (this.region == null) { + u = v = 0; + width = height = 1; + } + else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + }; + MeshAttachment.prototype.getParentMesh = function () { + return this.parentMesh; + }; + MeshAttachment.prototype.setParentMesh = function (parentMesh) { + this.parentMesh = parentMesh; + if (parentMesh != null) { + this.bones = parentMesh.bones; + this.vertices = parentMesh.vertices; + this.worldVerticesLength = parentMesh.worldVerticesLength; + this.regionUVs = parentMesh.regionUVs; + this.triangles = parentMesh.triangles; + this.hullLength = parentMesh.hullLength; + this.worldVerticesLength = parentMesh.worldVerticesLength; + } + }; + MeshAttachment.prototype.copy = function () { + if (this.parentMesh != null) + return this.newLinkedMesh(); + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + this.copyTo(copy); + copy.regionUVs = new Array(this.regionUVs.length); + spine.Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.uvs = new Array(this.uvs.length); + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); + copy.triangles = new Array(this.triangles.length); + spine.Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + if (this.edges != null) { + copy.edges = new Array(this.edges.length); + spine.Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + return copy; + }; + MeshAttachment.prototype.newLinkedMesh = function () { + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + copy.deformAttachment = this.deformAttachment; + copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this); + copy.updateUVs(); + return copy; + }; + return MeshAttachment; + }(spine.VertexAttachment)); + spine.MeshAttachment = MeshAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathAttachment = (function (_super) { + __extends(PathAttachment, _super); + function PathAttachment(name) { + var _this = _super.call(this, name) || this; + _this.closed = false; + _this.constantSpeed = false; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + PathAttachment.prototype.copy = function () { + var copy = new PathAttachment(this.name); + this.copyTo(copy); + copy.lengths = new Array(this.lengths.length); + spine.Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + }; + return PathAttachment; + }(spine.VertexAttachment)); + spine.PathAttachment = PathAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PointAttachment = (function (_super) { + __extends(PointAttachment, _super); + function PointAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.38, 0.94, 0, 1); + return _this; + } + PointAttachment.prototype.computeWorldPosition = function (bone, point) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + }; + PointAttachment.prototype.computeWorldRotation = function (bone) { + var cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation); + var x = cos * bone.a + sin * bone.b; + var y = cos * bone.c + sin * bone.d; + return Math.atan2(y, x) * spine.MathUtils.radDeg; + }; + PointAttachment.prototype.copy = function () { + var copy = new PointAttachment(this.name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + }; + return PointAttachment; + }(spine.VertexAttachment)); + spine.PointAttachment = PointAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var RegionAttachment = (function (_super) { + __extends(RegionAttachment, _super); + function RegionAttachment(name) { + var _this = _super.call(this, name) || this; + _this.x = 0; + _this.y = 0; + _this.scaleX = 1; + _this.scaleY = 1; + _this.rotation = 0; + _this.width = 0; + _this.height = 0; + _this.color = new spine.Color(1, 1, 1, 1); + _this.offset = spine.Utils.newFloatArray(8); + _this.uvs = spine.Utils.newFloatArray(8); + _this.tempColor = new spine.Color(1, 1, 1, 1); + return _this; + } + RegionAttachment.prototype.updateOffset = function () { + var regionScaleX = this.width / this.region.originalWidth * this.scaleX; + var regionScaleY = this.height / this.region.originalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY; + var localX2 = localX + this.region.width * regionScaleX; + var localY2 = localY + this.region.height * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[RegionAttachment.OX1] = localXCos - localYSin; + offset[RegionAttachment.OY1] = localYCos + localXSin; + offset[RegionAttachment.OX2] = localXCos - localY2Sin; + offset[RegionAttachment.OY2] = localY2Cos + localXSin; + offset[RegionAttachment.OX3] = localX2Cos - localY2Sin; + offset[RegionAttachment.OY3] = localY2Cos + localX2Sin; + offset[RegionAttachment.OX4] = localX2Cos - localYSin; + offset[RegionAttachment.OY4] = localYCos + localX2Sin; + }; + RegionAttachment.prototype.setRegion = function (region) { + this.region = region; + var uvs = this.uvs; + if (region.rotate) { + uvs[2] = region.u; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v; + uvs[0] = region.u2; + uvs[1] = region.v2; + } + else { + uvs[0] = region.u; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v2; + } + }; + RegionAttachment.prototype.computeWorldVertices = function (bone, worldVertices, offset, stride) { + var vertexOffset = this.offset; + var x = bone.worldX, y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var offsetX = 0, offsetY = 0; + offsetX = vertexOffset[RegionAttachment.OX1]; + offsetY = vertexOffset[RegionAttachment.OY1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX2]; + offsetY = vertexOffset[RegionAttachment.OY2]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX3]; + offsetY = vertexOffset[RegionAttachment.OY3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX4]; + offsetY = vertexOffset[RegionAttachment.OY4]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + }; + RegionAttachment.prototype.copy = function () { + var copy = new RegionAttachment(this.name); + copy.region = this.region; + copy.rendererObject = this.rendererObject; + copy.path = this.path; + copy.x = this.x; + copy.y = this.y; + copy.scaleX = this.scaleX; + copy.scaleY = this.scaleY; + copy.rotation = this.rotation; + copy.width = this.width; + copy.height = this.height; + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); + spine.Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); + copy.color.setFromColor(this.color); + return copy; + }; + RegionAttachment.OX1 = 0; + RegionAttachment.OY1 = 1; + RegionAttachment.OX2 = 2; + RegionAttachment.OY2 = 3; + RegionAttachment.OX3 = 4; + RegionAttachment.OY3 = 5; + RegionAttachment.OX4 = 6; + RegionAttachment.OY4 = 7; + RegionAttachment.X1 = 0; + RegionAttachment.Y1 = 1; + RegionAttachment.C1R = 2; + RegionAttachment.C1G = 3; + RegionAttachment.C1B = 4; + RegionAttachment.C1A = 5; + RegionAttachment.U1 = 6; + RegionAttachment.V1 = 7; + RegionAttachment.X2 = 8; + RegionAttachment.Y2 = 9; + RegionAttachment.C2R = 10; + RegionAttachment.C2G = 11; + RegionAttachment.C2B = 12; + RegionAttachment.C2A = 13; + RegionAttachment.U2 = 14; + RegionAttachment.V2 = 15; + RegionAttachment.X3 = 16; + RegionAttachment.Y3 = 17; + RegionAttachment.C3R = 18; + RegionAttachment.C3G = 19; + RegionAttachment.C3B = 20; + RegionAttachment.C3A = 21; + RegionAttachment.U3 = 22; + RegionAttachment.V3 = 23; + RegionAttachment.X4 = 24; + RegionAttachment.Y4 = 25; + RegionAttachment.C4R = 26; + RegionAttachment.C4G = 27; + RegionAttachment.C4B = 28; + RegionAttachment.C4A = 29; + RegionAttachment.U4 = 30; + RegionAttachment.V4 = 31; + return RegionAttachment; + }(spine.Attachment)); + spine.RegionAttachment = RegionAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var JitterEffect = (function () { + function JitterEffect(jitterX, jitterY) { + this.jitterX = 0; + this.jitterY = 0; + this.jitterX = jitterX; + this.jitterY = jitterY; + } + JitterEffect.prototype.begin = function (skeleton) { + }; + JitterEffect.prototype.transform = function (position, uv, light, dark) { + position.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + position.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + }; + JitterEffect.prototype.end = function () { + }; + return JitterEffect; + }()); + spine.JitterEffect = JitterEffect; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SwirlEffect = (function () { + function SwirlEffect(radius) { + this.centerX = 0; + this.centerY = 0; + this.radius = 0; + this.angle = 0; + this.worldX = 0; + this.worldY = 0; + this.radius = radius; + } + SwirlEffect.prototype.begin = function (skeleton) { + this.worldX = skeleton.x + this.centerX; + this.worldY = skeleton.y + this.centerY; + }; + SwirlEffect.prototype.transform = function (position, uv, light, dark) { + var radAngle = this.angle * spine.MathUtils.degreesToRadians; + var x = position.x - this.worldX; + var y = position.y - this.worldY; + var dist = Math.sqrt(x * x + y * y); + if (dist < this.radius) { + var theta = SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius); + var cos = Math.cos(theta); + var sin = Math.sin(theta); + position.x = cos * x - sin * y + this.worldX; + position.y = sin * x + cos * y + this.worldY; + } + }; + SwirlEffect.prototype.end = function () { + }; + SwirlEffect.interpolation = new spine.PowOut(2); + return SwirlEffect; + }()); + spine.SwirlEffect = SwirlEffect; +})(spine || (spine = {})); +//# sourceMappingURL=spine-core.js.map \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-core.js.map b/apps/module-ts/src/spine-ts/build/spine-core.js.map new file mode 100755 index 0000000..450d66f --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-core.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spine-core.js","sourceRoot":"","sources":["../core/src/Animation.ts","../core/src/AnimationState.ts","../core/src/AnimationStateData.ts","../core/src/AssetManager.ts","../core/src/AtlasAttachmentLoader.ts","../core/src/BlendMode.ts","../core/src/Bone.ts","../core/src/BoneData.ts","../core/src/ConstraintData.ts","../core/src/Event.ts","../core/src/EventData.ts","../core/src/IkConstraint.ts","../core/src/IkConstraintData.ts","../core/src/PathConstraint.ts","../core/src/PathConstraintData.ts","../core/src/SharedAssetManager.ts","../core/src/Skeleton.ts","../core/src/SkeletonBinary.ts","../core/src/SkeletonBounds.ts","../core/src/SkeletonClipping.ts","../core/src/SkeletonData.ts","../core/src/SkeletonJson.ts","../core/src/Skin.ts","../core/src/Slot.ts","../core/src/SlotData.ts","../core/src/Texture.ts","../core/src/TextureAtlas.ts","../core/src/TransformConstraint.ts","../core/src/TransformConstraintData.ts","../core/src/Triangulator.ts","../core/src/Updatable.ts","../core/src/Utils.ts","../core/src/VertexEffect.ts","../core/src/polyfills.ts","../core/src/attachments/Attachment.ts","../core/src/attachments/AttachmentLoader.ts","../core/src/attachments/AttachmentType.ts","../core/src/attachments/BoundingBoxAttachment.ts","../core/src/attachments/ClippingAttachment.ts","../core/src/attachments/MeshAttachment.ts","../core/src/attachments/PathAttachment.ts","../core/src/attachments/PointAttachment.ts","../core/src/attachments/RegionAttachment.ts","../core/src/vertexeffects/JitterEffect.ts","../core/src/vertexeffects/SwirlEffect.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-player.d.ts b/apps/module-ts/src/spine-ts/build/spine-player.d.ts new file mode 100755 index 0000000..d2fa5e7 --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-player.d.ts @@ -0,0 +1,1906 @@ +/// +declare module spine { + class Animation { + name: string; + timelines: Array; + timelineIds: Array; + duration: number; + constructor(name: string, timelines: Array, duration: number); + hasTimeline(id: number): boolean; + apply(skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + static binarySearch(values: ArrayLike, target: number, step?: number): number; + static linearSearch(values: ArrayLike, target: number, step: number): number; + } + interface Timeline { + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + getPropertyId(): number; + } + enum MixBlend { + setup = 0, + first = 1, + replace = 2, + add = 3 + } + enum MixDirection { + mixIn = 0, + mixOut = 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, degrees: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, x: number, y: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ScaleTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ShearTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class AttachmentTimeline implements Timeline { + slotIndex: number; + frames: ArrayLike; + attachmentNames: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, attachmentName: string): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string): void; + } + class DeformTimeline extends CurveTimeline { + slotIndex: number; + attachment: VertexAttachment; + frames: ArrayLike; + frameVertices: Array>; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, vertices: ArrayLike): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class EventTimeline implements Timeline { + frames: ArrayLike; + events: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, event: Event): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class DrawOrderTimeline implements Timeline { + frames: ArrayLike; + drawOrders: Array>; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, drawOrder: Array): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class IkConstraintTimeline extends CurveTimeline { + static ENTRIES: number; + static PREV_TIME: number; + static PREV_MIX: number; + static PREV_SOFTNESS: number; + static PREV_BEND_DIRECTION: number; + static PREV_COMPRESS: number; + static PREV_STRETCH: number; + static MIX: number; + static SOFTNESS: number; + static BEND_DIRECTION: number; + static COMPRESS: number; + static STRETCH: number; + ikConstraintIndex: number; + frames: ArrayLike; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, mix: number, softness: number, bendDirection: number, compress: boolean, stretch: boolean): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, value: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class PathConstraintSpacingTimeline extends PathConstraintPositionTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, rotateMix: number, translateMix: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } +} +declare module spine { + class AnimationState { + static emptyAnimation: Animation; + static SUBSEQUENT: number; + static FIRST: number; + static HOLD_SUBSEQUENT: number; + static HOLD_FIRST: number; + static HOLD_MIX: number; + static SETUP: number; + static CURRENT: number; + data: AnimationStateData; + tracks: TrackEntry[]; + timeScale: number; + unkeyedState: number; + events: Event[]; + listeners: AnimationStateListener[]; + queue: EventQueue; + propertyIDs: IntSet; + animationsChanged: boolean; + trackEntryPool: Pool; + constructor(data: AnimationStateData); + update(delta: number): void; + updateMixingFrom(to: TrackEntry, delta: number): boolean; + apply(skeleton: Skeleton): boolean; + applyMixingFrom(to: TrackEntry, skeleton: Skeleton, blend: MixBlend): number; + applyAttachmentTimeline(timeline: AttachmentTimeline, skeleton: Skeleton, time: number, blend: MixBlend, attachments: boolean): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string, attachments: boolean): void; + applyRotateTimeline(timeline: Timeline, skeleton: Skeleton, time: number, alpha: number, blend: MixBlend, timelinesRotation: Array, 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; + computeHold(entry: TrackEntry): void; + getCurrent(trackIndex: number): TrackEntry; + addListener(listener: AnimationStateListener): void; + removeListener(listener: AnimationStateListener): void; + clearListeners(): void; + clearListenerNotifications(): void; + } + class TrackEntry { + animation: Animation; + next: TrackEntry; + mixingFrom: TrackEntry; + mixingTo: TrackEntry; + listener: AnimationStateListener; + trackIndex: number; + loop: boolean; + holdPrevious: 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; + mixBlend: MixBlend; + timelineMode: number[]; + timelineHoldMix: TrackEntry[]; + timelinesRotation: number[]; + reset(): void; + getAnimationTime(): number; + setAnimationLast(animationLast: number): void; + isComplete(): boolean; + resetRotationDirections(): void; + } + class EventQueue { + objects: Array; + 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 AnimationStateListener { + 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 AnimationStateAdapter implements AnimationStateListener { + 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; + 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; + private rawDataUris; + constructor(textureLoader: (image: HTMLImageElement) => any, pathPrefix?: string); + private downloadText; + private downloadBinary; + setRawDataURI(path: string, data: string): void; + loadBinary(path: string, success?: (path: string, binary: Uint8Array) => void, error?: (path: string, error: string) => void): void; + 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; + loadTextureAtlas(path: string, success?: (path: string, atlas: TextureAtlas) => 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; + } +} +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; + } +} +declare module spine { + 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; + c: number; + d: number; + worldY: number; + worldX: number; + sorted: boolean; + active: boolean; + constructor(data: BoneData, skeleton: Skeleton, parent: Bone); + isActive(): boolean; + 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; + skinRequired: boolean; + color: Color; + constructor(index: number, name: string, parent: BoneData); + } + enum TransformMode { + Normal = 0, + OnlyTranslation = 1, + NoRotationOrReflection = 2, + NoScale = 3, + NoScaleOrReflection = 4 + } +} +declare module spine { + abstract class ConstraintData { + name: string; + order: number; + skinRequired: boolean; + constructor(name: string, order: number, skinRequired: boolean); + } +} +declare module spine { + class Event { + data: EventData; + intValue: number; + floatValue: number; + stringValue: string; + time: number; + volume: number; + balance: number; + constructor(time: number, data: EventData); + } +} +declare module spine { + class EventData { + name: string; + intValue: number; + floatValue: number; + stringValue: string; + audioPath: string; + volume: number; + balance: number; + constructor(name: string); + } +} +declare module spine { + class IkConstraint implements Updatable { + data: IkConstraintData; + bones: Array; + target: Bone; + bendDirection: number; + compress: boolean; + stretch: boolean; + mix: number; + softness: number; + active: boolean; + constructor(data: IkConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + apply1(bone: Bone, targetX: number, targetY: number, compress: boolean, stretch: boolean, uniform: boolean, alpha: number): void; + apply2(parent: Bone, child: Bone, targetX: number, targetY: number, bendDir: number, stretch: boolean, softness: number, alpha: number): void; + } +} +declare module spine { + class IkConstraintData extends ConstraintData { + bones: BoneData[]; + target: BoneData; + bendDirection: number; + compress: boolean; + stretch: boolean; + uniform: boolean; + mix: number; + softness: number; + constructor(name: string); + } +} +declare module spine { + class PathConstraint implements Updatable { + static NONE: number; + static BEFORE: number; + static AFTER: number; + static epsilon: number; + data: PathConstraintData; + bones: Array; + target: Slot; + position: number; + spacing: number; + rotateMix: number; + translateMix: number; + spaces: number[]; + positions: number[]; + world: number[]; + curves: number[]; + lengths: number[]; + segments: number[]; + active: boolean; + constructor(data: PathConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + computeWorldPositions(path: PathAttachment, spacesCount: number, tangents: boolean, percentPosition: boolean, percentSpacing: boolean): number[]; + addBeforePosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addAfterPosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addCurvePosition(p: number, x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, out: Array, o: number, tangents: boolean): void; + } +} +declare module spine { + class PathConstraintData extends ConstraintData { + 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 + } +} +declare module spine { + class SharedAssetManager implements Disposable { + private pathPrefix; + private clientAssets; + private queuedAssets; + private rawAssets; + private errors; + constructor(pathPrefix?: string); + private queueAsset; + loadText(clientId: string, path: string): void; + loadJson(clientId: string, path: string): void; + loadTexture(clientId: string, textureLoader: (image: HTMLImageElement | ImageBitmap) => any, path: string): void; + get(clientId: string, path: string): any; + private updateClientAssets; + isLoadingComplete(clientId: string): boolean; + dispose(): void; + hasErrors(): boolean; + getErrors(): Map; + } +} +declare module spine { + class Skeleton { + data: SkeletonData; + bones: Array; + slots: Array; + drawOrder: Array; + ikConstraints: Array; + transformConstraints: Array; + pathConstraints: Array; + _updateCache: Updatable[]; + updateCacheReset: Updatable[]; + skin: Skin; + color: Color; + time: number; + scaleX: number; + scaleY: number; + 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): 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): void; + update(delta: number): void; + } +} +declare module spine { + class SkeletonBinary { + static AttachmentTypeValues: number[]; + static TransformModeValues: TransformMode[]; + static PositionModeValues: PositionMode[]; + static SpacingModeValues: SpacingMode[]; + static RotateModeValues: RotateMode[]; + static BlendModeValues: BlendMode[]; + static BONE_ROTATE: number; + static BONE_TRANSLATE: number; + static BONE_SCALE: number; + static BONE_SHEAR: number; + static SLOT_ATTACHMENT: number; + static SLOT_COLOR: number; + static SLOT_TWO_COLOR: number; + static PATH_POSITION: number; + static PATH_SPACING: number; + static PATH_MIX: number; + static CURVE_LINEAR: number; + static CURVE_STEPPED: number; + static CURVE_BEZIER: number; + scale: number; + attachmentLoader: AttachmentLoader; + private linkedMeshes; + constructor(attachmentLoader: AttachmentLoader); + readSkeletonData(binary: Uint8Array): SkeletonData; + private readSkin; + private readAttachment; + private readVertices; + private readFloatArray; + private readShortArray; + private readAnimation; + private readCurve; + setCurve(timeline: CurveTimeline, frameIndex: number, cx1: number, cy1: number, cx2: number, cy2: number): void; + } +} +declare module spine { + class SkeletonBounds { + minX: number; + minY: number; + maxX: number; + maxY: number; + boundingBoxes: BoundingBoxAttachment[]; + polygons: ArrayLike[]; + 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, x: number, y: number): boolean; + intersectsSegment(x1: number, y1: number, x2: number, y2: number): BoundingBoxAttachment; + intersectsSegmentPolygon(polygon: ArrayLike, x1: number, y1: number, x2: number, y2: number): boolean; + getPolygon(boundingBox: BoundingBoxAttachment): ArrayLike; + 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, verticesLength: number, triangles: ArrayLike, trianglesLength: number, uvs: ArrayLike, light: Color, dark: Color, twoColor: boolean): void; + clip(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, clippingArea: Array, output: Array): boolean; + static makeClockwise(polygon: ArrayLike): 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[]; + x: number; + y: number; + width: number; + height: number; + version: string; + hash: string; + fps: number; + imagesPath: string; + audioPath: 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; + } +} +declare module spine { + class SkinEntry { + slotIndex: number; + name: string; + attachment: Attachment; + constructor(slotIndex: number, name: string, attachment: Attachment); + } + class Skin { + name: string; + attachments: Map[]; + bones: BoneData[]; + constraints: ConstraintData[]; + constructor(name: string); + setAttachment(slotIndex: number, name: string, attachment: Attachment): void; + addSkin(skin: Skin): void; + copySkin(skin: Skin): void; + getAttachment(slotIndex: number, name: string): Attachment; + removeAttachment(slotIndex: number, name: string): void; + getAttachments(): Array; + getAttachmentsForSlot(slotIndex: number, attachments: Array): void; + clear(): void; + attachAll(skeleton: Skeleton, oldSkin: Skin): void; + } +} +declare module spine { + class Slot { + data: SlotData; + bone: Bone; + color: Color; + darkColor: Color; + attachment: Attachment; + private attachmentTime; + attachmentState: number; + deform: number[]; + constructor(data: SlotData, bone: Bone); + getSkeleton(): Skeleton; + 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); + } +} +declare module spine { + abstract class Texture { + protected _image: HTMLImageElement | ImageBitmap; + constructor(image: HTMLImageElement | ImageBitmap); + getImage(): HTMLImageElement | ImageBitmap; + 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; + } + class FakeTexture extends Texture { + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void; + dispose(): void; + } +} +declare module spine { + class TextureAtlas implements Disposable { + pages: TextureAtlasPage[]; + regions: TextureAtlasRegion[]; + constructor(atlasText: string, textureLoader: (path: string) => any); + private load; + 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; + degrees: number; + texture: Texture; + } +} +declare module spine { + class TransformConstraint implements Updatable { + data: TransformConstraintData; + bones: Array; + target: Bone; + rotateMix: number; + translateMix: number; + scaleMix: number; + shearMix: number; + temp: Vector2; + active: boolean; + constructor(data: TransformConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + applyAbsoluteWorld(): void; + applyRelativeWorld(): void; + applyAbsoluteLocal(): void; + applyRelativeLocal(): void; + } +} +declare module spine { + class TransformConstraintData extends ConstraintData { + 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): Array; + decompose(verticesArray: Array, triangles: Array): Array>; + private static isConcave; + private static positiveArea; + private static winding; + } +} +declare module spine { + interface Updatable { + update(): void; + isActive(): boolean; + } +} +declare module spine { + interface Map { + [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; + static rgba8888ToColor(color: Color, value: number): void; + static rgb888ToColor(color: Color, value: number): void; + } + 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(source: ArrayLike, sourceStart: number, dest: ArrayLike, destStart: number, numElements: number): void; + static setArraySize(array: Array, size: number, value?: any): Array; + static ensureArrayCapacity(array: Array, size: number, value?: any): Array; + static newArray(size: number, defaultValue: T): Array; + static newFloatArray(size: number): ArrayLike; + static newShortArray(size: number): ArrayLike; + static toFloatArray(array: Array): number[] | Float32Array; + static toSinglePrecision(value: number): number; + static webkit602BugfixHelper(alpha: number, blend: MixBlend): void; + static contains(array: Array, element: T, identity?: boolean): boolean; + } + class DebugUtils { + static logBones(skeleton: Skeleton): void; + } + class Pool { + private items; + private instantiator; + constructor(instantiator: () => T); + obtain(): T; + free(item: T): void; + freeAll(items: ArrayLike): 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 { + length: number; + [n: number]: T; + } + class WindowedMean { + values: Array; + 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 Math { + fround(n: number): number; +} +declare module spine { + abstract class Attachment { + name: string; + constructor(name: string); + abstract copy(): Attachment; + } + abstract class VertexAttachment extends Attachment { + private static nextID; + id: number; + bones: Array; + vertices: ArrayLike; + worldVerticesLength: number; + deformAttachment: VertexAttachment; + constructor(name: string); + computeWorldVertices(slot: Slot, start: number, count: number, worldVertices: ArrayLike, offset: number, stride: number): void; + copyTo(attachment: VertexAttachment): void; + } +} +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; + } +} +declare module spine { + enum AttachmentType { + Region = 0, + BoundingBox = 1, + Mesh = 2, + LinkedMesh = 3, + Path = 4, + Point = 5, + Clipping = 6 + } +} +declare module spine { + class BoundingBoxAttachment extends VertexAttachment { + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class ClippingAttachment extends VertexAttachment { + endSlot: SlotData; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class MeshAttachment extends VertexAttachment { + region: TextureRegion; + path: string; + regionUVs: ArrayLike; + uvs: ArrayLike; + triangles: Array; + color: Color; + width: number; + height: number; + hullLength: number; + edges: Array; + private parentMesh; + tempColor: Color; + constructor(name: string); + updateUVs(): void; + getParentMesh(): MeshAttachment; + setParentMesh(parentMesh: MeshAttachment): void; + copy(): Attachment; + newLinkedMesh(): MeshAttachment; + } +} +declare module spine { + class PathAttachment extends VertexAttachment { + lengths: Array; + closed: boolean; + constantSpeed: boolean; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +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; + copy(): Attachment; + } +} +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; + uvs: ArrayLike; + tempColor: Color; + constructor(name: string); + updateOffset(): void; + setRegion(region: TextureRegion): void; + computeWorldVertices(bone: Bone, worldVertices: ArrayLike, offset: number, stride: number): void; + copy(): Attachment; + } +} +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; + } +} +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; + } +} +declare module spine.webgl { + 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; + } +} +declare module spine.webgl { + class GLTexture extends Texture implements Disposable, Restorable { + private context; + private texture; + private boundUnit; + private useMipMaps; + static DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL: boolean; + constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, image: HTMLImageElement | ImageBitmap, useMipMaps?: boolean); + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + static validateMagFilter(magFilter: TextureFilter): TextureFilter.Nearest | TextureFilter.Linear; + 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; + private listeners; + constructor(element: HTMLElement); + private setupCallbacks; + 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; + } +} +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): 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): void; + setIndices(indices: Array): 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, indices: Array): 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; + skeletonRenderer: SkeletonRenderer; + skeletonDebugRenderer: SkeletonDebugRenderer; + private QUAD; + private QUAD_TRIANGLES; + private WHITE; + constructor(canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean); + begin(): void; + drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean, slotRangeStart?: number, slotRangeEnd?: number): void; + drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array): void; + drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void; + drawTextureUV(texture: GLTexture, x: number, y: number, width: number, height: number, u: number, v: number, u2: number, v2: 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, 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; + 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 vsSource; + private fs; + private fsSource; + private program; + private tmp2x2; + private tmp3x3; + private tmp4x4; + getProgram(): WebGLProgram; + getVertexShader(): string; + getFragmentShader(): string; + getVertexShaderSource(): string; + getFragmentSource(): string; + constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, vertexShader: string, fragmentShader: string); + private compile; + private compileShader; + private compileProgram; + 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): void; + setUniform3x3f(uniform: string, value: ArrayLike): void; + setUniform4x4f(uniform: string, value: ArrayLike): 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, 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; + end(): void; + private flush; + private check; + 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): 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, slotRangeStart?: number, slotRangeEnd?: number): 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; + } +} +declare module spine.webgl { + class ManagedWebGLRenderingContext { + canvas: HTMLCanvasElement | OffscreenCanvas; + gl: WebGLRenderingContext; + private restorables; + constructor(canvasOrContext: HTMLCanvasElement | WebGLRenderingContext | EventTarget | WebGL2RenderingContext, contextConfig?: any); + private setupCanvas; + 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; + } +} +declare module spine { + interface Viewport { + x: number; + y: number; + width: number; + height: number; + padLeft: string | number; + padRight: string | number; + padTop: string | number; + padBottom: string | number; + } + interface SpinePlayerConfig { + jsonUrl: string; + skelUrl: string; + atlasUrl: string; + rawDataURIs: Map; + animation: string; + animations: string[]; + defaultMix: number; + skin: string; + skins: string[]; + premultipliedAlpha: boolean; + showControls: boolean; + debug: { + bones: boolean; + regions: boolean; + meshes: boolean; + bounds: boolean; + paths: boolean; + clipping: boolean; + points: boolean; + hulls: boolean; + }; + viewport: { + x: number; + y: number; + width: number; + height: number; + padLeft: string | number; + padRight: string | number; + padTop: string | number; + padBottom: string | number; + animations: Map; + debugRender: boolean; + transitionTime: number; + }; + alpha: boolean; + backgroundColor: string; + backgroundImage: { + url: string; + x: number; + y: number; + width: number; + height: number; + }; + fullScreenBackgroundColor: string; + controlBones: string[]; + success: (widget: SpinePlayer) => void; + error: (widget: SpinePlayer, msg: string) => void; + } + class SpinePlayer { + private config; + static HOVER_COLOR_INNER: Color; + static HOVER_COLOR_OUTER: Color; + static NON_HOVER_COLOR_INNER: Color; + static NON_HOVER_COLOR_OUTER: Color; + private sceneRenderer; + private dom; + private playerControls; + private canvas; + private timelineSlider; + private playButton; + private skinButton; + private animationButton; + private context; + private loadingScreen; + private assetManager; + loaded: boolean; + skeleton: Skeleton; + animationState: AnimationState; + private paused; + private playTime; + private speed; + private time; + private animationViewports; + private currentViewport; + private previousViewport; + private viewportTransitionStart; + private selectedBones; + private parent; + private stopRequestAnimationFrame; + constructor(parent: HTMLElement | string, config: SpinePlayerConfig); + validateConfig(config: SpinePlayerConfig): SpinePlayerConfig; + showError(error: string): void; + render(): HTMLElement; + private lastPopup; + showSpeedDialog(speedButton: HTMLElement): void; + showAnimationsDialog(animationsButton: HTMLElement): void; + showSkinsDialog(skinButton: HTMLElement): void; + showSettingsDialog(settingsButton: HTMLElement): void; + drawFrame(requestNextFrame?: boolean): void; + scale(sourceWidth: number, sourceHeight: number, targetWidth: number, targetHeight: number): Vector2; + loadSkeleton(): void; + private cancelId; + setupInput(): void; + private play; + private pause; + setAnimation(animation: string, loop?: boolean): void; + private percentageToWorldUnit; + private calculateAnimationViewport; + stopRendering(): void; + } +} +declare function CodeMirror(el: Element, config: any): void; +declare module spine { + class SpinePlayerEditor { + private static DEFAULT_CODE; + private prefix; + private postfix; + private code; + private player; + constructor(parent: HTMLElement); + private render; + setPreAndPostfix(prefix: string, postfix: string): void; + setCode(code: string): void; + private timerId; + startPlayer(): void; + } +} diff --git a/apps/module-ts/src/spine-ts/build/spine-player.js b/apps/module-ts/src/spine-ts/build/spine-player.js new file mode 100755 index 0000000..12dc99a --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-player.js @@ -0,0 +1,11916 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var spine; +(function (spine) { + var Animation = (function () { + function Animation(name, timelines, duration) { + if (name == null) + throw new Error("name cannot be null."); + if (timelines == null) + throw new Error("timelines cannot be null."); + this.name = name; + this.timelines = timelines; + this.timelineIds = []; + for (var i = 0; i < timelines.length; i++) + this.timelineIds[timelines[i].getPropertyId()] = true; + this.duration = duration; + } + Animation.prototype.hasTimeline = function (id) { + return this.timelineIds[id] == true; + }; + Animation.prototype.apply = function (skeleton, lastTime, time, loop, events, alpha, blend, direction) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (loop && this.duration != 0) { + time %= this.duration; + if (lastTime > 0) + lastTime %= this.duration; + } + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction); + }; + Animation.binarySearch = function (values, target, step) { + if (step === void 0) { step = 1; } + var low = 0; + var high = values.length / step - 2; + if (high == 0) + return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) + return (low + 1) * step; + current = (low + high) >>> 1; + } + }; + Animation.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) + return i; + return -1; + }; + return Animation; + }()); + spine.Animation = Animation; + var MixBlend; + (function (MixBlend) { + MixBlend[MixBlend["setup"] = 0] = "setup"; + MixBlend[MixBlend["first"] = 1] = "first"; + MixBlend[MixBlend["replace"] = 2] = "replace"; + MixBlend[MixBlend["add"] = 3] = "add"; + })(MixBlend = spine.MixBlend || (spine.MixBlend = {})); + var MixDirection; + (function (MixDirection) { + MixDirection[MixDirection["mixIn"] = 0] = "mixIn"; + MixDirection[MixDirection["mixOut"] = 1] = "mixOut"; + })(MixDirection = spine.MixDirection || (spine.MixDirection = {})); + var TimelineType; + (function (TimelineType) { + TimelineType[TimelineType["rotate"] = 0] = "rotate"; + TimelineType[TimelineType["translate"] = 1] = "translate"; + TimelineType[TimelineType["scale"] = 2] = "scale"; + TimelineType[TimelineType["shear"] = 3] = "shear"; + TimelineType[TimelineType["attachment"] = 4] = "attachment"; + TimelineType[TimelineType["color"] = 5] = "color"; + TimelineType[TimelineType["deform"] = 6] = "deform"; + TimelineType[TimelineType["event"] = 7] = "event"; + TimelineType[TimelineType["drawOrder"] = 8] = "drawOrder"; + TimelineType[TimelineType["ikConstraint"] = 9] = "ikConstraint"; + TimelineType[TimelineType["transformConstraint"] = 10] = "transformConstraint"; + TimelineType[TimelineType["pathConstraintPosition"] = 11] = "pathConstraintPosition"; + TimelineType[TimelineType["pathConstraintSpacing"] = 12] = "pathConstraintSpacing"; + TimelineType[TimelineType["pathConstraintMix"] = 13] = "pathConstraintMix"; + TimelineType[TimelineType["twoColor"] = 14] = "twoColor"; + })(TimelineType = spine.TimelineType || (spine.TimelineType = {})); + var CurveTimeline = (function () { + function CurveTimeline(frameCount) { + if (frameCount <= 0) + throw new Error("frameCount must be > 0: " + frameCount); + this.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE); + } + CurveTimeline.prototype.getFrameCount = function () { + return this.curves.length / CurveTimeline.BEZIER_SIZE + 1; + }; + CurveTimeline.prototype.setLinear = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR; + }; + CurveTimeline.prototype.setStepped = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED; + }; + CurveTimeline.prototype.getCurveType = function (frameIndex) { + var index = frameIndex * CurveTimeline.BEZIER_SIZE; + if (index == this.curves.length) + return CurveTimeline.LINEAR; + var type = this.curves[index]; + if (type == CurveTimeline.LINEAR) + return CurveTimeline.LINEAR; + if (type == CurveTimeline.STEPPED) + return CurveTimeline.STEPPED; + return CurveTimeline.BEZIER; + }; + CurveTimeline.prototype.setCurve = function (frameIndex, cx1, cy1, cx2, cy2) { + var tmpx = (-cx1 * 2 + cx2) * 0.03, tmpy = (-cy1 * 2 + cy2) * 0.03; + var dddfx = ((cx1 - cx2) * 3 + 1) * 0.006, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006; + var ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy; + var dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667, dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var curves = this.curves; + curves[i++] = CurveTimeline.BEZIER; + var x = dfx, y = dfy; + for (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + }; + CurveTimeline.prototype.getCurvePercent = function (frameIndex, percent) { + percent = spine.MathUtils.clamp(percent, 0, 1); + var curves = this.curves; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var type = curves[i]; + if (type == CurveTimeline.LINEAR) + return percent; + if (type == CurveTimeline.STEPPED) + return 0; + i++; + var x = 0; + for (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + x = curves[i]; + if (x >= percent) { + var prevX = void 0, prevY = void 0; + if (i == start) { + prevX = 0; + prevY = 0; + } + else { + prevX = curves[i - 2]; + prevY = curves[i - 1]; + } + return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX); + } + } + var y = curves[i - 1]; + return y + (1 - y) * (percent - x) / (1 - x); + }; + CurveTimeline.LINEAR = 0; + CurveTimeline.STEPPED = 1; + CurveTimeline.BEZIER = 2; + CurveTimeline.BEZIER_SIZE = 10 * 2 - 1; + return CurveTimeline; + }()); + spine.CurveTimeline = CurveTimeline; + var RotateTimeline = (function (_super) { + __extends(RotateTimeline, _super); + function RotateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount << 1); + return _this; + } + RotateTimeline.prototype.getPropertyId = function () { + return (TimelineType.rotate << 24) + this.boneIndex; + }; + RotateTimeline.prototype.setFrame = function (frameIndex, time, degrees) { + frameIndex <<= 1; + this.frames[frameIndex] = time; + this.frames[frameIndex + RotateTimeline.ROTATION] = degrees; + }; + RotateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + return; + case MixBlend.first: + var r_1 = bone.data.rotation - bone.rotation; + bone.rotation += (r_1 - (16384 - ((16384.499999999996 - r_1 / 360) | 0)) * 360) * alpha; + } + return; + } + if (time >= frames[frames.length - RotateTimeline.ENTRIES]) { + var r_2 = frames[frames.length + RotateTimeline.PREV_ROTATION]; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + r_2 * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r_2 += bone.data.rotation - bone.rotation; + r_2 -= (16384 - ((16384.499999999996 - r_2 / 360) | 0)) * 360; + case MixBlend.add: + bone.rotation += r_2 * alpha; + } + return; + } + var frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES); + var prevRotation = frames[frame + RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime)); + var r = frames[frame + RotateTimeline.ROTATION] - prevRotation; + r = prevRotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * percent; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r += bone.data.rotation - bone.rotation; + case MixBlend.add: + bone.rotation += (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + } + }; + RotateTimeline.ENTRIES = 2; + RotateTimeline.PREV_TIME = -2; + RotateTimeline.PREV_ROTATION = -1; + RotateTimeline.ROTATION = 1; + return RotateTimeline; + }(CurveTimeline)); + spine.RotateTimeline = RotateTimeline; + var TranslateTimeline = (function (_super) { + __extends(TranslateTimeline, _super); + function TranslateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES); + return _this; + } + TranslateTimeline.prototype.getPropertyId = function () { + return (TimelineType.translate << 24) + this.boneIndex; + }; + TranslateTimeline.prototype.setFrame = function (frameIndex, time, x, y) { + frameIndex *= TranslateTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TranslateTimeline.X] = x; + this.frames[frameIndex + TranslateTimeline.Y] = y; + }; + TranslateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + bone.y = bone.data.y; + return; + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) { + x = frames[frames.length + TranslateTimeline.PREV_X]; + y = frames[frames.length + TranslateTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES); + x = frames[frame + TranslateTimeline.PREV_X]; + y = frames[frame + TranslateTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime)); + x += (frames[frame + TranslateTimeline.X] - x) * percent; + y += (frames[frame + TranslateTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + bone.y = bone.data.y + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + bone.y += (bone.data.y + y - bone.y) * alpha; + break; + case MixBlend.add: + bone.x += x * alpha; + bone.y += y * alpha; + } + }; + TranslateTimeline.ENTRIES = 3; + TranslateTimeline.PREV_TIME = -3; + TranslateTimeline.PREV_X = -2; + TranslateTimeline.PREV_Y = -1; + TranslateTimeline.X = 1; + TranslateTimeline.Y = 2; + return TranslateTimeline; + }(CurveTimeline)); + spine.TranslateTimeline = TranslateTimeline; + var ScaleTimeline = (function (_super) { + __extends(ScaleTimeline, _super); + function ScaleTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ScaleTimeline.prototype.getPropertyId = function () { + return (TimelineType.scale << 24) + this.boneIndex; + }; + ScaleTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + bone.scaleY = bone.data.scaleY; + return; + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) { + x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX; + y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY; + } + else { + var frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES); + x = frames[frame + ScaleTimeline.PREV_X]; + y = frames[frame + ScaleTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime)); + x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX; + y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY; + } + if (alpha == 1) { + if (blend == MixBlend.add) { + bone.scaleX += x - bone.data.scaleX; + bone.scaleY += y - bone.data.scaleY; + } + else { + bone.scaleX = x; + bone.scaleY = y; + } + } + else { + var bx = 0, by = 0; + if (direction == MixDirection.mixOut) { + switch (blend) { + case MixBlend.setup: + bx = bone.data.scaleX; + by = bone.data.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.add: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bone.data.scaleX) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - bone.data.scaleY) * alpha; + } + } + else { + switch (blend) { + case MixBlend.setup: + bx = Math.abs(bone.data.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.data.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = Math.abs(bone.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.add: + bx = spine.MathUtils.signum(x); + by = spine.MathUtils.signum(y); + bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha; + bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha; + } + } + } + }; + return ScaleTimeline; + }(TranslateTimeline)); + spine.ScaleTimeline = ScaleTimeline; + var ShearTimeline = (function (_super) { + __extends(ShearTimeline, _super); + function ShearTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ShearTimeline.prototype.getPropertyId = function () { + return (TimelineType.shear << 24) + this.boneIndex; + }; + ShearTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + bone.shearY = bone.data.shearY; + return; + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ShearTimeline.ENTRIES]) { + x = frames[frames.length + ShearTimeline.PREV_X]; + y = frames[frames.length + ShearTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES); + x = frames[frame + ShearTimeline.PREV_X]; + y = frames[frame + ShearTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime)); + x = x + (frames[frame + ShearTimeline.X] - x) * percent; + y = y + (frames[frame + ShearTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + bone.shearY = bone.data.shearY + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + break; + case MixBlend.add: + bone.shearX += x * alpha; + bone.shearY += y * alpha; + } + }; + return ShearTimeline; + }(TranslateTimeline)); + spine.ShearTimeline = ShearTimeline; + var ColorTimeline = (function (_super) { + __extends(ColorTimeline, _super); + function ColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES); + return _this; + } + ColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.color << 24) + this.slotIndex; + }; + ColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a) { + frameIndex *= ColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + ColorTimeline.R] = r; + this.frames[frameIndex + ColorTimeline.G] = g; + this.frames[frameIndex + ColorTimeline.B] = b; + this.frames[frameIndex + ColorTimeline.A] = a; + }; + ColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + return; + case MixBlend.first: + var color = slot.color, setup = slot.data.color; + color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha); + } + return; + } + var r = 0, g = 0, b = 0, a = 0; + if (time >= frames[frames.length - ColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + ColorTimeline.PREV_R]; + g = frames[i + ColorTimeline.PREV_G]; + b = frames[i + ColorTimeline.PREV_B]; + a = frames[i + ColorTimeline.PREV_A]; + } + else { + var frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES); + r = frames[frame + ColorTimeline.PREV_R]; + g = frames[frame + ColorTimeline.PREV_G]; + b = frames[frame + ColorTimeline.PREV_B]; + a = frames[frame + ColorTimeline.PREV_A]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + ColorTimeline.R] - r) * percent; + g += (frames[frame + ColorTimeline.G] - g) * percent; + b += (frames[frame + ColorTimeline.B] - b) * percent; + a += (frames[frame + ColorTimeline.A] - a) * percent; + } + if (alpha == 1) + slot.color.set(r, g, b, a); + else { + var color = slot.color; + if (blend == MixBlend.setup) + color.setFromColor(slot.data.color); + color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha); + } + }; + ColorTimeline.ENTRIES = 5; + ColorTimeline.PREV_TIME = -5; + ColorTimeline.PREV_R = -4; + ColorTimeline.PREV_G = -3; + ColorTimeline.PREV_B = -2; + ColorTimeline.PREV_A = -1; + ColorTimeline.R = 1; + ColorTimeline.G = 2; + ColorTimeline.B = 3; + ColorTimeline.A = 4; + return ColorTimeline; + }(CurveTimeline)); + spine.ColorTimeline = ColorTimeline; + var TwoColorTimeline = (function (_super) { + __extends(TwoColorTimeline, _super); + function TwoColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES); + return _this; + } + TwoColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.twoColor << 24) + this.slotIndex; + }; + TwoColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a, r2, g2, b2) { + frameIndex *= TwoColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TwoColorTimeline.R] = r; + this.frames[frameIndex + TwoColorTimeline.G] = g; + this.frames[frameIndex + TwoColorTimeline.B] = b; + this.frames[frameIndex + TwoColorTimeline.A] = a; + this.frames[frameIndex + TwoColorTimeline.R2] = r2; + this.frames[frameIndex + TwoColorTimeline.G2] = g2; + this.frames[frameIndex + TwoColorTimeline.B2] = b2; + }; + TwoColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + slot.darkColor.setFromColor(slot.data.darkColor); + return; + case MixBlend.first: + var light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor; + light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha); + dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0); + } + return; + } + var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; + if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + TwoColorTimeline.PREV_R]; + g = frames[i + TwoColorTimeline.PREV_G]; + b = frames[i + TwoColorTimeline.PREV_B]; + a = frames[i + TwoColorTimeline.PREV_A]; + r2 = frames[i + TwoColorTimeline.PREV_R2]; + g2 = frames[i + TwoColorTimeline.PREV_G2]; + b2 = frames[i + TwoColorTimeline.PREV_B2]; + } + else { + var frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES); + r = frames[frame + TwoColorTimeline.PREV_R]; + g = frames[frame + TwoColorTimeline.PREV_G]; + b = frames[frame + TwoColorTimeline.PREV_B]; + a = frames[frame + TwoColorTimeline.PREV_A]; + r2 = frames[frame + TwoColorTimeline.PREV_R2]; + g2 = frames[frame + TwoColorTimeline.PREV_G2]; + b2 = frames[frame + TwoColorTimeline.PREV_B2]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + TwoColorTimeline.R] - r) * percent; + g += (frames[frame + TwoColorTimeline.G] - g) * percent; + b += (frames[frame + TwoColorTimeline.B] - b) * percent; + a += (frames[frame + TwoColorTimeline.A] - a) * percent; + r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent; + g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent; + b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent; + } + if (alpha == 1) { + slot.color.set(r, g, b, a); + slot.darkColor.set(r2, g2, b2, 1); + } + else { + var light = slot.color, dark = slot.darkColor; + if (blend == MixBlend.setup) { + light.setFromColor(slot.data.color); + dark.setFromColor(slot.data.darkColor); + } + light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha); + dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0); + } + }; + TwoColorTimeline.ENTRIES = 8; + TwoColorTimeline.PREV_TIME = -8; + TwoColorTimeline.PREV_R = -7; + TwoColorTimeline.PREV_G = -6; + TwoColorTimeline.PREV_B = -5; + TwoColorTimeline.PREV_A = -4; + TwoColorTimeline.PREV_R2 = -3; + TwoColorTimeline.PREV_G2 = -2; + TwoColorTimeline.PREV_B2 = -1; + TwoColorTimeline.R = 1; + TwoColorTimeline.G = 2; + TwoColorTimeline.B = 3; + TwoColorTimeline.A = 4; + TwoColorTimeline.R2 = 5; + TwoColorTimeline.G2 = 6; + TwoColorTimeline.B2 = 7; + return TwoColorTimeline; + }(CurveTimeline)); + spine.TwoColorTimeline = TwoColorTimeline; + var AttachmentTimeline = (function () { + function AttachmentTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.attachmentNames = new Array(frameCount); + } + AttachmentTimeline.prototype.getPropertyId = function () { + return (TimelineType.attachment << 24) + this.slotIndex; + }; + AttachmentTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + AttachmentTimeline.prototype.setFrame = function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }; + AttachmentTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frameIndex = 0; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = Animation.binarySearch(frames, time, 1) - 1; + var attachmentName = this.attachmentNames[frameIndex]; + skeleton.slots[this.slotIndex] + .setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + AttachmentTimeline.prototype.setAttachment = function (skeleton, slot, attachmentName) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + return AttachmentTimeline; + }()); + spine.AttachmentTimeline = AttachmentTimeline; + var zeros = null; + var DeformTimeline = (function (_super) { + __extends(DeformTimeline, _super); + function DeformTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount); + _this.frameVertices = new Array(frameCount); + if (zeros == null) + zeros = spine.Utils.newFloatArray(64); + return _this; + } + DeformTimeline.prototype.getPropertyId = function () { + return (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex; + }; + DeformTimeline.prototype.setFrame = function (frameIndex, time, vertices) { + this.frames[frameIndex] = time; + this.frameVertices[frameIndex] = vertices; + }; + DeformTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var slotAttachment = slot.getAttachment(); + if (!(slotAttachment instanceof spine.VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment)) + return; + var deformArray = slot.deform; + if (deformArray.length == 0) + blend = MixBlend.setup; + var frameVertices = this.frameVertices; + var vertexCount = frameVertices[0].length; + var frames = this.frames; + if (time < frames[0]) { + var vertexAttachment = slotAttachment; + switch (blend) { + case MixBlend.setup: + deformArray.length = 0; + return; + case MixBlend.first: + if (alpha == 1) { + deformArray.length = 0; + break; + } + var deform_1 = spine.Utils.setArraySize(deformArray, vertexCount); + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i = 0; i < vertexCount; i++) + deform_1[i] += (setupVertices[i] - deform_1[i]) * alpha; + } + else { + alpha = 1 - alpha; + for (var i = 0; i < vertexCount; i++) + deform_1[i] *= alpha; + } + } + return; + } + var deform = spine.Utils.setArraySize(deformArray, vertexCount); + if (time >= frames[frames.length - 1]) { + var lastVertices = frameVertices[frames.length - 1]; + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_1 = 0; i_1 < vertexCount; i_1++) { + deform[i_1] += lastVertices[i_1] - setupVertices[i_1]; + } + } + else { + for (var i_2 = 0; i_2 < vertexCount; i_2++) + deform[i_2] += lastVertices[i_2]; + } + } + else { + spine.Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount); + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_1 = slotAttachment; + if (vertexAttachment_1.bones == null) { + var setupVertices = vertexAttachment_1.vertices; + for (var i_3 = 0; i_3 < vertexCount; i_3++) { + var setup = setupVertices[i_3]; + deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha; + } + } + else { + for (var i_4 = 0; i_4 < vertexCount; i_4++) + deform[i_4] = lastVertices[i_4] * alpha; + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_5 = 0; i_5 < vertexCount; i_5++) + deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha; + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_6 = 0; i_6 < vertexCount; i_6++) { + deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha; + } + } + else { + for (var i_7 = 0; i_7 < vertexCount; i_7++) + deform[i_7] += lastVertices[i_7] * alpha; + } + } + } + return; + } + var frame = Animation.binarySearch(frames, time); + var prevVertices = frameVertices[frame - 1]; + var nextVertices = frameVertices[frame]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime)); + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_8 = 0; i_8 < vertexCount; i_8++) { + var prev = prevVertices[i_8]; + deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8]; + } + } + else { + for (var i_9 = 0; i_9 < vertexCount; i_9++) { + var prev = prevVertices[i_9]; + deform[i_9] += prev + (nextVertices[i_9] - prev) * percent; + } + } + } + else { + for (var i_10 = 0; i_10 < vertexCount; i_10++) { + var prev = prevVertices[i_10]; + deform[i_10] = prev + (nextVertices[i_10] - prev) * percent; + } + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_2 = slotAttachment; + if (vertexAttachment_2.bones == null) { + var setupVertices = vertexAttachment_2.vertices; + for (var i_11 = 0; i_11 < vertexCount; i_11++) { + var prev = prevVertices[i_11], setup = setupVertices[i_11]; + deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha; + } + } + else { + for (var i_12 = 0; i_12 < vertexCount; i_12++) { + var prev = prevVertices[i_12]; + deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha; + } + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_13 = 0; i_13 < vertexCount; i_13++) { + var prev = prevVertices[i_13]; + deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha; + } + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_14 = 0; i_14 < vertexCount; i_14++) { + var prev = prevVertices[i_14]; + deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha; + } + } + else { + for (var i_15 = 0; i_15 < vertexCount; i_15++) { + var prev = prevVertices[i_15]; + deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha; + } + } + } + } + }; + return DeformTimeline; + }(CurveTimeline)); + spine.DeformTimeline = DeformTimeline; + var EventTimeline = (function () { + function EventTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.events = new Array(frameCount); + } + EventTimeline.prototype.getPropertyId = function () { + return TimelineType.event << 24; + }; + EventTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + EventTimeline.prototype.setFrame = function (frameIndex, event) { + this.frames[frameIndex] = event.time; + this.events[frameIndex] = event; + }; + EventTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + if (firedEvents == null) + return; + var frames = this.frames; + var frameCount = this.frames.length; + if (lastTime > time) { + this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction); + lastTime = -1; + } + else if (lastTime >= frames[frameCount - 1]) + return; + if (time < frames[0]) + return; + var frame = 0; + if (lastTime < frames[0]) + frame = 0; + else { + frame = Animation.binarySearch(frames, lastTime); + var frameTime = frames[frame]; + while (frame > 0) { + if (frames[frame - 1] != frameTime) + break; + frame--; + } + } + for (; frame < frameCount && time >= frames[frame]; frame++) + firedEvents.push(this.events[frame]); + }; + return EventTimeline; + }()); + spine.EventTimeline = EventTimeline; + var DrawOrderTimeline = (function () { + function DrawOrderTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.drawOrders = new Array(frameCount); + } + DrawOrderTimeline.prototype.getPropertyId = function () { + return TimelineType.drawOrder << 24; + }; + DrawOrderTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + DrawOrderTimeline.prototype.setFrame = function (frameIndex, time, drawOrder) { + this.frames[frameIndex] = time; + this.drawOrders[frameIndex] = drawOrder; + }; + DrawOrderTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var drawOrder = skeleton.drawOrder; + var slots = skeleton.slots; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frame = 0; + if (time >= frames[frames.length - 1]) + frame = frames.length - 1; + else + frame = Animation.binarySearch(frames, time) - 1; + var drawOrderToSetupIndex = this.drawOrders[frame]; + if (drawOrderToSetupIndex == null) + spine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length); + else { + for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++) + drawOrder[i] = slots[drawOrderToSetupIndex[i]]; + } + }; + return DrawOrderTimeline; + }()); + spine.DrawOrderTimeline = DrawOrderTimeline; + var IkConstraintTimeline = (function (_super) { + __extends(IkConstraintTimeline, _super); + function IkConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES); + return _this; + } + IkConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex; + }; + IkConstraintTimeline.prototype.setFrame = function (frameIndex, time, mix, softness, bendDirection, compress, stretch) { + frameIndex *= IkConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + IkConstraintTimeline.MIX] = mix; + this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness; + this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection; + this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0; + this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0; + }; + IkConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.ikConstraints[this.ikConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + return; + case MixBlend.first: + constraint.mix += (constraint.data.mix - constraint.mix) * alpha; + constraint.softness += (constraint.data.softness - constraint.softness) * alpha; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + return; + } + if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) { + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha; + constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + return; + } + var frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES); + var mix = frames[frame + IkConstraintTimeline.PREV_MIX]; + var softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime)); + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha; + constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + }; + IkConstraintTimeline.ENTRIES = 6; + IkConstraintTimeline.PREV_TIME = -6; + IkConstraintTimeline.PREV_MIX = -5; + IkConstraintTimeline.PREV_SOFTNESS = -4; + IkConstraintTimeline.PREV_BEND_DIRECTION = -3; + IkConstraintTimeline.PREV_COMPRESS = -2; + IkConstraintTimeline.PREV_STRETCH = -1; + IkConstraintTimeline.MIX = 1; + IkConstraintTimeline.SOFTNESS = 2; + IkConstraintTimeline.BEND_DIRECTION = 3; + IkConstraintTimeline.COMPRESS = 4; + IkConstraintTimeline.STRETCH = 5; + return IkConstraintTimeline; + }(CurveTimeline)); + spine.IkConstraintTimeline = IkConstraintTimeline; + var TransformConstraintTimeline = (function (_super) { + __extends(TransformConstraintTimeline, _super); + function TransformConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES); + return _this; + } + TransformConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex; + }; + TransformConstraintTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) { + frameIndex *= TransformConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix; + this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix; + this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix; + }; + TransformConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.transformConstraints[this.transformConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + var data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + return; + case MixBlend.first: + constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha; + constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha; + constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha; + } + return; + } + var rotate = 0, translate = 0, scale = 0, shear = 0; + if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) { + var i = frames.length; + rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[i + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[i + TransformConstraintTimeline.PREV_SHEAR]; + } + else { + var frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES); + rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[frame + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent; + scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent; + shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent; + } + if (blend == MixBlend.setup) { + var data = constraint.data; + constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha; + constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha; + constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha; + constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + constraint.scaleMix += (scale - constraint.scaleMix) * alpha; + constraint.shearMix += (shear - constraint.shearMix) * alpha; + } + }; + TransformConstraintTimeline.ENTRIES = 5; + TransformConstraintTimeline.PREV_TIME = -5; + TransformConstraintTimeline.PREV_ROTATE = -4; + TransformConstraintTimeline.PREV_TRANSLATE = -3; + TransformConstraintTimeline.PREV_SCALE = -2; + TransformConstraintTimeline.PREV_SHEAR = -1; + TransformConstraintTimeline.ROTATE = 1; + TransformConstraintTimeline.TRANSLATE = 2; + TransformConstraintTimeline.SCALE = 3; + TransformConstraintTimeline.SHEAR = 4; + return TransformConstraintTimeline; + }(CurveTimeline)); + spine.TransformConstraintTimeline = TransformConstraintTimeline; + var PathConstraintPositionTimeline = (function (_super) { + __extends(PathConstraintPositionTimeline, _super); + function PathConstraintPositionTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES); + return _this; + } + PathConstraintPositionTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex; + }; + PathConstraintPositionTimeline.prototype.setFrame = function (frameIndex, time, value) { + frameIndex *= PathConstraintPositionTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value; + }; + PathConstraintPositionTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.position = constraint.data.position; + return; + case MixBlend.first: + constraint.position += (constraint.data.position - constraint.position) * alpha; + } + return; + } + var position = 0; + if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES]) + position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES); + position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime)); + position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent; + } + if (blend == MixBlend.setup) + constraint.position = constraint.data.position + (position - constraint.data.position) * alpha; + else + constraint.position += (position - constraint.position) * alpha; + }; + PathConstraintPositionTimeline.ENTRIES = 2; + PathConstraintPositionTimeline.PREV_TIME = -2; + PathConstraintPositionTimeline.PREV_VALUE = -1; + PathConstraintPositionTimeline.VALUE = 1; + return PathConstraintPositionTimeline; + }(CurveTimeline)); + spine.PathConstraintPositionTimeline = PathConstraintPositionTimeline; + var PathConstraintSpacingTimeline = (function (_super) { + __extends(PathConstraintSpacingTimeline, _super); + function PathConstraintSpacingTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + PathConstraintSpacingTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex; + }; + PathConstraintSpacingTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.spacing = constraint.data.spacing; + return; + case MixBlend.first: + constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha; + } + return; + } + var spacing = 0; + if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES]) + spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES); + spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime)); + spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent; + } + if (blend == MixBlend.setup) + constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha; + else + constraint.spacing += (spacing - constraint.spacing) * alpha; + }; + return PathConstraintSpacingTimeline; + }(PathConstraintPositionTimeline)); + spine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline; + var PathConstraintMixTimeline = (function (_super) { + __extends(PathConstraintMixTimeline, _super); + function PathConstraintMixTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES); + return _this; + } + PathConstraintMixTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex; + }; + PathConstraintMixTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix) { + frameIndex *= PathConstraintMixTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix; + }; + PathConstraintMixTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = constraint.data.rotateMix; + constraint.translateMix = constraint.data.translateMix; + return; + case MixBlend.first: + constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha; + } + return; + } + var rotate = 0, translate = 0; + if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) { + rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE]; + } + else { + var frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES); + rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent; + } + if (blend == MixBlend.setup) { + constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha; + constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + } + }; + PathConstraintMixTimeline.ENTRIES = 3; + PathConstraintMixTimeline.PREV_TIME = -3; + PathConstraintMixTimeline.PREV_ROTATE = -2; + PathConstraintMixTimeline.PREV_TRANSLATE = -1; + PathConstraintMixTimeline.ROTATE = 1; + PathConstraintMixTimeline.TRANSLATE = 2; + return PathConstraintMixTimeline; + }(CurveTimeline)); + spine.PathConstraintMixTimeline = PathConstraintMixTimeline; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationState = (function () { + function AnimationState(data) { + this.tracks = new Array(); + this.timeScale = 1; + this.unkeyedState = 0; + this.events = new Array(); + this.listeners = new Array(); + this.queue = new EventQueue(this); + this.propertyIDs = new spine.IntSet(); + this.animationsChanged = false; + this.trackEntryPool = new spine.Pool(function () { return new TrackEntry(); }); + this.data = data; + } + AnimationState.prototype.update = function (delta) { + delta *= this.timeScale; + var tracks = this.tracks; + for (var i = 0, n = tracks.length; i < n; i++) { + var current = tracks[i]; + if (current == null) + continue; + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + var currentDelta = delta * current.timeScale; + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) + continue; + currentDelta = -current.delay; + current.delay = 0; + } + var next = current.next; + if (next != null) { + var nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setCurrent(i, next, true); + while (next.mixingFrom != null) { + next.mixTime += delta; + next = next.mixingFrom; + } + continue; + } + } + else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) { + tracks[i] = null; + this.queue.end(current); + this.disposeNext(current); + continue; + } + if (current.mixingFrom != null && this.updateMixingFrom(current, delta)) { + var from = current.mixingFrom; + current.mixingFrom = null; + if (from != null) + from.mixingTo = null; + while (from != null) { + this.queue.end(from); + from = from.mixingFrom; + } + } + current.trackTime += currentDelta; + } + this.queue.drain(); + }; + AnimationState.prototype.updateMixingFrom = function (to, delta) { + var from = to.mixingFrom; + if (from == null) + return true; + var finished = this.updateMixingFrom(from, delta); + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { + if (from.totalAlpha == 0 || to.mixDuration == 0) { + to.mixingFrom = from.mixingFrom; + if (from.mixingFrom != null) + from.mixingFrom.mixingTo = to; + to.interruptAlpha = from.interruptAlpha; + this.queue.end(from); + } + return finished; + } + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + }; + AnimationState.prototype.apply = function (skeleton) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (this.animationsChanged) + this._animationsChanged(); + var events = this.events; + var tracks = this.tracks; + var applied = false; + for (var i_16 = 0, n_1 = tracks.length; i_16 < n_1; i_16++) { + var current = tracks[i_16]; + if (current == null || current.delay > 0) + continue; + applied = true; + var blend = i_16 == 0 ? spine.MixBlend.first : current.mixBlend; + var mix = current.alpha; + if (current.mixingFrom != null) + mix *= this.applyMixingFrom(current, skeleton, blend); + else if (current.trackTime >= current.trackEnd && current.next == null) + mix = 0; + var animationLast = current.animationLast, animationTime = current.getAnimationTime(); + var timelineCount = current.animation.timelines.length; + var timelines = current.animation.timelines; + if ((i_16 == 0 && mix == 1) || blend == spine.MixBlend.add) { + for (var ii = 0; ii < timelineCount; ii++) { + spine.Utils.webkit602BugfixHelper(mix, blend); + var timeline = timelines[ii]; + if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, blend, true); + else + timeline.apply(skeleton, animationLast, animationTime, events, mix, blend, spine.MixDirection.mixIn); + } + } + else { + var timelineMode = current.timelineMode; + var firstFrame = current.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = current.timelinesRotation; + for (var ii = 0; ii < timelineCount; ii++) { + var timeline_1 = timelines[ii]; + var timelineBlend = timelineMode[ii] == AnimationState.SUBSEQUENT ? blend : spine.MixBlend.setup; + if (timeline_1 instanceof spine.RotateTimeline) { + this.applyRotateTimeline(timeline_1, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); + } + else if (timeline_1 instanceof spine.AttachmentTimeline) { + this.applyAttachmentTimeline(timeline_1, skeleton, animationTime, blend, true); + } + else { + spine.Utils.webkit602BugfixHelper(mix, blend); + timeline_1.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, spine.MixDirection.mixIn); + } + } + } + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + var setupState = this.unkeyedState + AnimationState.SETUP; + var slots = skeleton.slots; + for (var i = 0, n = skeleton.slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.attachmentState == setupState) { + var attachmentName = slot.data.attachmentName; + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + } + } + this.unkeyedState += 2; + this.queue.drain(); + return applied; + }; + AnimationState.prototype.applyMixingFrom = function (to, skeleton, blend) { + var from = to.mixingFrom; + if (from.mixingFrom != null) + this.applyMixingFrom(from, skeleton, blend); + var mix = 0; + if (to.mixDuration == 0) { + mix = 1; + if (blend == spine.MixBlend.first) + blend = spine.MixBlend.setup; + } + else { + mix = to.mixTime / to.mixDuration; + if (mix > 1) + mix = 1; + if (blend != spine.MixBlend.first) + blend = from.mixBlend; + } + var events = mix < from.eventThreshold ? this.events : null; + var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold; + var animationLast = from.animationLast, animationTime = from.getAnimationTime(); + var timelineCount = from.animation.timelines.length; + var timelines = from.animation.timelines; + var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); + if (blend == spine.MixBlend.add) { + for (var i = 0; i < timelineCount; i++) + timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, spine.MixDirection.mixOut); + } + else { + var timelineMode = from.timelineMode; + var timelineHoldMix = from.timelineHoldMix; + var firstFrame = from.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = from.timelinesRotation; + from.totalAlpha = 0; + for (var i = 0; i < timelineCount; i++) { + var timeline = timelines[i]; + var direction = spine.MixDirection.mixOut; + var timelineBlend = void 0; + var alpha = 0; + switch (timelineMode[i]) { + case AnimationState.SUBSEQUENT: + if (!drawOrder && timeline instanceof spine.DrawOrderTimeline) + continue; + timelineBlend = blend; + alpha = alphaMix; + break; + case AnimationState.FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaMix; + break; + case AnimationState.HOLD_SUBSEQUENT: + timelineBlend = blend; + alpha = alphaHold; + break; + case AnimationState.HOLD_FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaHold; + break; + default: + timelineBlend = spine.MixBlend.setup; + var holdMix = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + break; + } + from.totalAlpha += alpha; + if (timeline instanceof spine.RotateTimeline) + this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); + else if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, timelineBlend, attachments); + else { + spine.Utils.webkit602BugfixHelper(alpha, blend); + if (drawOrder && timeline instanceof spine.DrawOrderTimeline && timelineBlend == spine.MixBlend.setup) + direction = spine.MixDirection.mixIn; + timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction); + } + } + } + if (to.mixDuration > 0) + this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + return mix; + }; + AnimationState.prototype.applyAttachmentTimeline = function (timeline, skeleton, time, blend, attachments) { + var slot = skeleton.slots[timeline.slotIndex]; + if (!slot.bone.active) + return; + var frames = timeline.frames; + if (time < frames[0]) { + if (blend == spine.MixBlend.setup || blend == spine.MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments); + } + else { + var frameIndex; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = spine.Animation.binarySearch(frames, time) - 1; + this.setAttachment(skeleton, slot, timeline.attachmentNames[frameIndex], attachments); + } + if (slot.attachmentState <= this.unkeyedState) + slot.attachmentState = this.unkeyedState + AnimationState.SETUP; + }; + AnimationState.prototype.setAttachment = function (skeleton, slot, attachmentName, attachments) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + if (attachments) + slot.attachmentState = this.unkeyedState + AnimationState.CURRENT; + }; + AnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) { + if (firstFrame) + timelinesRotation[i] = 0; + if (alpha == 1) { + timeline.apply(skeleton, 0, time, null, 1, blend, spine.MixDirection.mixIn); + return; + } + var rotateTimeline = timeline; + var frames = rotateTimeline.frames; + var bone = skeleton.bones[rotateTimeline.boneIndex]; + if (!bone.active) + return; + var r1 = 0, r2 = 0; + if (time < frames[0]) { + switch (blend) { + case spine.MixBlend.setup: + bone.rotation = bone.data.rotation; + default: + return; + case spine.MixBlend.first: + r1 = bone.rotation; + r2 = bone.data.rotation; + } + } + else { + r1 = blend == spine.MixBlend.setup ? bone.data.rotation : bone.rotation; + if (time >= frames[frames.length - spine.RotateTimeline.ENTRIES]) + r2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION]; + else { + var frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES); + var prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime)); + r2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + r2 = prevRotation + r2 * percent + bone.data.rotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + } + } + var total = 0, diff = r2 - r1; + diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360; + if (diff == 0) { + total = timelinesRotation[i]; + } + else { + var lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } + else { + lastTotal = timelinesRotation[i]; + lastDiff = timelinesRotation[i + 1]; + } + var current = diff > 0, dir = lastTotal >= 0; + if (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) { + if (Math.abs(lastTotal) > 180) + lastTotal += 360 * spine.MathUtils.signum(lastTotal); + dir = current; + } + total = diff + lastTotal - lastTotal % 360; + if (dir != current) + total += 360 * spine.MathUtils.signum(lastTotal); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + r1 += total * alpha; + bone.rotation = r1 - (16384 - ((16384.499999999996 - r1 / 360) | 0)) * 360; + }; + AnimationState.prototype.queueEvents = function (entry, animationTime) { + var animationStart = entry.animationStart, animationEnd = entry.animationEnd; + var duration = animationEnd - animationStart; + var trackLastWrapped = entry.trackLast % duration; + var events = this.events; + var i = 0, n = events.length; + for (; i < n; i++) { + var event_1 = events[i]; + if (event_1.time < trackLastWrapped) + break; + if (event_1.time > animationEnd) + continue; + this.queue.event(entry, event_1); + } + var complete = false; + if (entry.loop) + complete = duration == 0 || trackLastWrapped > entry.trackTime % duration; + else + complete = animationTime >= animationEnd && entry.animationLast < animationEnd; + if (complete) + this.queue.complete(entry); + for (; i < n; i++) { + var event_2 = events[i]; + if (event_2.time < animationStart) + continue; + this.queue.event(entry, events[i]); + } + }; + AnimationState.prototype.clearTracks = function () { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) + this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.clearTrack = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return; + var current = this.tracks[trackIndex]; + if (current == null) + return; + this.queue.end(current); + this.disposeNext(current); + var entry = current; + while (true) { + var from = entry.mixingFrom; + if (from == null) + break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + this.tracks[current.trackIndex] = null; + this.queue.drain(); + }; + AnimationState.prototype.setCurrent = function (index, current, interrupt) { + var from = this.expandToIndex(index); + this.tracks[index] = current; + if (from != null) { + if (interrupt) + this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + if (from.mixingFrom != null && from.mixDuration > 0) + current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration); + from.timelinesRotation.length = 0; + } + this.queue.start(current); + }; + AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.setAnimationWith(trackIndex, animation, loop); + }; + AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) { + if (animation == null) + throw new Error("animation cannot be null."); + var interrupt = true; + var current = this.expandToIndex(trackIndex); + if (current != null) { + if (current.nextTrackLast == -1) { + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.disposeNext(current); + current = current.mixingFrom; + interrupt = false; + } + else + this.disposeNext(current); + } + var entry = this.trackEntry(trackIndex, animation, loop, current); + this.setCurrent(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + }; + AnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.addAnimationWith(trackIndex, animation, loop, delay); + }; + AnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) { + if (animation == null) + throw new Error("animation cannot be null."); + var last = this.expandToIndex(trackIndex); + if (last != null) { + while (last.next != null) + last = last.next; + } + var entry = this.trackEntry(trackIndex, animation, loop, last); + if (last == null) { + this.setCurrent(trackIndex, entry, true); + this.queue.drain(); + } + else { + last.next = entry; + if (delay <= 0) { + var duration = last.animationEnd - last.animationStart; + if (duration != 0) { + if (last.loop) + delay += duration * (1 + ((last.trackTime / duration) | 0)); + else + delay += Math.max(duration, last.trackTime); + delay -= this.data.getMix(last.animation, animation); + } + else + delay = last.trackTime; + } + } + entry.delay = delay; + return entry; + }; + AnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) { + var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) { + if (delay <= 0) + delay -= mixDuration; + var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.setEmptyAnimations = function (mixDuration) { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) { + var current = this.tracks[i]; + if (current != null) + this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.expandToIndex = function (index) { + if (index < this.tracks.length) + return this.tracks[index]; + spine.Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + }; + AnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) { + var entry = this.trackEntryPool.obtain(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + entry.eventThreshold = 0; + entry.attachmentThreshold = 0; + entry.drawOrderThreshold = 0; + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + entry.alpha = 1; + entry.interruptAlpha = 1; + entry.mixTime = 0; + entry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation); + entry.mixBlend = spine.MixBlend.replace; + return entry; + }; + AnimationState.prototype.disposeNext = function (entry) { + var next = entry.next; + while (next != null) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + }; + AnimationState.prototype._animationsChanged = function () { + this.animationsChanged = false; + this.propertyIDs.clear(); + for (var i = 0, n = this.tracks.length; i < n; i++) { + var entry = this.tracks[i]; + if (entry == null) + continue; + while (entry.mixingFrom != null) + entry = entry.mixingFrom; + do { + if (entry.mixingFrom == null || entry.mixBlend != spine.MixBlend.add) + this.computeHold(entry); + entry = entry.mixingTo; + } while (entry != null); + } + }; + AnimationState.prototype.computeHold = function (entry) { + var to = entry.mixingTo; + var timelines = entry.animation.timelines; + var timelinesCount = entry.animation.timelines.length; + var timelineMode = spine.Utils.setArraySize(entry.timelineMode, timelinesCount); + entry.timelineHoldMix.length = 0; + var timelineDipMix = spine.Utils.setArraySize(entry.timelineHoldMix, timelinesCount); + var propertyIDs = this.propertyIDs; + if (to != null && to.holdPrevious) { + for (var i = 0; i < timelinesCount; i++) { + timelineMode[i] = propertyIDs.add(timelines[i].getPropertyId()) ? AnimationState.HOLD_FIRST : AnimationState.HOLD_SUBSEQUENT; + } + return; + } + outer: for (var i = 0; i < timelinesCount; i++) { + var timeline = timelines[i]; + var id = timeline.getPropertyId(); + if (!propertyIDs.add(id)) + timelineMode[i] = AnimationState.SUBSEQUENT; + else if (to == null || timeline instanceof spine.AttachmentTimeline || timeline instanceof spine.DrawOrderTimeline + || timeline instanceof spine.EventTimeline || !to.animation.hasTimeline(id)) { + timelineMode[i] = AnimationState.FIRST; + } + else { + for (var next = to.mixingTo; next != null; next = next.mixingTo) { + if (next.animation.hasTimeline(id)) + continue; + if (entry.mixDuration > 0) { + timelineMode[i] = AnimationState.HOLD_MIX; + timelineDipMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = AnimationState.HOLD_FIRST; + } + } + }; + AnimationState.prototype.getCurrent = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return null; + return this.tracks[trackIndex]; + }; + AnimationState.prototype.addListener = function (listener) { + if (listener == null) + throw new Error("listener cannot be null."); + this.listeners.push(listener); + }; + AnimationState.prototype.removeListener = function (listener) { + var index = this.listeners.indexOf(listener); + if (index >= 0) + this.listeners.splice(index, 1); + }; + AnimationState.prototype.clearListeners = function () { + this.listeners.length = 0; + }; + AnimationState.prototype.clearListenerNotifications = function () { + this.queue.clear(); + }; + AnimationState.emptyAnimation = new spine.Animation("", [], 0); + AnimationState.SUBSEQUENT = 0; + AnimationState.FIRST = 1; + AnimationState.HOLD_SUBSEQUENT = 2; + AnimationState.HOLD_FIRST = 3; + AnimationState.HOLD_MIX = 4; + AnimationState.SETUP = 1; + AnimationState.CURRENT = 2; + return AnimationState; + }()); + spine.AnimationState = AnimationState; + var TrackEntry = (function () { + function TrackEntry() { + this.mixBlend = spine.MixBlend.replace; + this.timelineMode = new Array(); + this.timelineHoldMix = new Array(); + this.timelinesRotation = new Array(); + } + TrackEntry.prototype.reset = function () { + this.next = null; + this.mixingFrom = null; + this.mixingTo = null; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + }; + TrackEntry.prototype.getAnimationTime = function () { + if (this.loop) { + var duration = this.animationEnd - this.animationStart; + if (duration == 0) + return this.animationStart; + return (this.trackTime % duration) + this.animationStart; + } + return Math.min(this.trackTime + this.animationStart, this.animationEnd); + }; + TrackEntry.prototype.setAnimationLast = function (animationLast) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + }; + TrackEntry.prototype.isComplete = function () { + return this.trackTime >= this.animationEnd - this.animationStart; + }; + TrackEntry.prototype.resetRotationDirections = function () { + this.timelinesRotation.length = 0; + }; + return TrackEntry; + }()); + spine.TrackEntry = TrackEntry; + var EventQueue = (function () { + function EventQueue(animState) { + this.objects = []; + this.drainDisabled = false; + this.animState = animState; + } + EventQueue.prototype.start = function (entry) { + this.objects.push(EventType.start); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.interrupt = function (entry) { + this.objects.push(EventType.interrupt); + this.objects.push(entry); + }; + EventQueue.prototype.end = function (entry) { + this.objects.push(EventType.end); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.dispose = function (entry) { + this.objects.push(EventType.dispose); + this.objects.push(entry); + }; + EventQueue.prototype.complete = function (entry) { + this.objects.push(EventType.complete); + this.objects.push(entry); + }; + EventQueue.prototype.event = function (entry, event) { + this.objects.push(EventType.event); + this.objects.push(entry); + this.objects.push(event); + }; + EventQueue.prototype.drain = function () { + if (this.drainDisabled) + return; + this.drainDisabled = true; + var objects = this.objects; + var listeners = this.animState.listeners; + for (var i = 0; i < objects.length; i += 2) { + var type = objects[i]; + var entry = objects[i + 1]; + switch (type) { + case EventType.start: + if (entry.listener != null && entry.listener.start) + entry.listener.start(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].start) + listeners[ii].start(entry); + break; + case EventType.interrupt: + if (entry.listener != null && entry.listener.interrupt) + entry.listener.interrupt(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].interrupt) + listeners[ii].interrupt(entry); + break; + case EventType.end: + if (entry.listener != null && entry.listener.end) + entry.listener.end(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].end) + listeners[ii].end(entry); + case EventType.dispose: + if (entry.listener != null && entry.listener.dispose) + entry.listener.dispose(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].dispose) + listeners[ii].dispose(entry); + this.animState.trackEntryPool.free(entry); + break; + case EventType.complete: + if (entry.listener != null && entry.listener.complete) + entry.listener.complete(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].complete) + listeners[ii].complete(entry); + break; + case EventType.event: + var event_3 = objects[i++ + 2]; + if (entry.listener != null && entry.listener.event) + entry.listener.event(entry, event_3); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].event) + listeners[ii].event(entry, event_3); + break; + } + } + this.clear(); + this.drainDisabled = false; + }; + EventQueue.prototype.clear = function () { + this.objects.length = 0; + }; + return EventQueue; + }()); + spine.EventQueue = EventQueue; + var EventType; + (function (EventType) { + EventType[EventType["start"] = 0] = "start"; + EventType[EventType["interrupt"] = 1] = "interrupt"; + EventType[EventType["end"] = 2] = "end"; + EventType[EventType["dispose"] = 3] = "dispose"; + EventType[EventType["complete"] = 4] = "complete"; + EventType[EventType["event"] = 5] = "event"; + })(EventType = spine.EventType || (spine.EventType = {})); + var AnimationStateAdapter = (function () { + function AnimationStateAdapter() { + } + AnimationStateAdapter.prototype.start = function (entry) { + }; + AnimationStateAdapter.prototype.interrupt = function (entry) { + }; + AnimationStateAdapter.prototype.end = function (entry) { + }; + AnimationStateAdapter.prototype.dispose = function (entry) { + }; + AnimationStateAdapter.prototype.complete = function (entry) { + }; + AnimationStateAdapter.prototype.event = function (entry, event) { + }; + return AnimationStateAdapter; + }()); + spine.AnimationStateAdapter = AnimationStateAdapter; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationStateData = (function () { + function AnimationStateData(skeletonData) { + this.animationToMixTime = {}; + this.defaultMix = 0; + if (skeletonData == null) + throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + AnimationStateData.prototype.setMix = function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (from == null) + throw new Error("Animation not found: " + fromName); + var to = this.skeletonData.findAnimation(toName); + if (to == null) + throw new Error("Animation not found: " + toName); + this.setMixWith(from, to, duration); + }; + AnimationStateData.prototype.setMixWith = function (from, to, duration) { + if (from == null) + throw new Error("from cannot be null."); + if (to == null) + throw new Error("to cannot be null."); + var key = from.name + "." + to.name; + this.animationToMixTime[key] = duration; + }; + AnimationStateData.prototype.getMix = function (from, to) { + var key = from.name + "." + to.name; + var value = this.animationToMixTime[key]; + return value === undefined ? this.defaultMix : value; + }; + return AnimationStateData; + }()); + spine.AnimationStateData = AnimationStateData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AssetManager = (function () { + function AssetManager(textureLoader, pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.assets = {}; + this.errors = {}; + this.toLoad = 0; + this.loaded = 0; + this.rawDataUris = {}; + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + } + AssetManager.prototype.downloadText = function (url, success, error) { + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.onload = function () { + if (request.status == 200) { + success(request.responseText); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.downloadBinary = function (url, success, error) { + var request = new XMLHttpRequest(); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.responseType = "arraybuffer"; + request.onload = function () { + if (request.status == 200) { + success(new Uint8Array(request.response)); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.setRawDataURI = function (path, data) { + this.rawDataUris[this.pathPrefix + path] = data; + }; + AssetManager.prototype.loadBinary = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadBinary(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load binary " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load binary " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadText = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load text " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load text " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadTexture = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + var storagePath = path; + this.toLoad++; + var img = new Image(); + img.crossOrigin = "anonymous"; + img.onload = function (ev) { + var texture = _this.textureLoader(img); + _this.assets[storagePath] = texture; + _this.toLoad--; + _this.loaded++; + if (success) + success(path, img); + }; + img.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + _this.toLoad--; + _this.loaded++; + if (error) + error(path, "Couldn't load image " + path); + }; + if (this.rawDataUris[path]) + path = this.rawDataUris[path]; + img.src = path; + }; + AssetManager.prototype.loadTextureAtlas = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + var parent = path.lastIndexOf("/") >= 0 ? path.substring(0, path.lastIndexOf("/")) : ""; + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (atlasData) { + var pagesLoaded = { count: 0 }; + var atlasPages = new Array(); + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + atlasPages.push(parent == "" ? path : parent + "/" + path); + var image = document.createElement("img"); + image.width = 16; + image.height = 16; + return new spine.FakeTexture(image); + }); + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + return; + } + var _loop_1 = function (atlasPage) { + var pageLoadError = false; + _this.loadTexture(atlasPage, function (imagePath, image) { + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + if (!pageLoadError) { + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + return _this.get(parent == "" ? path : parent + "/" + path); + }); + _this.assets[path] = atlas; + if (success) + success(path, atlas); + _this.toLoad--; + _this.loaded++; + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + } + } + else { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + } + }, function (imagePath, errorMessage) { + pageLoadError = true; + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + }); + }; + for (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) { + var atlasPage = atlasPages_1[_i]; + _loop_1(atlasPage); + } + }, function (state, responseText) { + _this.errors[path] = "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.get = function (path) { + path = this.pathPrefix + path; + return this.assets[path]; + }; + AssetManager.prototype.remove = function (path) { + path = this.pathPrefix + path; + var asset = this.assets[path]; + if (asset.dispose) + asset.dispose(); + this.assets[path] = null; + }; + AssetManager.prototype.removeAll = function () { + for (var key in this.assets) { + var asset = this.assets[key]; + if (asset.dispose) + asset.dispose(); + } + this.assets = {}; + }; + AssetManager.prototype.isLoadingComplete = function () { + return this.toLoad == 0; + }; + AssetManager.prototype.getToLoad = function () { + return this.toLoad; + }; + AssetManager.prototype.getLoaded = function () { + return this.loaded; + }; + AssetManager.prototype.dispose = function () { + this.removeAll(); + }; + AssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + AssetManager.prototype.getErrors = function () { + return this.errors; + }; + return AssetManager; + }()); + spine.AssetManager = AssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AtlasAttachmentLoader = (function () { + function AtlasAttachmentLoader(atlas) { + this.atlas = atlas; + } + AtlasAttachmentLoader.prototype.newRegionAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.RegionAttachment(name); + attachment.setRegion(region); + return attachment; + }; + AtlasAttachmentLoader.prototype.newMeshAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.MeshAttachment(name); + attachment.region = region; + return attachment; + }; + AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function (skin, name) { + return new spine.BoundingBoxAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPathAttachment = function (skin, name) { + return new spine.PathAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPointAttachment = function (skin, name) { + return new spine.PointAttachment(name); + }; + AtlasAttachmentLoader.prototype.newClippingAttachment = function (skin, name) { + return new spine.ClippingAttachment(name); + }; + return AtlasAttachmentLoader; + }()); + spine.AtlasAttachmentLoader = AtlasAttachmentLoader; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BlendMode; + (function (BlendMode) { + BlendMode[BlendMode["Normal"] = 0] = "Normal"; + BlendMode[BlendMode["Additive"] = 1] = "Additive"; + BlendMode[BlendMode["Multiply"] = 2] = "Multiply"; + BlendMode[BlendMode["Screen"] = 3] = "Screen"; + })(BlendMode = spine.BlendMode || (spine.BlendMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Bone = (function () { + function Bone(data, skeleton, parent) { + this.children = new Array(); + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 0; + this.scaleY = 0; + this.shearX = 0; + this.shearY = 0; + this.ax = 0; + this.ay = 0; + this.arotation = 0; + this.ascaleX = 0; + this.ascaleY = 0; + this.ashearX = 0; + this.ashearY = 0; + this.appliedValid = false; + this.a = 0; + this.b = 0; + this.c = 0; + this.d = 0; + this.worldY = 0; + this.worldX = 0; + this.sorted = false; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.skeleton = skeleton; + this.parent = parent; + this.setToSetupPose(); + } + Bone.prototype.isActive = function () { + return this.active; + }; + Bone.prototype.update = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransform = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransformWith = function (x, y, rotation, scaleX, scaleY, shearX, shearY) { + this.ax = x; + this.ay = y; + this.arotation = rotation; + this.ascaleX = scaleX; + this.ascaleY = scaleY; + this.ashearX = shearX; + this.ashearY = shearY; + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + var skeleton = this.skeleton; + var rotationY = rotation + 90 + shearY; + var sx = skeleton.scaleX; + var sy = skeleton.scaleY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX * sx; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY * sx; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX * sy; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY * sy; + this.worldX = x * sx + skeleton.x; + this.worldY = y * sy + skeleton.y; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + this.worldX = pa * x + pb * y + parent.worldX; + this.worldY = pc * x + pd * y + parent.worldY; + switch (this.data.transformMode) { + case spine.TransformMode.Normal: { + var rotationY = rotation + 90 + shearY; + var la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(rotationY) * scaleY; + var lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(rotationY) * scaleY; + this.a = pa * la + pb * lc; + this.b = pa * lb + pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + return; + } + case spine.TransformMode.OnlyTranslation: { + var rotationY = rotation + 90 + shearY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY; + break; + } + case spine.TransformMode.NoRotationOrReflection: { + var s = pa * pa + pc * pc; + var prx = 0; + if (s > 0.0001) { + s = Math.abs(pa * pd - pb * pc) / s; + pa /= this.skeleton.scaleX; + pc /= this.skeleton.scaleY; + pb = pc * s; + pd = pa * s; + prx = Math.atan2(pc, pa) * spine.MathUtils.radDeg; + } + else { + pa = 0; + pc = 0; + prx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg; + } + var rx = rotation + shearX - prx; + var ry = rotation + shearY - prx + 90; + var la = spine.MathUtils.cosDeg(rx) * scaleX; + var lb = spine.MathUtils.cosDeg(ry) * scaleY; + var lc = spine.MathUtils.sinDeg(rx) * scaleX; + var ld = spine.MathUtils.sinDeg(ry) * scaleY; + this.a = pa * la - pb * lc; + this.b = pa * lb - pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + break; + } + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: { + var cos = spine.MathUtils.cosDeg(rotation); + var sin = spine.MathUtils.sinDeg(rotation); + var za = (pa * cos + pb * sin) / this.skeleton.scaleX; + var zc = (pc * cos + pd * sin) / this.skeleton.scaleY; + var s = Math.sqrt(za * za + zc * zc); + if (s > 0.00001) + s = 1 / s; + za *= s; + zc *= s; + s = Math.sqrt(za * za + zc * zc); + if (this.data.transformMode == spine.TransformMode.NoScale + && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) + s = -s; + var r = Math.PI / 2 + Math.atan2(zc, za); + var zb = Math.cos(r) * s; + var zd = Math.sin(r) * s; + var la = spine.MathUtils.cosDeg(shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY; + var lc = spine.MathUtils.sinDeg(shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY; + this.a = za * la + zb * lc; + this.b = za * lb + zb * ld; + this.c = zc * la + zd * lc; + this.d = zc * lb + zd * ld; + break; + } + } + this.a *= this.skeleton.scaleX; + this.b *= this.skeleton.scaleX; + this.c *= this.skeleton.scaleY; + this.d *= this.skeleton.scaleY; + }; + Bone.prototype.setToSetupPose = function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + this.shearX = data.shearX; + this.shearY = data.shearY; + }; + Bone.prototype.getWorldRotationX = function () { + return Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldRotationY = function () { + return Math.atan2(this.d, this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldScaleX = function () { + return Math.sqrt(this.a * this.a + this.c * this.c); + }; + Bone.prototype.getWorldScaleY = function () { + return Math.sqrt(this.b * this.b + this.d * this.d); + }; + Bone.prototype.updateAppliedTransform = function () { + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + this.ax = this.worldX; + this.ay = this.worldY; + this.arotation = Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c); + this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d); + this.ashearX = 0; + this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + var pid = 1 / (pa * pd - pb * pc); + var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY; + this.ax = (dx * pd * pid - dy * pb * pid); + this.ay = (dy * pa * pid - dx * pc * pid); + var ia = pid * pd; + var id = pid * pa; + var ib = pid * pb; + var ic = pid * pc; + var ra = ia * this.a - ib * this.c; + var rb = ia * this.b - ib * this.d; + var rc = id * this.c - ic * this.a; + var rd = id * this.d - ic * this.b; + this.ashearX = 0; + this.ascaleX = Math.sqrt(ra * ra + rc * rc); + if (this.ascaleX > 0.0001) { + var det = ra * rd - rb * rc; + this.ascaleY = det / this.ascaleX; + this.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg; + this.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg; + } + else { + this.ascaleX = 0; + this.ascaleY = Math.sqrt(rb * rb + rd * rd); + this.ashearY = 0; + this.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg; + } + }; + Bone.prototype.worldToLocal = function (world) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var invDet = 1 / (a * d - b * c); + var x = world.x - this.worldX, y = world.y - this.worldY; + world.x = (x * d * invDet - y * b * invDet); + world.y = (y * a * invDet - x * c * invDet); + return world; + }; + Bone.prototype.localToWorld = function (local) { + var x = local.x, y = local.y; + local.x = x * this.a + y * this.b + this.worldX; + local.y = x * this.c + y * this.d + this.worldY; + return local; + }; + Bone.prototype.worldToLocalRotation = function (worldRotation) { + var sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation); + return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg + this.rotation - this.shearX; + }; + Bone.prototype.localToWorldRotation = function (localRotation) { + localRotation -= this.rotation - this.shearX; + var sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation); + return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.rotateWorld = function (degrees) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees); + this.a = cos * a - sin * c; + this.b = cos * b - sin * d; + this.c = sin * a + cos * c; + this.d = sin * b + cos * d; + this.appliedValid = false; + }; + return Bone; + }()); + spine.Bone = Bone; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoneData = (function () { + function BoneData(index, name, parent) { + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 1; + this.scaleY = 1; + this.shearX = 0; + this.shearY = 0; + this.transformMode = TransformMode.Normal; + this.skinRequired = false; + this.color = new spine.Color(); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + this.index = index; + this.name = name; + this.parent = parent; + } + return BoneData; + }()); + spine.BoneData = BoneData; + var TransformMode; + (function (TransformMode) { + TransformMode[TransformMode["Normal"] = 0] = "Normal"; + TransformMode[TransformMode["OnlyTranslation"] = 1] = "OnlyTranslation"; + TransformMode[TransformMode["NoRotationOrReflection"] = 2] = "NoRotationOrReflection"; + TransformMode[TransformMode["NoScale"] = 3] = "NoScale"; + TransformMode[TransformMode["NoScaleOrReflection"] = 4] = "NoScaleOrReflection"; + })(TransformMode = spine.TransformMode || (spine.TransformMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var ConstraintData = (function () { + function ConstraintData(name, order, skinRequired) { + this.name = name; + this.order = order; + this.skinRequired = skinRequired; + } + return ConstraintData; + }()); + spine.ConstraintData = ConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Event = (function () { + function Event(time, data) { + if (data == null) + throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + return Event; + }()); + spine.Event = Event; +})(spine || (spine = {})); +var spine; +(function (spine) { + var EventData = (function () { + function EventData(name) { + this.name = name; + } + return EventData; + }()); + spine.EventData = EventData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraint = (function () { + function IkConstraint(data, skeleton) { + this.bendDirection = 0; + this.compress = false; + this.stretch = false; + this.mix = 1; + this.softness = 0; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + IkConstraint.prototype.isActive = function () { + return this.active; + }; + IkConstraint.prototype.apply = function () { + this.update(); + }; + IkConstraint.prototype.update = function () { + var target = this.target; + var bones = this.bones; + switch (bones.length) { + case 1: + this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); + break; + case 2: + this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix); + break; + } + }; + IkConstraint.prototype.apply1 = function (bone, targetX, targetY, compress, stretch, uniform, alpha) { + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var p = bone.parent; + var pa = p.a, pb = p.b, pc = p.c, pd = p.d; + var rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0; + switch (bone.data.transformMode) { + case spine.TransformMode.OnlyTranslation: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + break; + case spine.TransformMode.NoRotationOrReflection: + var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + var sa = pa / bone.skeleton.scaleX; + var sc = pc / bone.skeleton.scaleY; + pb = -sc * s * bone.skeleton.scaleX; + pd = sa * s * bone.skeleton.scaleY; + rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg; + default: + var x = targetX - p.worldX, y = targetY - p.worldY; + var d = pa * pd - pb * pc; + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + } + rotationIK += Math.atan2(ty, tx) * spine.MathUtils.radDeg; + if (bone.ascaleX < 0) + rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; + else if (rotationIK < -180) + rotationIK += 360; + var sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { + switch (bone.data.transformMode) { + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + } + var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty); + if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) { + var s = (dd / b - 1) * alpha + 1; + sx *= s; + if (uniform) + sy *= s; + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); + }; + IkConstraint.prototype.apply2 = function (parent, child, targetX, targetY, bendDir, stretch, softness, alpha) { + if (alpha == 0) { + child.updateWorldTransform(); + return; + } + if (!parent.appliedValid) + parent.updateAppliedTransform(); + if (!child.appliedValid) + child.updateAppliedTransform(); + var px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX; + var os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } + else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } + else + os2 = 0; + var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + var u = Math.abs(psx - psy) <= 0.0001; + if (!u) { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } + else { + cy = child.ay; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } + var pp = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; + if (l1 < 0.0001) { + this.apply1(parent, targetX, targetY, false, stretch, false, alpha); + child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + var dd = tx * tx + ty * ty; + if (softness != 0) { + softness *= psx * (csx + 1) / 2; + var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + var p = Math.min(1, sd / (softness * 2)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: if (u) { + l2 *= psx; + var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) + cos = -1; + else if (cos > 1) { + cos = 1; + if (stretch) + sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + } + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } + else { + a = psx * l2; + b = psy * l2; + var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + var c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + var q = Math.sqrt(d); + if (c1 < 0) + q = -q; + q = -(c1 + q) / 2; + var r0 = q / c2, r1 = c / q; + var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + if (r * r <= dd) { + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; + } + } + var minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; + } + } + if (dd <= (minDist + maxDist) / 2) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } + else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + var os = Math.atan2(cy, cx) * s2; + var rotation = parent.arotation; + a1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) + a1 += 360; + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0); + rotation = child.arotation; + a2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) + a2 += 360; + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + }; + return IkConstraint; + }()); + spine.IkConstraint = IkConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraintData = (function (_super) { + __extends(IkConstraintData, _super); + function IkConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.bendDirection = 1; + _this.compress = false; + _this.stretch = false; + _this.uniform = false; + _this.mix = 1; + _this.softness = 0; + return _this; + } + return IkConstraintData; + }(spine.ConstraintData)); + spine.IkConstraintData = IkConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraint = (function () { + function PathConstraint(data, skeleton) { + this.position = 0; + this.spacing = 0; + this.rotateMix = 0; + this.translateMix = 0; + this.spaces = new Array(); + this.positions = new Array(); + this.world = new Array(); + this.curves = new Array(); + this.lengths = new Array(); + this.segments = new Array(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0, n = data.bones.length; i < n; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findSlot(data.target.name); + this.position = data.position; + this.spacing = data.spacing; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + } + PathConstraint.prototype.isActive = function () { + return this.active; + }; + PathConstraint.prototype.apply = function () { + this.update(); + }; + PathConstraint.prototype.update = function () { + var attachment = this.target.getAttachment(); + if (!(attachment instanceof spine.PathAttachment)) + return; + var rotateMix = this.rotateMix, translateMix = this.translateMix; + var translate = translateMix > 0, rotate = rotateMix > 0; + if (!translate && !rotate) + return; + var data = this.data; + var percentSpacing = data.spacingMode == spine.SpacingMode.Percent; + var rotateMode = data.rotateMode; + var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; + var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + var bones = this.bones; + var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; + var spacing = this.spacing; + if (scale || !percentSpacing) { + if (scale) + lengths = spine.Utils.setArraySize(this.lengths, boneCount); + var lengthSpacing = data.spacingMode == spine.SpacingMode.Length; + for (var i = 0, n = spacesCount - 1; i < n;) { + var bone = bones[i]; + var setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + if (scale) + lengths[i] = 0; + spaces[++i] = 0; + } + else if (percentSpacing) { + if (scale) { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_1 = Math.sqrt(x * x + y * y); + lengths[i] = length_1; + } + spaces[++i] = spacing; + } + else { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_2 = Math.sqrt(x * x + y * y); + if (scale) + lengths[i] = length_2; + spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength; + } + } + } + else { + for (var i = 1; i < spacesCount; i++) + spaces[i] = spacing; + } + var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing); + var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + var tip = false; + if (offsetRotation == 0) + tip = rotateMode == spine.RotateMode.Chain; + else { + tip = false; + var p = this.target.bone; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + } + for (var i = 0, p = 3; i < boneCount; i++, p += 3) { + var bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * translateMix; + bone.worldY += (boneY - bone.worldY) * translateMix; + var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + var length_3 = lengths[i]; + if (length_3 != 0) { + var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * rotateMix + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + if (tangents) + r = positions[p - 1]; + else if (spaces[i + 1] == 0) + r = positions[p + 2]; + else + r = Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + var length_4 = bone.data.length; + boneX += (length_4 * (cos * a - sin * c) - dx) * rotateMix; + boneY += (length_4 * (sin * a + cos * c) - dy) * rotateMix; + } + else { + r += offsetRotation; + } + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.appliedValid = false; + } + }; + PathConstraint.prototype.computeWorldPositions = function (path, spacesCount, tangents, percentPosition, percentSpacing) { + var target = this.target; + var position = this.position; + var spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null; + var closed = path.closed; + var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE; + if (!path.constantSpeed) { + var lengths = path.lengths; + curveCount -= closed ? 1 : 2; + var pathLength_1 = lengths[curveCount]; + if (percentPosition) + position *= pathLength_1; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength_1; + } + world = spine.Utils.setArraySize(this.world, 8); + for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength_1; + if (p < 0) + p += pathLength_1; + curve = 0; + } + else if (p < 0) { + if (prevCurve != PathConstraint.BEFORE) { + prevCurve = PathConstraint.BEFORE; + path.computeWorldVertices(target, 2, 4, world, 0, 2); + } + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength_1) { + if (prevCurve != PathConstraint.AFTER) { + prevCurve = PathConstraint.AFTER; + path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength_1, world, 0, out, o); + continue; + } + for (;; curve++) { + var length_5 = lengths[curve]; + if (p > length_5) + continue; + if (curve == 0) + p /= length_5; + else { + var prev = lengths[curve - 1]; + p = (p - prev) / (length_5 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); + path.computeWorldVertices(target, 0, 4, world, 4, 2); + } + else + path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2); + } + this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0)); + } + return out; + } + if (closed) { + verticesLength += 2; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); + path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } + else { + curveCount--; + verticesLength -= 4; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + var curves = spine.Utils.setArraySize(this.curves, curveCount); + var pathLength = 0; + var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (var i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (percentPosition) + position *= pathLength; + else + position *= pathLength / path.lengths[curveCount - 1]; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength; + } + var segments = this.segments; + var curveLength = 0; + for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength; + if (p < 0) + p += pathLength; + curve = 0; + } + else if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + for (;; curve++) { + var length_6 = curves[curve]; + if (p > length_6) + continue; + if (curve == 0) + p /= length_6; + else { + var prev = curves[curve - 1]; + p = (p - prev) / (length_6 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + var ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + p *= curveLength; + for (;; segment++) { + var length_7 = segments[segment]; + if (p > length_7) + continue; + if (segment == 0) + p /= length_7; + else { + var prev = segments[segment - 1]; + p = segment + (p - prev) / (length_7 - prev); + } + break; + } + this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); + } + return out; + }; + PathConstraint.prototype.addBeforePosition = function (p, temp, i, out, o) { + var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addAfterPosition = function (p, temp, i, out, o) { + var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addCurvePosition = function (p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { + if (p == 0 || isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + var ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) { + if (p < 0.001) + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + else + out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + }; + PathConstraint.NONE = -1; + PathConstraint.BEFORE = -2; + PathConstraint.AFTER = -3; + PathConstraint.epsilon = 0.00001; + return PathConstraint; + }()); + spine.PathConstraint = PathConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraintData = (function (_super) { + __extends(PathConstraintData, _super); + function PathConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + return _this; + } + return PathConstraintData; + }(spine.ConstraintData)); + spine.PathConstraintData = PathConstraintData; + var PositionMode; + (function (PositionMode) { + PositionMode[PositionMode["Fixed"] = 0] = "Fixed"; + PositionMode[PositionMode["Percent"] = 1] = "Percent"; + })(PositionMode = spine.PositionMode || (spine.PositionMode = {})); + var SpacingMode; + (function (SpacingMode) { + SpacingMode[SpacingMode["Length"] = 0] = "Length"; + SpacingMode[SpacingMode["Fixed"] = 1] = "Fixed"; + SpacingMode[SpacingMode["Percent"] = 2] = "Percent"; + })(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {})); + var RotateMode; + (function (RotateMode) { + RotateMode[RotateMode["Tangent"] = 0] = "Tangent"; + RotateMode[RotateMode["Chain"] = 1] = "Chain"; + RotateMode[RotateMode["ChainScale"] = 2] = "ChainScale"; + })(RotateMode = spine.RotateMode || (spine.RotateMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Assets = (function () { + function Assets(clientId) { + this.toLoad = new Array(); + this.assets = {}; + this.clientId = clientId; + } + Assets.prototype.loaded = function () { + var i = 0; + for (var v in this.assets) + i++; + return i; + }; + return Assets; + }()); + var SharedAssetManager = (function () { + function SharedAssetManager(pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.clientAssets = {}; + this.queuedAssets = {}; + this.rawAssets = {}; + this.errors = {}; + this.pathPrefix = pathPrefix; + } + SharedAssetManager.prototype.queueAsset = function (clientId, textureLoader, path) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) { + clientAssets = new Assets(clientId); + this.clientAssets[clientId] = clientAssets; + } + if (textureLoader !== null) + clientAssets.textureLoader = textureLoader; + clientAssets.toLoad.push(path); + if (this.queuedAssets[path] === path) { + return false; + } + else { + this.queuedAssets[path] = path; + return true; + } + }; + SharedAssetManager.prototype.loadText = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = request.responseText; + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadJson = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = JSON.parse(request.responseText); + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadTexture = function (clientId, textureLoader, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, textureLoader, path)) + return; + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + if (isWebWorker) { + var options = { mode: "cors" }; + fetch(path, options).then(function (response) { + if (!response.ok) { + _this.errors[path] = "Couldn't load image " + path; + } + return response.blob(); + }).then(function (blob) { + return createImageBitmap(blob, { + premultiplyAlpha: 'none', + colorSpaceConversion: 'none' + }); + }).then(function (bitmap) { + _this.rawAssets[path] = bitmap; + }); + } + else { + var img_1 = new Image(); + img_1.crossOrigin = "anonymous"; + img_1.onload = function (ev) { + _this.rawAssets[path] = img_1; + }; + img_1.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + }; + img_1.src = path; + } + }; + SharedAssetManager.prototype.get = function (clientId, path) { + path = this.pathPrefix + path; + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + return clientAssets.assets[path]; + }; + SharedAssetManager.prototype.updateClientAssets = function (clientAssets) { + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + for (var i = 0; i < clientAssets.toLoad.length; i++) { + var path = clientAssets.toLoad[i]; + var asset = clientAssets.assets[path]; + if (asset === null || asset === undefined) { + var rawAsset = this.rawAssets[path]; + if (rawAsset === null || rawAsset === undefined) + continue; + if (isWebWorker) { + if (rawAsset instanceof ImageBitmap) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + else { + if (rawAsset instanceof HTMLImageElement) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + } + } + }; + SharedAssetManager.prototype.isLoadingComplete = function (clientId) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + this.updateClientAssets(clientAssets); + return clientAssets.toLoad.length == clientAssets.loaded(); + }; + SharedAssetManager.prototype.dispose = function () { + }; + SharedAssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + SharedAssetManager.prototype.getErrors = function () { + return this.errors; + }; + return SharedAssetManager; + }()); + spine.SharedAssetManager = SharedAssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Skeleton = (function () { + function Skeleton(data) { + this._updateCache = new Array(); + this.updateCacheReset = new Array(); + this.time = 0; + this.scaleX = 1; + this.scaleY = 1; + this.x = 0; + this.y = 0; + if (data == null) + throw new Error("data cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) { + var boneData = data.bones[i]; + var bone = void 0; + if (boneData.parent == null) + bone = new spine.Bone(boneData, this, null); + else { + var parent_1 = this.bones[boneData.parent.index]; + bone = new spine.Bone(boneData, this, parent_1); + parent_1.children.push(bone); + } + this.bones.push(bone); + } + this.slots = new Array(); + this.drawOrder = new Array(); + for (var i = 0; i < data.slots.length; i++) { + var slotData = data.slots[i]; + var bone = this.bones[slotData.boneData.index]; + var slot = new spine.Slot(slotData, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } + this.ikConstraints = new Array(); + for (var i = 0; i < data.ikConstraints.length; i++) { + var ikConstraintData = data.ikConstraints[i]; + this.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this)); + } + this.transformConstraints = new Array(); + for (var i = 0; i < data.transformConstraints.length; i++) { + var transformConstraintData = data.transformConstraints[i]; + this.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this)); + } + this.pathConstraints = new Array(); + for (var i = 0; i < data.pathConstraints.length; i++) { + var pathConstraintData = data.pathConstraints[i]; + this.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this)); + } + this.color = new spine.Color(1, 1, 1, 1); + this.updateCache(); + } + Skeleton.prototype.updateCache = function () { + var updateCache = this._updateCache; + updateCache.length = 0; + this.updateCacheReset.length = 0; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + } + if (this.skin != null) { + var skinBones = this.skin.bones; + for (var i = 0, n = this.skin.bones.length; i < n; i++) { + var bone = this.bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (bone != null); + } + } + var ikConstraints = this.ikConstraints; + var transformConstraints = this.transformConstraints; + var pathConstraints = this.pathConstraints; + var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length; + var constraintCount = ikCount + transformCount + pathCount; + outer: for (var i = 0; i < constraintCount; i++) { + for (var ii = 0; ii < ikCount; ii++) { + var constraint = ikConstraints[ii]; + if (constraint.data.order == i) { + this.sortIkConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < transformCount; ii++) { + var constraint = transformConstraints[ii]; + if (constraint.data.order == i) { + this.sortTransformConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < pathCount; ii++) { + var constraint = pathConstraints[ii]; + if (constraint.data.order == i) { + this.sortPathConstraint(constraint); + continue outer; + } + } + } + for (var i = 0, n = bones.length; i < n; i++) + this.sortBone(bones[i]); + }; + Skeleton.prototype.sortIkConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var target = constraint.target; + this.sortBone(target); + var constrained = constraint.bones; + var parent = constrained[0]; + this.sortBone(parent); + if (constrained.length > 1) { + var child = constrained[constrained.length - 1]; + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + this._updateCache.push(constraint); + this.sortReset(parent.children); + constrained[constrained.length - 1].sorted = true; + }; + Skeleton.prototype.sortPathConstraint = function (constraint) { + constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var slot = constraint.target; + var slotIndex = slot.data.index; + var slotBone = slot.bone; + if (this.skin != null) + this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); + if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin) + this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); + for (var i = 0, n = this.data.skins.length; i < n; i++) + this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); + var attachment = slot.getAttachment(); + if (attachment instanceof spine.PathAttachment) + this.sortPathConstraintAttachmentWith(attachment, slotBone); + var constrained = constraint.bones; + var boneCount = constrained.length; + for (var i = 0; i < boneCount; i++) + this.sortBone(constrained[i]); + this._updateCache.push(constraint); + for (var i = 0; i < boneCount; i++) + this.sortReset(constrained[i].children); + for (var i = 0; i < boneCount; i++) + constrained[i].sorted = true; + }; + Skeleton.prototype.sortTransformConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + this.sortBone(constraint.target); + var constrained = constraint.bones; + var boneCount = constrained.length; + if (constraint.data.local) { + for (var i = 0; i < boneCount; i++) { + var child = constrained[i]; + this.sortBone(child.parent); + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + } + else { + for (var i = 0; i < boneCount; i++) { + this.sortBone(constrained[i]); + } + } + this._updateCache.push(constraint); + for (var ii = 0; ii < boneCount; ii++) + this.sortReset(constrained[ii].children); + for (var ii = 0; ii < boneCount; ii++) + constrained[ii].sorted = true; + }; + Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) { + var attachments = skin.attachments[slotIndex]; + if (!attachments) + return; + for (var key in attachments) { + this.sortPathConstraintAttachmentWith(attachments[key], slotBone); + } + }; + Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) { + if (!(attachment instanceof spine.PathAttachment)) + return; + var pathBones = attachment.bones; + if (pathBones == null) + this.sortBone(slotBone); + else { + var bones = this.bones; + var i = 0; + while (i < pathBones.length) { + var boneCount = pathBones[i++]; + for (var n = i + boneCount; i < n; i++) { + var boneIndex = pathBones[i]; + this.sortBone(bones[boneIndex]); + } + } + } + }; + Skeleton.prototype.sortBone = function (bone) { + if (bone.sorted) + return; + var parent = bone.parent; + if (parent != null) + this.sortBone(parent); + bone.sorted = true; + this._updateCache.push(bone); + }; + Skeleton.prototype.sortReset = function (bones) { + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.active) + continue; + if (bone.sorted) + this.sortReset(bone.children); + bone.sorted = false; + } + }; + Skeleton.prototype.updateWorldTransform = function () { + var updateCacheReset = this.updateCacheReset; + for (var i = 0, n = updateCacheReset.length; i < n; i++) { + var bone = updateCacheReset[i]; + bone.ax = bone.x; + bone.ay = bone.y; + bone.arotation = bone.rotation; + bone.ascaleX = bone.scaleX; + bone.ascaleY = bone.scaleY; + bone.ashearX = bone.shearX; + bone.ashearY = bone.shearY; + bone.appliedValid = true; + } + var updateCache = this._updateCache; + for (var i = 0, n = updateCache.length; i < n; i++) + updateCache[i].update(); + }; + Skeleton.prototype.setToSetupPose = function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }; + Skeleton.prototype.setBonesToSetupPose = function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + var data = constraint.data; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + } + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + var data = constraint.data; + constraint.position = data.position; + constraint.spacing = data.spacing; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + } + }; + Skeleton.prototype.setSlotsToSetupPose = function () { + var slots = this.slots; + spine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length); + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(); + }; + Skeleton.prototype.getRootBone = function () { + if (this.bones.length == 0) + return null; + return this.bones[0]; + }; + Skeleton.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.data.name == boneName) + return bone; + } + return null; + }; + Skeleton.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) + return i; + return -1; + }; + Skeleton.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) + return slot; + } + return null; + }; + Skeleton.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) + return i; + return -1; + }; + Skeleton.prototype.setSkinByName = function (skinName) { + var skin = this.data.findSkin(skinName); + if (skin == null) + throw new Error("Skin not found: " + skinName); + this.setSkin(skin); + }; + Skeleton.prototype.setSkin = function (newSkin) { + if (newSkin == this.skin) + return; + if (newSkin != null) { + if (this.skin != null) + newSkin.attachAll(this, this.skin); + else { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var name_1 = slot.data.attachmentName; + if (name_1 != null) { + var attachment = newSkin.getAttachment(i, name_1); + if (attachment != null) + slot.setAttachment(attachment); + } + } + } + } + this.skin = newSkin; + this.updateCache(); + }; + Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) { + return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName); + }; + Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) { + if (attachmentName == null) + throw new Error("attachmentName cannot be null."); + if (this.skin != null) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment != null) + return attachment; + } + if (this.data.defaultSkin != null) + return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }; + Skeleton.prototype.setAttachment = function (slotName, attachmentName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName != null) { + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) + throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); + } + slot.setAttachment(attachment); + return; + } + } + throw new Error("Slot not found: " + slotName); + }; + Skeleton.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var ikConstraint = ikConstraints[i]; + if (ikConstraint.data.name == constraintName) + return ikConstraint; + } + return null; + }; + Skeleton.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.getBounds = function (offset, size, temp) { + if (temp === void 0) { temp = new Array(2); } + if (offset == null) + throw new Error("offset cannot be null."); + if (size == null) + throw new Error("size cannot be null."); + var drawOrder = this.drawOrder; + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + if (!slot.bone.active) + continue; + var verticesLength = 0; + var vertices = null; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.RegionAttachment) { + verticesLength = 8; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + attachment.computeWorldVertices(slot.bone, vertices, 0, 2); + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + verticesLength = mesh.worldVerticesLength; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); + } + if (vertices != null) { + for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) { + var x = vertices[ii], y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + } + offset.set(minX, minY); + size.set(maxX - minX, maxY - minY); + }; + Skeleton.prototype.update = function (delta) { + this.time += delta; + }; + return Skeleton; + }()); + spine.Skeleton = Skeleton; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBinary = (function () { + function SkeletonBinary(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonBinary.prototype.readSkeletonData = function (binary) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + skeletonData.name = ""; + var input = new BinaryInput(binary); + skeletonData.hash = input.readString(); + skeletonData.version = input.readString(); + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + var nonessential = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + var n = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) + input.strings.push(input.readString()); + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var name_2 = input.readString(); + var parent_2 = i == 0 ? null : skeletonData.bones[input.readInt(true)]; + var data = new spine.BoneData(i, name_2, parent_2); + data.rotation = input.readFloat(); + data.x = input.readFloat() * scale; + data.y = input.readFloat() * scale; + data.scaleX = input.readFloat(); + data.scaleY = input.readFloat(); + data.shearX = input.readFloat(); + data.shearY = input.readFloat(); + data.length = input.readFloat() * scale; + data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)]; + data.skinRequired = input.readBoolean(); + if (nonessential) + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + skeletonData.bones.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var slotName = input.readString(); + var boneData = skeletonData.bones[input.readInt(true)]; + var data = new spine.SlotData(i, slotName, boneData); + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + var darkColor = input.readInt32(); + if (darkColor != -1) + spine.Color.rgb888ToColor(data.darkColor = new spine.Color(), darkColor); + data.attachmentName = input.readStringRef(); + data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)]; + skeletonData.slots.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.IkConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.mix = input.readFloat(); + data.softness = input.readFloat() * scale; + data.bendDirection = input.readByte(); + data.compress = input.readBoolean(); + data.stretch = input.readBoolean(); + data.uniform = input.readBoolean(); + skeletonData.ikConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.TransformConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.local = input.readBoolean(); + data.relative = input.readBoolean(); + data.offsetRotation = input.readFloat(); + data.offsetX = input.readFloat() * scale; + data.offsetY = input.readFloat() * scale; + data.offsetScaleX = input.readFloat(); + data.offsetScaleY = input.readFloat(); + data.offsetShearY = input.readFloat(); + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + data.scaleMix = input.readFloat(); + data.shearMix = input.readFloat(); + skeletonData.transformConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.PathConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.slots[input.readInt(true)]; + data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)]; + data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)]; + data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)]; + data.offsetRotation = input.readFloat(); + data.position = input.readFloat(); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = input.readFloat(); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + skeletonData.pathConstraints.push(data); + } + var defaultSkin = this.readSkin(input, skeletonData, true, nonessential); + if (defaultSkin != null) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + { + var i = skeletonData.skins.length; + spine.Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true)); + for (; i < n; i++) + skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential); + } + n = this.linkedMeshes.length; + for (var i = 0; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_3 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_3 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_3); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var data = new spine.EventData(input.readStringRef()); + data.intValue = input.readInt(false); + data.floatValue = input.readFloat(); + data.stringValue = input.readString(); + data.audioPath = input.readString(); + if (data.audioPath != null) { + data.volume = input.readFloat(); + data.balance = input.readFloat(); + } + skeletonData.events.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) + skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData)); + return skeletonData; + }; + SkeletonBinary.prototype.readSkin = function (input, skeletonData, defaultSkin, nonessential) { + var skin = null; + var slotCount = 0; + if (defaultSkin) { + slotCount = input.readInt(true); + if (slotCount == 0) + return null; + skin = new spine.Skin("default"); + } + else { + skin = new spine.Skin(input.readStringRef()); + skin.bones.length = input.readInt(true); + for (var i = 0, n = skin.bones.length; i < n; i++) + skin.bones[i] = skeletonData.bones[input.readInt(true)]; + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]); + slotCount = input.readInt(true); + } + for (var i = 0; i < slotCount; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var name_3 = input.readStringRef(); + var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_3, nonessential); + if (attachment != null) + skin.setAttachment(slotIndex, name_3, attachment); + } + } + return skin; + }; + SkeletonBinary.prototype.readAttachment = function (input, skeletonData, skin, slotIndex, attachmentName, nonessential) { + var scale = this.scale; + var name = input.readStringRef(); + if (name == null) + name = attachmentName; + var typeIndex = input.readByte(); + var type = SkeletonBinary.AttachmentTypeValues[typeIndex]; + switch (type) { + case spine.AttachmentType.Region: { + var path = input.readStringRef(); + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var scaleX = input.readFloat(); + var scaleY = input.readFloat(); + var width = input.readFloat(); + var height = input.readFloat(); + var color = input.readInt32(); + if (path == null) + path = name; + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = x * scale; + region.y = y * scale; + region.scaleX = scaleX; + region.scaleY = scaleY; + region.rotation = rotation; + region.width = width * scale; + region.height = height * scale; + spine.Color.rgba8888ToColor(region.color, color); + region.updateOffset(); + return region; + } + case spine.AttachmentType.BoundingBox: { + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + box.worldVerticesLength = vertexCount << 1; + box.vertices = vertices.vertices; + box.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(box.color, color); + return box; + } + case spine.AttachmentType.Mesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var vertexCount = input.readInt(true); + var uvs = this.readFloatArray(input, vertexCount << 1, 1); + var triangles = this.readShortArray(input); + var vertices = this.readVertices(input, vertexCount); + var hullLength = input.readInt(true); + var edges = null; + var width = 0, height = 0; + if (nonessential) { + edges = this.readShortArray(input); + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertexCount << 1; + mesh.triangles = triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.hullLength = hullLength << 1; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + return mesh; + } + case spine.AttachmentType.LinkedMesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var skinName = input.readStringRef(); + var parent_4 = input.readStringRef(); + var inheritDeform = input.readBoolean(); + var width = 0, height = 0; + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_4, inheritDeform)); + return mesh; + } + case spine.AttachmentType.Path: { + var closed_1 = input.readBoolean(); + var constantSpeed = input.readBoolean(); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0, n = lengths.length; i < n; i++) + lengths[i] = input.readFloat() * scale; + var color = nonessential ? input.readInt32() : 0; + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = closed_1; + path.constantSpeed = constantSpeed; + path.worldVerticesLength = vertexCount << 1; + path.vertices = vertices.vertices; + path.bones = vertices.bones; + path.lengths = lengths; + if (nonessential) + spine.Color.rgba8888ToColor(path.color, color); + return path; + } + case spine.AttachmentType.Point: { + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var color = nonessential ? input.readInt32() : 0; + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + if (nonessential) + spine.Color.rgba8888ToColor(point.color, color); + return point; + } + case spine.AttachmentType.Clipping: { + var endSlotIndex = input.readInt(true); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.worldVerticesLength = vertexCount << 1; + clip.vertices = vertices.vertices; + clip.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(clip.color, color); + return clip; + } + } + return null; + }; + SkeletonBinary.prototype.readVertices = function (input, vertexCount) { + var verticesLength = vertexCount << 1; + var vertices = new Vertices(); + var scale = this.scale; + if (!input.readBoolean()) { + vertices.vertices = this.readFloatArray(input, verticesLength, scale); + return vertices; + } + var weights = new Array(); + var bonesArray = new Array(); + for (var i = 0; i < vertexCount; i++) { + var boneCount = input.readInt(true); + bonesArray.push(boneCount); + for (var ii = 0; ii < boneCount; ii++) { + bonesArray.push(input.readInt(true)); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat()); + } + } + vertices.vertices = spine.Utils.toFloatArray(weights); + vertices.bones = bonesArray; + return vertices; + }; + SkeletonBinary.prototype.readFloatArray = function (input, n, scale) { + var array = new Array(n); + if (scale == 1) { + for (var i = 0; i < n; i++) + array[i] = input.readFloat(); + } + else { + for (var i = 0; i < n; i++) + array[i] = input.readFloat() * scale; + } + return array; + }; + SkeletonBinary.prototype.readShortArray = function (input) { + var n = input.readInt(true); + var array = new Array(n); + for (var i = 0; i < n; i++) + array[i] = input.readShort(); + return array; + }; + SkeletonBinary.prototype.readAnimation = function (input, name, skeletonData) { + var timelines = new Array(); + var scale = this.scale; + var duration = 0; + var tempColor1 = new spine.Color(); + var tempColor2 = new spine.Color(); + for (var i = 0, n = input.readInt(true); i < n; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.SLOT_ATTACHMENT: { + var timeline = new spine.AttachmentTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) + timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef()); + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + break; + } + case SkeletonBinary.SLOT_COLOR: { + var timeline = new spine.ColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.ColorTimeline.ENTRIES]); + break; + } + case SkeletonBinary.SLOT_TWO_COLOR: { + var timeline = new spine.TwoColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + spine.Color.rgb888ToColor(tempColor2, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TwoColorTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var boneIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.BONE_ROTATE: { + var timeline = new spine.RotateTimeline(frameCount); + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.RotateTimeline.ENTRIES]); + break; + } + case SkeletonBinary.BONE_TRANSLATE: + case SkeletonBinary.BONE_SCALE: + case SkeletonBinary.BONE_SHEAR: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.BONE_SCALE) + timeline = new spine.ScaleTimeline(frameCount); + else if (timelineType == SkeletonBinary.BONE_SHEAR) + timeline = new spine.ShearTimeline(frameCount); + else { + timeline = new spine.TranslateTimeline(frameCount); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TranslateTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.IkConstraintTimeline(frameCount); + timeline.ikConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.TransformConstraintTimeline(frameCount); + timeline.transformConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var data = skeletonData.pathConstraints[index]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.PATH_POSITION: + case SkeletonBinary.PATH_SPACING: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.PATH_SPACING) { + timeline = new spine.PathConstraintSpacingTimeline(frameCount); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(frameCount); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + break; + } + case SkeletonBinary.PATH_MIX: { + var timeline = new spine.PathConstraintMixTimeline(frameCount); + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var skin = skeletonData.skins[input.readInt(true)]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var slotIndex = input.readInt(true); + for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { + var attachment = skin.getAttachment(slotIndex, input.readStringRef()); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var frameCount = input.readInt(true); + var timeline = new spine.DeformTimeline(frameCount); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + var deform = void 0; + var end = input.readInt(true); + if (end == 0) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = input.readInt(true); + end += start; + if (scale == 1) { + for (var v = start; v < end; v++) + deform[v] = input.readFloat(); + } + else { + for (var v = start; v < end; v++) + deform[v] = input.readFloat() * scale; + } + if (!weighted) { + for (var v = 0, vn = deform.length; v < vn; v++) + deform[v] += vertices[v]; + } + } + timeline.setFrame(frameIndex, time, deform); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + } + } + } + var drawOrderCount = input.readInt(true); + if (drawOrderCount > 0) { + var timeline = new spine.DrawOrderTimeline(drawOrderCount); + var slotCount = skeletonData.slots.length; + for (var i = 0; i < drawOrderCount; i++) { + var time = input.readFloat(); + var offsetCount = input.readInt(true); + var drawOrder = spine.Utils.newArray(slotCount, 0); + for (var ii = slotCount - 1; ii >= 0; ii--) + drawOrder[ii] = -1; + var unchanged = spine.Utils.newArray(slotCount - offsetCount, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var ii = 0; ii < offsetCount; ii++) { + var slotIndex = input.readInt(true); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + input.readInt(true)] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var ii = slotCount - 1; ii >= 0; ii--) + if (drawOrder[ii] == -1) + drawOrder[ii] = unchanged[--unchangedIndex]; + timeline.setFrame(i, time, drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[drawOrderCount - 1]); + } + var eventCount = input.readInt(true); + if (eventCount > 0) { + var timeline = new spine.EventTimeline(eventCount); + for (var i = 0; i < eventCount; i++) { + var time = input.readFloat(); + var eventData = skeletonData.events[input.readInt(true)]; + var event_4 = new spine.Event(time, eventData); + event_4.intValue = input.readInt(false); + event_4.floatValue = input.readFloat(); + event_4.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue; + if (event_4.data.audioPath != null) { + event_4.volume = input.readFloat(); + event_4.balance = input.readFloat(); + } + timeline.setFrame(i, event_4); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[eventCount - 1]); + } + return new spine.Animation(name, timelines, duration); + }; + SkeletonBinary.prototype.readCurve = function (input, frameIndex, timeline) { + switch (input.readByte()) { + case SkeletonBinary.CURVE_STEPPED: + timeline.setStepped(frameIndex); + break; + case SkeletonBinary.CURVE_BEZIER: + this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + break; + } + }; + SkeletonBinary.prototype.setCurve = function (timeline, frameIndex, cx1, cy1, cx2, cy2) { + timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2); + }; + SkeletonBinary.AttachmentTypeValues = [0, 1, 2, 3, 4, 5, 6]; + SkeletonBinary.TransformModeValues = [spine.TransformMode.Normal, spine.TransformMode.OnlyTranslation, spine.TransformMode.NoRotationOrReflection, spine.TransformMode.NoScale, spine.TransformMode.NoScaleOrReflection]; + SkeletonBinary.PositionModeValues = [spine.PositionMode.Fixed, spine.PositionMode.Percent]; + SkeletonBinary.SpacingModeValues = [spine.SpacingMode.Length, spine.SpacingMode.Fixed, spine.SpacingMode.Percent]; + SkeletonBinary.RotateModeValues = [spine.RotateMode.Tangent, spine.RotateMode.Chain, spine.RotateMode.ChainScale]; + SkeletonBinary.BlendModeValues = [spine.BlendMode.Normal, spine.BlendMode.Additive, spine.BlendMode.Multiply, spine.BlendMode.Screen]; + SkeletonBinary.BONE_ROTATE = 0; + SkeletonBinary.BONE_TRANSLATE = 1; + SkeletonBinary.BONE_SCALE = 2; + SkeletonBinary.BONE_SHEAR = 3; + SkeletonBinary.SLOT_ATTACHMENT = 0; + SkeletonBinary.SLOT_COLOR = 1; + SkeletonBinary.SLOT_TWO_COLOR = 2; + SkeletonBinary.PATH_POSITION = 0; + SkeletonBinary.PATH_SPACING = 1; + SkeletonBinary.PATH_MIX = 2; + SkeletonBinary.CURVE_LINEAR = 0; + SkeletonBinary.CURVE_STEPPED = 1; + SkeletonBinary.CURVE_BEZIER = 2; + return SkeletonBinary; + }()); + spine.SkeletonBinary = SkeletonBinary; + var BinaryInput = (function () { + function BinaryInput(data, strings, index, buffer) { + if (strings === void 0) { strings = new Array(); } + if (index === void 0) { index = 0; } + if (buffer === void 0) { buffer = new DataView(data.buffer); } + this.strings = strings; + this.index = index; + this.buffer = buffer; + } + BinaryInput.prototype.readByte = function () { + return this.buffer.getInt8(this.index++); + }; + BinaryInput.prototype.readShort = function () { + var value = this.buffer.getInt16(this.index); + this.index += 2; + return value; + }; + BinaryInput.prototype.readInt32 = function () { + var value = this.buffer.getInt32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readInt = function (optimizePositive) { + var b = this.readByte(); + var result = b & 0x7F; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 7; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 14; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 21; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 28; + } + } + } + } + return optimizePositive ? result : ((result >>> 1) ^ -(result & 1)); + }; + BinaryInput.prototype.readStringRef = function () { + var index = this.readInt(true); + return index == 0 ? null : this.strings[index - 1]; + }; + BinaryInput.prototype.readString = function () { + var byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + case 1: + return ""; + } + byteCount--; + var chars = ""; + var charCount = 0; + for (var i = 0; i < byteCount;) { + var b = this.readByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F)); + i += 2; + break; + case 14: + chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F)); + i += 3; + break; + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + }; + BinaryInput.prototype.readFloat = function () { + var value = this.buffer.getFloat32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readBoolean = function () { + return this.readByte() != 0; + }; + return BinaryInput; + }()); + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); + var Vertices = (function () { + function Vertices(bones, vertices) { + if (bones === void 0) { bones = null; } + if (vertices === void 0) { vertices = null; } + this.bones = bones; + this.vertices = vertices; + } + return Vertices; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBounds = (function () { + function SkeletonBounds() { + this.minX = 0; + this.minY = 0; + this.maxX = 0; + this.maxY = 0; + this.boundingBoxes = new Array(); + this.polygons = new Array(); + this.polygonPool = new spine.Pool(function () { + return spine.Utils.newFloatArray(16); + }); + } + SkeletonBounds.prototype.update = function (skeleton, updateAabb) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + var boundingBoxes = this.boundingBoxes; + var polygons = this.polygons; + var polygonPool = this.polygonPool; + var slots = skeleton.slots; + var slotCount = slots.length; + boundingBoxes.length = 0; + polygonPool.freeAll(polygons); + polygons.length = 0; + for (var i = 0; i < slotCount; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.BoundingBoxAttachment) { + var boundingBox = attachment; + boundingBoxes.push(boundingBox); + var polygon = polygonPool.obtain(); + if (polygon.length != boundingBox.worldVerticesLength) { + polygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength); + } + polygons.push(polygon); + boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2); + } + } + if (updateAabb) { + this.aabbCompute(); + } + else { + this.minX = Number.POSITIVE_INFINITY; + this.minY = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.maxY = Number.NEGATIVE_INFINITY; + } + }; + SkeletonBounds.prototype.aabbCompute = function () { + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) { + var polygon = polygons[i]; + var vertices = polygon; + for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) { + var x = vertices[ii]; + var y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + }; + SkeletonBounds.prototype.aabbContainsPoint = function (x, y) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + }; + SkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) { + var minX = this.minX; + var minY = this.minY; + var maxX = this.maxX; + var maxY = this.maxY; + if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY)) + return false; + var m = (y2 - y1) / (x2 - x1); + var y = m * (minX - x1) + y1; + if (y > minY && y < maxY) + return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) + return true; + var x = (minY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + return false; + }; + SkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + }; + SkeletonBounds.prototype.containsPoint = function (x, y) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.containsPointPolygon(polygons[i], x, y)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) { + var vertices = polygon; + var nn = polygon.length; + var prevIndex = nn - 2; + var inside = false; + for (var ii = 0; ii < nn; ii += 2) { + var vertexY = vertices[ii + 1]; + var prevY = vertices[prevIndex + 1]; + if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) { + var vertexX = vertices[ii]; + if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) + inside = !inside; + } + prevIndex = ii; + } + return inside; + }; + SkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) { + var vertices = polygon; + var nn = polygon.length; + var width12 = x1 - x2, height12 = y1 - y2; + var det1 = x1 * y2 - y1 * x2; + var x3 = vertices[nn - 2], y3 = vertices[nn - 1]; + for (var ii = 0; ii < nn; ii += 2) { + var x4 = vertices[ii], y4 = vertices[ii + 1]; + var det2 = x3 * y4 - y3 * x4; + var width34 = x3 - x4, height34 = y3 - y4; + var det3 = width12 * height34 - height12 * width34; + var x = (det1 * width34 - width12 * det2) / det3; + if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) { + var y = (det1 * height34 - height12 * det2) / det3; + if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1))) + return true; + } + x3 = x4; + y3 = y4; + } + return false; + }; + SkeletonBounds.prototype.getPolygon = function (boundingBox) { + if (boundingBox == null) + throw new Error("boundingBox cannot be null."); + var index = this.boundingBoxes.indexOf(boundingBox); + return index == -1 ? null : this.polygons[index]; + }; + SkeletonBounds.prototype.getWidth = function () { + return this.maxX - this.minX; + }; + SkeletonBounds.prototype.getHeight = function () { + return this.maxY - this.minY; + }; + return SkeletonBounds; + }()); + spine.SkeletonBounds = SkeletonBounds; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonClipping = (function () { + function SkeletonClipping() { + this.triangulator = new spine.Triangulator(); + this.clippingPolygon = new Array(); + this.clipOutput = new Array(); + this.clippedVertices = new Array(); + this.clippedTriangles = new Array(); + this.scratch = new Array(); + } + SkeletonClipping.prototype.clipStart = function (slot, clip) { + if (this.clipAttachment != null) + return 0; + this.clipAttachment = clip; + var n = clip.worldVerticesLength; + var vertices = spine.Utils.setArraySize(this.clippingPolygon, n); + clip.computeWorldVertices(slot, 0, n, vertices, 0, 2); + var clippingPolygon = this.clippingPolygon; + SkeletonClipping.makeClockwise(clippingPolygon); + var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)); + for (var i = 0, n_2 = clippingPolygons.length; i < n_2; i++) { + var polygon = clippingPolygons[i]; + SkeletonClipping.makeClockwise(polygon); + polygon.push(polygon[0]); + polygon.push(polygon[1]); + } + return clippingPolygons.length; + }; + SkeletonClipping.prototype.clipEndWithSlot = function (slot) { + if (this.clipAttachment != null && this.clipAttachment.endSlot == slot.data) + this.clipEnd(); + }; + SkeletonClipping.prototype.clipEnd = function () { + if (this.clipAttachment == null) + return; + this.clipAttachment = null; + this.clippingPolygons = null; + this.clippedVertices.length = 0; + this.clippedTriangles.length = 0; + this.clippingPolygon.length = 0; + }; + SkeletonClipping.prototype.isClipping = function () { + return this.clipAttachment != null; + }; + SkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) { + var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; + var clippedTriangles = this.clippedTriangles; + var polygons = this.clippingPolygons; + var polygonsCount = this.clippingPolygons.length; + var vertexSize = twoColor ? 12 : 8; + var index = 0; + clippedVertices.length = 0; + clippedTriangles.length = 0; + outer: for (var i = 0; i < trianglesLength; i += 3) { + var vertexOffset = triangles[i] << 1; + var x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; + var u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 1] << 1; + var x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1]; + var u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 2] << 1; + var x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1]; + var u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1]; + for (var p = 0; p < polygonsCount; p++) { + var s = clippedVertices.length; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { + var clipOutputLength = clipOutput.length; + if (clipOutputLength == 0) + continue; + var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1; + var d = 1 / (d0 * d2 + d1 * (y1 - y3)); + var clipOutputCount = clipOutputLength >> 1; + var clipOutputItems = this.clipOutput; + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); + for (var ii = 0; ii < clipOutputLength; ii += 2) { + var x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + var c0 = x - x3, c1 = y - y3; + var a = (d0 * c0 + d1 * c1) * d; + var b = (d4 * c0 + d2 * c1) * d; + var c = 1 - a - b; + clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c; + clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + } + s += vertexSize; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (var ii = 1; ii < clipOutputCount; ii++) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + ii); + clippedTrianglesItems[s + 2] = (index + ii + 1); + s += 3; + } + index += clipOutputCount + 1; + } + else { + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + if (!twoColor) { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = x2; + clippedVerticesItems[s + 9] = y2; + clippedVerticesItems[s + 10] = light.r; + clippedVerticesItems[s + 11] = light.g; + clippedVerticesItems[s + 12] = light.b; + clippedVerticesItems[s + 13] = light.a; + clippedVerticesItems[s + 14] = u2; + clippedVerticesItems[s + 15] = v2; + clippedVerticesItems[s + 16] = x3; + clippedVerticesItems[s + 17] = y3; + clippedVerticesItems[s + 18] = light.r; + clippedVerticesItems[s + 19] = light.g; + clippedVerticesItems[s + 20] = light.b; + clippedVerticesItems[s + 21] = light.a; + clippedVerticesItems[s + 22] = u3; + clippedVerticesItems[s + 23] = v3; + } + else { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + clippedVerticesItems[s + 12] = x2; + clippedVerticesItems[s + 13] = y2; + clippedVerticesItems[s + 14] = light.r; + clippedVerticesItems[s + 15] = light.g; + clippedVerticesItems[s + 16] = light.b; + clippedVerticesItems[s + 17] = light.a; + clippedVerticesItems[s + 18] = u2; + clippedVerticesItems[s + 19] = v2; + clippedVerticesItems[s + 20] = dark.r; + clippedVerticesItems[s + 21] = dark.g; + clippedVerticesItems[s + 22] = dark.b; + clippedVerticesItems[s + 23] = dark.a; + clippedVerticesItems[s + 24] = x3; + clippedVerticesItems[s + 25] = y3; + clippedVerticesItems[s + 26] = light.r; + clippedVerticesItems[s + 27] = light.g; + clippedVerticesItems[s + 28] = light.b; + clippedVerticesItems[s + 29] = light.a; + clippedVerticesItems[s + 30] = u3; + clippedVerticesItems[s + 31] = v3; + clippedVerticesItems[s + 32] = dark.r; + clippedVerticesItems[s + 33] = dark.g; + clippedVerticesItems[s + 34] = dark.b; + clippedVerticesItems[s + 35] = dark.a; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + 1); + clippedTrianglesItems[s + 2] = (index + 2); + index += 3; + continue outer; + } + } + } + }; + SkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) { + var originalOutput = output; + var clipped = false; + var input = null; + if (clippingArea.length % 4 >= 2) { + input = output; + output = this.scratch; + } + else + input = this.scratch; + input.length = 0; + input.push(x1); + input.push(y1); + input.push(x2); + input.push(y2); + input.push(x3); + input.push(y3); + input.push(x1); + input.push(y1); + output.length = 0; + var clippingVertices = clippingArea; + var clippingVerticesLast = clippingArea.length - 4; + for (var i = 0;; i += 2) { + var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1]; + var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3]; + var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2; + var inputVertices = input; + var inputVerticesLength = input.length - 2, outputStart = output.length; + for (var ii = 0; ii < inputVerticesLength; ii += 2) { + var inputX = inputVertices[ii], inputY = inputVertices[ii + 1]; + var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3]; + var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0; + if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) { + if (side2) { + output.push(inputX2); + output.push(inputY2); + continue; + } + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + } + else if (side2) { + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + output.push(inputX2); + output.push(inputY2); + } + clipped = true; + } + if (outputStart == output.length) { + originalOutput.length = 0; + return true; + } + output.push(output[0]); + output.push(output[1]); + if (i == clippingVerticesLast) + break; + var temp = output; + output = input; + output.length = 0; + input = temp; + } + if (originalOutput != output) { + originalOutput.length = 0; + for (var i = 0, n = output.length - 2; i < n; i++) + originalOutput[i] = output[i]; + } + else + originalOutput.length = originalOutput.length - 2; + return clipped; + }; + SkeletonClipping.makeClockwise = function (polygon) { + var vertices = polygon; + var verticeslength = polygon.length; + var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0; + for (var i = 0, n = verticeslength - 3; i < n; i += 2) { + p1x = vertices[i]; + p1y = vertices[i + 1]; + p2x = vertices[i + 2]; + p2y = vertices[i + 3]; + area += p1x * p2y - p2x * p1y; + } + if (area < 0) + return; + for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) { + var x = vertices[i], y = vertices[i + 1]; + var other = lastX - i; + vertices[i] = vertices[other]; + vertices[i + 1] = vertices[other + 1]; + vertices[other] = x; + vertices[other + 1] = y; + } + }; + return SkeletonClipping; + }()); + spine.SkeletonClipping = SkeletonClipping; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonData = (function () { + function SkeletonData() { + this.bones = new Array(); + this.slots = new Array(); + this.skins = new Array(); + this.events = new Array(); + this.animations = new Array(); + this.ikConstraints = new Array(); + this.transformConstraints = new Array(); + this.pathConstraints = new Array(); + this.fps = 0; + } + SkeletonData.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.name == boneName) + return bone; + } + return null; + }; + SkeletonData.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) + return i; + return -1; + }; + SkeletonData.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.name == slotName) + return slot; + } + return null; + }; + SkeletonData.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) + return i; + return -1; + }; + SkeletonData.prototype.findSkin = function (skinName) { + if (skinName == null) + throw new Error("skinName cannot be null."); + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) { + var skin = skins[i]; + if (skin.name == skinName) + return skin; + } + return null; + }; + SkeletonData.prototype.findEvent = function (eventDataName) { + if (eventDataName == null) + throw new Error("eventDataName cannot be null."); + var events = this.events; + for (var i = 0, n = events.length; i < n; i++) { + var event_5 = events[i]; + if (event_5.name == eventDataName) + return event_5; + } + return null; + }; + SkeletonData.prototype.findAnimation = function (animationName) { + if (animationName == null) + throw new Error("animationName cannot be null."); + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) { + var animation = animations[i]; + if (animation.name == animationName) + return animation; + } + return null; + }; + SkeletonData.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraintIndex = function (pathConstraintName) { + if (pathConstraintName == null) + throw new Error("pathConstraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) + if (pathConstraints[i].name == pathConstraintName) + return i; + return -1; + }; + return SkeletonData; + }()); + spine.SkeletonData = SkeletonData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonJson = (function () { + function SkeletonJson(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonJson.prototype.readSkeletonData = function (json) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + var root = typeof (json) === "string" ? JSON.parse(json) : json; + var skeletonMap = root.skeleton; + if (skeletonMap != null) { + skeletonData.hash = skeletonMap.hash; + skeletonData.version = skeletonMap.spine; + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = skeletonMap.x; + skeletonData.y = skeletonMap.y; + skeletonData.width = skeletonMap.width; + skeletonData.height = skeletonMap.height; + skeletonData.fps = skeletonMap.fps; + skeletonData.imagesPath = skeletonMap.images; + } + if (root.bones) { + for (var i = 0; i < root.bones.length; i++) { + var boneMap = root.bones[i]; + var parent_5 = null; + var parentName = this.getValue(boneMap, "parent", null); + if (parentName != null) { + parent_5 = skeletonData.findBone(parentName); + if (parent_5 == null) + throw new Error("Parent bone not found: " + parentName); + } + var data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_5); + data.length = this.getValue(boneMap, "length", 0) * scale; + data.x = this.getValue(boneMap, "x", 0) * scale; + data.y = this.getValue(boneMap, "y", 0) * scale; + data.rotation = this.getValue(boneMap, "rotation", 0); + data.scaleX = this.getValue(boneMap, "scaleX", 1); + data.scaleY = this.getValue(boneMap, "scaleY", 1); + data.shearX = this.getValue(boneMap, "shearX", 0); + data.shearY = this.getValue(boneMap, "shearY", 0); + data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, "transform", "normal")); + data.skinRequired = this.getValue(boneMap, "skin", false); + skeletonData.bones.push(data); + } + } + if (root.slots) { + for (var i = 0; i < root.slots.length; i++) { + var slotMap = root.slots[i]; + var slotName = slotMap.name; + var boneName = slotMap.bone; + var boneData = skeletonData.findBone(boneName); + if (boneData == null) + throw new Error("Slot bone not found: " + boneName); + var data = new spine.SlotData(skeletonData.slots.length, slotName, boneData); + var color = this.getValue(slotMap, "color", null); + if (color != null) + data.color.setFromString(color); + var dark = this.getValue(slotMap, "dark", null); + if (dark != null) { + data.darkColor = new spine.Color(1, 1, 1, 1); + data.darkColor.setFromString(dark); + } + data.attachmentName = this.getValue(slotMap, "attachment", null); + data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, "blend", "normal")); + skeletonData.slots.push(data); + } + } + if (root.ik) { + for (var i = 0; i < root.ik.length; i++) { + var constraintMap = root.ik[i]; + var data = new spine.IkConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("IK bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("IK target bone not found: " + targetName); + data.mix = this.getValue(constraintMap, "mix", 1); + data.softness = this.getValue(constraintMap, "softness", 0) * scale; + data.bendDirection = this.getValue(constraintMap, "bendPositive", true) ? 1 : -1; + data.compress = this.getValue(constraintMap, "compress", false); + data.stretch = this.getValue(constraintMap, "stretch", false); + data.uniform = this.getValue(constraintMap, "uniform", false); + skeletonData.ikConstraints.push(data); + } + } + if (root.transform) { + for (var i = 0; i < root.transform.length; i++) { + var constraintMap = root.transform[i]; + var data = new spine.TransformConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("Transform constraint target bone not found: " + targetName); + data.local = this.getValue(constraintMap, "local", false); + data.relative = this.getValue(constraintMap, "relative", false); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.offsetX = this.getValue(constraintMap, "x", 0) * scale; + data.offsetY = this.getValue(constraintMap, "y", 0) * scale; + data.offsetScaleX = this.getValue(constraintMap, "scaleX", 0); + data.offsetScaleY = this.getValue(constraintMap, "scaleY", 0); + data.offsetShearY = this.getValue(constraintMap, "shearY", 0); + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + data.scaleMix = this.getValue(constraintMap, "scaleMix", 1); + data.shearMix = this.getValue(constraintMap, "shearMix", 1); + skeletonData.transformConstraints.push(data); + } + } + if (root.path) { + for (var i = 0; i < root.path.length; i++) { + var constraintMap = root.path[i]; + var data = new spine.PathConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findSlot(targetName); + if (data.target == null) + throw new Error("Path target slot not found: " + targetName); + data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, "positionMode", "percent")); + data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, "spacingMode", "length")); + data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, "rotateMode", "tangent")); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.position = this.getValue(constraintMap, "position", 0); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = this.getValue(constraintMap, "spacing", 0); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + skeletonData.pathConstraints.push(data); + } + } + if (root.skins) { + for (var i = 0; i < root.skins.length; i++) { + var skinMap = root.skins[i]; + var skin = new spine.Skin(skinMap.name); + if (skinMap.bones) { + for (var ii = 0; ii < skinMap.bones.length; ii++) { + var bone = skeletonData.findBone(skinMap.bones[ii]); + if (bone == null) + throw new Error("Skin bone not found: " + skinMap.bones[i]); + skin.bones.push(bone); + } + } + if (skinMap.ik) { + for (var ii = 0; ii < skinMap.ik.length; ii++) { + var constraint = skeletonData.findIkConstraint(skinMap.ik[ii]); + if (constraint == null) + throw new Error("Skin IK constraint not found: " + skinMap.ik[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.transform) { + for (var ii = 0; ii < skinMap.transform.length; ii++) { + var constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]); + if (constraint == null) + throw new Error("Skin transform constraint not found: " + skinMap.transform[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.path) { + for (var ii = 0; ii < skinMap.path.length; ii++) { + var constraint = skeletonData.findPathConstraint(skinMap.path[ii]); + if (constraint == null) + throw new Error("Skin path constraint not found: " + skinMap.path[i]); + skin.constraints.push(constraint); + } + } + for (var slotName in skinMap.attachments) { + var slot = skeletonData.findSlot(slotName); + if (slot == null) + throw new Error("Slot not found: " + slotName); + var slotMap = skinMap.attachments[slotName]; + for (var entryName in slotMap) { + var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); + if (attachment != null) + skin.setAttachment(slot.index, entryName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") + skeletonData.defaultSkin = skin; + } + } + for (var i = 0, n = this.linkedMeshes.length; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_6 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_6 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_6 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_6); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + if (root.events) { + for (var eventName in root.events) { + var eventMap = root.events[eventName]; + var data = new spine.EventData(eventName); + data.intValue = this.getValue(eventMap, "int", 0); + data.floatValue = this.getValue(eventMap, "float", 0); + data.stringValue = this.getValue(eventMap, "string", ""); + data.audioPath = this.getValue(eventMap, "audio", null); + if (data.audioPath != null) { + data.volume = this.getValue(eventMap, "volume", 1); + data.balance = this.getValue(eventMap, "balance", 0); + } + skeletonData.events.push(data); + } + } + if (root.animations) { + for (var animationName in root.animations) { + var animationMap = root.animations[animationName]; + this.readAnimation(animationMap, animationName, skeletonData); + } + } + return skeletonData; + }; + SkeletonJson.prototype.readAttachment = function (map, skin, slotIndex, name, skeletonData) { + var scale = this.scale; + name = this.getValue(map, "name", name); + var type = this.getValue(map, "type", "region"); + switch (type) { + case "region": { + var path = this.getValue(map, "path", name); + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = this.getValue(map, "x", 0) * scale; + region.y = this.getValue(map, "y", 0) * scale; + region.scaleX = this.getValue(map, "scaleX", 1); + region.scaleY = this.getValue(map, "scaleY", 1); + region.rotation = this.getValue(map, "rotation", 0); + region.width = map.width * scale; + region.height = map.height * scale; + var color = this.getValue(map, "color", null); + if (color != null) + region.color.setFromString(color); + region.updateOffset(); + return region; + } + case "boundingbox": { + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + this.readVertices(map, box, map.vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + box.color.setFromString(color); + return box; + } + case "mesh": + case "linkedmesh": { + var path = this.getValue(map, "path", name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + var color = this.getValue(map, "color", null); + if (color != null) + mesh.color.setFromString(color); + mesh.width = this.getValue(map, "width", 0) * scale; + mesh.height = this.getValue(map, "height", 0) * scale; + var parent_7 = this.getValue(map, "parent", null); + if (parent_7 != null) { + this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, "skin", null), slotIndex, parent_7, this.getValue(map, "deform", true))); + return mesh; + } + var uvs = map.uvs; + this.readVertices(map, mesh, uvs.length); + mesh.triangles = map.triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.edges = this.getValue(map, "edges", null); + mesh.hullLength = this.getValue(map, "hull", 0) * 2; + return mesh; + } + case "path": { + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = this.getValue(map, "closed", false); + path.constantSpeed = this.getValue(map, "constantSpeed", true); + var vertexCount = map.vertexCount; + this.readVertices(map, path, vertexCount << 1); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0; i < map.lengths.length; i++) + lengths[i] = map.lengths[i] * scale; + path.lengths = lengths; + var color = this.getValue(map, "color", null); + if (color != null) + path.color.setFromString(color); + return path; + } + case "point": { + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = this.getValue(map, "x", 0) * scale; + point.y = this.getValue(map, "y", 0) * scale; + point.rotation = this.getValue(map, "rotation", 0); + var color = this.getValue(map, "color", null); + if (color != null) + point.color.setFromString(color); + return point; + } + case "clipping": { + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + var end = this.getValue(map, "end", null); + if (end != null) { + var slot = skeletonData.findSlot(end); + if (slot == null) + throw new Error("Clipping end slot not found: " + end); + clip.endSlot = slot; + } + var vertexCount = map.vertexCount; + this.readVertices(map, clip, vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + clip.color.setFromString(color); + return clip; + } + } + return null; + }; + SkeletonJson.prototype.readVertices = function (map, attachment, verticesLength) { + var scale = this.scale; + attachment.worldVerticesLength = verticesLength; + var vertices = map.vertices; + if (verticesLength == vertices.length) { + var scaledVertices = spine.Utils.toFloatArray(vertices); + if (scale != 1) { + for (var i = 0, n = vertices.length; i < n; i++) + scaledVertices[i] *= scale; + } + attachment.vertices = scaledVertices; + return; + } + var weights = new Array(); + var bones = new Array(); + for (var i = 0, n = vertices.length; i < n;) { + var boneCount = vertices[i++]; + bones.push(boneCount); + for (var nn = i + boneCount * 4; i < nn; i += 4) { + bones.push(vertices[i]); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = spine.Utils.toFloatArray(weights); + }; + SkeletonJson.prototype.readAnimation = function (map, name, skeletonData) { + var scale = this.scale; + var timelines = new Array(); + var duration = 0; + if (map.slots) { + for (var slotName in map.slots) { + var slotMap = map.slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotName); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex++, this.getValue(valueMap, "time", 0), valueMap.name); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + else if (timelineName == "color") { + var timeline = new spine.ColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var color = new spine.Color(); + color.setFromString(valueMap.color); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), color.r, color.g, color.b, color.a); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]); + } + else if (timelineName == "twoColor") { + var timeline = new spine.TwoColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var light = new spine.Color(); + var dark = new spine.Color(); + light.setFromString(valueMap.light); + dark.setFromString(valueMap.dark); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"); + } + } + } + if (map.bones) { + for (var boneName in map.bones) { + var boneMap = map.bones[boneName]; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) + throw new Error("Bone not found: " + boneName); + for (var timelineName in boneMap) { + var timelineMap = boneMap[timelineName]; + if (timelineName === "rotate") { + var timeline = new spine.RotateTimeline(timelineMap.length); + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "angle", 0)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]); + } + else if (timelineName === "translate" || timelineName === "scale" || timelineName === "shear") { + var timeline = null; + var timelineScale = 1, defaultValue = 0; + if (timelineName === "scale") { + timeline = new spine.ScaleTimeline(timelineMap.length); + defaultValue = 1; + } + else if (timelineName === "shear") + timeline = new spine.ShearTimeline(timelineMap.length); + else { + timeline = new spine.TranslateTimeline(timelineMap.length); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var x = this.getValue(valueMap, "x", defaultValue), y = this.getValue(valueMap, "y", defaultValue); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), x * timelineScale, y * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); + } + } + } + if (map.ik) { + for (var constraintName in map.ik) { + var constraintMap = map.ik[constraintName]; + var constraint = skeletonData.findIkConstraint(constraintName); + var timeline = new spine.IkConstraintTimeline(constraintMap.length); + timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "mix", 1), this.getValue(valueMap, "softness", 0) * scale, this.getValue(valueMap, "bendPositive", true) ? 1 : -1, this.getValue(valueMap, "compress", false), this.getValue(valueMap, "stretch", false)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + } + if (map.transform) { + for (var constraintName in map.transform) { + var constraintMap = map.transform[constraintName]; + var constraint = skeletonData.findTransformConstraint(constraintName); + var timeline = new spine.TransformConstraintTimeline(constraintMap.length); + timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1), this.getValue(valueMap, "scaleMix", 1), this.getValue(valueMap, "shearMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + } + if (map.path) { + for (var constraintName in map.path) { + var constraintMap = map.path[constraintName]; + var index = skeletonData.findPathConstraintIndex(constraintName); + if (index == -1) + throw new Error("Path constraint not found: " + constraintName); + var data = skeletonData.pathConstraints[index]; + for (var timelineName in constraintMap) { + var timelineMap = constraintMap[timelineName]; + if (timelineName === "position" || timelineName === "spacing") { + var timeline = null; + var timelineScale = 1; + if (timelineName === "spacing") { + timeline = new spine.PathConstraintSpacingTimeline(timelineMap.length); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(timelineMap.length); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, timelineName, 0) * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + } + else if (timelineName === "mix") { + var timeline = new spine.PathConstraintMixTimeline(timelineMap.length); + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + } + } + } + } + if (map.deform) { + for (var deformName in map.deform) { + var deformMap = map.deform[deformName]; + var skin = skeletonData.findSkin(deformName); + if (skin == null) + throw new Error("Skin not found: " + deformName); + for (var slotName in deformMap) { + var slotMap = deformMap[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotMap.name); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + var attachment = skin.getAttachment(slotIndex, timelineName); + if (attachment == null) + throw new Error("Deform attachment not found: " + timelineMap.name); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var timeline = new spine.DeformTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + var frameIndex = 0; + for (var j = 0; j < timelineMap.length; j++) { + var valueMap = timelineMap[j]; + var deform = void 0; + var verticesValue = this.getValue(valueMap, "vertices", null); + if (verticesValue == null) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = this.getValue(valueMap, "offset", 0); + spine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length); + if (scale != 1) { + for (var i = start, n = i + verticesValue.length; i < n; i++) + deform[i] *= scale; + } + if (!weighted) { + for (var i = 0; i < deformLength; i++) + deform[i] += vertices[i]; + } + } + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), deform); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + } + } + } + var drawOrderNode = map.drawOrder; + if (drawOrderNode == null) + drawOrderNode = map.draworder; + if (drawOrderNode != null) { + var timeline = new spine.DrawOrderTimeline(drawOrderNode.length); + var slotCount = skeletonData.slots.length; + var frameIndex = 0; + for (var j = 0; j < drawOrderNode.length; j++) { + var drawOrderMap = drawOrderNode[j]; + var drawOrder = null; + var offsets = this.getValue(drawOrderMap, "offsets", null); + if (offsets != null) { + drawOrder = spine.Utils.newArray(slotCount, -1); + var unchanged = spine.Utils.newArray(slotCount - offsets.length, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var i = 0; i < offsets.length; i++) { + var offsetMap = offsets[i]; + var slotIndex = skeletonData.findSlotIndex(offsetMap.slot); + if (slotIndex == -1) + throw new Error("Slot not found: " + offsetMap.slot); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + offsetMap.offset] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var i = slotCount - 1; i >= 0; i--) + if (drawOrder[i] == -1) + drawOrder[i] = unchanged[--unchangedIndex]; + } + timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, "time", 0), drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (map.events) { + var timeline = new spine.EventTimeline(map.events.length); + var frameIndex = 0; + for (var i = 0; i < map.events.length; i++) { + var eventMap = map.events[i]; + var eventData = skeletonData.findEvent(eventMap.name); + if (eventData == null) + throw new Error("Event not found: " + eventMap.name); + var event_6 = new spine.Event(spine.Utils.toSinglePrecision(this.getValue(eventMap, "time", 0)), eventData); + event_6.intValue = this.getValue(eventMap, "int", eventData.intValue); + event_6.floatValue = this.getValue(eventMap, "float", eventData.floatValue); + event_6.stringValue = this.getValue(eventMap, "string", eventData.stringValue); + if (event_6.data.audioPath != null) { + event_6.volume = this.getValue(eventMap, "volume", 1); + event_6.balance = this.getValue(eventMap, "balance", 0); + } + timeline.setFrame(frameIndex++, event_6); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (isNaN(duration)) { + throw new Error("Error while parsing animation, duration is NaN"); + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + }; + SkeletonJson.prototype.readCurve = function (map, timeline, frameIndex) { + if (!map.hasOwnProperty("curve")) + return; + if (map.curve == "stepped") + timeline.setStepped(frameIndex); + else { + var curve = map.curve; + timeline.setCurve(frameIndex, curve, this.getValue(map, "c2", 0), this.getValue(map, "c3", 1), this.getValue(map, "c4", 1)); + } + }; + SkeletonJson.prototype.getValue = function (map, prop, defaultValue) { + return map[prop] !== undefined ? map[prop] : defaultValue; + }; + SkeletonJson.blendModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.BlendMode.Normal; + if (str == "additive") + return spine.BlendMode.Additive; + if (str == "multiply") + return spine.BlendMode.Multiply; + if (str == "screen") + return spine.BlendMode.Screen; + throw new Error("Unknown blend mode: " + str); + }; + SkeletonJson.positionModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "fixed") + return spine.PositionMode.Fixed; + if (str == "percent") + return spine.PositionMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.spacingModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "length") + return spine.SpacingMode.Length; + if (str == "fixed") + return spine.SpacingMode.Fixed; + if (str == "percent") + return spine.SpacingMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.rotateModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "tangent") + return spine.RotateMode.Tangent; + if (str == "chain") + return spine.RotateMode.Chain; + if (str == "chainscale") + return spine.RotateMode.ChainScale; + throw new Error("Unknown rotate mode: " + str); + }; + SkeletonJson.transformModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.TransformMode.Normal; + if (str == "onlytranslation") + return spine.TransformMode.OnlyTranslation; + if (str == "norotationorreflection") + return spine.TransformMode.NoRotationOrReflection; + if (str == "noscale") + return spine.TransformMode.NoScale; + if (str == "noscaleorreflection") + return spine.TransformMode.NoScaleOrReflection; + throw new Error("Unknown transform mode: " + str); + }; + return SkeletonJson; + }()); + spine.SkeletonJson = SkeletonJson; + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkinEntry = (function () { + function SkinEntry(slotIndex, name, attachment) { + this.slotIndex = slotIndex; + this.name = name; + this.attachment = attachment; + } + return SkinEntry; + }()); + spine.SkinEntry = SkinEntry; + var Skin = (function () { + function Skin(name) { + this.attachments = new Array(); + this.bones = Array(); + this.constraints = new Array(); + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + Skin.prototype.setAttachment = function (slotIndex, name, attachment) { + if (attachment == null) + throw new Error("attachment cannot be null."); + var attachments = this.attachments; + if (slotIndex >= attachments.length) + attachments.length = slotIndex + 1; + if (!attachments[slotIndex]) + attachments[slotIndex] = {}; + attachments[slotIndex][name] = attachment; + }; + Skin.prototype.addSkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + }; + Skin.prototype.copySkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + if (attachment.attachment == null) + continue; + if (attachment.attachment instanceof spine.MeshAttachment) { + attachment.attachment = attachment.attachment.newLinkedMesh(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + else { + attachment.attachment = attachment.attachment.copy(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + }; + Skin.prototype.getAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + return dictionary ? dictionary[name] : null; + }; + Skin.prototype.removeAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + if (dictionary) + dictionary[name] = null; + }; + Skin.prototype.getAttachments = function () { + var entries = new Array(); + for (var i = 0; i < this.attachments.length; i++) { + var slotAttachments = this.attachments[i]; + if (slotAttachments) { + for (var name_4 in slotAttachments) { + var attachment = slotAttachments[name_4]; + if (attachment) + entries.push(new SkinEntry(i, name_4, attachment)); + } + } + } + return entries; + }; + Skin.prototype.getAttachmentsForSlot = function (slotIndex, attachments) { + var slotAttachments = this.attachments[slotIndex]; + if (slotAttachments) { + for (var name_5 in slotAttachments) { + var attachment = slotAttachments[name_5]; + if (attachment) + attachments.push(new SkinEntry(slotIndex, name_5, attachment)); + } + } + }; + Skin.prototype.clear = function () { + this.attachments.length = 0; + this.bones.length = 0; + this.constraints.length = 0; + }; + Skin.prototype.attachAll = function (skeleton, oldSkin) { + var slotIndex = 0; + for (var i = 0; i < skeleton.slots.length; i++) { + var slot = skeleton.slots[i]; + var slotAttachment = slot.getAttachment(); + if (slotAttachment && slotIndex < oldSkin.attachments.length) { + var dictionary = oldSkin.attachments[slotIndex]; + for (var key in dictionary) { + var skinAttachment = dictionary[key]; + if (slotAttachment == skinAttachment) { + var attachment = this.getAttachment(slotIndex, key); + if (attachment != null) + slot.setAttachment(attachment); + break; + } + } + } + slotIndex++; + } + }; + return Skin; + }()); + spine.Skin = Skin; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Slot = (function () { + function Slot(data, bone) { + this.deform = new Array(); + if (data == null) + throw new Error("data cannot be null."); + if (bone == null) + throw new Error("bone cannot be null."); + this.data = data; + this.bone = bone; + this.color = new spine.Color(); + this.darkColor = data.darkColor == null ? null : new spine.Color(); + this.setToSetupPose(); + } + Slot.prototype.getSkeleton = function () { + return this.bone.skeleton; + }; + Slot.prototype.getAttachment = function () { + return this.attachment; + }; + Slot.prototype.setAttachment = function (attachment) { + if (this.attachment == attachment) + return; + this.attachment = attachment; + this.attachmentTime = this.bone.skeleton.time; + this.deform.length = 0; + }; + Slot.prototype.setAttachmentTime = function (time) { + this.attachmentTime = this.bone.skeleton.time - time; + }; + Slot.prototype.getAttachmentTime = function () { + return this.bone.skeleton.time - this.attachmentTime; + }; + Slot.prototype.setToSetupPose = function () { + this.color.setFromColor(this.data.color); + if (this.darkColor != null) + this.darkColor.setFromColor(this.data.darkColor); + if (this.data.attachmentName == null) + this.attachment = null; + else { + this.attachment = null; + this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + }; + return Slot; + }()); + spine.Slot = Slot; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SlotData = (function () { + function SlotData(index, name, boneData) { + this.color = new spine.Color(1, 1, 1, 1); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + if (boneData == null) + throw new Error("boneData cannot be null."); + this.index = index; + this.name = name; + this.boneData = boneData; + } + return SlotData; + }()); + spine.SlotData = SlotData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Texture = (function () { + function Texture(image) { + this._image = image; + } + Texture.prototype.getImage = function () { + return this._image; + }; + Texture.filterFromString = function (text) { + switch (text.toLowerCase()) { + case "nearest": return TextureFilter.Nearest; + case "linear": return TextureFilter.Linear; + case "mipmap": return TextureFilter.MipMap; + case "mipmapnearestnearest": return TextureFilter.MipMapNearestNearest; + case "mipmaplinearnearest": return TextureFilter.MipMapLinearNearest; + case "mipmapnearestlinear": return TextureFilter.MipMapNearestLinear; + case "mipmaplinearlinear": return TextureFilter.MipMapLinearLinear; + default: throw new Error("Unknown texture filter " + text); + } + }; + Texture.wrapFromString = function (text) { + switch (text.toLowerCase()) { + case "mirroredtepeat": return TextureWrap.MirroredRepeat; + case "clamptoedge": return TextureWrap.ClampToEdge; + case "repeat": return TextureWrap.Repeat; + default: throw new Error("Unknown texture wrap " + text); + } + }; + return Texture; + }()); + spine.Texture = Texture; + var TextureFilter; + (function (TextureFilter) { + TextureFilter[TextureFilter["Nearest"] = 9728] = "Nearest"; + TextureFilter[TextureFilter["Linear"] = 9729] = "Linear"; + TextureFilter[TextureFilter["MipMap"] = 9987] = "MipMap"; + TextureFilter[TextureFilter["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; + TextureFilter[TextureFilter["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; + TextureFilter[TextureFilter["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; + TextureFilter[TextureFilter["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; + })(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {})); + var TextureWrap; + (function (TextureWrap) { + TextureWrap[TextureWrap["MirroredRepeat"] = 33648] = "MirroredRepeat"; + TextureWrap[TextureWrap["ClampToEdge"] = 33071] = "ClampToEdge"; + TextureWrap[TextureWrap["Repeat"] = 10497] = "Repeat"; + })(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {})); + var TextureRegion = (function () { + function TextureRegion() { + this.u = 0; + this.v = 0; + this.u2 = 0; + this.v2 = 0; + this.width = 0; + this.height = 0; + this.rotate = false; + this.offsetX = 0; + this.offsetY = 0; + this.originalWidth = 0; + this.originalHeight = 0; + } + return TextureRegion; + }()); + spine.TextureRegion = TextureRegion; + var FakeTexture = (function (_super) { + __extends(FakeTexture, _super); + function FakeTexture() { + return _super !== null && _super.apply(this, arguments) || this; + } + FakeTexture.prototype.setFilters = function (minFilter, magFilter) { }; + FakeTexture.prototype.setWraps = function (uWrap, vWrap) { }; + FakeTexture.prototype.dispose = function () { }; + return FakeTexture; + }(Texture)); + spine.FakeTexture = FakeTexture; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TextureAtlas = (function () { + function TextureAtlas(atlasText, textureLoader) { + this.pages = new Array(); + this.regions = new Array(); + this.load(atlasText, textureLoader); + } + TextureAtlas.prototype.load = function (atlasText, textureLoader) { + if (textureLoader == null) + throw new Error("textureLoader cannot be null."); + var reader = new TextureAtlasReader(atlasText); + var tuple = new Array(4); + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) + break; + line = line.trim(); + if (line.length == 0) + page = null; + else if (!page) { + page = new TextureAtlasPage(); + page.name = line; + if (reader.readTuple(tuple) == 2) { + page.width = parseInt(tuple[0]); + page.height = parseInt(tuple[1]); + reader.readTuple(tuple); + } + reader.readTuple(tuple); + page.minFilter = spine.Texture.filterFromString(tuple[0]); + page.magFilter = spine.Texture.filterFromString(tuple[1]); + var direction = reader.readValue(); + page.uWrap = spine.TextureWrap.ClampToEdge; + page.vWrap = spine.TextureWrap.ClampToEdge; + if (direction == "x") + page.uWrap = spine.TextureWrap.Repeat; + else if (direction == "y") + page.vWrap = spine.TextureWrap.Repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.TextureWrap.Repeat; + page.texture = textureLoader(line); + page.texture.setFilters(page.minFilter, page.magFilter); + page.texture.setWraps(page.uWrap, page.vWrap); + page.width = page.texture.getImage().width; + page.height = page.texture.getImage().height; + this.pages.push(page); + } + else { + var region = new TextureAtlasRegion(); + region.name = line; + region.page = page; + var rotateValue = reader.readValue(); + if (rotateValue.toLocaleLowerCase() == "true") { + region.degrees = 90; + } + else if (rotateValue.toLocaleLowerCase() == "false") { + region.degrees = 0; + } + else { + region.degrees = parseFloat(rotateValue); + } + region.rotate = region.degrees == 90; + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } + else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + if (reader.readTuple(tuple) == 4) { + if (reader.readTuple(tuple) == 4) { + reader.readTuple(tuple); + } + } + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + region.index = parseInt(reader.readValue()); + region.texture = page.texture; + this.regions.push(region); + } + } + }; + TextureAtlas.prototype.findRegion = function (name) { + for (var i = 0; i < this.regions.length; i++) { + if (this.regions[i].name == name) { + return this.regions[i]; + } + } + return null; + }; + TextureAtlas.prototype.dispose = function () { + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].texture.dispose(); + } + }; + return TextureAtlas; + }()); + spine.TextureAtlas = TextureAtlas; + var TextureAtlasReader = (function () { + function TextureAtlasReader(text) { + this.index = 0; + this.lines = text.split(/\r\n|\r|\n/); + } + TextureAtlasReader.prototype.readLine = function () { + if (this.index >= this.lines.length) + return null; + return this.lines[this.index++]; + }; + TextureAtlasReader.prototype.readValue = function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + return line.substring(colon + 1).trim(); + }; + TextureAtlasReader.prototype.readTuple = function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + var i = 0, lastMatch = colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) + break; + tuple[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + } + tuple[i] = line.substring(lastMatch).trim(); + return i + 1; + }; + return TextureAtlasReader; + }()); + var TextureAtlasPage = (function () { + function TextureAtlasPage() { + } + return TextureAtlasPage; + }()); + spine.TextureAtlasPage = TextureAtlasPage; + var TextureAtlasRegion = (function (_super) { + __extends(TextureAtlasRegion, _super); + function TextureAtlasRegion() { + return _super !== null && _super.apply(this, arguments) || this; + } + return TextureAtlasRegion; + }(spine.TextureRegion)); + spine.TextureAtlasRegion = TextureAtlasRegion; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraint = (function () { + function TransformConstraint(data, skeleton) { + this.rotateMix = 0; + this.translateMix = 0; + this.scaleMix = 0; + this.shearMix = 0; + this.temp = new spine.Vector2(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + this.scaleMix = data.scaleMix; + this.shearMix = data.shearMix; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + TransformConstraint.prototype.isActive = function () { + return this.active; + }; + TransformConstraint.prototype.apply = function () { + this.update(); + }; + TransformConstraint.prototype.update = function () { + if (this.data.local) { + if (this.data.relative) + this.applyRelativeLocal(); + else + this.applyAbsoluteLocal(); + } + else { + if (this.data.relative) + this.applyRelativeWorld(); + else + this.applyAbsoluteWorld(); + } + }; + TransformConstraint.prototype.applyAbsoluteWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect; + var offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += (temp.x - bone.worldX) * translateMix; + bone.worldY += (temp.y - bone.worldY) * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + var ts = Math.sqrt(ta * ta + tc * tc); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s; + bone.a *= s; + bone.c *= s; + s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + ts = Math.sqrt(tb * tb + td * td); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var b = bone.b, d = bone.d; + var by = Math.atan2(d, b); + var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r = by + (r + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyRelativeWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += temp.x * translateMix; + bone.worldY += temp.y * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1; + bone.a *= s; + bone.c *= s; + s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var r = Math.atan2(td, tb) - Math.atan2(tc, ta); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + var b = bone.b, d = bone.d; + r = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyAbsoluteLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) { + var r = target.arotation - rotation + this.data.offsetRotation; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + rotation += r * rotateMix; + } + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax - x + this.data.offsetX) * translateMix; + y += (target.ay - y + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX; + if (scaleY > 0.00001) + scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY; + } + var shearY = bone.ashearY; + if (shearMix != 0) { + var r = target.ashearY - shearY + this.data.offsetShearY; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + bone.shearY += r * shearMix; + } + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + TransformConstraint.prototype.applyRelativeLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) + rotation += (target.arotation + this.data.offsetRotation) * rotateMix; + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax + this.data.offsetX) * translateMix; + y += (target.ay + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX *= ((target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix) + 1; + if (scaleY > 0.00001) + scaleY *= ((target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix) + 1; + } + var shearY = bone.ashearY; + if (shearMix != 0) + shearY += (target.ashearY + this.data.offsetShearY) * shearMix; + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + return TransformConstraint; + }()); + spine.TransformConstraint = TransformConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraintData = (function (_super) { + __extends(TransformConstraintData, _super); + function TransformConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.rotateMix = 0; + _this.translateMix = 0; + _this.scaleMix = 0; + _this.shearMix = 0; + _this.offsetRotation = 0; + _this.offsetX = 0; + _this.offsetY = 0; + _this.offsetScaleX = 0; + _this.offsetScaleY = 0; + _this.offsetShearY = 0; + _this.relative = false; + _this.local = false; + return _this; + } + return TransformConstraintData; + }(spine.ConstraintData)); + spine.TransformConstraintData = TransformConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Triangulator = (function () { + function Triangulator() { + this.convexPolygons = new Array(); + this.convexPolygonsIndices = new Array(); + this.indicesArray = new Array(); + this.isConcaveArray = new Array(); + this.triangles = new Array(); + this.polygonPool = new spine.Pool(function () { + return new Array(); + }); + this.polygonIndicesPool = new spine.Pool(function () { + return new Array(); + }); + } + Triangulator.prototype.triangulate = function (verticesArray) { + var vertices = verticesArray; + var vertexCount = verticesArray.length >> 1; + var indices = this.indicesArray; + indices.length = 0; + for (var i = 0; i < vertexCount; i++) + indices[i] = i; + var isConcave = this.isConcaveArray; + isConcave.length = 0; + for (var i = 0, n = vertexCount; i < n; ++i) + isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices); + var triangles = this.triangles; + triangles.length = 0; + while (vertexCount > 3) { + var previous = vertexCount - 1, i = 0, next = 1; + while (true) { + outer: if (!isConcave[i]) { + var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; + var p1x = vertices[p1], p1y = vertices[p1 + 1]; + var p2x = vertices[p2], p2y = vertices[p2 + 1]; + var p3x = vertices[p3], p3y = vertices[p3 + 1]; + for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) { + if (!isConcave[ii]) + continue; + var v = indices[ii] << 1; + var vx = vertices[v], vy = vertices[v + 1]; + if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) { + if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) { + if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) + break outer; + } + } + } + break; + } + if (next == 0) { + do { + if (!isConcave[i]) + break; + i--; + } while (i > 0); + break; + } + previous = i; + i = next; + next = (next + 1) % vertexCount; + } + triangles.push(indices[(vertexCount + i - 1) % vertexCount]); + triangles.push(indices[i]); + triangles.push(indices[(i + 1) % vertexCount]); + indices.splice(i, 1); + isConcave.splice(i, 1); + vertexCount--; + var previousIndex = (vertexCount + i - 1) % vertexCount; + var nextIndex = i == vertexCount ? 0 : i; + isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices); + isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices); + } + if (vertexCount == 3) { + triangles.push(indices[2]); + triangles.push(indices[0]); + triangles.push(indices[1]); + } + return triangles; + }; + Triangulator.prototype.decompose = function (verticesArray, triangles) { + var vertices = verticesArray; + var convexPolygons = this.convexPolygons; + this.polygonPool.freeAll(convexPolygons); + convexPolygons.length = 0; + var convexPolygonsIndices = this.convexPolygonsIndices; + this.polygonIndicesPool.freeAll(convexPolygonsIndices); + convexPolygonsIndices.length = 0; + var polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + var polygon = this.polygonPool.obtain(); + polygon.length = 0; + var fanBaseIndex = -1, lastWinding = 0; + for (var i = 0, n = triangles.length; i < n; i += 3) { + var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1; + var x1 = vertices[t1], y1 = vertices[t1 + 1]; + var x2 = vertices[t2], y2 = vertices[t2 + 1]; + var x3 = vertices[t3], y3 = vertices[t3 + 1]; + var merged = false; + if (fanBaseIndex == t1) { + var o = polygon.length - 4; + var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3); + var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]); + if (winding1 == lastWinding && winding2 == lastWinding) { + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(t3); + merged = true; + } + } + if (!merged) { + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + else { + this.polygonPool.free(polygon); + this.polygonIndicesPool.free(polygonIndices); + } + polygon = this.polygonPool.obtain(); + polygon.length = 0; + polygon.push(x1); + polygon.push(y1); + polygon.push(x2); + polygon.push(y2); + polygon.push(x3); + polygon.push(y3); + polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + polygonIndices.push(t1); + polygonIndices.push(t2); + polygonIndices.push(t3); + lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + } + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + for (var i = 0, n = convexPolygons.length; i < n; i++) { + polygonIndices = convexPolygonsIndices[i]; + if (polygonIndices.length == 0) + continue; + var firstIndex = polygonIndices[0]; + var lastIndex = polygonIndices[polygonIndices.length - 1]; + polygon = convexPolygons[i]; + var o = polygon.length - 4; + var prevPrevX = polygon[o], prevPrevY = polygon[o + 1]; + var prevX = polygon[o + 2], prevY = polygon[o + 3]; + var firstX = polygon[0], firstY = polygon[1]; + var secondX = polygon[2], secondY = polygon[3]; + var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + for (var ii = 0; ii < n; ii++) { + if (ii == i) + continue; + var otherIndices = convexPolygonsIndices[ii]; + if (otherIndices.length != 3) + continue; + var otherFirstIndex = otherIndices[0]; + var otherSecondIndex = otherIndices[1]; + var otherLastIndex = otherIndices[2]; + var otherPoly = convexPolygons[ii]; + var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1]; + if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) + continue; + var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); + var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY); + if (winding1 == winding && winding2 == winding) { + otherPoly.length = 0; + otherIndices.length = 0; + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(otherLastIndex); + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = 0; + } + } + } + for (var i = convexPolygons.length - 1; i >= 0; i--) { + polygon = convexPolygons[i]; + if (polygon.length == 0) { + convexPolygons.splice(i, 1); + this.polygonPool.free(polygon); + polygonIndices = convexPolygonsIndices[i]; + convexPolygonsIndices.splice(i, 1); + this.polygonIndicesPool.free(polygonIndices); + } + } + return convexPolygons; + }; + Triangulator.isConcave = function (index, vertexCount, vertices, indices) { + var previous = indices[(vertexCount + index - 1) % vertexCount] << 1; + var current = indices[index] << 1; + var next = indices[(index + 1) % vertexCount] << 1; + return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]); + }; + Triangulator.positiveArea = function (p1x, p1y, p2x, p2y, p3x, p3y) { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + }; + Triangulator.winding = function (p1x, p1y, p2x, p2y, p3x, p3y) { + var px = p2x - p1x, py = p2y - p1y; + return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; + }; + return Triangulator; + }()); + spine.Triangulator = Triangulator; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IntSet = (function () { + function IntSet() { + this.array = new Array(); + } + IntSet.prototype.add = function (value) { + var contains = this.contains(value); + this.array[value | 0] = value | 0; + return !contains; + }; + IntSet.prototype.contains = function (value) { + return this.array[value | 0] != undefined; + }; + IntSet.prototype.remove = function (value) { + this.array[value | 0] = undefined; + }; + IntSet.prototype.clear = function () { + this.array.length = 0; + }; + return IntSet; + }()); + spine.IntSet = IntSet; + var Color = (function () { + function Color(r, g, b, a) { + if (r === void 0) { r = 0; } + if (g === void 0) { g = 0; } + if (b === void 0) { b = 0; } + if (a === void 0) { a = 0; } + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + Color.prototype.set = function (r, g, b, a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + this.clamp(); + return this; + }; + Color.prototype.setFromColor = function (c) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + }; + Color.prototype.setFromString = function (hex) { + hex = hex.charAt(0) == '#' ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255.0; + this.g = parseInt(hex.substr(2, 2), 16) / 255.0; + this.b = parseInt(hex.substr(4, 2), 16) / 255.0; + this.a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0; + return this; + }; + Color.prototype.add = function (r, g, b, a) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + this.clamp(); + return this; + }; + Color.prototype.clamp = function () { + if (this.r < 0) + this.r = 0; + else if (this.r > 1) + this.r = 1; + if (this.g < 0) + this.g = 0; + else if (this.g > 1) + this.g = 1; + if (this.b < 0) + this.b = 0; + else if (this.b > 1) + this.b = 1; + if (this.a < 0) + this.a = 0; + else if (this.a > 1) + this.a = 1; + return this; + }; + Color.rgba8888ToColor = function (color, value) { + color.r = ((value & 0xff000000) >>> 24) / 255; + color.g = ((value & 0x00ff0000) >>> 16) / 255; + color.b = ((value & 0x0000ff00) >>> 8) / 255; + color.a = ((value & 0x000000ff)) / 255; + }; + Color.rgb888ToColor = function (color, value) { + color.r = ((value & 0x00ff0000) >>> 16) / 255; + color.g = ((value & 0x0000ff00) >>> 8) / 255; + color.b = ((value & 0x000000ff)) / 255; + }; + Color.WHITE = new Color(1, 1, 1, 1); + Color.RED = new Color(1, 0, 0, 1); + Color.GREEN = new Color(0, 1, 0, 1); + Color.BLUE = new Color(0, 0, 1, 1); + Color.MAGENTA = new Color(1, 0, 1, 1); + return Color; + }()); + spine.Color = Color; + var MathUtils = (function () { + function MathUtils() { + } + MathUtils.clamp = function (value, min, max) { + if (value < min) + return min; + if (value > max) + return max; + return value; + }; + MathUtils.cosDeg = function (degrees) { + return Math.cos(degrees * MathUtils.degRad); + }; + MathUtils.sinDeg = function (degrees) { + return Math.sin(degrees * MathUtils.degRad); + }; + MathUtils.signum = function (value) { + return value > 0 ? 1 : value < 0 ? -1 : 0; + }; + MathUtils.toInt = function (x) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + }; + MathUtils.cbrt = function (x) { + var y = Math.pow(Math.abs(x), 1 / 3); + return x < 0 ? -y : y; + }; + MathUtils.randomTriangular = function (min, max) { + return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); + }; + MathUtils.randomTriangularWith = function (min, max, mode) { + var u = Math.random(); + var d = max - min; + if (u <= (mode - min) / d) + return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + }; + MathUtils.PI = 3.1415927; + MathUtils.PI2 = MathUtils.PI * 2; + MathUtils.radiansToDegrees = 180 / MathUtils.PI; + MathUtils.radDeg = MathUtils.radiansToDegrees; + MathUtils.degreesToRadians = MathUtils.PI / 180; + MathUtils.degRad = MathUtils.degreesToRadians; + return MathUtils; + }()); + spine.MathUtils = MathUtils; + var Interpolation = (function () { + function Interpolation() { + } + Interpolation.prototype.apply = function (start, end, a) { + return start + (end - start) * this.applyInternal(a); + }; + return Interpolation; + }()); + spine.Interpolation = Interpolation; + var Pow = (function (_super) { + __extends(Pow, _super); + function Pow(power) { + var _this = _super.call(this) || this; + _this.power = 2; + _this.power = power; + return _this; + } + Pow.prototype.applyInternal = function (a) { + if (a <= 0.5) + return Math.pow(a * 2, this.power) / 2; + return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; + }; + return Pow; + }(Interpolation)); + spine.Pow = Pow; + var PowOut = (function (_super) { + __extends(PowOut, _super); + function PowOut(power) { + return _super.call(this, power) || this; + } + PowOut.prototype.applyInternal = function (a) { + return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; + }; + return PowOut; + }(Pow)); + spine.PowOut = PowOut; + var Utils = (function () { + function Utils() { + } + Utils.arrayCopy = function (source, sourceStart, dest, destStart, numElements) { + for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { + dest[j] = source[i]; + } + }; + Utils.setArraySize = function (array, size, value) { + if (value === void 0) { value = 0; } + var oldSize = array.length; + if (oldSize == size) + return array; + array.length = size; + if (oldSize < size) { + for (var i = oldSize; i < size; i++) + array[i] = value; + } + return array; + }; + Utils.ensureArrayCapacity = function (array, size, value) { + if (value === void 0) { value = 0; } + if (array.length >= size) + return array; + return Utils.setArraySize(array, size, value); + }; + Utils.newArray = function (size, defaultValue) { + var array = new Array(size); + for (var i = 0; i < size; i++) + array[i] = defaultValue; + return array; + }; + Utils.newFloatArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Float32Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.newShortArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Int16Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.toFloatArray = function (array) { + return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + }; + Utils.toSinglePrecision = function (value) { + return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + }; + Utils.webkit602BugfixHelper = function (alpha, blend) { + }; + Utils.contains = function (array, element, identity) { + if (identity === void 0) { identity = true; } + for (var i = 0; i < array.length; i++) { + if (array[i] == element) + return true; + } + return false; + }; + Utils.SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== "undefined"; + return Utils; + }()); + spine.Utils = Utils; + var DebugUtils = (function () { + function DebugUtils() { + } + DebugUtils.logBones = function (skeleton) { + for (var i = 0; i < skeleton.bones.length; i++) { + var bone = skeleton.bones[i]; + console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); + } + }; + return DebugUtils; + }()); + spine.DebugUtils = DebugUtils; + var Pool = (function () { + function Pool(instantiator) { + this.items = new Array(); + this.instantiator = instantiator; + } + Pool.prototype.obtain = function () { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + }; + Pool.prototype.free = function (item) { + if (item.reset) + item.reset(); + this.items.push(item); + }; + Pool.prototype.freeAll = function (items) { + for (var i = 0; i < items.length; i++) { + this.free(items[i]); + } + }; + Pool.prototype.clear = function () { + this.items.length = 0; + }; + return Pool; + }()); + spine.Pool = Pool; + var Vector2 = (function () { + function Vector2(x, y) { + if (x === void 0) { x = 0; } + if (y === void 0) { y = 0; } + this.x = x; + this.y = y; + } + Vector2.prototype.set = function (x, y) { + this.x = x; + this.y = y; + return this; + }; + Vector2.prototype.length = function () { + var x = this.x; + var y = this.y; + return Math.sqrt(x * x + y * y); + }; + Vector2.prototype.normalize = function () { + var len = this.length(); + if (len != 0) { + this.x /= len; + this.y /= len; + } + return this; + }; + return Vector2; + }()); + spine.Vector2 = Vector2; + var TimeKeeper = (function () { + function TimeKeeper() { + this.maxDelta = 0.064; + this.framesPerSecond = 0; + this.delta = 0; + this.totalTime = 0; + this.lastTime = Date.now() / 1000; + this.frameCount = 0; + this.frameTime = 0; + } + TimeKeeper.prototype.update = function () { + var now = Date.now() / 1000; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + if (this.delta > this.maxDelta) + this.delta = this.maxDelta; + this.lastTime = now; + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + }; + return TimeKeeper; + }()); + spine.TimeKeeper = TimeKeeper; + var WindowedMean = (function () { + function WindowedMean(windowSize) { + if (windowSize === void 0) { windowSize = 32; } + this.addedValues = 0; + this.lastValue = 0; + this.mean = 0; + this.dirty = true; + this.values = new Array(windowSize); + } + WindowedMean.prototype.hasEnoughData = function () { + return this.addedValues >= this.values.length; + }; + WindowedMean.prototype.addValue = function (value) { + if (this.addedValues < this.values.length) + this.addedValues++; + this.values[this.lastValue++] = value; + if (this.lastValue > this.values.length - 1) + this.lastValue = 0; + this.dirty = true; + }; + WindowedMean.prototype.getMean = function () { + if (this.hasEnoughData()) { + if (this.dirty) { + var mean = 0; + for (var i = 0; i < this.values.length; i++) { + mean += this.values[i]; + } + this.mean = mean / this.values.length; + this.dirty = false; + } + return this.mean; + } + else { + return 0; + } + }; + return WindowedMean; + }()); + spine.WindowedMean = WindowedMean; +})(spine || (spine = {})); +(function () { + if (!Math.fround) { + Math.fround = (function (array) { + return function (x) { + return array[0] = x, array[0]; + }; + })(new Float32Array(1)); + } +})(); +var spine; +(function (spine) { + var Attachment = (function () { + function Attachment(name) { + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + return Attachment; + }()); + spine.Attachment = Attachment; + var VertexAttachment = (function (_super) { + __extends(VertexAttachment, _super); + function VertexAttachment(name) { + var _this = _super.call(this, name) || this; + _this.id = (VertexAttachment.nextID++ & 65535) << 11; + _this.worldVerticesLength = 0; + _this.deformAttachment = _this; + return _this; + } + VertexAttachment.prototype.computeWorldVertices = function (slot, start, count, worldVertices, offset, stride) { + count = offset + (count >> 1) * stride; + var skeleton = slot.bone.skeleton; + var deformArray = slot.deform; + var vertices = this.vertices; + var bones = this.bones; + if (bones == null) { + if (deformArray.length > 0) + vertices = deformArray; + var bone = slot.bone; + var x = bone.worldX; + var y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) { + var vx = vertices[v_1], vy = vertices[v_1 + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + var v = 0, skip = 0; + for (var i = 0; i < start; i += 2) { + var n = bones[v]; + v += n + 1; + skip += n; + } + var skeletonBones = skeleton.bones; + if (deformArray.length == 0) { + for (var w = offset, b = skip * 3; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + else { + var deform = deformArray; + for (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + }; + VertexAttachment.prototype.copyTo = function (attachment) { + if (this.bones != null) { + attachment.bones = new Array(this.bones.length); + spine.Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); + } + else + attachment.bones = null; + if (this.vertices != null) { + attachment.vertices = spine.Utils.newFloatArray(this.vertices.length); + spine.Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); + } + else + attachment.vertices = null; + attachment.worldVerticesLength = this.worldVerticesLength; + attachment.deformAttachment = this.deformAttachment; + }; + VertexAttachment.nextID = 0; + return VertexAttachment; + }(Attachment)); + spine.VertexAttachment = VertexAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AttachmentType; + (function (AttachmentType) { + AttachmentType[AttachmentType["Region"] = 0] = "Region"; + AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox"; + AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh"; + AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh"; + AttachmentType[AttachmentType["Path"] = 4] = "Path"; + AttachmentType[AttachmentType["Point"] = 5] = "Point"; + AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping"; + })(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoundingBoxAttachment = (function (_super) { + __extends(BoundingBoxAttachment, _super); + function BoundingBoxAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + BoundingBoxAttachment.prototype.copy = function () { + var copy = new BoundingBoxAttachment(this.name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + }; + return BoundingBoxAttachment; + }(spine.VertexAttachment)); + spine.BoundingBoxAttachment = BoundingBoxAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var ClippingAttachment = (function (_super) { + __extends(ClippingAttachment, _super); + function ClippingAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.2275, 0.2275, 0.8078, 1); + return _this; + } + ClippingAttachment.prototype.copy = function () { + var copy = new ClippingAttachment(this.name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.color.setFromColor(this.color); + return copy; + }; + return ClippingAttachment; + }(spine.VertexAttachment)); + spine.ClippingAttachment = ClippingAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var MeshAttachment = (function (_super) { + __extends(MeshAttachment, _super); + function MeshAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + _this.tempColor = new spine.Color(0, 0, 0, 0); + return _this; + } + MeshAttachment.prototype.updateUVs = function () { + var regionUVs = this.regionUVs; + if (this.uvs == null || this.uvs.length != regionUVs.length) + this.uvs = spine.Utils.newFloatArray(regionUVs.length); + var uvs = this.uvs; + var n = this.uvs.length; + var u = this.region.u, v = this.region.v, width = 0, height = 0; + if (this.region instanceof spine.TextureAtlasRegion) { + var region = this.region; + var textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height; + switch (region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; + } + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } + else if (this.region == null) { + u = v = 0; + width = height = 1; + } + else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + }; + MeshAttachment.prototype.getParentMesh = function () { + return this.parentMesh; + }; + MeshAttachment.prototype.setParentMesh = function (parentMesh) { + this.parentMesh = parentMesh; + if (parentMesh != null) { + this.bones = parentMesh.bones; + this.vertices = parentMesh.vertices; + this.worldVerticesLength = parentMesh.worldVerticesLength; + this.regionUVs = parentMesh.regionUVs; + this.triangles = parentMesh.triangles; + this.hullLength = parentMesh.hullLength; + this.worldVerticesLength = parentMesh.worldVerticesLength; + } + }; + MeshAttachment.prototype.copy = function () { + if (this.parentMesh != null) + return this.newLinkedMesh(); + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + this.copyTo(copy); + copy.regionUVs = new Array(this.regionUVs.length); + spine.Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.uvs = new Array(this.uvs.length); + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); + copy.triangles = new Array(this.triangles.length); + spine.Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + if (this.edges != null) { + copy.edges = new Array(this.edges.length); + spine.Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + return copy; + }; + MeshAttachment.prototype.newLinkedMesh = function () { + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + copy.deformAttachment = this.deformAttachment; + copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this); + copy.updateUVs(); + return copy; + }; + return MeshAttachment; + }(spine.VertexAttachment)); + spine.MeshAttachment = MeshAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathAttachment = (function (_super) { + __extends(PathAttachment, _super); + function PathAttachment(name) { + var _this = _super.call(this, name) || this; + _this.closed = false; + _this.constantSpeed = false; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + PathAttachment.prototype.copy = function () { + var copy = new PathAttachment(this.name); + this.copyTo(copy); + copy.lengths = new Array(this.lengths.length); + spine.Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + }; + return PathAttachment; + }(spine.VertexAttachment)); + spine.PathAttachment = PathAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PointAttachment = (function (_super) { + __extends(PointAttachment, _super); + function PointAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.38, 0.94, 0, 1); + return _this; + } + PointAttachment.prototype.computeWorldPosition = function (bone, point) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + }; + PointAttachment.prototype.computeWorldRotation = function (bone) { + var cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation); + var x = cos * bone.a + sin * bone.b; + var y = cos * bone.c + sin * bone.d; + return Math.atan2(y, x) * spine.MathUtils.radDeg; + }; + PointAttachment.prototype.copy = function () { + var copy = new PointAttachment(this.name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + }; + return PointAttachment; + }(spine.VertexAttachment)); + spine.PointAttachment = PointAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var RegionAttachment = (function (_super) { + __extends(RegionAttachment, _super); + function RegionAttachment(name) { + var _this = _super.call(this, name) || this; + _this.x = 0; + _this.y = 0; + _this.scaleX = 1; + _this.scaleY = 1; + _this.rotation = 0; + _this.width = 0; + _this.height = 0; + _this.color = new spine.Color(1, 1, 1, 1); + _this.offset = spine.Utils.newFloatArray(8); + _this.uvs = spine.Utils.newFloatArray(8); + _this.tempColor = new spine.Color(1, 1, 1, 1); + return _this; + } + RegionAttachment.prototype.updateOffset = function () { + var regionScaleX = this.width / this.region.originalWidth * this.scaleX; + var regionScaleY = this.height / this.region.originalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY; + var localX2 = localX + this.region.width * regionScaleX; + var localY2 = localY + this.region.height * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[RegionAttachment.OX1] = localXCos - localYSin; + offset[RegionAttachment.OY1] = localYCos + localXSin; + offset[RegionAttachment.OX2] = localXCos - localY2Sin; + offset[RegionAttachment.OY2] = localY2Cos + localXSin; + offset[RegionAttachment.OX3] = localX2Cos - localY2Sin; + offset[RegionAttachment.OY3] = localY2Cos + localX2Sin; + offset[RegionAttachment.OX4] = localX2Cos - localYSin; + offset[RegionAttachment.OY4] = localYCos + localX2Sin; + }; + RegionAttachment.prototype.setRegion = function (region) { + this.region = region; + var uvs = this.uvs; + if (region.rotate) { + uvs[2] = region.u; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v; + uvs[0] = region.u2; + uvs[1] = region.v2; + } + else { + uvs[0] = region.u; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v2; + } + }; + RegionAttachment.prototype.computeWorldVertices = function (bone, worldVertices, offset, stride) { + var vertexOffset = this.offset; + var x = bone.worldX, y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var offsetX = 0, offsetY = 0; + offsetX = vertexOffset[RegionAttachment.OX1]; + offsetY = vertexOffset[RegionAttachment.OY1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX2]; + offsetY = vertexOffset[RegionAttachment.OY2]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX3]; + offsetY = vertexOffset[RegionAttachment.OY3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX4]; + offsetY = vertexOffset[RegionAttachment.OY4]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + }; + RegionAttachment.prototype.copy = function () { + var copy = new RegionAttachment(this.name); + copy.region = this.region; + copy.rendererObject = this.rendererObject; + copy.path = this.path; + copy.x = this.x; + copy.y = this.y; + copy.scaleX = this.scaleX; + copy.scaleY = this.scaleY; + copy.rotation = this.rotation; + copy.width = this.width; + copy.height = this.height; + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); + spine.Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); + copy.color.setFromColor(this.color); + return copy; + }; + RegionAttachment.OX1 = 0; + RegionAttachment.OY1 = 1; + RegionAttachment.OX2 = 2; + RegionAttachment.OY2 = 3; + RegionAttachment.OX3 = 4; + RegionAttachment.OY3 = 5; + RegionAttachment.OX4 = 6; + RegionAttachment.OY4 = 7; + RegionAttachment.X1 = 0; + RegionAttachment.Y1 = 1; + RegionAttachment.C1R = 2; + RegionAttachment.C1G = 3; + RegionAttachment.C1B = 4; + RegionAttachment.C1A = 5; + RegionAttachment.U1 = 6; + RegionAttachment.V1 = 7; + RegionAttachment.X2 = 8; + RegionAttachment.Y2 = 9; + RegionAttachment.C2R = 10; + RegionAttachment.C2G = 11; + RegionAttachment.C2B = 12; + RegionAttachment.C2A = 13; + RegionAttachment.U2 = 14; + RegionAttachment.V2 = 15; + RegionAttachment.X3 = 16; + RegionAttachment.Y3 = 17; + RegionAttachment.C3R = 18; + RegionAttachment.C3G = 19; + RegionAttachment.C3B = 20; + RegionAttachment.C3A = 21; + RegionAttachment.U3 = 22; + RegionAttachment.V3 = 23; + RegionAttachment.X4 = 24; + RegionAttachment.Y4 = 25; + RegionAttachment.C4R = 26; + RegionAttachment.C4G = 27; + RegionAttachment.C4B = 28; + RegionAttachment.C4A = 29; + RegionAttachment.U4 = 30; + RegionAttachment.V4 = 31; + return RegionAttachment; + }(spine.Attachment)); + spine.RegionAttachment = RegionAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var JitterEffect = (function () { + function JitterEffect(jitterX, jitterY) { + this.jitterX = 0; + this.jitterY = 0; + this.jitterX = jitterX; + this.jitterY = jitterY; + } + JitterEffect.prototype.begin = function (skeleton) { + }; + JitterEffect.prototype.transform = function (position, uv, light, dark) { + position.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + position.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + }; + JitterEffect.prototype.end = function () { + }; + return JitterEffect; + }()); + spine.JitterEffect = JitterEffect; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SwirlEffect = (function () { + function SwirlEffect(radius) { + this.centerX = 0; + this.centerY = 0; + this.radius = 0; + this.angle = 0; + this.worldX = 0; + this.worldY = 0; + this.radius = radius; + } + SwirlEffect.prototype.begin = function (skeleton) { + this.worldX = skeleton.x + this.centerX; + this.worldY = skeleton.y + this.centerY; + }; + SwirlEffect.prototype.transform = function (position, uv, light, dark) { + var radAngle = this.angle * spine.MathUtils.degreesToRadians; + var x = position.x - this.worldX; + var y = position.y - this.worldY; + var dist = Math.sqrt(x * x + y * y); + if (dist < this.radius) { + var theta = SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius); + var cos = Math.cos(theta); + var sin = Math.sin(theta); + position.x = cos * x - sin * y + this.worldX; + position.y = sin * x + cos * y + this.worldY; + } + }; + SwirlEffect.prototype.end = function () { + }; + SwirlEffect.interpolation = new spine.PowOut(2); + return SwirlEffect; + }()); + spine.SwirlEffect = SwirlEffect; +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var AssetManager = (function (_super) { + __extends(AssetManager, _super); + function AssetManager(context, pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + return _super.call(this, function (image) { + return new spine.webgl.GLTexture(context, image); + }, pathPrefix) || this; + } + return AssetManager; + }(spine.AssetManager)); + webgl.AssetManager = AssetManager; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var OrthoCamera = (function () { + function OrthoCamera(viewportWidth, viewportHeight) { + this.position = new webgl.Vector3(0, 0, 0); + this.direction = new webgl.Vector3(0, 0, -1); + this.up = new webgl.Vector3(0, 1, 0); + this.near = 0; + this.far = 100; + this.zoom = 1; + this.viewportWidth = 0; + this.viewportHeight = 0; + this.projectionView = new webgl.Matrix4(); + this.inverseProjectionView = new webgl.Matrix4(); + this.projection = new webgl.Matrix4(); + this.view = new webgl.Matrix4(); + this.tmp = new webgl.Vector3(); + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + this.update(); + } + OrthoCamera.prototype.update = function () { + var projection = this.projection; + var view = this.view; + var projectionView = this.projectionView; + var inverseProjectionView = this.inverseProjectionView; + var zoom = this.zoom, viewportWidth = this.viewportWidth, viewportHeight = this.viewportHeight; + projection.ortho(zoom * (-viewportWidth / 2), zoom * (viewportWidth / 2), zoom * (-viewportHeight / 2), zoom * (viewportHeight / 2), this.near, this.far); + view.lookAt(this.position, this.direction, this.up); + projectionView.set(projection.values); + projectionView.multiply(view); + inverseProjectionView.set(projectionView.values).invert(); + }; + OrthoCamera.prototype.screenToWorld = function (screenCoords, screenWidth, screenHeight) { + var x = screenCoords.x, y = screenHeight - screenCoords.y - 1; + var tmp = this.tmp; + tmp.x = (2 * x) / screenWidth - 1; + tmp.y = (2 * y) / screenHeight - 1; + tmp.z = (2 * screenCoords.z) - 1; + tmp.project(this.inverseProjectionView); + screenCoords.set(tmp.x, tmp.y, tmp.z); + return screenCoords; + }; + OrthoCamera.prototype.setViewport = function (viewportWidth, viewportHeight) { + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + }; + return OrthoCamera; + }()); + webgl.OrthoCamera = OrthoCamera; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var GLTexture = (function (_super) { + __extends(GLTexture, _super); + function GLTexture(context, image, useMipMaps) { + if (useMipMaps === void 0) { useMipMaps = false; } + var _this = _super.call(this, image) || this; + _this.texture = null; + _this.boundUnit = 0; + _this.useMipMaps = false; + _this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + _this.useMipMaps = useMipMaps; + _this.restore(); + _this.context.addRestorable(_this); + return _this; + } + GLTexture.prototype.setFilters = function (minFilter, magFilter) { + var gl = this.context.gl; + this.bind(); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, GLTexture.validateMagFilter(magFilter)); + }; + GLTexture.validateMagFilter = function (magFilter) { + switch (magFilter) { + case spine.TextureFilter.MipMap: + case spine.TextureFilter.MipMapLinearLinear: + case spine.TextureFilter.MipMapLinearNearest: + case spine.TextureFilter.MipMapNearestLinear: + case spine.TextureFilter.MipMapNearestNearest: + return spine.TextureFilter.Linear; + default: + return magFilter; + } + }; + GLTexture.prototype.setWraps = function (uWrap, vWrap) { + var gl = this.context.gl; + this.bind(); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, uWrap); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, vWrap); + }; + GLTexture.prototype.update = function (useMipMaps) { + var gl = this.context.gl; + if (!this.texture) { + this.texture = this.context.gl.createTexture(); + } + this.bind(); + if (GLTexture.DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL) + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, useMipMaps ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + if (useMipMaps) + gl.generateMipmap(gl.TEXTURE_2D); + }; + GLTexture.prototype.restore = function () { + this.texture = null; + this.update(this.useMipMaps); + }; + GLTexture.prototype.bind = function (unit) { + if (unit === void 0) { unit = 0; } + var gl = this.context.gl; + this.boundUnit = unit; + gl.activeTexture(gl.TEXTURE0 + unit); + gl.bindTexture(gl.TEXTURE_2D, this.texture); + }; + GLTexture.prototype.unbind = function () { + var gl = this.context.gl; + gl.activeTexture(gl.TEXTURE0 + this.boundUnit); + gl.bindTexture(gl.TEXTURE_2D, null); + }; + GLTexture.prototype.dispose = function () { + this.context.removeRestorable(this); + var gl = this.context.gl; + gl.deleteTexture(this.texture); + }; + GLTexture.DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL = false; + return GLTexture; + }(spine.Texture)); + webgl.GLTexture = GLTexture; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Input = (function () { + function Input(element) { + this.lastX = 0; + this.lastY = 0; + this.buttonDown = false; + this.currTouch = null; + this.touchesPool = new spine.Pool(function () { + return new spine.webgl.Touch(0, 0, 0); + }); + this.listeners = new Array(); + this.element = element; + this.setupCallbacks(element); + } + Input.prototype.setupCallbacks = function (element) { + var _this = this; + var mouseDown = function (ev) { + if (ev instanceof MouseEvent) { + var rect = element.getBoundingClientRect(); + var x = ev.clientX - rect.left; + var y = ev.clientY - rect.top; + var listeners = _this.listeners; + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].down) + listeners[i].down(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = true; + document.addEventListener("mousemove", mouseMove); + document.addEventListener("mouseup", mouseUp); + } + }; + var mouseMove = function (ev) { + if (ev instanceof MouseEvent) { + var rect = element.getBoundingClientRect(); + var x = ev.clientX - rect.left; + var y = ev.clientY - rect.top; + var listeners = _this.listeners; + for (var i = 0; i < listeners.length; i++) { + if (_this.buttonDown) { + if (listeners[i].dragged) + listeners[i].dragged(x, y); + } + else { + if (listeners[i].moved) + listeners[i].moved(x, y); + } + } + _this.lastX = x; + _this.lastY = y; + } + }; + var mouseUp = function (ev) { + if (ev instanceof MouseEvent) { + var rect = element.getBoundingClientRect(); + var x = ev.clientX - rect.left; + var y = ev.clientY - rect.top; + var listeners = _this.listeners; + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].up) + listeners[i].up(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = false; + document.removeEventListener("mousemove", mouseMove); + document.removeEventListener("mouseup", mouseUp); + } + }; + element.addEventListener("mousedown", mouseDown, true); + element.addEventListener("mousemove", mouseMove, true); + element.addEventListener("mouseup", mouseUp, true); + element.addEventListener("touchstart", function (ev) { + if (_this.currTouch != null) + return; + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + var rect = element.getBoundingClientRect(); + var x = touch.clientX - rect.left; + var y = touch.clientY - rect.top; + _this.currTouch = _this.touchesPool.obtain(); + _this.currTouch.identifier = touch.identifier; + _this.currTouch.x = x; + _this.currTouch.y = y; + break; + } + var listeners = _this.listeners; + for (var i_17 = 0; i_17 < listeners.length; i_17++) { + if (listeners[i_17].down) + listeners[i_17].down(_this.currTouch.x, _this.currTouch.y); + } + _this.lastX = _this.currTouch.x; + _this.lastY = _this.currTouch.y; + _this.buttonDown = true; + ev.preventDefault(); + }, false); + element.addEventListener("touchend", function (ev) { + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (_this.currTouch.identifier === touch.identifier) { + var rect = element.getBoundingClientRect(); + var x = _this.currTouch.x = touch.clientX - rect.left; + var y = _this.currTouch.y = touch.clientY - rect.top; + _this.touchesPool.free(_this.currTouch); + var listeners = _this.listeners; + for (var i_18 = 0; i_18 < listeners.length; i_18++) { + if (listeners[i_18].up) + listeners[i_18].up(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = false; + _this.currTouch = null; + break; + } + } + ev.preventDefault(); + }, false); + element.addEventListener("touchcancel", function (ev) { + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (_this.currTouch.identifier === touch.identifier) { + var rect = element.getBoundingClientRect(); + var x = _this.currTouch.x = touch.clientX - rect.left; + var y = _this.currTouch.y = touch.clientY - rect.top; + _this.touchesPool.free(_this.currTouch); + var listeners = _this.listeners; + for (var i_19 = 0; i_19 < listeners.length; i_19++) { + if (listeners[i_19].up) + listeners[i_19].up(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = false; + _this.currTouch = null; + break; + } + } + ev.preventDefault(); + }, false); + element.addEventListener("touchmove", function (ev) { + if (_this.currTouch == null) + return; + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (_this.currTouch.identifier === touch.identifier) { + var rect = element.getBoundingClientRect(); + var x = touch.clientX - rect.left; + var y = touch.clientY - rect.top; + var listeners = _this.listeners; + for (var i_20 = 0; i_20 < listeners.length; i_20++) { + if (listeners[i_20].dragged) + listeners[i_20].dragged(x, y); + } + _this.lastX = _this.currTouch.x = x; + _this.lastY = _this.currTouch.y = y; + break; + } + } + ev.preventDefault(); + }, false); + }; + Input.prototype.addListener = function (listener) { + this.listeners.push(listener); + }; + Input.prototype.removeListener = function (listener) { + var idx = this.listeners.indexOf(listener); + if (idx > -1) { + this.listeners.splice(idx, 1); + } + }; + return Input; + }()); + webgl.Input = Input; + var Touch = (function () { + function Touch(identifier, x, y) { + this.identifier = identifier; + this.x = x; + this.y = y; + } + return Touch; + }()); + webgl.Touch = Touch; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var LoadingScreen = (function () { + function LoadingScreen(renderer) { + this.logo = null; + this.spinner = null; + this.angle = 0; + this.fadeOut = 0; + this.timeKeeper = new spine.TimeKeeper(); + this.backgroundColor = new spine.Color(0.135, 0.135, 0.135, 1); + this.tempColor = new spine.Color(); + this.firstDraw = 0; + this.renderer = renderer; + this.timeKeeper.maxDelta = 9; + if (LoadingScreen.logoImg === null) { + var isSafari = navigator.userAgent.indexOf("Safari") > -1; + LoadingScreen.logoImg = new Image(); + LoadingScreen.logoImg.src = LoadingScreen.SPINE_LOGO_DATA; + if (!isSafari) + LoadingScreen.logoImg.crossOrigin = "anonymous"; + LoadingScreen.logoImg.onload = function (ev) { + LoadingScreen.loaded++; + }; + LoadingScreen.spinnerImg = new Image(); + LoadingScreen.spinnerImg.src = LoadingScreen.SPINNER_DATA; + if (!isSafari) + LoadingScreen.spinnerImg.crossOrigin = "anonymous"; + LoadingScreen.spinnerImg.onload = function (ev) { + LoadingScreen.loaded++; + }; + } + } + LoadingScreen.prototype.draw = function (complete) { + if (complete === void 0) { complete = false; } + if (complete && this.fadeOut > LoadingScreen.FADE_SECONDS) + return; + this.timeKeeper.update(); + var a = Math.abs(Math.sin(this.timeKeeper.totalTime + 0.75)); + this.angle -= this.timeKeeper.delta / 1.4 * 360 * (1 + 1.5 * Math.pow(a, 5)); + var renderer = this.renderer; + var canvas = renderer.canvas; + var gl = renderer.context.gl; + renderer.resize(webgl.ResizeMode.Stretch); + var oldX = renderer.camera.position.x, oldY = renderer.camera.position.y; + renderer.camera.position.set(canvas.width / 2, canvas.height / 2, 0); + renderer.camera.viewportWidth = canvas.width; + renderer.camera.viewportHeight = canvas.height; + if (!complete) { + gl.clearColor(this.backgroundColor.r, this.backgroundColor.g, this.backgroundColor.b, this.backgroundColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + this.tempColor.a = 1; + } + else { + this.fadeOut += this.timeKeeper.delta * (this.timeKeeper.totalTime < 1 ? 2 : 1); + if (this.fadeOut > LoadingScreen.FADE_SECONDS) { + renderer.camera.position.set(oldX, oldY, 0); + return; + } + a = 1 - this.fadeOut / LoadingScreen.FADE_SECONDS; + this.tempColor.setFromColor(this.backgroundColor); + this.tempColor.a = 1 - (a - 1) * (a - 1); + renderer.begin(); + renderer.quad(true, 0, 0, canvas.width, 0, canvas.width, canvas.height, 0, canvas.height, this.tempColor, this.tempColor, this.tempColor, this.tempColor); + renderer.end(); + } + this.tempColor.set(1, 1, 1, this.tempColor.a); + if (LoadingScreen.loaded != 2) + return; + if (this.logo === null) { + this.logo = new webgl.GLTexture(renderer.context, LoadingScreen.logoImg); + this.spinner = new webgl.GLTexture(renderer.context, LoadingScreen.spinnerImg); + } + this.logo.update(false); + this.spinner.update(false); + var logoWidth = this.logo.getImage().width; + var logoHeight = this.logo.getImage().height; + var spinnerWidth = this.spinner.getImage().width; + var spinnerHeight = this.spinner.getImage().height; + renderer.batcher.setBlendMode(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + renderer.begin(); + renderer.drawTexture(this.logo, (canvas.width - logoWidth) / 2, (canvas.height - logoHeight) / 2, logoWidth, logoHeight, this.tempColor); + renderer.drawTextureRotated(this.spinner, (canvas.width - spinnerWidth) / 2, (canvas.height - spinnerHeight) / 2, spinnerWidth, spinnerHeight, spinnerWidth / 2, spinnerHeight / 2, this.angle, this.tempColor); + renderer.end(); + renderer.camera.position.set(oldX, oldY, 0); + }; + LoadingScreen.FADE_SECONDS = 1; + LoadingScreen.loaded = 0; + LoadingScreen.spinnerImg = null; + LoadingScreen.logoImg = null; + LoadingScreen.SPINNER_DATA = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACjCAYAAADmbK6AAAAACXBIWXMAAAsTAAALEwEAmpwYAAALB2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTgtMTEtMTVUMTY6NDA6NTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpmZDhlNTljMC02NGJjLTIxNGQtODAyZi1jZDlhODJjM2ZjMGMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpmYmNmZWJlYS03MjY2LWE0NGQtOTI4NS0wOTJmNGNhYzk4ZWEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMjk3IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjQyIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHN0RXZ0OndoZW49IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNThlMTlkNi0xYTRjLTQyNDEtODU0ZC01MDVlZjYxMjRhODQiIHN0RXZ0OndoZW49IjIwMTgtMTEtMTVUMTY6NDA6MjMrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ3YzYzYzIwLWJkYjgtYzM0YS1hYzMyLWQ5MDdjOWEyOTA0MCIgc3RFdnQ6d2hlbj0iMjAxOC0xMS0xNVQxNjo0MDo1OSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZmQ4ZTU5YzAtNjRiYy0yMTRkLTgwMmYtY2Q5YTgyYzNmYzBjIiBzdEV2dDp3aGVuPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0N2M2M2MyMC1iZGI4LWMzNGEtYWMzMi1kOTA3YzlhMjkwNDAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2OWRmZjljYy01YzFiLWE5NDctOTc3OS03ODgxZjM0ODk3MDMiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiLz4gPHBob3Rvc2hvcDpEb2N1bWVudEFu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"; + LoadingScreen.SPINE_LOGO_DATA = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKUAAABsCAYAAAALzHKmAAAACXBIWXMAAAsTAAALEwEAmpwYAAALB2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTgtMTEtMTVUMTY6NDA6NTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowMTdhZGQ3Ni04OTZlLThlNGUtYmM5MS00ZjEyNjI1YjA3MjgiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMTViNGE2ZS1hMDg3LWEzNDktODdhOS1mNDYzYjE2MzQ0Y2MiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMjk3IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjQyIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHN0RXZ0OndoZW49IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNThlMTlkNi0xYTRjLTQyNDEtODU0ZC01MDVlZjYxMjRhODQiIHN0RXZ0OndoZW49IjIwMTgtMTEtMTVUMTY6NDA6MjMrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJlNjJiMWM2LWIxYzQtNDk0MC04MDMxLWU4ZDkyNTBmODJjNSIgc3RFdnQ6d2hlbj0iMjAxOC0xMS0xNVQxNjo0MDo1OSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDE3YWRkNzYtODk2ZS04ZTRlLWJjOTEtNGYxMjYyNWIwNzI4IiBzdEV2dDp3aGVuPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyZTYyYjFjNi1iMWM0LTQ5NDAtODAzMS1lOGQ5MjUwZjgyYzUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2OWRmZjljYy01YzFiLWE5NDctOTc3OS03ODgxZjM0ODk3MDMiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiLz4gPHBob3Rvc2hvcDpEb2N1bWVudEFu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"; + return LoadingScreen; + }()); + webgl.LoadingScreen = LoadingScreen; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + webgl.M00 = 0; + webgl.M01 = 4; + webgl.M02 = 8; + webgl.M03 = 12; + webgl.M10 = 1; + webgl.M11 = 5; + webgl.M12 = 9; + webgl.M13 = 13; + webgl.M20 = 2; + webgl.M21 = 6; + webgl.M22 = 10; + webgl.M23 = 14; + webgl.M30 = 3; + webgl.M31 = 7; + webgl.M32 = 11; + webgl.M33 = 15; + var Matrix4 = (function () { + function Matrix4() { + this.temp = new Float32Array(16); + this.values = new Float32Array(16); + var v = this.values; + v[webgl.M00] = 1; + v[webgl.M11] = 1; + v[webgl.M22] = 1; + v[webgl.M33] = 1; + } + Matrix4.prototype.set = function (values) { + this.values.set(values); + return this; + }; + Matrix4.prototype.transpose = function () { + var t = this.temp; + var v = this.values; + t[webgl.M00] = v[webgl.M00]; + t[webgl.M01] = v[webgl.M10]; + t[webgl.M02] = v[webgl.M20]; + t[webgl.M03] = v[webgl.M30]; + t[webgl.M10] = v[webgl.M01]; + t[webgl.M11] = v[webgl.M11]; + t[webgl.M12] = v[webgl.M21]; + t[webgl.M13] = v[webgl.M31]; + t[webgl.M20] = v[webgl.M02]; + t[webgl.M21] = v[webgl.M12]; + t[webgl.M22] = v[webgl.M22]; + t[webgl.M23] = v[webgl.M32]; + t[webgl.M30] = v[webgl.M03]; + t[webgl.M31] = v[webgl.M13]; + t[webgl.M32] = v[webgl.M23]; + t[webgl.M33] = v[webgl.M33]; + return this.set(t); + }; + Matrix4.prototype.identity = function () { + var v = this.values; + v[webgl.M00] = 1; + v[webgl.M01] = 0; + v[webgl.M02] = 0; + v[webgl.M03] = 0; + v[webgl.M10] = 0; + v[webgl.M11] = 1; + v[webgl.M12] = 0; + v[webgl.M13] = 0; + v[webgl.M20] = 0; + v[webgl.M21] = 0; + v[webgl.M22] = 1; + v[webgl.M23] = 0; + v[webgl.M30] = 0; + v[webgl.M31] = 0; + v[webgl.M32] = 0; + v[webgl.M33] = 1; + return this; + }; + Matrix4.prototype.invert = function () { + var v = this.values; + var t = this.temp; + var l_det = v[webgl.M30] * v[webgl.M21] * v[webgl.M12] * v[webgl.M03] - v[webgl.M20] * v[webgl.M31] * v[webgl.M12] * v[webgl.M03] - v[webgl.M30] * v[webgl.M11] * v[webgl.M22] * v[webgl.M03] + + v[webgl.M10] * v[webgl.M31] * v[webgl.M22] * v[webgl.M03] + v[webgl.M20] * v[webgl.M11] * v[webgl.M32] * v[webgl.M03] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32] * v[webgl.M03] + - v[webgl.M30] * v[webgl.M21] * v[webgl.M02] * v[webgl.M13] + v[webgl.M20] * v[webgl.M31] * v[webgl.M02] * v[webgl.M13] + v[webgl.M30] * v[webgl.M01] * v[webgl.M22] * v[webgl.M13] + - v[webgl.M00] * v[webgl.M31] * v[webgl.M22] * v[webgl.M13] - v[webgl.M20] * v[webgl.M01] * v[webgl.M32] * v[webgl.M13] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32] * v[webgl.M13] + + v[webgl.M30] * v[webgl.M11] * v[webgl.M02] * v[webgl.M23] - v[webgl.M10] * v[webgl.M31] * v[webgl.M02] * v[webgl.M23] - v[webgl.M30] * v[webgl.M01] * v[webgl.M12] * v[webgl.M23] + + v[webgl.M00] * v[webgl.M31] * v[webgl.M12] * v[webgl.M23] + v[webgl.M10] * v[webgl.M01] * v[webgl.M32] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32] * v[webgl.M23] + - v[webgl.M20] * v[webgl.M11] * v[webgl.M02] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M02] * v[webgl.M33] + v[webgl.M20] * v[webgl.M01] * v[webgl.M12] * v[webgl.M33] + - v[webgl.M00] * v[webgl.M21] * v[webgl.M12] * v[webgl.M33] - v[webgl.M10] * v[webgl.M01] * v[webgl.M22] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22] * v[webgl.M33]; + if (l_det == 0) + throw new Error("non-invertible matrix"); + var inv_det = 1.0 / l_det; + t[webgl.M00] = v[webgl.M12] * v[webgl.M23] * v[webgl.M31] - v[webgl.M13] * v[webgl.M22] * v[webgl.M31] + v[webgl.M13] * v[webgl.M21] * v[webgl.M32] + - v[webgl.M11] * v[webgl.M23] * v[webgl.M32] - v[webgl.M12] * v[webgl.M21] * v[webgl.M33] + v[webgl.M11] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M01] = v[webgl.M03] * v[webgl.M22] * v[webgl.M31] - v[webgl.M02] * v[webgl.M23] * v[webgl.M31] - v[webgl.M03] * v[webgl.M21] * v[webgl.M32] + + v[webgl.M01] * v[webgl.M23] * v[webgl.M32] + v[webgl.M02] * v[webgl.M21] * v[webgl.M33] - v[webgl.M01] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M02] = v[webgl.M02] * v[webgl.M13] * v[webgl.M31] - v[webgl.M03] * v[webgl.M12] * v[webgl.M31] + v[webgl.M03] * v[webgl.M11] * v[webgl.M32] + - v[webgl.M01] * v[webgl.M13] * v[webgl.M32] - v[webgl.M02] * v[webgl.M11] * v[webgl.M33] + v[webgl.M01] * v[webgl.M12] * v[webgl.M33]; + t[webgl.M03] = v[webgl.M03] * v[webgl.M12] * v[webgl.M21] - v[webgl.M02] * v[webgl.M13] * v[webgl.M21] - v[webgl.M03] * v[webgl.M11] * v[webgl.M22] + + v[webgl.M01] * v[webgl.M13] * v[webgl.M22] + v[webgl.M02] * v[webgl.M11] * v[webgl.M23] - v[webgl.M01] * v[webgl.M12] * v[webgl.M23]; + t[webgl.M10] = v[webgl.M13] * v[webgl.M22] * v[webgl.M30] - v[webgl.M12] * v[webgl.M23] * v[webgl.M30] - v[webgl.M13] * v[webgl.M20] * v[webgl.M32] + + v[webgl.M10] * v[webgl.M23] * v[webgl.M32] + v[webgl.M12] * v[webgl.M20] * v[webgl.M33] - v[webgl.M10] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M11] = v[webgl.M02] * v[webgl.M23] * v[webgl.M30] - v[webgl.M03] * v[webgl.M22] * v[webgl.M30] + v[webgl.M03] * v[webgl.M20] * v[webgl.M32] + - v[webgl.M00] * v[webgl.M23] * v[webgl.M32] - v[webgl.M02] * v[webgl.M20] * v[webgl.M33] + v[webgl.M00] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M12] = v[webgl.M03] * v[webgl.M12] * v[webgl.M30] - v[webgl.M02] * v[webgl.M13] * v[webgl.M30] - v[webgl.M03] * v[webgl.M10] * v[webgl.M32] + + v[webgl.M00] * v[webgl.M13] * v[webgl.M32] + v[webgl.M02] * v[webgl.M10] * v[webgl.M33] - v[webgl.M00] * v[webgl.M12] * v[webgl.M33]; + t[webgl.M13] = v[webgl.M02] * v[webgl.M13] * v[webgl.M20] - v[webgl.M03] * v[webgl.M12] * v[webgl.M20] + v[webgl.M03] * v[webgl.M10] * v[webgl.M22] + - v[webgl.M00] * v[webgl.M13] * v[webgl.M22] - v[webgl.M02] * v[webgl.M10] * v[webgl.M23] + v[webgl.M00] * v[webgl.M12] * v[webgl.M23]; + t[webgl.M20] = v[webgl.M11] * v[webgl.M23] * v[webgl.M30] - v[webgl.M13] * v[webgl.M21] * v[webgl.M30] + v[webgl.M13] * v[webgl.M20] * v[webgl.M31] + - v[webgl.M10] * v[webgl.M23] * v[webgl.M31] - v[webgl.M11] * v[webgl.M20] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M33]; + t[webgl.M21] = v[webgl.M03] * v[webgl.M21] * v[webgl.M30] - v[webgl.M01] * v[webgl.M23] * v[webgl.M30] - v[webgl.M03] * v[webgl.M20] * v[webgl.M31] + + v[webgl.M00] * v[webgl.M23] * v[webgl.M31] + v[webgl.M01] * v[webgl.M20] * v[webgl.M33] - v[webgl.M00] * v[webgl.M21] * v[webgl.M33]; + t[webgl.M22] = v[webgl.M01] * v[webgl.M13] * v[webgl.M30] - v[webgl.M03] * v[webgl.M11] * v[webgl.M30] + v[webgl.M03] * v[webgl.M10] * v[webgl.M31] + - v[webgl.M00] * v[webgl.M13] * v[webgl.M31] - v[webgl.M01] * v[webgl.M10] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M33]; + t[webgl.M23] = v[webgl.M03] * v[webgl.M11] * v[webgl.M20] - v[webgl.M01] * v[webgl.M13] * v[webgl.M20] - v[webgl.M03] * v[webgl.M10] * v[webgl.M21] + + v[webgl.M00] * v[webgl.M13] * v[webgl.M21] + v[webgl.M01] * v[webgl.M10] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M23]; + t[webgl.M30] = v[webgl.M12] * v[webgl.M21] * v[webgl.M30] - v[webgl.M11] * v[webgl.M22] * v[webgl.M30] - v[webgl.M12] * v[webgl.M20] * v[webgl.M31] + + v[webgl.M10] * v[webgl.M22] * v[webgl.M31] + v[webgl.M11] * v[webgl.M20] * v[webgl.M32] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32]; + t[webgl.M31] = v[webgl.M01] * v[webgl.M22] * v[webgl.M30] - v[webgl.M02] * v[webgl.M21] * v[webgl.M30] + v[webgl.M02] * v[webgl.M20] * v[webgl.M31] + - v[webgl.M00] * v[webgl.M22] * v[webgl.M31] - v[webgl.M01] * v[webgl.M20] * v[webgl.M32] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32]; + t[webgl.M32] = v[webgl.M02] * v[webgl.M11] * v[webgl.M30] - v[webgl.M01] * v[webgl.M12] * v[webgl.M30] - v[webgl.M02] * v[webgl.M10] * v[webgl.M31] + + v[webgl.M00] * v[webgl.M12] * v[webgl.M31] + v[webgl.M01] * v[webgl.M10] * v[webgl.M32] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32]; + t[webgl.M33] = v[webgl.M01] * v[webgl.M12] * v[webgl.M20] - v[webgl.M02] * v[webgl.M11] * v[webgl.M20] + v[webgl.M02] * v[webgl.M10] * v[webgl.M21] + - v[webgl.M00] * v[webgl.M12] * v[webgl.M21] - v[webgl.M01] * v[webgl.M10] * v[webgl.M22] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22]; + v[webgl.M00] = t[webgl.M00] * inv_det; + v[webgl.M01] = t[webgl.M01] * inv_det; + v[webgl.M02] = t[webgl.M02] * inv_det; + v[webgl.M03] = t[webgl.M03] * inv_det; + v[webgl.M10] = t[webgl.M10] * inv_det; + v[webgl.M11] = t[webgl.M11] * inv_det; + v[webgl.M12] = t[webgl.M12] * inv_det; + v[webgl.M13] = t[webgl.M13] * inv_det; + v[webgl.M20] = t[webgl.M20] * inv_det; + v[webgl.M21] = t[webgl.M21] * inv_det; + v[webgl.M22] = t[webgl.M22] * inv_det; + v[webgl.M23] = t[webgl.M23] * inv_det; + v[webgl.M30] = t[webgl.M30] * inv_det; + v[webgl.M31] = t[webgl.M31] * inv_det; + v[webgl.M32] = t[webgl.M32] * inv_det; + v[webgl.M33] = t[webgl.M33] * inv_det; + return this; + }; + Matrix4.prototype.determinant = function () { + var v = this.values; + return v[webgl.M30] * v[webgl.M21] * v[webgl.M12] * v[webgl.M03] - v[webgl.M20] * v[webgl.M31] * v[webgl.M12] * v[webgl.M03] - v[webgl.M30] * v[webgl.M11] * v[webgl.M22] * v[webgl.M03] + + v[webgl.M10] * v[webgl.M31] * v[webgl.M22] * v[webgl.M03] + v[webgl.M20] * v[webgl.M11] * v[webgl.M32] * v[webgl.M03] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32] * v[webgl.M03] + - v[webgl.M30] * v[webgl.M21] * v[webgl.M02] * v[webgl.M13] + v[webgl.M20] * v[webgl.M31] * v[webgl.M02] * v[webgl.M13] + v[webgl.M30] * v[webgl.M01] * v[webgl.M22] * v[webgl.M13] + - v[webgl.M00] * v[webgl.M31] * v[webgl.M22] * v[webgl.M13] - v[webgl.M20] * v[webgl.M01] * v[webgl.M32] * v[webgl.M13] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32] * v[webgl.M13] + + v[webgl.M30] * v[webgl.M11] * v[webgl.M02] * v[webgl.M23] - v[webgl.M10] * v[webgl.M31] * v[webgl.M02] * v[webgl.M23] - v[webgl.M30] * v[webgl.M01] * v[webgl.M12] * v[webgl.M23] + + v[webgl.M00] * v[webgl.M31] * v[webgl.M12] * v[webgl.M23] + v[webgl.M10] * v[webgl.M01] * v[webgl.M32] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32] * v[webgl.M23] + - v[webgl.M20] * v[webgl.M11] * v[webgl.M02] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M02] * v[webgl.M33] + v[webgl.M20] * v[webgl.M01] * v[webgl.M12] * v[webgl.M33] + - v[webgl.M00] * v[webgl.M21] * v[webgl.M12] * v[webgl.M33] - v[webgl.M10] * v[webgl.M01] * v[webgl.M22] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22] * v[webgl.M33]; + }; + Matrix4.prototype.translate = function (x, y, z) { + var v = this.values; + v[webgl.M03] += x; + v[webgl.M13] += y; + v[webgl.M23] += z; + return this; + }; + Matrix4.prototype.copy = function () { + return new Matrix4().set(this.values); + }; + Matrix4.prototype.projection = function (near, far, fovy, aspectRatio) { + this.identity(); + var l_fd = (1.0 / Math.tan((fovy * (Math.PI / 180)) / 2.0)); + var l_a1 = (far + near) / (near - far); + var l_a2 = (2 * far * near) / (near - far); + var v = this.values; + v[webgl.M00] = l_fd / aspectRatio; + v[webgl.M10] = 0; + v[webgl.M20] = 0; + v[webgl.M30] = 0; + v[webgl.M01] = 0; + v[webgl.M11] = l_fd; + v[webgl.M21] = 0; + v[webgl.M31] = 0; + v[webgl.M02] = 0; + v[webgl.M12] = 0; + v[webgl.M22] = l_a1; + v[webgl.M32] = -1; + v[webgl.M03] = 0; + v[webgl.M13] = 0; + v[webgl.M23] = l_a2; + v[webgl.M33] = 0; + return this; + }; + Matrix4.prototype.ortho2d = function (x, y, width, height) { + return this.ortho(x, x + width, y, y + height, 0, 1); + }; + Matrix4.prototype.ortho = function (left, right, bottom, top, near, far) { + this.identity(); + var x_orth = 2 / (right - left); + var y_orth = 2 / (top - bottom); + var z_orth = -2 / (far - near); + var tx = -(right + left) / (right - left); + var ty = -(top + bottom) / (top - bottom); + var tz = -(far + near) / (far - near); + var v = this.values; + v[webgl.M00] = x_orth; + v[webgl.M10] = 0; + v[webgl.M20] = 0; + v[webgl.M30] = 0; + v[webgl.M01] = 0; + v[webgl.M11] = y_orth; + v[webgl.M21] = 0; + v[webgl.M31] = 0; + v[webgl.M02] = 0; + v[webgl.M12] = 0; + v[webgl.M22] = z_orth; + v[webgl.M32] = 0; + v[webgl.M03] = tx; + v[webgl.M13] = ty; + v[webgl.M23] = tz; + v[webgl.M33] = 1; + return this; + }; + Matrix4.prototype.multiply = function (matrix) { + var t = this.temp; + var v = this.values; + var m = matrix.values; + t[webgl.M00] = v[webgl.M00] * m[webgl.M00] + v[webgl.M01] * m[webgl.M10] + v[webgl.M02] * m[webgl.M20] + v[webgl.M03] * m[webgl.M30]; + t[webgl.M01] = v[webgl.M00] * m[webgl.M01] + v[webgl.M01] * m[webgl.M11] + v[webgl.M02] * m[webgl.M21] + v[webgl.M03] * m[webgl.M31]; + t[webgl.M02] = v[webgl.M00] * m[webgl.M02] + v[webgl.M01] * m[webgl.M12] + v[webgl.M02] * m[webgl.M22] + v[webgl.M03] * m[webgl.M32]; + t[webgl.M03] = v[webgl.M00] * m[webgl.M03] + v[webgl.M01] * m[webgl.M13] + v[webgl.M02] * m[webgl.M23] + v[webgl.M03] * m[webgl.M33]; + t[webgl.M10] = v[webgl.M10] * m[webgl.M00] + v[webgl.M11] * m[webgl.M10] + v[webgl.M12] * m[webgl.M20] + v[webgl.M13] * m[webgl.M30]; + t[webgl.M11] = v[webgl.M10] * m[webgl.M01] + v[webgl.M11] * m[webgl.M11] + v[webgl.M12] * m[webgl.M21] + v[webgl.M13] * m[webgl.M31]; + t[webgl.M12] = v[webgl.M10] * m[webgl.M02] + v[webgl.M11] * m[webgl.M12] + v[webgl.M12] * m[webgl.M22] + v[webgl.M13] * m[webgl.M32]; + t[webgl.M13] = v[webgl.M10] * m[webgl.M03] + v[webgl.M11] * m[webgl.M13] + v[webgl.M12] * m[webgl.M23] + v[webgl.M13] * m[webgl.M33]; + t[webgl.M20] = v[webgl.M20] * m[webgl.M00] + v[webgl.M21] * m[webgl.M10] + v[webgl.M22] * m[webgl.M20] + v[webgl.M23] * m[webgl.M30]; + t[webgl.M21] = v[webgl.M20] * m[webgl.M01] + v[webgl.M21] * m[webgl.M11] + v[webgl.M22] * m[webgl.M21] + v[webgl.M23] * m[webgl.M31]; + t[webgl.M22] = v[webgl.M20] * m[webgl.M02] + v[webgl.M21] * m[webgl.M12] + v[webgl.M22] * m[webgl.M22] + v[webgl.M23] * m[webgl.M32]; + t[webgl.M23] = v[webgl.M20] * m[webgl.M03] + v[webgl.M21] * m[webgl.M13] + v[webgl.M22] * m[webgl.M23] + v[webgl.M23] * m[webgl.M33]; + t[webgl.M30] = v[webgl.M30] * m[webgl.M00] + v[webgl.M31] * m[webgl.M10] + v[webgl.M32] * m[webgl.M20] + v[webgl.M33] * m[webgl.M30]; + t[webgl.M31] = v[webgl.M30] * m[webgl.M01] + v[webgl.M31] * m[webgl.M11] + v[webgl.M32] * m[webgl.M21] + v[webgl.M33] * m[webgl.M31]; + t[webgl.M32] = v[webgl.M30] * m[webgl.M02] + v[webgl.M31] * m[webgl.M12] + v[webgl.M32] * m[webgl.M22] + v[webgl.M33] * m[webgl.M32]; + t[webgl.M33] = v[webgl.M30] * m[webgl.M03] + v[webgl.M31] * m[webgl.M13] + v[webgl.M32] * m[webgl.M23] + v[webgl.M33] * m[webgl.M33]; + return this.set(this.temp); + }; + Matrix4.prototype.multiplyLeft = function (matrix) { + var t = this.temp; + var v = this.values; + var m = matrix.values; + t[webgl.M00] = m[webgl.M00] * v[webgl.M00] + m[webgl.M01] * v[webgl.M10] + m[webgl.M02] * v[webgl.M20] + m[webgl.M03] * v[webgl.M30]; + t[webgl.M01] = m[webgl.M00] * v[webgl.M01] + m[webgl.M01] * v[webgl.M11] + m[webgl.M02] * v[webgl.M21] + m[webgl.M03] * v[webgl.M31]; + t[webgl.M02] = m[webgl.M00] * v[webgl.M02] + m[webgl.M01] * v[webgl.M12] + m[webgl.M02] * v[webgl.M22] + m[webgl.M03] * v[webgl.M32]; + t[webgl.M03] = m[webgl.M00] * v[webgl.M03] + m[webgl.M01] * v[webgl.M13] + m[webgl.M02] * v[webgl.M23] + m[webgl.M03] * v[webgl.M33]; + t[webgl.M10] = m[webgl.M10] * v[webgl.M00] + m[webgl.M11] * v[webgl.M10] + m[webgl.M12] * v[webgl.M20] + m[webgl.M13] * v[webgl.M30]; + t[webgl.M11] = m[webgl.M10] * v[webgl.M01] + m[webgl.M11] * v[webgl.M11] + m[webgl.M12] * v[webgl.M21] + m[webgl.M13] * v[webgl.M31]; + t[webgl.M12] = m[webgl.M10] * v[webgl.M02] + m[webgl.M11] * v[webgl.M12] + m[webgl.M12] * v[webgl.M22] + m[webgl.M13] * v[webgl.M32]; + t[webgl.M13] = m[webgl.M10] * v[webgl.M03] + m[webgl.M11] * v[webgl.M13] + m[webgl.M12] * v[webgl.M23] + m[webgl.M13] * v[webgl.M33]; + t[webgl.M20] = m[webgl.M20] * v[webgl.M00] + m[webgl.M21] * v[webgl.M10] + m[webgl.M22] * v[webgl.M20] + m[webgl.M23] * v[webgl.M30]; + t[webgl.M21] = m[webgl.M20] * v[webgl.M01] + m[webgl.M21] * v[webgl.M11] + m[webgl.M22] * v[webgl.M21] + m[webgl.M23] * v[webgl.M31]; + t[webgl.M22] = m[webgl.M20] * v[webgl.M02] + m[webgl.M21] * v[webgl.M12] + m[webgl.M22] * v[webgl.M22] + m[webgl.M23] * v[webgl.M32]; + t[webgl.M23] = m[webgl.M20] * v[webgl.M03] + m[webgl.M21] * v[webgl.M13] + m[webgl.M22] * v[webgl.M23] + m[webgl.M23] * v[webgl.M33]; + t[webgl.M30] = m[webgl.M30] * v[webgl.M00] + m[webgl.M31] * v[webgl.M10] + m[webgl.M32] * v[webgl.M20] + m[webgl.M33] * v[webgl.M30]; + t[webgl.M31] = m[webgl.M30] * v[webgl.M01] + m[webgl.M31] * v[webgl.M11] + m[webgl.M32] * v[webgl.M21] + m[webgl.M33] * v[webgl.M31]; + t[webgl.M32] = m[webgl.M30] * v[webgl.M02] + m[webgl.M31] * v[webgl.M12] + m[webgl.M32] * v[webgl.M22] + m[webgl.M33] * v[webgl.M32]; + t[webgl.M33] = m[webgl.M30] * v[webgl.M03] + m[webgl.M31] * v[webgl.M13] + m[webgl.M32] * v[webgl.M23] + m[webgl.M33] * v[webgl.M33]; + return this.set(this.temp); + }; + Matrix4.prototype.lookAt = function (position, direction, up) { + Matrix4.initTemps(); + var xAxis = Matrix4.xAxis, yAxis = Matrix4.yAxis, zAxis = Matrix4.zAxis; + zAxis.setFrom(direction).normalize(); + xAxis.setFrom(direction).normalize(); + xAxis.cross(up).normalize(); + yAxis.setFrom(xAxis).cross(zAxis).normalize(); + this.identity(); + var val = this.values; + val[webgl.M00] = xAxis.x; + val[webgl.M01] = xAxis.y; + val[webgl.M02] = xAxis.z; + val[webgl.M10] = yAxis.x; + val[webgl.M11] = yAxis.y; + val[webgl.M12] = yAxis.z; + val[webgl.M20] = -zAxis.x; + val[webgl.M21] = -zAxis.y; + val[webgl.M22] = -zAxis.z; + Matrix4.tmpMatrix.identity(); + Matrix4.tmpMatrix.values[webgl.M03] = -position.x; + Matrix4.tmpMatrix.values[webgl.M13] = -position.y; + Matrix4.tmpMatrix.values[webgl.M23] = -position.z; + this.multiply(Matrix4.tmpMatrix); + return this; + }; + Matrix4.initTemps = function () { + if (Matrix4.xAxis === null) + Matrix4.xAxis = new webgl.Vector3(); + if (Matrix4.yAxis === null) + Matrix4.yAxis = new webgl.Vector3(); + if (Matrix4.zAxis === null) + Matrix4.zAxis = new webgl.Vector3(); + }; + Matrix4.xAxis = null; + Matrix4.yAxis = null; + Matrix4.zAxis = null; + Matrix4.tmpMatrix = new Matrix4(); + return Matrix4; + }()); + webgl.Matrix4 = Matrix4; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Mesh = (function () { + function Mesh(context, attributes, maxVertices, maxIndices) { + this.attributes = attributes; + this.verticesLength = 0; + this.dirtyVertices = false; + this.indicesLength = 0; + this.dirtyIndices = false; + this.elementsPerVertex = 0; + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.elementsPerVertex = 0; + for (var i = 0; i < attributes.length; i++) { + this.elementsPerVertex += attributes[i].numElements; + } + this.vertices = new Float32Array(maxVertices * this.elementsPerVertex); + this.indices = new Uint16Array(maxIndices); + this.context.addRestorable(this); + } + Mesh.prototype.getAttributes = function () { return this.attributes; }; + Mesh.prototype.maxVertices = function () { return this.vertices.length / this.elementsPerVertex; }; + Mesh.prototype.numVertices = function () { return this.verticesLength / this.elementsPerVertex; }; + Mesh.prototype.setVerticesLength = function (length) { + this.dirtyVertices = true; + this.verticesLength = length; + }; + Mesh.prototype.getVertices = function () { return this.vertices; }; + Mesh.prototype.maxIndices = function () { return this.indices.length; }; + Mesh.prototype.numIndices = function () { return this.indicesLength; }; + Mesh.prototype.setIndicesLength = function (length) { + this.dirtyIndices = true; + this.indicesLength = length; + }; + Mesh.prototype.getIndices = function () { return this.indices; }; + ; + Mesh.prototype.getVertexSizeInFloats = function () { + var size = 0; + for (var i = 0; i < this.attributes.length; i++) { + var attribute = this.attributes[i]; + size += attribute.numElements; + } + return size; + }; + Mesh.prototype.setVertices = function (vertices) { + this.dirtyVertices = true; + if (vertices.length > this.vertices.length) + throw Error("Mesh can't store more than " + this.maxVertices() + " vertices"); + this.vertices.set(vertices, 0); + this.verticesLength = vertices.length; + }; + Mesh.prototype.setIndices = function (indices) { + this.dirtyIndices = true; + if (indices.length > this.indices.length) + throw Error("Mesh can't store more than " + this.maxIndices() + " indices"); + this.indices.set(indices, 0); + this.indicesLength = indices.length; + }; + Mesh.prototype.draw = function (shader, primitiveType) { + this.drawWithOffset(shader, primitiveType, 0, this.indicesLength > 0 ? this.indicesLength : this.verticesLength / this.elementsPerVertex); + }; + Mesh.prototype.drawWithOffset = function (shader, primitiveType, offset, count) { + var gl = this.context.gl; + if (this.dirtyVertices || this.dirtyIndices) + this.update(); + this.bind(shader); + if (this.indicesLength > 0) { + gl.drawElements(primitiveType, count, gl.UNSIGNED_SHORT, offset * 2); + } + else { + gl.drawArrays(primitiveType, offset, count); + } + this.unbind(shader); + }; + Mesh.prototype.bind = function (shader) { + var gl = this.context.gl; + gl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer); + var offset = 0; + for (var i = 0; i < this.attributes.length; i++) { + var attrib = this.attributes[i]; + var location_1 = shader.getAttributeLocation(attrib.name); + gl.enableVertexAttribArray(location_1); + gl.vertexAttribPointer(location_1, attrib.numElements, gl.FLOAT, false, this.elementsPerVertex * 4, offset * 4); + offset += attrib.numElements; + } + if (this.indicesLength > 0) + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer); + }; + Mesh.prototype.unbind = function (shader) { + var gl = this.context.gl; + for (var i = 0; i < this.attributes.length; i++) { + var attrib = this.attributes[i]; + var location_2 = shader.getAttributeLocation(attrib.name); + gl.disableVertexAttribArray(location_2); + } + gl.bindBuffer(gl.ARRAY_BUFFER, null); + if (this.indicesLength > 0) + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null); + }; + Mesh.prototype.update = function () { + var gl = this.context.gl; + if (this.dirtyVertices) { + if (!this.verticesBuffer) { + this.verticesBuffer = gl.createBuffer(); + } + gl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.vertices.subarray(0, this.verticesLength), gl.DYNAMIC_DRAW); + this.dirtyVertices = false; + } + if (this.dirtyIndices) { + if (!this.indicesBuffer) { + this.indicesBuffer = gl.createBuffer(); + } + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices.subarray(0, this.indicesLength), gl.DYNAMIC_DRAW); + this.dirtyIndices = false; + } + }; + Mesh.prototype.restore = function () { + this.verticesBuffer = null; + this.indicesBuffer = null; + this.update(); + }; + Mesh.prototype.dispose = function () { + this.context.removeRestorable(this); + var gl = this.context.gl; + gl.deleteBuffer(this.verticesBuffer); + gl.deleteBuffer(this.indicesBuffer); + }; + return Mesh; + }()); + webgl.Mesh = Mesh; + var VertexAttribute = (function () { + function VertexAttribute(name, type, numElements) { + this.name = name; + this.type = type; + this.numElements = numElements; + } + return VertexAttribute; + }()); + webgl.VertexAttribute = VertexAttribute; + var Position2Attribute = (function (_super) { + __extends(Position2Attribute, _super); + function Position2Attribute() { + return _super.call(this, webgl.Shader.POSITION, VertexAttributeType.Float, 2) || this; + } + return Position2Attribute; + }(VertexAttribute)); + webgl.Position2Attribute = Position2Attribute; + var Position3Attribute = (function (_super) { + __extends(Position3Attribute, _super); + function Position3Attribute() { + return _super.call(this, webgl.Shader.POSITION, VertexAttributeType.Float, 3) || this; + } + return Position3Attribute; + }(VertexAttribute)); + webgl.Position3Attribute = Position3Attribute; + var TexCoordAttribute = (function (_super) { + __extends(TexCoordAttribute, _super); + function TexCoordAttribute(unit) { + if (unit === void 0) { unit = 0; } + return _super.call(this, webgl.Shader.TEXCOORDS + (unit == 0 ? "" : unit), VertexAttributeType.Float, 2) || this; + } + return TexCoordAttribute; + }(VertexAttribute)); + webgl.TexCoordAttribute = TexCoordAttribute; + var ColorAttribute = (function (_super) { + __extends(ColorAttribute, _super); + function ColorAttribute() { + return _super.call(this, webgl.Shader.COLOR, VertexAttributeType.Float, 4) || this; + } + return ColorAttribute; + }(VertexAttribute)); + webgl.ColorAttribute = ColorAttribute; + var Color2Attribute = (function (_super) { + __extends(Color2Attribute, _super); + function Color2Attribute() { + return _super.call(this, webgl.Shader.COLOR2, VertexAttributeType.Float, 4) || this; + } + return Color2Attribute; + }(VertexAttribute)); + webgl.Color2Attribute = Color2Attribute; + var VertexAttributeType; + (function (VertexAttributeType) { + VertexAttributeType[VertexAttributeType["Float"] = 0] = "Float"; + })(VertexAttributeType = webgl.VertexAttributeType || (webgl.VertexAttributeType = {})); + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var PolygonBatcher = (function () { + function PolygonBatcher(context, twoColorTint, maxVertices) { + if (twoColorTint === void 0) { twoColorTint = true; } + if (maxVertices === void 0) { maxVertices = 10920; } + this.isDrawing = false; + this.shader = null; + this.lastTexture = null; + this.verticesLength = 0; + this.indicesLength = 0; + if (maxVertices > 10920) + throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + var attributes = twoColorTint ? + [new webgl.Position2Attribute(), new webgl.ColorAttribute(), new webgl.TexCoordAttribute(), new webgl.Color2Attribute()] : + [new webgl.Position2Attribute(), new webgl.ColorAttribute(), new webgl.TexCoordAttribute()]; + this.mesh = new webgl.Mesh(context, attributes, maxVertices, maxVertices * 3); + this.srcBlend = this.context.gl.SRC_ALPHA; + this.dstBlend = this.context.gl.ONE_MINUS_SRC_ALPHA; + } + PolygonBatcher.prototype.begin = function (shader) { + var gl = this.context.gl; + if (this.isDrawing) + throw new Error("PolygonBatch is already drawing. Call PolygonBatch.end() before calling PolygonBatch.begin()"); + this.drawCalls = 0; + this.shader = shader; + this.lastTexture = null; + this.isDrawing = true; + gl.enable(gl.BLEND); + gl.blendFunc(this.srcBlend, this.dstBlend); + }; + PolygonBatcher.prototype.setBlendMode = function (srcBlend, dstBlend) { + var gl = this.context.gl; + this.srcBlend = srcBlend; + this.dstBlend = dstBlend; + if (this.isDrawing) { + this.flush(); + gl.blendFunc(this.srcBlend, this.dstBlend); + } + }; + PolygonBatcher.prototype.draw = function (texture, vertices, indices) { + if (texture != this.lastTexture) { + this.flush(); + this.lastTexture = texture; + } + else if (this.verticesLength + vertices.length > this.mesh.getVertices().length || + this.indicesLength + indices.length > this.mesh.getIndices().length) { + this.flush(); + } + var indexStart = this.mesh.numVertices(); + this.mesh.getVertices().set(vertices, this.verticesLength); + this.verticesLength += vertices.length; + this.mesh.setVerticesLength(this.verticesLength); + var indicesArray = this.mesh.getIndices(); + for (var i = this.indicesLength, j = 0; j < indices.length; i++, j++) + indicesArray[i] = indices[j] + indexStart; + this.indicesLength += indices.length; + this.mesh.setIndicesLength(this.indicesLength); + }; + PolygonBatcher.prototype.flush = function () { + var gl = this.context.gl; + if (this.verticesLength == 0) + return; + this.lastTexture.bind(); + this.mesh.draw(this.shader, gl.TRIANGLES); + this.verticesLength = 0; + this.indicesLength = 0; + this.mesh.setVerticesLength(0); + this.mesh.setIndicesLength(0); + this.drawCalls++; + }; + PolygonBatcher.prototype.end = function () { + var gl = this.context.gl; + if (!this.isDrawing) + throw new Error("PolygonBatch is not drawing. Call PolygonBatch.begin() before calling PolygonBatch.end()"); + if (this.verticesLength > 0 || this.indicesLength > 0) + this.flush(); + this.shader = null; + this.lastTexture = null; + this.isDrawing = false; + gl.disable(gl.BLEND); + }; + PolygonBatcher.prototype.getDrawCalls = function () { return this.drawCalls; }; + PolygonBatcher.prototype.dispose = function () { + this.mesh.dispose(); + }; + return PolygonBatcher; + }()); + webgl.PolygonBatcher = PolygonBatcher; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var SceneRenderer = (function () { + function SceneRenderer(canvas, context, twoColorTint) { + if (twoColorTint === void 0) { twoColorTint = true; } + this.twoColorTint = false; + this.activeRenderer = null; + this.QUAD = [ + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + ]; + this.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + this.WHITE = new spine.Color(1, 1, 1, 1); + this.canvas = canvas; + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.twoColorTint = twoColorTint; + this.camera = new webgl.OrthoCamera(canvas.width, canvas.height); + this.batcherShader = twoColorTint ? webgl.Shader.newTwoColoredTextured(this.context) : webgl.Shader.newColoredTextured(this.context); + this.batcher = new webgl.PolygonBatcher(this.context, twoColorTint); + this.shapesShader = webgl.Shader.newColored(this.context); + this.shapes = new webgl.ShapeRenderer(this.context); + this.skeletonRenderer = new webgl.SkeletonRenderer(this.context, twoColorTint); + this.skeletonDebugRenderer = new webgl.SkeletonDebugRenderer(this.context); + } + SceneRenderer.prototype.begin = function () { + this.camera.update(); + this.enableRenderer(this.batcher); + }; + SceneRenderer.prototype.drawSkeleton = function (skeleton, premultipliedAlpha, slotRangeStart, slotRangeEnd) { + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + if (slotRangeStart === void 0) { slotRangeStart = -1; } + if (slotRangeEnd === void 0) { slotRangeEnd = -1; } + this.enableRenderer(this.batcher); + this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha; + this.skeletonRenderer.draw(this.batcher, skeleton, slotRangeStart, slotRangeEnd); + }; + SceneRenderer.prototype.drawSkeletonDebug = function (skeleton, premultipliedAlpha, ignoredBones) { + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + if (ignoredBones === void 0) { ignoredBones = null; } + this.enableRenderer(this.shapes); + this.skeletonDebugRenderer.premultipliedAlpha = premultipliedAlpha; + this.skeletonDebugRenderer.draw(this.shapes, skeleton, ignoredBones); + }; + SceneRenderer.prototype.drawTexture = function (texture, x, y, width, height, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.drawTextureUV = function (texture, x, y, width, height, u, v, u2, v2, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u; + quad[i++] = v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u2; + quad[i++] = v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u2; + quad[i++] = v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u; + quad[i++] = v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.drawTextureRotated = function (texture, x, y, width, height, pivotX, pivotY, angle, color, premultipliedAlpha) { + if (color === void 0) { color = null; } + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var worldOriginX = x + pivotX; + var worldOriginY = y + pivotY; + var fx = -pivotX; + var fy = -pivotY; + var fx2 = width - pivotX; + var fy2 = height - pivotY; + var p1x = fx; + var p1y = fy; + var p2x = fx; + var p2y = fy2; + var p3x = fx2; + var p3y = fy2; + var p4x = fx2; + var p4y = fy; + var x1 = 0; + var y1 = 0; + var x2 = 0; + var y2 = 0; + var x3 = 0; + var y3 = 0; + var x4 = 0; + var y4 = 0; + if (angle != 0) { + var cos = spine.MathUtils.cosDeg(angle); + var sin = spine.MathUtils.sinDeg(angle); + x1 = cos * p1x - sin * p1y; + y1 = sin * p1x + cos * p1y; + x4 = cos * p2x - sin * p2y; + y4 = sin * p2x + cos * p2y; + x3 = cos * p3x - sin * p3y; + y3 = sin * p3x + cos * p3y; + x2 = x3 + (x1 - x4); + y2 = y3 + (y1 - y4); + } + else { + x1 = p1x; + y1 = p1y; + x4 = p2x; + y4 = p2y; + x3 = p3x; + y3 = p3y; + x2 = p4x; + y2 = p4y; + } + x1 += worldOriginX; + y1 += worldOriginY; + x2 += worldOriginX; + y2 += worldOriginY; + x3 += worldOriginX; + y3 += worldOriginY; + x4 += worldOriginX; + y4 += worldOriginY; + var i = 0; + quad[i++] = x1; + quad[i++] = y1; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x2; + quad[i++] = y2; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x3; + quad[i++] = y3; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x4; + quad[i++] = y4; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.drawRegion = function (region, x, y, width, height, color, premultipliedAlpha) { + if (color === void 0) { color = null; } + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u; + quad[i++] = region.v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u2; + quad[i++] = region.v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u2; + quad[i++] = region.v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u; + quad[i++] = region.v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(region.texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.line = function (x, y, x2, y2, color, color2) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + this.enableRenderer(this.shapes); + this.shapes.line(x, y, x2, y2, color); + }; + SceneRenderer.prototype.triangle = function (filled, x, y, x2, y2, x3, y3, color, color2, color3) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + this.enableRenderer(this.shapes); + this.shapes.triangle(filled, x, y, x2, y2, x3, y3, color, color2, color3); + }; + SceneRenderer.prototype.quad = function (filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + if (color4 === void 0) { color4 = null; } + this.enableRenderer(this.shapes); + this.shapes.quad(filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4); + }; + SceneRenderer.prototype.rect = function (filled, x, y, width, height, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.rect(filled, x, y, width, height, color); + }; + SceneRenderer.prototype.rectLine = function (filled, x1, y1, x2, y2, width, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.rectLine(filled, x1, y1, x2, y2, width, color); + }; + SceneRenderer.prototype.polygon = function (polygonVertices, offset, count, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.polygon(polygonVertices, offset, count, color); + }; + SceneRenderer.prototype.circle = function (filled, x, y, radius, color, segments) { + if (color === void 0) { color = null; } + if (segments === void 0) { segments = 0; } + this.enableRenderer(this.shapes); + this.shapes.circle(filled, x, y, radius, color, segments); + }; + SceneRenderer.prototype.curve = function (x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color); + }; + SceneRenderer.prototype.end = function () { + if (this.activeRenderer === this.batcher) + this.batcher.end(); + else if (this.activeRenderer === this.shapes) + this.shapes.end(); + this.activeRenderer = null; + }; + SceneRenderer.prototype.resize = function (resizeMode) { + var canvas = this.canvas; + var w = canvas.clientWidth; + var h = canvas.clientHeight; + if (canvas.width != w || canvas.height != h) { + canvas.width = w; + canvas.height = h; + } + this.context.gl.viewport(0, 0, canvas.width, canvas.height); + if (resizeMode === ResizeMode.Stretch) { + } + else if (resizeMode === ResizeMode.Expand) { + this.camera.setViewport(w, h); + } + else if (resizeMode === ResizeMode.Fit) { + var sourceWidth = canvas.width, sourceHeight = canvas.height; + var targetWidth = this.camera.viewportWidth, targetHeight = this.camera.viewportHeight; + var targetRatio = targetHeight / targetWidth; + var sourceRatio = sourceHeight / sourceWidth; + var scale = targetRatio < sourceRatio ? targetWidth / sourceWidth : targetHeight / sourceHeight; + this.camera.viewportWidth = sourceWidth * scale; + this.camera.viewportHeight = sourceHeight * scale; + } + this.camera.update(); + }; + SceneRenderer.prototype.enableRenderer = function (renderer) { + if (this.activeRenderer === renderer) + return; + this.end(); + if (renderer instanceof webgl.PolygonBatcher) { + this.batcherShader.bind(); + this.batcherShader.setUniform4x4f(webgl.Shader.MVP_MATRIX, this.camera.projectionView.values); + this.batcherShader.setUniformi("u_texture", 0); + this.batcher.begin(this.batcherShader); + this.activeRenderer = this.batcher; + } + else if (renderer instanceof webgl.ShapeRenderer) { + this.shapesShader.bind(); + this.shapesShader.setUniform4x4f(webgl.Shader.MVP_MATRIX, this.camera.projectionView.values); + this.shapes.begin(this.shapesShader); + this.activeRenderer = this.shapes; + } + else { + this.activeRenderer = this.skeletonDebugRenderer; + } + }; + SceneRenderer.prototype.dispose = function () { + this.batcher.dispose(); + this.batcherShader.dispose(); + this.shapes.dispose(); + this.shapesShader.dispose(); + this.skeletonDebugRenderer.dispose(); + }; + return SceneRenderer; + }()); + webgl.SceneRenderer = SceneRenderer; + var ResizeMode; + (function (ResizeMode) { + ResizeMode[ResizeMode["Stretch"] = 0] = "Stretch"; + ResizeMode[ResizeMode["Expand"] = 1] = "Expand"; + ResizeMode[ResizeMode["Fit"] = 2] = "Fit"; + })(ResizeMode = webgl.ResizeMode || (webgl.ResizeMode = {})); + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Shader = (function () { + function Shader(context, vertexShader, fragmentShader) { + this.vertexShader = vertexShader; + this.fragmentShader = fragmentShader; + this.vs = null; + this.fs = null; + this.program = null; + this.tmp2x2 = new Float32Array(2 * 2); + this.tmp3x3 = new Float32Array(3 * 3); + this.tmp4x4 = new Float32Array(4 * 4); + this.vsSource = vertexShader; + this.fsSource = fragmentShader; + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.context.addRestorable(this); + this.compile(); + } + Shader.prototype.getProgram = function () { return this.program; }; + Shader.prototype.getVertexShader = function () { return this.vertexShader; }; + Shader.prototype.getFragmentShader = function () { return this.fragmentShader; }; + Shader.prototype.getVertexShaderSource = function () { return this.vsSource; }; + Shader.prototype.getFragmentSource = function () { return this.fsSource; }; + Shader.prototype.compile = function () { + var gl = this.context.gl; + try { + this.vs = this.compileShader(gl.VERTEX_SHADER, this.vertexShader); + this.fs = this.compileShader(gl.FRAGMENT_SHADER, this.fragmentShader); + this.program = this.compileProgram(this.vs, this.fs); + } + catch (e) { + this.dispose(); + throw e; + } + }; + Shader.prototype.compileShader = function (type, source) { + var gl = this.context.gl; + var shader = gl.createShader(type); + gl.shaderSource(shader, source); + gl.compileShader(shader); + if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { + var error = "Couldn't compile shader: " + gl.getShaderInfoLog(shader); + gl.deleteShader(shader); + if (!gl.isContextLost()) + throw new Error(error); + } + return shader; + }; + Shader.prototype.compileProgram = function (vs, fs) { + var gl = this.context.gl; + var program = gl.createProgram(); + gl.attachShader(program, vs); + gl.attachShader(program, fs); + gl.linkProgram(program); + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + var error = "Couldn't compile shader program: " + gl.getProgramInfoLog(program); + gl.deleteProgram(program); + if (!gl.isContextLost()) + throw new Error(error); + } + return program; + }; + Shader.prototype.restore = function () { + this.compile(); + }; + Shader.prototype.bind = function () { + this.context.gl.useProgram(this.program); + }; + Shader.prototype.unbind = function () { + this.context.gl.useProgram(null); + }; + Shader.prototype.setUniformi = function (uniform, value) { + this.context.gl.uniform1i(this.getUniformLocation(uniform), value); + }; + Shader.prototype.setUniformf = function (uniform, value) { + this.context.gl.uniform1f(this.getUniformLocation(uniform), value); + }; + Shader.prototype.setUniform2f = function (uniform, value, value2) { + this.context.gl.uniform2f(this.getUniformLocation(uniform), value, value2); + }; + Shader.prototype.setUniform3f = function (uniform, value, value2, value3) { + this.context.gl.uniform3f(this.getUniformLocation(uniform), value, value2, value3); + }; + Shader.prototype.setUniform4f = function (uniform, value, value2, value3, value4) { + this.context.gl.uniform4f(this.getUniformLocation(uniform), value, value2, value3, value4); + }; + Shader.prototype.setUniform2x2f = function (uniform, value) { + var gl = this.context.gl; + this.tmp2x2.set(value); + gl.uniformMatrix2fv(this.getUniformLocation(uniform), false, this.tmp2x2); + }; + Shader.prototype.setUniform3x3f = function (uniform, value) { + var gl = this.context.gl; + this.tmp3x3.set(value); + gl.uniformMatrix3fv(this.getUniformLocation(uniform), false, this.tmp3x3); + }; + Shader.prototype.setUniform4x4f = function (uniform, value) { + var gl = this.context.gl; + this.tmp4x4.set(value); + gl.uniformMatrix4fv(this.getUniformLocation(uniform), false, this.tmp4x4); + }; + Shader.prototype.getUniformLocation = function (uniform) { + var gl = this.context.gl; + var location = gl.getUniformLocation(this.program, uniform); + if (!location && !gl.isContextLost()) + throw new Error("Couldn't find location for uniform " + uniform); + return location; + }; + Shader.prototype.getAttributeLocation = function (attribute) { + var gl = this.context.gl; + var location = gl.getAttribLocation(this.program, attribute); + if (location == -1 && !gl.isContextLost()) + throw new Error("Couldn't find location for attribute " + attribute); + return location; + }; + Shader.prototype.dispose = function () { + this.context.removeRestorable(this); + var gl = this.context.gl; + if (this.vs) { + gl.deleteShader(this.vs); + this.vs = null; + } + if (this.fs) { + gl.deleteShader(this.fs); + this.fs = null; + } + if (this.program) { + gl.deleteProgram(this.program); + this.program = null; + } + }; + Shader.newColoredTextured = function (context) { + var vs = "\n\t\t\t\tattribute vec4 " + Shader.POSITION + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR + ";\n\t\t\t\tattribute vec2 " + Shader.TEXCOORDS + ";\n\t\t\t\tuniform mat4 " + Shader.MVP_MATRIX + ";\n\t\t\t\tvarying vec4 v_color;\n\t\t\t\tvarying vec2 v_texCoords;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_color = " + Shader.COLOR + ";\n\t\t\t\t\tv_texCoords = " + Shader.TEXCOORDS + ";\n\t\t\t\t\tgl_Position = " + Shader.MVP_MATRIX + " * " + Shader.POSITION + ";\n\t\t\t\t}\n\t\t\t"; + var fs = "\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_color;\n\t\t\t\tvarying vec2 v_texCoords;\n\t\t\t\tuniform sampler2D u_texture;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tgl_FragColor = v_color * texture2D(u_texture, v_texCoords);\n\t\t\t\t}\n\t\t\t"; + return new Shader(context, vs, fs); + }; + Shader.newTwoColoredTextured = function (context) { + var vs = "\n\t\t\t\tattribute vec4 " + Shader.POSITION + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR2 + ";\n\t\t\t\tattribute vec2 " + Shader.TEXCOORDS + ";\n\t\t\t\tuniform mat4 " + Shader.MVP_MATRIX + ";\n\t\t\t\tvarying vec4 v_light;\n\t\t\t\tvarying vec4 v_dark;\n\t\t\t\tvarying vec2 v_texCoords;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_light = " + Shader.COLOR + ";\n\t\t\t\t\tv_dark = " + Shader.COLOR2 + ";\n\t\t\t\t\tv_texCoords = " + Shader.TEXCOORDS + ";\n\t\t\t\t\tgl_Position = " + Shader.MVP_MATRIX + " * " + Shader.POSITION + ";\n\t\t\t\t}\n\t\t\t"; + var fs = "\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_light;\n\t\t\t\tvarying LOWP vec4 v_dark;\n\t\t\t\tvarying vec2 v_texCoords;\n\t\t\t\tuniform sampler2D u_texture;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tvec4 texColor = texture2D(u_texture, v_texCoords);\n\t\t\t\t\tgl_FragColor.a = texColor.a * v_light.a;\n\t\t\t\t\tgl_FragColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;\n\t\t\t\t}\n\t\t\t"; + return new Shader(context, vs, fs); + }; + Shader.newColored = function (context) { + var vs = "\n\t\t\t\tattribute vec4 " + Shader.POSITION + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR + ";\n\t\t\t\tuniform mat4 " + Shader.MVP_MATRIX + ";\n\t\t\t\tvarying vec4 v_color;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_color = " + Shader.COLOR + ";\n\t\t\t\t\tgl_Position = " + Shader.MVP_MATRIX + " * " + Shader.POSITION + ";\n\t\t\t\t}\n\t\t\t"; + var fs = "\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_color;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tgl_FragColor = v_color;\n\t\t\t\t}\n\t\t\t"; + return new Shader(context, vs, fs); + }; + Shader.MVP_MATRIX = "u_projTrans"; + Shader.POSITION = "a_position"; + Shader.COLOR = "a_color"; + Shader.COLOR2 = "a_color2"; + Shader.TEXCOORDS = "a_texCoords"; + Shader.SAMPLER = "u_texture"; + return Shader; + }()); + webgl.Shader = Shader; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var ShapeRenderer = (function () { + function ShapeRenderer(context, maxVertices) { + if (maxVertices === void 0) { maxVertices = 10920; } + this.isDrawing = false; + this.shapeType = ShapeType.Filled; + this.color = new spine.Color(1, 1, 1, 1); + this.vertexIndex = 0; + this.tmp = new spine.Vector2(); + if (maxVertices > 10920) + throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.mesh = new webgl.Mesh(context, [new webgl.Position2Attribute(), new webgl.ColorAttribute()], maxVertices, 0); + this.srcBlend = this.context.gl.SRC_ALPHA; + this.dstBlend = this.context.gl.ONE_MINUS_SRC_ALPHA; + } + ShapeRenderer.prototype.begin = function (shader) { + if (this.isDrawing) + throw new Error("ShapeRenderer.begin() has already been called"); + this.shader = shader; + this.vertexIndex = 0; + this.isDrawing = true; + var gl = this.context.gl; + gl.enable(gl.BLEND); + gl.blendFunc(this.srcBlend, this.dstBlend); + }; + ShapeRenderer.prototype.setBlendMode = function (srcBlend, dstBlend) { + var gl = this.context.gl; + this.srcBlend = srcBlend; + this.dstBlend = dstBlend; + if (this.isDrawing) { + this.flush(); + gl.blendFunc(this.srcBlend, this.dstBlend); + } + }; + ShapeRenderer.prototype.setColor = function (color) { + this.color.setFromColor(color); + }; + ShapeRenderer.prototype.setColorWith = function (r, g, b, a) { + this.color.set(r, g, b, a); + }; + ShapeRenderer.prototype.point = function (x, y, color) { + if (color === void 0) { color = null; } + this.check(ShapeType.Point, 1); + if (color === null) + color = this.color; + this.vertex(x, y, color); + }; + ShapeRenderer.prototype.line = function (x, y, x2, y2, color) { + if (color === void 0) { color = null; } + this.check(ShapeType.Line, 2); + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + if (color === null) + color = this.color; + this.vertex(x, y, color); + this.vertex(x2, y2, color); + }; + ShapeRenderer.prototype.triangle = function (filled, x, y, x2, y2, x3, y3, color, color2, color3) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + this.check(filled ? ShapeType.Filled : ShapeType.Line, 3); + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + if (color === null) + color = this.color; + if (color2 === null) + color2 = this.color; + if (color3 === null) + color3 = this.color; + if (filled) { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x3, y3, color3); + } + else { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x2, y2, color); + this.vertex(x3, y3, color2); + this.vertex(x3, y3, color); + this.vertex(x, y, color2); + } + }; + ShapeRenderer.prototype.quad = function (filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + if (color4 === void 0) { color4 = null; } + this.check(filled ? ShapeType.Filled : ShapeType.Line, 3); + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + if (color === null) + color = this.color; + if (color2 === null) + color2 = this.color; + if (color3 === null) + color3 = this.color; + if (color4 === null) + color4 = this.color; + if (filled) { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x3, y3, color3); + this.vertex(x3, y3, color3); + this.vertex(x4, y4, color4); + this.vertex(x, y, color); + } + else { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x2, y2, color2); + this.vertex(x3, y3, color3); + this.vertex(x3, y3, color3); + this.vertex(x4, y4, color4); + this.vertex(x4, y4, color4); + this.vertex(x, y, color); + } + }; + ShapeRenderer.prototype.rect = function (filled, x, y, width, height, color) { + if (color === void 0) { color = null; } + this.quad(filled, x, y, x + width, y, x + width, y + height, x, y + height, color, color, color, color); + }; + ShapeRenderer.prototype.rectLine = function (filled, x1, y1, x2, y2, width, color) { + if (color === void 0) { color = null; } + this.check(filled ? ShapeType.Filled : ShapeType.Line, 8); + if (color === null) + color = this.color; + var t = this.tmp.set(y2 - y1, x1 - x2); + t.normalize(); + width *= 0.5; + var tx = t.x * width; + var ty = t.y * width; + if (!filled) { + this.vertex(x1 + tx, y1 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x2 - tx, y2 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x1 + tx, y1 + ty, color); + this.vertex(x2 - tx, y2 - ty, color); + this.vertex(x1 - tx, y1 - ty, color); + } + else { + this.vertex(x1 + tx, y1 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x2 - tx, y2 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + } + }; + ShapeRenderer.prototype.x = function (x, y, size) { + this.line(x - size, y - size, x + size, y + size); + this.line(x - size, y + size, x + size, y - size); + }; + ShapeRenderer.prototype.polygon = function (polygonVertices, offset, count, color) { + if (color === void 0) { color = null; } + if (count < 3) + throw new Error("Polygon must contain at least 3 vertices"); + this.check(ShapeType.Line, count * 2); + if (color === null) + color = this.color; + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + offset <<= 1; + count <<= 1; + var firstX = polygonVertices[offset]; + var firstY = polygonVertices[offset + 1]; + var last = offset + count; + for (var i = offset, n = offset + count - 2; i < n; i += 2) { + var x1 = polygonVertices[i]; + var y1 = polygonVertices[i + 1]; + var x2 = 0; + var y2 = 0; + if (i + 2 >= last) { + x2 = firstX; + y2 = firstY; + } + else { + x2 = polygonVertices[i + 2]; + y2 = polygonVertices[i + 3]; + } + this.vertex(x1, y1, color); + this.vertex(x2, y2, color); + } + }; + ShapeRenderer.prototype.circle = function (filled, x, y, radius, color, segments) { + if (color === void 0) { color = null; } + if (segments === void 0) { segments = 0; } + if (segments === 0) + segments = Math.max(1, (6 * spine.MathUtils.cbrt(radius)) | 0); + if (segments <= 0) + throw new Error("segments must be > 0."); + if (color === null) + color = this.color; + var angle = 2 * spine.MathUtils.PI / segments; + var cos = Math.cos(angle); + var sin = Math.sin(angle); + var cx = radius, cy = 0; + if (!filled) { + this.check(ShapeType.Line, segments * 2 + 2); + for (var i = 0; i < segments; i++) { + this.vertex(x + cx, y + cy, color); + var temp_1 = cx; + cx = cos * cx - sin * cy; + cy = sin * temp_1 + cos * cy; + this.vertex(x + cx, y + cy, color); + } + this.vertex(x + cx, y + cy, color); + } + else { + this.check(ShapeType.Filled, segments * 3 + 3); + segments--; + for (var i = 0; i < segments; i++) { + this.vertex(x, y, color); + this.vertex(x + cx, y + cy, color); + var temp_2 = cx; + cx = cos * cx - sin * cy; + cy = sin * temp_2 + cos * cy; + this.vertex(x + cx, y + cy, color); + } + this.vertex(x, y, color); + this.vertex(x + cx, y + cy, color); + } + var temp = cx; + cx = radius; + cy = 0; + this.vertex(x + cx, y + cy, color); + }; + ShapeRenderer.prototype.curve = function (x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color) { + if (color === void 0) { color = null; } + this.check(ShapeType.Line, segments * 2 + 2); + if (color === null) + color = this.color; + var subdiv_step = 1 / segments; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step * subdiv_step * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = x1 - cx1 * 2 + cx2; + var tmp1y = y1 - cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 - x1 + x2; + var tmp2y = (cy1 - cy2) * 3 - y1 + y2; + var fx = x1; + var fy = y1; + var dfx = (cx1 - x1) * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + var dfy = (cy1 - y1) * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + var ddfx = tmp1x * pre4 + tmp2x * pre5; + var ddfy = tmp1y * pre4 + tmp2y * pre5; + var dddfx = tmp2x * pre5; + var dddfy = tmp2y * pre5; + while (segments-- > 0) { + this.vertex(fx, fy, color); + fx += dfx; + fy += dfy; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + this.vertex(fx, fy, color); + } + this.vertex(fx, fy, color); + this.vertex(x2, y2, color); + }; + ShapeRenderer.prototype.vertex = function (x, y, color) { + var idx = this.vertexIndex; + var vertices = this.mesh.getVertices(); + vertices[idx++] = x; + vertices[idx++] = y; + vertices[idx++] = color.r; + vertices[idx++] = color.g; + vertices[idx++] = color.b; + vertices[idx++] = color.a; + this.vertexIndex = idx; + }; + ShapeRenderer.prototype.end = function () { + if (!this.isDrawing) + throw new Error("ShapeRenderer.begin() has not been called"); + this.flush(); + this.context.gl.disable(this.context.gl.BLEND); + this.isDrawing = false; + }; + ShapeRenderer.prototype.flush = function () { + if (this.vertexIndex == 0) + return; + this.mesh.setVerticesLength(this.vertexIndex); + this.mesh.draw(this.shader, this.shapeType); + this.vertexIndex = 0; + }; + ShapeRenderer.prototype.check = function (shapeType, numVertices) { + if (!this.isDrawing) + throw new Error("ShapeRenderer.begin() has not been called"); + if (this.shapeType == shapeType) { + if (this.mesh.maxVertices() - this.mesh.numVertices() < numVertices) + this.flush(); + else + return; + } + else { + this.flush(); + this.shapeType = shapeType; + } + }; + ShapeRenderer.prototype.dispose = function () { + this.mesh.dispose(); + }; + return ShapeRenderer; + }()); + webgl.ShapeRenderer = ShapeRenderer; + var ShapeType; + (function (ShapeType) { + ShapeType[ShapeType["Point"] = 0] = "Point"; + ShapeType[ShapeType["Line"] = 1] = "Line"; + ShapeType[ShapeType["Filled"] = 4] = "Filled"; + })(ShapeType = webgl.ShapeType || (webgl.ShapeType = {})); + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var SkeletonDebugRenderer = (function () { + function SkeletonDebugRenderer(context) { + this.boneLineColor = new spine.Color(1, 0, 0, 1); + this.boneOriginColor = new spine.Color(0, 1, 0, 1); + this.attachmentLineColor = new spine.Color(0, 0, 1, 0.5); + this.triangleLineColor = new spine.Color(1, 0.64, 0, 0.5); + this.pathColor = new spine.Color().setFromString("FF7F00"); + this.clipColor = new spine.Color(0.8, 0, 0, 2); + this.aabbColor = new spine.Color(0, 1, 0, 0.5); + this.drawBones = true; + this.drawRegionAttachments = true; + this.drawBoundingBoxes = true; + this.drawMeshHull = true; + this.drawMeshTriangles = true; + this.drawPaths = true; + this.drawSkeletonXY = false; + this.drawClipping = true; + this.premultipliedAlpha = false; + this.scale = 1; + this.boneWidth = 2; + this.bounds = new spine.SkeletonBounds(); + this.temp = new Array(); + this.vertices = spine.Utils.newFloatArray(2 * 1024); + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + } + SkeletonDebugRenderer.prototype.draw = function (shapes, skeleton, ignoredBones) { + if (ignoredBones === void 0) { ignoredBones = null; } + var skeletonX = skeleton.x; + var skeletonY = skeleton.y; + var gl = this.context.gl; + var srcFunc = this.premultipliedAlpha ? gl.ONE : gl.SRC_ALPHA; + shapes.setBlendMode(srcFunc, gl.ONE_MINUS_SRC_ALPHA); + var bones = skeleton.bones; + if (this.drawBones) { + shapes.setColor(this.boneLineColor); + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) + continue; + if (bone.parent == null) + continue; + var x = skeletonX + bone.data.length * bone.a + bone.worldX; + var y = skeletonY + bone.data.length * bone.c + bone.worldY; + shapes.rectLine(true, skeletonX + bone.worldX, skeletonY + bone.worldY, x, y, this.boneWidth * this.scale); + } + if (this.drawSkeletonXY) + shapes.x(skeletonX, skeletonY, 4 * this.scale); + } + if (this.drawRegionAttachments) { + shapes.setColor(this.attachmentLineColor); + var slots = skeleton.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.RegionAttachment) { + var regionAttachment = attachment; + var vertices = this.vertices; + regionAttachment.computeWorldVertices(slot.bone, vertices, 0, 2); + shapes.line(vertices[0], vertices[1], vertices[2], vertices[3]); + shapes.line(vertices[2], vertices[3], vertices[4], vertices[5]); + shapes.line(vertices[4], vertices[5], vertices[6], vertices[7]); + shapes.line(vertices[6], vertices[7], vertices[0], vertices[1]); + } + } + } + if (this.drawMeshHull || this.drawMeshTriangles) { + var slots = skeleton.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (!(attachment instanceof spine.MeshAttachment)) + continue; + var mesh = attachment; + var vertices = this.vertices; + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, 2); + var triangles = mesh.triangles; + var hullLength = mesh.hullLength; + if (this.drawMeshTriangles) { + shapes.setColor(this.triangleLineColor); + for (var ii = 0, nn = triangles.length; ii < nn; ii += 3) { + var v1 = triangles[ii] * 2, v2 = triangles[ii + 1] * 2, v3 = triangles[ii + 2] * 2; + shapes.triangle(false, vertices[v1], vertices[v1 + 1], vertices[v2], vertices[v2 + 1], vertices[v3], vertices[v3 + 1]); + } + } + if (this.drawMeshHull && hullLength > 0) { + shapes.setColor(this.attachmentLineColor); + hullLength = (hullLength >> 1) * 2; + var lastX = vertices[hullLength - 2], lastY = vertices[hullLength - 1]; + for (var ii = 0, nn = hullLength; ii < nn; ii += 2) { + var x = vertices[ii], y = vertices[ii + 1]; + shapes.line(x, y, lastX, lastY); + lastX = x; + lastY = y; + } + } + } + } + if (this.drawBoundingBoxes) { + var bounds = this.bounds; + bounds.update(skeleton, true); + shapes.setColor(this.aabbColor); + shapes.rect(false, bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight()); + var polygons = bounds.polygons; + var boxes = bounds.boundingBoxes; + for (var i = 0, n = polygons.length; i < n; i++) { + var polygon = polygons[i]; + shapes.setColor(boxes[i].color); + shapes.polygon(polygon, 0, polygon.length); + } + } + if (this.drawPaths) { + var slots = skeleton.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (!(attachment instanceof spine.PathAttachment)) + continue; + var path = attachment; + var nn = path.worldVerticesLength; + var world = this.temp = spine.Utils.setArraySize(this.temp, nn, 0); + path.computeWorldVertices(slot, 0, nn, world, 0, 2); + var color = this.pathColor; + var x1 = world[2], y1 = world[3], x2 = 0, y2 = 0; + if (path.closed) { + shapes.setColor(color); + var cx1 = world[0], cy1 = world[1], cx2 = world[nn - 2], cy2 = world[nn - 1]; + x2 = world[nn - 4]; + y2 = world[nn - 3]; + shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32); + shapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY); + shapes.line(x1, y1, cx1, cy1); + shapes.line(x2, y2, cx2, cy2); + } + nn -= 4; + for (var ii = 4; ii < nn; ii += 6) { + var cx1 = world[ii], cy1 = world[ii + 1], cx2 = world[ii + 2], cy2 = world[ii + 3]; + x2 = world[ii + 4]; + y2 = world[ii + 5]; + shapes.setColor(color); + shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32); + shapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY); + shapes.line(x1, y1, cx1, cy1); + shapes.line(x2, y2, cx2, cy2); + x1 = x2; + y1 = y2; + } + } + } + if (this.drawBones) { + shapes.setColor(this.boneOriginColor); + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) + continue; + shapes.circle(true, skeletonX + bone.worldX, skeletonY + bone.worldY, 3 * this.scale, SkeletonDebugRenderer.GREEN, 8); + } + } + if (this.drawClipping) { + var slots = skeleton.slots; + shapes.setColor(this.clipColor); + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (!(attachment instanceof spine.ClippingAttachment)) + continue; + var clip = attachment; + var nn = clip.worldVerticesLength; + var world = this.temp = spine.Utils.setArraySize(this.temp, nn, 0); + clip.computeWorldVertices(slot, 0, nn, world, 0, 2); + for (var i_21 = 0, n_3 = world.length; i_21 < n_3; i_21 += 2) { + var x = world[i_21]; + var y = world[i_21 + 1]; + var x2 = world[(i_21 + 2) % world.length]; + var y2 = world[(i_21 + 3) % world.length]; + shapes.line(x, y, x2, y2); + } + } + } + }; + SkeletonDebugRenderer.prototype.dispose = function () { + }; + SkeletonDebugRenderer.LIGHT_GRAY = new spine.Color(192 / 255, 192 / 255, 192 / 255, 1); + SkeletonDebugRenderer.GREEN = new spine.Color(0, 1, 0, 1); + return SkeletonDebugRenderer; + }()); + webgl.SkeletonDebugRenderer = SkeletonDebugRenderer; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Renderable = (function () { + function Renderable(vertices, numVertices, numFloats) { + this.vertices = vertices; + this.numVertices = numVertices; + this.numFloats = numFloats; + } + return Renderable; + }()); + ; + var SkeletonRenderer = (function () { + function SkeletonRenderer(context, twoColorTint) { + if (twoColorTint === void 0) { twoColorTint = true; } + this.premultipliedAlpha = false; + this.vertexEffect = null; + this.tempColor = new spine.Color(); + this.tempColor2 = new spine.Color(); + this.vertexSize = 2 + 2 + 4; + this.twoColorTint = false; + this.renderable = new Renderable(null, 0, 0); + this.clipper = new spine.SkeletonClipping(); + this.temp = new spine.Vector2(); + this.temp2 = new spine.Vector2(); + this.temp3 = new spine.Color(); + this.temp4 = new spine.Color(); + this.twoColorTint = twoColorTint; + if (twoColorTint) + this.vertexSize += 4; + this.vertices = spine.Utils.newFloatArray(this.vertexSize * 1024); + } + SkeletonRenderer.prototype.draw = function (batcher, skeleton, slotRangeStart, slotRangeEnd) { + if (slotRangeStart === void 0) { slotRangeStart = -1; } + if (slotRangeEnd === void 0) { slotRangeEnd = -1; } + var clipper = this.clipper; + var premultipliedAlpha = this.premultipliedAlpha; + var twoColorTint = this.twoColorTint; + var blendMode = null; + var tempPos = this.temp; + var tempUv = this.temp2; + var tempLight = this.temp3; + var tempDark = this.temp4; + var renderable = this.renderable; + var uvs = null; + var triangles = null; + var drawOrder = skeleton.drawOrder; + var attachmentColor = null; + var skeletonColor = skeleton.color; + var vertexSize = twoColorTint ? 12 : 8; + var inRange = false; + if (slotRangeStart == -1) + inRange = true; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var clippedVertexSize = clipper.isClipping() ? 2 : vertexSize; + var slot = drawOrder[i]; + if (!slot.bone.active) { + clipper.clipEndWithSlot(slot); + continue; + } + if (slotRangeStart >= 0 && slotRangeStart == slot.data.index) { + inRange = true; + } + if (!inRange) { + clipper.clipEndWithSlot(slot); + continue; + } + if (slotRangeEnd >= 0 && slotRangeEnd == slot.data.index) { + inRange = false; + } + var attachment = slot.getAttachment(); + var texture = null; + if (attachment instanceof spine.RegionAttachment) { + var region = attachment; + renderable.vertices = this.vertices; + renderable.numVertices = 4; + renderable.numFloats = clippedVertexSize << 2; + region.computeWorldVertices(slot.bone, renderable.vertices, 0, clippedVertexSize); + triangles = SkeletonRenderer.QUAD_TRIANGLES; + uvs = region.uvs; + texture = region.region.renderObject.texture; + attachmentColor = region.color; + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + renderable.vertices = this.vertices; + renderable.numVertices = (mesh.worldVerticesLength >> 1); + renderable.numFloats = renderable.numVertices * clippedVertexSize; + if (renderable.numFloats > renderable.vertices.length) { + renderable.vertices = this.vertices = spine.Utils.newFloatArray(renderable.numFloats); + } + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, renderable.vertices, 0, clippedVertexSize); + triangles = mesh.triangles; + texture = mesh.region.renderObject.texture; + uvs = mesh.uvs; + attachmentColor = mesh.color; + } + else if (attachment instanceof spine.ClippingAttachment) { + var clip = (attachment); + clipper.clipStart(slot, clip); + continue; + } + else { + clipper.clipEndWithSlot(slot); + continue; + } + if (texture != null) { + var slotColor = slot.color; + var finalColor = this.tempColor; + finalColor.r = skeletonColor.r * slotColor.r * attachmentColor.r; + finalColor.g = skeletonColor.g * slotColor.g * attachmentColor.g; + finalColor.b = skeletonColor.b * slotColor.b * attachmentColor.b; + finalColor.a = skeletonColor.a * slotColor.a * attachmentColor.a; + if (premultipliedAlpha) { + finalColor.r *= finalColor.a; + finalColor.g *= finalColor.a; + finalColor.b *= finalColor.a; + } + var darkColor = this.tempColor2; + if (slot.darkColor == null) + darkColor.set(0, 0, 0, 1.0); + else { + if (premultipliedAlpha) { + darkColor.r = slot.darkColor.r * finalColor.a; + darkColor.g = slot.darkColor.g * finalColor.a; + darkColor.b = slot.darkColor.b * finalColor.a; + } + else { + darkColor.setFromColor(slot.darkColor); + } + darkColor.a = premultipliedAlpha ? 1.0 : 0.0; + } + var slotBlendMode = slot.data.blendMode; + if (slotBlendMode != blendMode) { + blendMode = slotBlendMode; + batcher.setBlendMode(webgl.WebGLBlendModeConverter.getSourceGLBlendMode(blendMode, premultipliedAlpha), webgl.WebGLBlendModeConverter.getDestGLBlendMode(blendMode)); + } + if (clipper.isClipping()) { + clipper.clipTriangles(renderable.vertices, renderable.numFloats, triangles, triangles.length, uvs, finalColor, darkColor, twoColorTint); + var clippedVertices = new Float32Array(clipper.clippedVertices); + var clippedTriangles = clipper.clippedTriangles; + if (this.vertexEffect != null) { + var vertexEffect = this.vertexEffect; + var verts = clippedVertices; + if (!twoColorTint) { + for (var v = 0, n_4 = clippedVertices.length; v < n_4; v += vertexSize) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.set(verts[v + 2], verts[v + 3], verts[v + 4], verts[v + 5]); + tempUv.x = verts[v + 6]; + tempUv.y = verts[v + 7]; + tempDark.set(0, 0, 0, 0); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } + else { + for (var v = 0, n_5 = clippedVertices.length; v < n_5; v += vertexSize) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.set(verts[v + 2], verts[v + 3], verts[v + 4], verts[v + 5]); + tempUv.x = verts[v + 6]; + tempUv.y = verts[v + 7]; + tempDark.set(verts[v + 8], verts[v + 9], verts[v + 10], verts[v + 11]); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + verts[v + 8] = tempDark.r; + verts[v + 9] = tempDark.g; + verts[v + 10] = tempDark.b; + verts[v + 11] = tempDark.a; + } + } + } + batcher.draw(texture, clippedVertices, clippedTriangles); + } + else { + var verts = renderable.vertices; + if (this.vertexEffect != null) { + var vertexEffect = this.vertexEffect; + if (!twoColorTint) { + for (var v = 0, u = 0, n_6 = renderable.numFloats; v < n_6; v += vertexSize, u += 2) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempUv.x = uvs[u]; + tempUv.y = uvs[u + 1]; + tempLight.setFromColor(finalColor); + tempDark.set(0, 0, 0, 0); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } + else { + for (var v = 0, u = 0, n_7 = renderable.numFloats; v < n_7; v += vertexSize, u += 2) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempUv.x = uvs[u]; + tempUv.y = uvs[u + 1]; + tempLight.setFromColor(finalColor); + tempDark.setFromColor(darkColor); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + verts[v + 8] = tempDark.r; + verts[v + 9] = tempDark.g; + verts[v + 10] = tempDark.b; + verts[v + 11] = tempDark.a; + } + } + } + else { + if (!twoColorTint) { + for (var v = 2, u = 0, n_8 = renderable.numFloats; v < n_8; v += vertexSize, u += 2) { + verts[v] = finalColor.r; + verts[v + 1] = finalColor.g; + verts[v + 2] = finalColor.b; + verts[v + 3] = finalColor.a; + verts[v + 4] = uvs[u]; + verts[v + 5] = uvs[u + 1]; + } + } + else { + for (var v = 2, u = 0, n_9 = renderable.numFloats; v < n_9; v += vertexSize, u += 2) { + verts[v] = finalColor.r; + verts[v + 1] = finalColor.g; + verts[v + 2] = finalColor.b; + verts[v + 3] = finalColor.a; + verts[v + 4] = uvs[u]; + verts[v + 5] = uvs[u + 1]; + verts[v + 6] = darkColor.r; + verts[v + 7] = darkColor.g; + verts[v + 8] = darkColor.b; + verts[v + 9] = darkColor.a; + } + } + } + var view = renderable.vertices.subarray(0, renderable.numFloats); + batcher.draw(texture, view, triangles); + } + } + clipper.clipEndWithSlot(slot); + } + clipper.clipEnd(); + }; + SkeletonRenderer.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + return SkeletonRenderer; + }()); + webgl.SkeletonRenderer = SkeletonRenderer; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Vector3 = (function () { + function Vector3(x, y, z) { + if (x === void 0) { x = 0; } + if (y === void 0) { y = 0; } + if (z === void 0) { z = 0; } + this.x = 0; + this.y = 0; + this.z = 0; + this.x = x; + this.y = y; + this.z = z; + } + Vector3.prototype.setFrom = function (v) { + this.x = v.x; + this.y = v.y; + this.z = v.z; + return this; + }; + Vector3.prototype.set = function (x, y, z) { + this.x = x; + this.y = y; + this.z = z; + return this; + }; + Vector3.prototype.add = function (v) { + this.x += v.x; + this.y += v.y; + this.z += v.z; + return this; + }; + Vector3.prototype.sub = function (v) { + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + return this; + }; + Vector3.prototype.scale = function (s) { + this.x *= s; + this.y *= s; + this.z *= s; + return this; + }; + Vector3.prototype.normalize = function () { + var len = this.length(); + if (len == 0) + return this; + len = 1 / len; + this.x *= len; + this.y *= len; + this.z *= len; + return this; + }; + Vector3.prototype.cross = function (v) { + return this.set(this.y * v.z - this.z * v.y, this.z * v.x - this.x * v.z, this.x * v.y - this.y * v.x); + }; + Vector3.prototype.multiply = function (matrix) { + var l_mat = matrix.values; + return this.set(this.x * l_mat[webgl.M00] + this.y * l_mat[webgl.M01] + this.z * l_mat[webgl.M02] + l_mat[webgl.M03], this.x * l_mat[webgl.M10] + this.y * l_mat[webgl.M11] + this.z * l_mat[webgl.M12] + l_mat[webgl.M13], this.x * l_mat[webgl.M20] + this.y * l_mat[webgl.M21] + this.z * l_mat[webgl.M22] + l_mat[webgl.M23]); + }; + Vector3.prototype.project = function (matrix) { + var l_mat = matrix.values; + var l_w = 1 / (this.x * l_mat[webgl.M30] + this.y * l_mat[webgl.M31] + this.z * l_mat[webgl.M32] + l_mat[webgl.M33]); + return this.set((this.x * l_mat[webgl.M00] + this.y * l_mat[webgl.M01] + this.z * l_mat[webgl.M02] + l_mat[webgl.M03]) * l_w, (this.x * l_mat[webgl.M10] + this.y * l_mat[webgl.M11] + this.z * l_mat[webgl.M12] + l_mat[webgl.M13]) * l_w, (this.x * l_mat[webgl.M20] + this.y * l_mat[webgl.M21] + this.z * l_mat[webgl.M22] + l_mat[webgl.M23]) * l_w); + }; + Vector3.prototype.dot = function (v) { + return this.x * v.x + this.y * v.y + this.z * v.z; + }; + Vector3.prototype.length = function () { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + }; + Vector3.prototype.distance = function (v) { + var a = v.x - this.x; + var b = v.y - this.y; + var c = v.z - this.z; + return Math.sqrt(a * a + b * b + c * c); + }; + return Vector3; + }()); + webgl.Vector3 = Vector3; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var ManagedWebGLRenderingContext = (function () { + function ManagedWebGLRenderingContext(canvasOrContext, contextConfig) { + if (contextConfig === void 0) { contextConfig = { alpha: "true" }; } + this.restorables = new Array(); + if (!((canvasOrContext instanceof WebGLRenderingContext) || (canvasOrContext instanceof WebGL2RenderingContext))) { + this.setupCanvas(canvasOrContext, contextConfig); + } + else { + this.gl = canvasOrContext; + this.canvas = this.gl.canvas; + } + } + ManagedWebGLRenderingContext.prototype.setupCanvas = function (canvas, contextConfig) { + var _this = this; + this.gl = (canvas.getContext("webgl2", contextConfig) || canvas.getContext("webgl", contextConfig)); + this.canvas = canvas; + canvas.addEventListener("webglcontextlost", function (e) { + var event = e; + if (e) { + e.preventDefault(); + } + }); + canvas.addEventListener("webglcontextrestored", function (e) { + for (var i = 0, n = _this.restorables.length; i < n; i++) { + _this.restorables[i].restore(); + } + }); + }; + ManagedWebGLRenderingContext.prototype.addRestorable = function (restorable) { + this.restorables.push(restorable); + }; + ManagedWebGLRenderingContext.prototype.removeRestorable = function (restorable) { + var index = this.restorables.indexOf(restorable); + if (index > -1) + this.restorables.splice(index, 1); + }; + return ManagedWebGLRenderingContext; + }()); + webgl.ManagedWebGLRenderingContext = ManagedWebGLRenderingContext; + var WebGLBlendModeConverter = (function () { + function WebGLBlendModeConverter() { + } + WebGLBlendModeConverter.getDestGLBlendMode = function (blendMode) { + switch (blendMode) { + case spine.BlendMode.Normal: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + case spine.BlendMode.Additive: return WebGLBlendModeConverter.ONE; + case spine.BlendMode.Multiply: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + case spine.BlendMode.Screen: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + default: throw new Error("Unknown blend mode: " + blendMode); + } + }; + WebGLBlendModeConverter.getSourceGLBlendMode = function (blendMode, premultipliedAlpha) { + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + switch (blendMode) { + case spine.BlendMode.Normal: return premultipliedAlpha ? WebGLBlendModeConverter.ONE : WebGLBlendModeConverter.SRC_ALPHA; + case spine.BlendMode.Additive: return premultipliedAlpha ? WebGLBlendModeConverter.ONE : WebGLBlendModeConverter.SRC_ALPHA; + case spine.BlendMode.Multiply: return WebGLBlendModeConverter.DST_COLOR; + case spine.BlendMode.Screen: return WebGLBlendModeConverter.ONE; + default: throw new Error("Unknown blend mode: " + blendMode); + } + }; + WebGLBlendModeConverter.ZERO = 0; + WebGLBlendModeConverter.ONE = 1; + WebGLBlendModeConverter.SRC_COLOR = 0x0300; + WebGLBlendModeConverter.ONE_MINUS_SRC_COLOR = 0x0301; + WebGLBlendModeConverter.SRC_ALPHA = 0x0302; + WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA = 0x0303; + WebGLBlendModeConverter.DST_ALPHA = 0x0304; + WebGLBlendModeConverter.ONE_MINUS_DST_ALPHA = 0x0305; + WebGLBlendModeConverter.DST_COLOR = 0x0306; + return WebGLBlendModeConverter; + }()); + webgl.WebGLBlendModeConverter = WebGLBlendModeConverter; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Popup = (function () { + function Popup(player, parent, htmlContent) { + this.player = player; + this.dom = createElement("\n\t\t\t\t
        \n\t\t\t\t
        \n\t\t\t"); + this.dom.innerHTML = htmlContent; + parent.appendChild(this.dom); + } + Popup.prototype.show = function (dismissedListener) { + var _this = this; + this.dom.classList.remove("spine-player-hidden"); + var dismissed = false; + var resize = function () { + if (!dismissed) + requestAnimationFrame(resize); + var bottomOffset = Math.abs(_this.dom.getBoundingClientRect().bottom - _this.player.getBoundingClientRect().bottom); + var rightOffset = Math.abs(_this.dom.getBoundingClientRect().right - _this.player.getBoundingClientRect().right); + var maxHeight = _this.player.clientHeight - bottomOffset - rightOffset; + _this.dom.style.maxHeight = maxHeight + "px"; + }; + requestAnimationFrame(resize); + var justClicked = true; + var windowClickListener = function (event) { + if (justClicked) { + justClicked = false; + return; + } + if (!isContained(_this.dom, event.target)) { + _this.dom.remove(); + window.removeEventListener("click", windowClickListener); + dismissedListener(); + dismissed = true; + } + }; + window.addEventListener("click", windowClickListener); + }; + return Popup; + }()); + var Switch = (function () { + function Switch(text) { + this.text = text; + this.enabled = false; + } + Switch.prototype.render = function () { + var _this = this; + this["switch"] = createElement("\n\t\t\t\t
        \n\t\t\t\t\t" + this.text + "\n\t\t\t\t\t
        \n\t\t\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t
        \n\t\t\t"); + this["switch"].addEventListener("click", function () { + _this.setEnabled(!_this.enabled); + if (_this.change) + _this.change(_this.enabled); + }); + return this["switch"]; + }; + Switch.prototype.setEnabled = function (enabled) { + if (enabled) + this["switch"].classList.add("active"); + else + this["switch"].classList.remove("active"); + this.enabled = enabled; + }; + Switch.prototype.isEnabled = function () { + return this.enabled; + }; + return Switch; + }()); + var Slider = (function () { + function Slider(snaps, snapPercentage, big) { + if (snaps === void 0) { snaps = 0; } + if (snapPercentage === void 0) { snapPercentage = 0.1; } + if (big === void 0) { big = false; } + this.snaps = snaps; + this.snapPercentage = snapPercentage; + this.big = big; + } + Slider.prototype.render = function () { + var _this = this; + this.slider = createElement("\n\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t\t\n\t\t\t\t
        \n\t\t\t"); + this.value = findWithClass(this.slider, "spine-player-slider-value")[0]; + this.setValue(0); + var input = new spine.webgl.Input(this.slider); + var dragging = false; + input.addListener({ + down: function (x, y) { + dragging = true; + _this.value.classList.add("hovering"); + }, + up: function (x, y) { + dragging = false; + var percentage = x / _this.slider.clientWidth; + percentage = percentage = Math.max(0, Math.min(percentage, 1)); + _this.setValue(x / _this.slider.clientWidth); + if (_this.change) + _this.change(percentage); + _this.value.classList.remove("hovering"); + }, + moved: function (x, y) { + if (dragging) { + var percentage = x / _this.slider.clientWidth; + percentage = Math.max(0, Math.min(percentage, 1)); + percentage = _this.setValue(x / _this.slider.clientWidth); + if (_this.change) + _this.change(percentage); + } + }, + dragged: function (x, y) { + var percentage = x / _this.slider.clientWidth; + percentage = Math.max(0, Math.min(percentage, 1)); + percentage = _this.setValue(x / _this.slider.clientWidth); + if (_this.change) + _this.change(percentage); + } + }); + return this.slider; + }; + Slider.prototype.setValue = function (percentage) { + percentage = Math.max(0, Math.min(1, percentage)); + if (this.snaps > 0) { + var modulo = percentage % (1 / this.snaps); + if (modulo < (1 / this.snaps) * this.snapPercentage) { + percentage = percentage - modulo; + } + else if (modulo > (1 / this.snaps) - (1 / this.snaps) * this.snapPercentage) { + percentage = percentage - modulo + (1 / this.snaps); + } + percentage = Math.max(0, Math.min(1, percentage)); + } + this.value.style.width = "" + (percentage * 100) + "%"; + return percentage; + }; + return Slider; + }()); + var SpinePlayer = (function () { + function SpinePlayer(parent, config) { + this.config = config; + this.paused = true; + this.playTime = 0; + this.speed = 1; + this.time = new spine.TimeKeeper(); + this.animationViewports = {}; + this.currentViewport = null; + this.previousViewport = null; + this.viewportTransitionStart = 0; + this.stopRequestAnimationFrame = false; + this.cancelId = 0; + if (typeof parent === "string") + this.parent = document.getElementById(parent); + else + this.parent = parent; + this.parent.appendChild(this.render()); + } + SpinePlayer.prototype.validateConfig = function (config) { + if (!config) + throw new Error("Please pass a configuration to new.spine.SpinePlayer()."); + if (!config.jsonUrl && !config.skelUrl) + throw new Error("Please specify the URL of the skeleton JSON or .skel file."); + if (!config.atlasUrl) + throw new Error("Please specify the URL of the atlas file."); + if (!config.alpha) + config.alpha = false; + if (!config.backgroundColor) + config.backgroundColor = "#000000"; + if (!config.fullScreenBackgroundColor) + config.fullScreenBackgroundColor = config.backgroundColor; + if (typeof config.premultipliedAlpha === "undefined") + config.premultipliedAlpha = true; + if (!config.success) + config.success = function (widget) { }; + if (!config.error) + config.error = function (widget, msg) { }; + if (!config.debug) + config.debug = { + bones: false, + regions: false, + meshes: false, + bounds: false, + clipping: false, + paths: false, + points: false, + hulls: false + }; + if (typeof config.debug.bones === "undefined") + config.debug.bones = false; + if (typeof config.debug.bounds === "undefined") + config.debug.bounds = false; + if (typeof config.debug.clipping === "undefined") + config.debug.clipping = false; + if (typeof config.debug.hulls === "undefined") + config.debug.hulls = false; + if (typeof config.debug.paths === "undefined") + config.debug.paths = false; + if (typeof config.debug.points === "undefined") + config.debug.points = false; + if (typeof config.debug.regions === "undefined") + config.debug.regions = false; + if (typeof config.debug.meshes === "undefined") + config.debug.meshes = false; + if (config.animations && config.animation) { + if (config.animations.indexOf(config.animation) < 0) + throw new Error("Default animation '" + config.animation + "' is not contained in the list of selectable animations " + escapeHtml(JSON.stringify(this.config.animations)) + "."); + } + if (config.skins && config.skin) { + if (config.skins.indexOf(config.skin) < 0) + throw new Error("Default skin '" + config.skin + "' is not contained in the list of selectable skins " + escapeHtml(JSON.stringify(this.config.skins)) + "."); + } + if (!config.controlBones) + config.controlBones = []; + if (typeof config.showControls === "undefined") + config.showControls = true; + if (typeof config.defaultMix === "undefined") + config.defaultMix = 0.25; + return config; + }; + SpinePlayer.prototype.showError = function (error) { + var errorDom = findWithClass(this.dom, "spine-player-error")[0]; + errorDom.classList.remove("spine-player-hidden"); + errorDom.innerHTML = "

        " + error + "

        "; + this.config.error(this, error); + }; + SpinePlayer.prototype.render = function () { + var _this = this; + var config = this.config; + var dom = this.dom = createElement("\n\t\t\t\t
        \n\t\t\t\t\t\n\t\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t\t\t
        \n\t\t\t\t\t\t
        \n\t\t\t\t\t\t
        \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
        \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t
        \n\t\t\t"); + try { + this.config = this.validateConfig(config); + } + catch (e) { + this.showError(e); + return dom; + } + try { + this.canvas = findWithClass(dom, "spine-player-canvas")[0]; + var webglConfig = { alpha: config.alpha }; + this.context = new spine.webgl.ManagedWebGLRenderingContext(this.canvas, webglConfig); + this.sceneRenderer = new spine.webgl.SceneRenderer(this.canvas, this.context, true); + this.loadingScreen = new spine.webgl.LoadingScreen(this.sceneRenderer); + } + catch (e) { + this.showError("Sorry, your browser does not support WebGL.

        Please use the latest version of Firefox, Chrome, Edge, or Safari."); + return dom; + } + this.assetManager = new spine.webgl.AssetManager(this.context); + if (config.rawDataURIs) { + for (var path in config.rawDataURIs) { + var data = config.rawDataURIs[path]; + this.assetManager.setRawDataURI(path, data); + } + } + if (config.jsonUrl) + this.assetManager.loadText(config.jsonUrl); + else + this.assetManager.loadBinary(config.skelUrl); + this.assetManager.loadTextureAtlas(config.atlasUrl); + if (config.backgroundImage && config.backgroundImage.url) + this.assetManager.loadTexture(config.backgroundImage.url); + requestAnimationFrame(function () { return _this.drawFrame(); }); + this.playerControls = findWithClass(dom, "spine-player-controls")[0]; + var timeline = findWithClass(dom, "spine-player-timeline")[0]; + this.timelineSlider = new Slider(); + timeline.appendChild(this.timelineSlider.render()); + this.playButton = findWithId(dom, "spine-player-button-play-pause")[0]; + var speedButton = findWithId(dom, "spine-player-button-speed")[0]; + this.animationButton = findWithId(dom, "spine-player-button-animation")[0]; + this.skinButton = findWithId(dom, "spine-player-button-skin")[0]; + var settingsButton = findWithId(dom, "spine-player-button-settings")[0]; + var fullscreenButton = findWithId(dom, "spine-player-button-fullscreen")[0]; + var logoButton = findWithId(dom, "spine-player-button-logo")[0]; + this.playButton.onclick = function () { + if (_this.paused) + _this.play(); + else + _this.pause(); + }; + speedButton.onclick = function () { + _this.showSpeedDialog(speedButton); + }; + this.animationButton.onclick = function () { + _this.showAnimationsDialog(_this.animationButton); + }; + this.skinButton.onclick = function () { + _this.showSkinsDialog(_this.skinButton); + }; + settingsButton.onclick = function () { + _this.showSettingsDialog(settingsButton); + }; + var oldWidth = this.canvas.clientWidth; + var oldHeight = this.canvas.clientHeight; + var oldStyleWidth = this.canvas.style.width; + var oldStyleHeight = this.canvas.style.height; + var isFullscreen = false; + fullscreenButton.onclick = function () { + var fullscreenChanged = function () { + isFullscreen = !isFullscreen; + if (!isFullscreen) { + _this.canvas.style.width = "" + oldWidth + "px"; + _this.canvas.style.height = "" + oldHeight + "px"; + _this.drawFrame(false); + requestAnimationFrame(function () { + _this.canvas.style.width = oldStyleWidth; + _this.canvas.style.height = oldStyleHeight; + }); + } + }; + var doc = document; + dom.onfullscreenchange = fullscreenChanged; + dom.onwebkitfullscreenchange = fullscreenChanged; + if (doc.fullscreenElement || doc.webkitFullscreenElement || doc.mozFullScreenElement || doc.msFullscreenElement) { + if (doc.exitFullscreen) + doc.exitFullscreen(); + else if (doc.mozCancelFullScreen) + doc.mozCancelFullScreen(); + else if (doc.webkitExitFullscreen) + doc.webkitExitFullscreen(); + else if (doc.msExitFullscreen) + doc.msExitFullscreen(); + } + else { + oldWidth = _this.canvas.clientWidth; + oldHeight = _this.canvas.clientHeight; + oldStyleWidth = _this.canvas.style.width; + oldStyleHeight = _this.canvas.style.height; + var player = dom; + if (player.requestFullscreen) + player.requestFullscreen(); + else if (player.webkitRequestFullScreen) + player.webkitRequestFullScreen(); + else if (player.mozRequestFullScreen) + player.mozRequestFullScreen(); + else if (player.msRequestFullscreen) + player.msRequestFullscreen(); + } + }; + logoButton.onclick = function () { + window.open("http://esotericsoftware.com"); + }; + window.onresize = function () { + _this.drawFrame(false); + }; + return dom; + }; + SpinePlayer.prototype.showSpeedDialog = function (speedButton) { + var _this = this; + if (this.lastPopup) + this.lastPopup.dom.remove(); + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Speed") { + this.lastPopup = null; + speedButton.classList.remove("spine-player-button-icon-speed-selected"); + return; + } + var popup = new Popup(this.dom, this.playerControls, "\n\t\t\t\t
        Speed
        \n\t\t\t\t
        \n\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t\t\t
        \n\t\t\t\t\t\t
        \n\t\t\t\t\t\t\t
        0.1x
        \n\t\t\t\t\t\t\t
        1x
        \n\t\t\t\t\t\t\t
        2x
        \n\t\t\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t
        \n\t\t\t"); + var sliderParent = findWithClass(popup.dom, "spine-player-speed-slider")[0]; + var slider = new Slider(2, 0.1, true); + sliderParent.appendChild(slider.render()); + slider.setValue(this.speed / 2); + slider.change = function (percentage) { + _this.speed = percentage * 2; + }; + speedButton.classList.add("spine-player-button-icon-speed-selected"); + popup.show(function () { + speedButton.classList.remove("spine-player-button-icon-speed-selected"); + popup.dom.remove(); + _this.lastPopup = null; + }); + this.lastPopup = popup; + }; + SpinePlayer.prototype.showAnimationsDialog = function (animationsButton) { + var _this = this; + if (this.lastPopup) + this.lastPopup.dom.remove(); + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Animations") { + this.lastPopup = null; + animationsButton.classList.remove("spine-player-button-icon-animations-selected"); + return; + } + if (!this.skeleton || this.skeleton.data.animations.length == 0) + return; + var popup = new Popup(this.dom, this.playerControls, "\n\t\t\t\t
        Animations
        \n\t\t\t\t
        \n\t\t\t\t
          \n\t\t\t"); + var rows = findWithClass(popup.dom, "spine-player-list")[0]; + this.skeleton.data.animations.forEach(function (animation) { + if (_this.config.animations && _this.config.animations.indexOf(animation.name) < 0) { + return; + } + var row = createElement("\n\t\t\t\t\t
        • \n\t\t\t\t\t\t
          \n\t\t\t\t\t\t
          \n\t\t\t\t\t\t
          \n\t\t\t\t\t\t
          \n\t\t\t\t\t
        • \n\t\t\t\t"); + if (animation.name == _this.config.animation) + row.classList.add("selected"); + findWithClass(row, "selectable-text")[0].innerText = animation.name; + rows.appendChild(row); + row.onclick = function () { + removeClass(rows.children, "selected"); + row.classList.add("selected"); + _this.config.animation = animation.name; + _this.playTime = 0; + _this.setAnimation(animation.name); + }; + }); + animationsButton.classList.add("spine-player-button-icon-animations-selected"); + popup.show(function () { + animationsButton.classList.remove("spine-player-button-icon-animations-selected"); + popup.dom.remove(); + _this.lastPopup = null; + }); + this.lastPopup = popup; + }; + SpinePlayer.prototype.showSkinsDialog = function (skinButton) { + var _this = this; + if (this.lastPopup) + this.lastPopup.dom.remove(); + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Skins") { + this.lastPopup = null; + skinButton.classList.remove("spine-player-button-icon-skins-selected"); + return; + } + if (!this.skeleton || this.skeleton.data.animations.length == 0) + return; + var popup = new Popup(this.dom, this.playerControls, "\n\t\t\t\t
          Skins
          \n\t\t\t\t
          \n\t\t\t\t
            \n\t\t\t"); + var rows = findWithClass(popup.dom, "spine-player-list")[0]; + this.skeleton.data.skins.forEach(function (skin) { + if (_this.config.skins && _this.config.skins.indexOf(skin.name) < 0) { + return; + } + var row = createElement("\n\t\t\t\t\t
          • \n\t\t\t\t\t\t
            \n\t\t\t\t\t\t
            \n\t\t\t\t\t\t
            \n\t\t\t\t\t\t
            \n\t\t\t\t\t
          • \n\t\t\t\t"); + if (skin.name == _this.config.skin) + row.classList.add("selected"); + findWithClass(row, "selectable-text")[0].innerText = skin.name; + rows.appendChild(row); + row.onclick = function () { + removeClass(rows.children, "selected"); + row.classList.add("selected"); + _this.config.skin = skin.name; + _this.skeleton.setSkinByName(_this.config.skin); + _this.skeleton.setSlotsToSetupPose(); + }; + }); + skinButton.classList.add("spine-player-button-icon-skins-selected"); + popup.show(function () { + skinButton.classList.remove("spine-player-button-icon-skins-selected"); + popup.dom.remove(); + _this.lastPopup = null; + }); + this.lastPopup = popup; + }; + SpinePlayer.prototype.showSettingsDialog = function (settingsButton) { + var _this = this; + if (this.lastPopup) + this.lastPopup.dom.remove(); + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Debug") { + this.lastPopup = null; + settingsButton.classList.remove("spine-player-button-icon-settings-selected"); + return; + } + if (!this.skeleton || this.skeleton.data.animations.length == 0) + return; + var popup = new Popup(this.dom, this.playerControls, "\n\t\t\t\t
            Debug
            \n\t\t\t\t
            \n\t\t\t\t
              \n\t\t\t\t\n\t\t\t"); + var rows = findWithClass(popup.dom, "spine-player-list")[0]; + var makeItem = function (label, name) { + var row = createElement("
            • "); + var s = new Switch(label); + row.appendChild(s.render()); + s.setEnabled(_this.config.debug[name]); + s.change = function (value) { + _this.config.debug[name] = value; + }; + rows.appendChild(row); + }; + makeItem("Bones", "bones"); + makeItem("Regions", "regions"); + makeItem("Meshes", "meshes"); + makeItem("Bounds", "bounds"); + makeItem("Paths", "paths"); + makeItem("Clipping", "clipping"); + makeItem("Points", "points"); + makeItem("Hulls", "hulls"); + settingsButton.classList.add("spine-player-button-icon-settings-selected"); + popup.show(function () { + settingsButton.classList.remove("spine-player-button-icon-settings-selected"); + popup.dom.remove(); + _this.lastPopup = null; + }); + this.lastPopup = popup; + }; + SpinePlayer.prototype.drawFrame = function (requestNextFrame) { + var _this = this; + if (requestNextFrame === void 0) { requestNextFrame = true; } + if (requestNextFrame && !this.stopRequestAnimationFrame) + requestAnimationFrame(function () { return _this.drawFrame(); }); + var ctx = this.context; + var gl = ctx.gl; + var doc = document; + var isFullscreen = doc.fullscreenElement || doc.webkitFullscreenElement || doc.mozFullScreenElement || doc.msFullscreenElement; + var bg = new spine.Color().setFromString(isFullscreen ? this.config.fullScreenBackgroundColor : this.config.backgroundColor); + gl.clearColor(bg.r, bg.g, bg.b, bg.a); + gl.clear(gl.COLOR_BUFFER_BIT); + this.loadingScreen.backgroundColor.setFromColor(bg); + this.loadingScreen.draw(this.assetManager.isLoadingComplete()); + if (this.assetManager.isLoadingComplete() && this.skeleton == null) + this.loadSkeleton(); + this.sceneRenderer.resize(spine.webgl.ResizeMode.Expand); + if (this.loaded) { + if (!this.paused && this.config.animation) { + this.time.update(); + var delta = this.time.delta * this.speed; + var animationDuration = this.animationState.getCurrent(0).animation.duration; + this.playTime += delta; + while (this.playTime >= animationDuration && animationDuration != 0) { + this.playTime -= animationDuration; + } + this.playTime = Math.max(0, Math.min(this.playTime, animationDuration)); + this.timelineSlider.setValue(this.playTime / animationDuration); + this.animationState.update(delta); + this.animationState.apply(this.skeleton); + } + this.skeleton.updateWorldTransform(); + var viewport = { + x: this.currentViewport.x - this.currentViewport.padLeft, + y: this.currentViewport.y - this.currentViewport.padBottom, + width: this.currentViewport.width + this.currentViewport.padLeft + this.currentViewport.padRight, + height: this.currentViewport.height + this.currentViewport.padBottom + this.currentViewport.padTop + }; + var transitionAlpha = ((performance.now() - this.viewportTransitionStart) / 1000) / this.config.viewport.transitionTime; + if (this.previousViewport && transitionAlpha < 1) { + var oldViewport = { + x: this.previousViewport.x - this.previousViewport.padLeft, + y: this.previousViewport.y - this.previousViewport.padBottom, + width: this.previousViewport.width + this.previousViewport.padLeft + this.previousViewport.padRight, + height: this.previousViewport.height + this.previousViewport.padBottom + this.previousViewport.padTop + }; + viewport = { + x: oldViewport.x + (viewport.x - oldViewport.x) * transitionAlpha, + y: oldViewport.y + (viewport.y - oldViewport.y) * transitionAlpha, + width: oldViewport.width + (viewport.width - oldViewport.width) * transitionAlpha, + height: oldViewport.height + (viewport.height - oldViewport.height) * transitionAlpha + }; + } + var viewportSize = this.scale(viewport.width, viewport.height, this.canvas.width, this.canvas.height); + this.sceneRenderer.camera.zoom = viewport.width / viewportSize.x; + this.sceneRenderer.camera.position.x = viewport.x + viewport.width / 2; + this.sceneRenderer.camera.position.y = viewport.y + viewport.height / 2; + this.sceneRenderer.begin(); + if (this.config.backgroundImage && this.config.backgroundImage.url) { + var bgImage = this.assetManager.get(this.config.backgroundImage.url); + if (!(this.config.backgroundImage.hasOwnProperty("x") && this.config.backgroundImage.hasOwnProperty("y") && this.config.backgroundImage.hasOwnProperty("width") && this.config.backgroundImage.hasOwnProperty("height"))) { + this.sceneRenderer.drawTexture(bgImage, viewport.x, viewport.y, viewport.width, viewport.height); + } + else { + this.sceneRenderer.drawTexture(bgImage, this.config.backgroundImage.x, this.config.backgroundImage.y, this.config.backgroundImage.width, this.config.backgroundImage.height); + } + } + this.sceneRenderer.drawSkeleton(this.skeleton, this.config.premultipliedAlpha); + this.sceneRenderer.skeletonDebugRenderer.drawBones = this.config.debug.bones; + this.sceneRenderer.skeletonDebugRenderer.drawBoundingBoxes = this.config.debug.bounds; + this.sceneRenderer.skeletonDebugRenderer.drawClipping = this.config.debug.clipping; + this.sceneRenderer.skeletonDebugRenderer.drawMeshHull = this.config.debug.hulls; + this.sceneRenderer.skeletonDebugRenderer.drawPaths = this.config.debug.paths; + this.sceneRenderer.skeletonDebugRenderer.drawRegionAttachments = this.config.debug.regions; + this.sceneRenderer.skeletonDebugRenderer.drawMeshTriangles = this.config.debug.meshes; + this.sceneRenderer.drawSkeletonDebug(this.skeleton, this.config.premultipliedAlpha); + var controlBones = this.config.controlBones; + var selectedBones = this.selectedBones; + var skeleton = this.skeleton; + gl.lineWidth(2); + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + if (!bone) + continue; + var colorInner = selectedBones[i] !== null ? SpinePlayer.HOVER_COLOR_INNER : SpinePlayer.NON_HOVER_COLOR_INNER; + var colorOuter = selectedBones[i] !== null ? SpinePlayer.HOVER_COLOR_OUTER : SpinePlayer.NON_HOVER_COLOR_OUTER; + this.sceneRenderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner); + this.sceneRenderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter); + } + gl.lineWidth(1); + if (this.config.viewport.debugRender) { + this.sceneRenderer.rect(false, this.currentViewport.x, this.currentViewport.y, this.currentViewport.width, this.currentViewport.height, spine.Color.GREEN); + this.sceneRenderer.rect(false, viewport.x, viewport.y, viewport.width, viewport.height, spine.Color.RED); + } + this.sceneRenderer.end(); + this.sceneRenderer.camera.zoom = 0; + } + }; + SpinePlayer.prototype.scale = function (sourceWidth, sourceHeight, targetWidth, targetHeight) { + var targetRatio = targetHeight / targetWidth; + var sourceRatio = sourceHeight / sourceWidth; + var scale = targetRatio > sourceRatio ? targetWidth / sourceWidth : targetHeight / sourceHeight; + var temp = new spine.Vector2(); + temp.x = sourceWidth * scale; + temp.y = sourceHeight * scale; + return temp; + }; + SpinePlayer.prototype.loadSkeleton = function () { + var _this = this; + if (this.loaded) + return; + if (this.assetManager.hasErrors()) { + this.showError("Error: assets could not be loaded.

              " + escapeHtml(JSON.stringify(this.assetManager.getErrors()))); + return; + } + var atlas = this.assetManager.get(this.config.atlasUrl); + var skeletonData; + if (this.config.jsonUrl) { + var jsonText = this.assetManager.get(this.config.jsonUrl); + var json = new spine.SkeletonJson(new spine.AtlasAttachmentLoader(atlas)); + try { + skeletonData = json.readSkeletonData(jsonText); + } + catch (e) { + this.showError("Error: could not load skeleton .json.

              " + e.toString()); + return; + } + } + else { + var binaryData = this.assetManager.get(this.config.skelUrl); + var binary = new spine.SkeletonBinary(new spine.AtlasAttachmentLoader(atlas)); + try { + skeletonData = binary.readSkeletonData(binaryData); + } + catch (e) { + this.showError("Error: could not load skeleton .skel.

              " + e.toString()); + return; + } + } + this.skeleton = new spine.Skeleton(skeletonData); + var stateData = new spine.AnimationStateData(skeletonData); + stateData.defaultMix = this.config.defaultMix; + this.animationState = new spine.AnimationState(stateData); + if (this.config.controlBones) { + this.config.controlBones.forEach(function (bone) { + if (!skeletonData.findBone(bone)) { + _this.showError("Error: control bone '" + bone + "' does not exist in skeleton."); + } + }); + } + if (!this.config.skin) { + if (skeletonData.skins.length > 0) { + this.config.skin = skeletonData.skins[0].name; + } + } + if (this.config.skins && this.config.skin.length > 0) { + this.config.skins.forEach(function (skin) { + if (!_this.skeleton.data.findSkin(skin)) { + _this.showError("Error: skin '" + skin + "' in selectable skin list does not exist in skeleton."); + return; + } + }); + } + if (this.config.skin) { + if (!this.skeleton.data.findSkin(this.config.skin)) { + this.showError("Error: skin '" + this.config.skin + "' does not exist in skeleton."); + return; + } + this.skeleton.setSkinByName(this.config.skin); + this.skeleton.setSlotsToSetupPose(); + } + if (!this.config.viewport) { + this.config.viewport = { + animations: {}, + debugRender: false, + transitionTime: 0.2 + }; + } + if (typeof this.config.viewport.debugRender === "undefined") + this.config.viewport.debugRender = false; + if (typeof this.config.viewport.transitionTime === "undefined") + this.config.viewport.transitionTime = 0.2; + if (!this.config.viewport.animations) { + this.config.viewport.animations = {}; + } + else { + Object.getOwnPropertyNames(this.config.viewport.animations).forEach(function (animation) { + if (!skeletonData.findAnimation(animation)) { + _this.showError("Error: animation '" + animation + "' for which a viewport was specified does not exist in skeleton."); + return; + } + }); + } + if (this.config.animations && this.config.animations.length > 0) { + this.config.animations.forEach(function (animation) { + if (!_this.skeleton.data.findAnimation(animation)) { + _this.showError("Error: animation '" + animation + "' in selectable animation list does not exist in skeleton."); + return; + } + }); + if (!this.config.animation) { + this.config.animation = this.config.animations[0]; + } + } + if (!this.config.animation) { + if (skeletonData.animations.length > 0) { + this.config.animation = skeletonData.animations[0].name; + } + } + if (this.config.animation) { + if (!skeletonData.findAnimation(this.config.animation)) { + this.showError("Error: animation '" + this.config.animation + "' does not exist in skeleton."); + return; + } + this.play(); + this.timelineSlider.change = function (percentage) { + _this.pause(); + var animationDuration = _this.animationState.getCurrent(0).animation.duration; + var time = animationDuration * percentage; + _this.animationState.update(time - _this.playTime); + _this.animationState.apply(_this.skeleton); + _this.skeleton.updateWorldTransform(); + _this.playTime = time; + }; + } + this.setupInput(); + if (skeletonData.skins.length == 1 || (this.config.skins && this.config.skins.length == 1)) + this.skinButton.classList.add("spine-player-hidden"); + if (skeletonData.animations.length == 1 || (this.config.animations && this.config.animations.length == 1)) + this.animationButton.classList.add("spine-player-hidden"); + this.config.success(this); + this.loaded = true; + }; + SpinePlayer.prototype.setupInput = function () { + var _this = this; + var controlBones = this.config.controlBones; + var selectedBones = this.selectedBones = new Array(this.config.controlBones.length); + var canvas = this.canvas; + var input = new spine.webgl.Input(canvas); + var target = null; + var coords = new spine.webgl.Vector3(); + var temp = new spine.webgl.Vector3(); + var temp2 = new spine.Vector2(); + var skeleton = this.skeleton; + var renderer = this.sceneRenderer; + input.addListener({ + down: function (x, y) { + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + if (!bone) + continue; + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + target = bone; + } + } + }, + up: function (x, y) { + if (target) { + target = null; + } + else { + if (!_this.config.showControls) + return; + if (_this.paused) + _this.play(); + else + _this.pause(); + } + }, + dragged: function (x, y) { + if (target != null) { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (target.parent !== null) { + target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y)); + target.x = temp2.x; + target.y = temp2.y; + } + else { + target.x = coords.x - skeleton.x; + target.y = coords.y - skeleton.y; + } + } + }, + moved: function (x, y) { + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + if (!bone) + continue; + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + selectedBones[i] = bone; + } + else { + selectedBones[i] = null; + } + } + } + }); + var mouseOverControls = true; + var mouseOverCanvas = false; + document.addEventListener("mousemove", function (ev) { + if (ev instanceof MouseEvent) { + handleHover(ev.clientX, ev.clientY); + } + }); + document.addEventListener("touchmove", function (ev) { + if (ev instanceof TouchEvent) { + var touches = ev.changedTouches; + if (touches.length > 0) { + var touch = touches[0]; + handleHover(touch.clientX, touch.clientY); + } + } + }); + var handleHover = function (mouseX, mouseY) { + if (!_this.config.showControls) + return; + var popup = findWithClass(_this.dom, "spine-player-popup"); + mouseOverControls = overlap(mouseX, mouseY, _this.playerControls.getBoundingClientRect()); + mouseOverCanvas = overlap(mouseX, mouseY, _this.canvas.getBoundingClientRect()); + clearTimeout(_this.cancelId); + var hide = popup.length == 0 && !mouseOverControls && !mouseOverCanvas && !_this.paused; + if (hide) { + _this.playerControls.classList.add("spine-player-controls-hidden"); + } + else { + _this.playerControls.classList.remove("spine-player-controls-hidden"); + } + if (!mouseOverControls && popup.length == 0 && !_this.paused) { + var remove = function () { + if (!_this.paused) + _this.playerControls.classList.add("spine-player-controls-hidden"); + }; + _this.cancelId = setTimeout(remove, 1000); + } + }; + var overlap = function (mouseX, mouseY, rect) { + var x = mouseX - rect.left; + var y = mouseY - rect.top; + return x >= 0 && x <= rect.width && y >= 0 && y <= rect.height; + }; + }; + SpinePlayer.prototype.play = function () { + var _this = this; + this.paused = false; + var remove = function () { + if (!_this.paused) + _this.playerControls.classList.add("spine-player-controls-hidden"); + }; + this.cancelId = setTimeout(remove, 1000); + this.playButton.classList.remove("spine-player-button-icon-play"); + this.playButton.classList.add("spine-player-button-icon-pause"); + if (this.config.animation) { + if (!this.animationState.getCurrent(0)) { + this.setAnimation(this.config.animation); + } + } + }; + SpinePlayer.prototype.pause = function () { + this.paused = true; + this.playerControls.classList.remove("spine-player-controls-hidden"); + clearTimeout(this.cancelId); + this.playButton.classList.remove("spine-player-button-icon-pause"); + this.playButton.classList.add("spine-player-button-icon-play"); + }; + SpinePlayer.prototype.setAnimation = function (animation, loop) { + if (loop === void 0) { loop = true; } + this.previousViewport = this.currentViewport; + var animViewport = this.calculateAnimationViewport(animation); + var viewport = { + x: animViewport.x, + y: animViewport.y, + width: animViewport.width, + height: animViewport.height, + padLeft: "10%", + padRight: "10%", + padTop: "10%", + padBottom: "10%" + }; + var globalViewport = this.config.viewport; + if (typeof globalViewport.x !== "undefined" && typeof globalViewport.y !== "undefined" && typeof globalViewport.width !== "undefined" && typeof globalViewport.height !== "undefined") { + viewport.x = globalViewport.x; + viewport.y = globalViewport.y; + viewport.width = globalViewport.width; + viewport.height = globalViewport.height; + } + if (typeof globalViewport.padLeft !== "undefined") + viewport.padLeft = globalViewport.padLeft; + if (typeof globalViewport.padRight !== "undefined") + viewport.padRight = globalViewport.padRight; + if (typeof globalViewport.padTop !== "undefined") + viewport.padTop = globalViewport.padTop; + if (typeof globalViewport.padBottom !== "undefined") + viewport.padBottom = globalViewport.padBottom; + var userAnimViewport = this.config.viewport.animations[animation]; + if (userAnimViewport) { + if (typeof userAnimViewport.x !== "undefined" && typeof userAnimViewport.y !== "undefined" && typeof userAnimViewport.width !== "undefined" && typeof userAnimViewport.height !== "undefined") { + viewport.x = userAnimViewport.x; + viewport.y = userAnimViewport.y; + viewport.width = userAnimViewport.width; + viewport.height = userAnimViewport.height; + } + if (typeof userAnimViewport.padLeft !== "undefined") + viewport.padLeft = userAnimViewport.padLeft; + if (typeof userAnimViewport.padRight !== "undefined") + viewport.padRight = userAnimViewport.padRight; + if (typeof userAnimViewport.padTop !== "undefined") + viewport.padTop = userAnimViewport.padTop; + if (typeof userAnimViewport.padBottom !== "undefined") + viewport.padBottom = userAnimViewport.padBottom; + } + viewport.padLeft = this.percentageToWorldUnit(viewport.width, viewport.padLeft); + viewport.padRight = this.percentageToWorldUnit(viewport.width, viewport.padRight); + viewport.padBottom = this.percentageToWorldUnit(viewport.height, viewport.padBottom); + viewport.padTop = this.percentageToWorldUnit(viewport.height, viewport.padTop); + this.currentViewport = viewport; + this.viewportTransitionStart = performance.now(); + this.animationState.clearTracks(); + this.skeleton.setToSetupPose(); + this.animationState.setAnimation(0, animation, loop); + }; + SpinePlayer.prototype.percentageToWorldUnit = function (size, percentageOrAbsolute) { + if (typeof percentageOrAbsolute === "string") { + return size * parseFloat(percentageOrAbsolute.substr(0, percentageOrAbsolute.length - 1)) / 100; + } + else { + return percentageOrAbsolute; + } + }; + SpinePlayer.prototype.calculateAnimationViewport = function (animationName) { + var animation = this.skeleton.data.findAnimation(animationName); + this.animationState.clearTracks(); + this.skeleton.setToSetupPose(); + this.animationState.setAnimationWith(0, animation, true); + var steps = 100; + var stepTime = animation.duration > 0 ? animation.duration / steps : 0; + var minX = 100000000; + var maxX = -100000000; + var minY = 100000000; + var maxY = -100000000; + var offset = new spine.Vector2(); + var size = new spine.Vector2(); + for (var i = 0; i < steps; i++) { + this.animationState.update(stepTime); + this.animationState.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + this.skeleton.getBounds(offset, size); + if (!isNaN(offset.x) && !isNaN(offset.y) && !isNaN(size.x) && !isNaN(size.y)) { + minX = Math.min(offset.x, minX); + maxX = Math.max(offset.x + size.x, maxX); + minY = Math.min(offset.y, minY); + maxY = Math.max(offset.y + size.y, maxY); + } + else { + console.log("Bounds of animation " + animationName + " are NaN"); + } + } + offset.x = minX; + offset.y = minY; + size.x = maxX - minX; + size.y = maxY - minY; + return { + x: offset.x, + y: offset.y, + width: size.x, + height: size.y + }; + }; + SpinePlayer.prototype.stopRendering = function () { + this.stopRequestAnimationFrame = true; + }; + SpinePlayer.HOVER_COLOR_INNER = new spine.Color(0.478, 0, 0, 0.25); + SpinePlayer.HOVER_COLOR_OUTER = new spine.Color(1, 1, 1, 1); + SpinePlayer.NON_HOVER_COLOR_INNER = new spine.Color(0.478, 0, 0, 0.5); + SpinePlayer.NON_HOVER_COLOR_OUTER = new spine.Color(1, 0, 0, 0.8); + return SpinePlayer; + }()); + spine.SpinePlayer = SpinePlayer; + function isContained(dom, needle) { + if (dom === needle) + return true; + var findRecursive = function (dom, needle) { + for (var i = 0; i < dom.children.length; i++) { + var child = dom.children[i]; + if (child === needle) + return true; + if (findRecursive(child, needle)) + return true; + } + return false; + }; + return findRecursive(dom, needle); + } + function findWithId(dom, id) { + var found = new Array(); + var findRecursive = function (dom, id, found) { + for (var i = 0; i < dom.children.length; i++) { + var child = dom.children[i]; + if (child.id === id) + found.push(child); + findRecursive(child, id, found); + } + }; + findRecursive(dom, id, found); + return found; + } + function findWithClass(dom, className) { + var found = new Array(); + var findRecursive = function (dom, className, found) { + for (var i = 0; i < dom.children.length; i++) { + var child = dom.children[i]; + if (child.classList.contains(className)) + found.push(child); + findRecursive(child, className, found); + } + }; + findRecursive(dom, className, found); + return found; + } + function createElement(html) { + var dom = document.createElement("div"); + dom.innerHTML = html; + return dom.children[0]; + } + function removeClass(elements, clazz) { + for (var i = 0; i < elements.length; i++) { + elements[i].classList.remove(clazz); + } + } + function escapeHtml(str) { + if (!str) + return ""; + return str + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + } +})(spine || (spine = {})); +var spine; +(function (spine) { + var SpinePlayerEditor = (function () { + function SpinePlayerEditor(parent) { + this.prefix = "\n\n\n\n".trim(); + this.postfix = ""; + this.timerId = 0; + this.render(parent); + } + SpinePlayerEditor.prototype.render = function (parent) { + var _this = this; + var dom = "\n\t\t\t\t
              \n\t\t\t\t\t
              \n\t\t\t\t\t\n\t\t\t\t
              \n\t\t\t"; + parent.innerHTML = dom; + var codeElement = parent.getElementsByClassName("spine-player-editor-code")[0]; + this.player = parent.getElementsByClassName("spine-player-editor-player")[0]; + requestAnimationFrame(function () { + _this.code = CodeMirror(codeElement, { + lineNumbers: true, + tabSize: 3, + indentUnit: 3, + indentWithTabs: true, + scrollBarStyle: "native", + mode: "htmlmixed", + theme: "monokai" + }); + _this.code.on("change", function () { + _this.startPlayer(); + }); + _this.setCode(SpinePlayerEditor.DEFAULT_CODE); + }); + }; + SpinePlayerEditor.prototype.setPreAndPostfix = function (prefix, postfix) { + this.prefix = prefix; + this.postfix = postfix; + this.startPlayer(); + }; + SpinePlayerEditor.prototype.setCode = function (code) { + this.code.setValue(code); + this.startPlayer(); + }; + SpinePlayerEditor.prototype.startPlayer = function () { + var _this = this; + clearTimeout(this.timerId); + this.timerId = setTimeout(function () { + var code = _this.code.getDoc().getValue(); + code = _this.prefix + code + _this.postfix; + code = window.btoa(code); + _this.player.src = ""; + _this.player.src = "data:text/html;base64," + code; + }, 500); + }; + SpinePlayerEditor.DEFAULT_CODE = "\n\n\n\n
              \n\n\n\t\t".trim(); + return SpinePlayerEditor; + }()); + spine.SpinePlayerEditor = SpinePlayerEditor; +})(spine || (spine = {})); +//# sourceMappingURL=spine-player.js.map \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-player.js.map b/apps/module-ts/src/spine-ts/build/spine-player.js.map new file mode 100755 index 0000000..4b6d81b --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-player.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spine-player.js","sourceRoot":"","sources":["../core/src/Animation.ts","../core/src/AnimationState.ts","../core/src/AnimationStateData.ts","../core/src/AssetManager.ts","../core/src/AtlasAttachmentLoader.ts","../core/src/BlendMode.ts","../core/src/Bone.ts","../core/src/BoneData.ts","../core/src/ConstraintData.ts","../core/src/Event.ts","../core/src/EventData.ts","../core/src/IkConstraint.ts","../core/src/IkConstraintData.ts","../core/src/PathConstraint.ts","../core/src/PathConstraintData.ts","../core/src/SharedAssetManager.ts","../core/src/Skeleton.ts","../core/src/SkeletonBinary.ts","../core/src/SkeletonBounds.ts","../core/src/SkeletonClipping.ts","../core/src/SkeletonData.ts","../core/src/SkeletonJson.ts","../core/src/Skin.ts","../core/src/Slot.ts","../core/src/SlotData.ts","../core/src/Texture.ts","../core/src/TextureAtlas.ts","../core/src/TransformConstraint.ts","../core/src/TransformConstraintData.ts","../core/src/Triangulator.ts","../core/src/Updatable.ts","../core/src/Utils.ts","../core/src/VertexEffect.ts","../core/src/polyfills.ts","../core/src/attachments/Attachment.ts","../core/src/attachments/AttachmentLoader.ts","../core/src/attachments/AttachmentType.ts","../core/src/attachments/BoundingBoxAttachment.ts","../core/src/attachments/ClippingAttachment.ts","../core/src/attachments/MeshAttachment.ts","../core/src/attachments/PathAttachment.ts","../core/src/attachments/PointAttachment.ts","../core/src/attachments/RegionAttachment.ts","../core/src/vertexeffects/JitterEffect.ts","../core/src/vertexeffects/SwirlEffect.ts","../webgl/src/AssetManager.ts","../webgl/src/Camera.ts","../webgl/src/GLTexture.ts","../webgl/src/Input.ts","../webgl/src/LoadingScreen.ts","../webgl/src/Matrix4.ts","../webgl/src/Mesh.ts","../webgl/src/PolygonBatcher.ts","../webgl/src/SceneRenderer.ts","../webgl/src/Shader.ts","../webgl/src/ShapeRenderer.ts","../webgl/src/SkeletonDebugRenderer.ts","../webgl/src/SkeletonRenderer.ts","../webgl/src/Vector3.ts","../webgl/src/WebGL.ts","../player/src/Player.ts","../player/src/PlayerEditor.ts"],"names":[],"mappings":"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,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC7G,IAAI,KAAK,IAAI,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACzD,IAAI,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACb,CAAC;YAED,6BAAW,GAAX;gBACC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBACpB,OAAO,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBAC7G,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,C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AG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAED,8BAAY,GAAZ,UAAc,MAAe;gBAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;gBAClB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBACpB,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;gBACtB,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CA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"} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-threejs.d.ts b/apps/module-ts/src/spine-ts/build/spine-threejs.d.ts new file mode 100755 index 0000000..df74524 --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-threejs.d.ts @@ -0,0 +1,1403 @@ +declare module spine { + class Animation { + name: string; + timelines: Array; + timelineIds: Array; + duration: number; + constructor(name: string, timelines: Array, duration: number); + hasTimeline(id: number): boolean; + apply(skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + static binarySearch(values: ArrayLike, target: number, step?: number): number; + static linearSearch(values: ArrayLike, target: number, step: number): number; + } + interface Timeline { + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + getPropertyId(): number; + } + enum MixBlend { + setup = 0, + first = 1, + replace = 2, + add = 3 + } + enum MixDirection { + mixIn = 0, + mixOut = 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, degrees: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, x: number, y: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ScaleTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ShearTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class AttachmentTimeline implements Timeline { + slotIndex: number; + frames: ArrayLike; + attachmentNames: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, attachmentName: string): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string): void; + } + class DeformTimeline extends CurveTimeline { + slotIndex: number; + attachment: VertexAttachment; + frames: ArrayLike; + frameVertices: Array>; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, vertices: ArrayLike): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class EventTimeline implements Timeline { + frames: ArrayLike; + events: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, event: Event): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class DrawOrderTimeline implements Timeline { + frames: ArrayLike; + drawOrders: Array>; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, drawOrder: Array): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class IkConstraintTimeline extends CurveTimeline { + static ENTRIES: number; + static PREV_TIME: number; + static PREV_MIX: number; + static PREV_SOFTNESS: number; + static PREV_BEND_DIRECTION: number; + static PREV_COMPRESS: number; + static PREV_STRETCH: number; + static MIX: number; + static SOFTNESS: number; + static BEND_DIRECTION: number; + static COMPRESS: number; + static STRETCH: number; + ikConstraintIndex: number; + frames: ArrayLike; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, mix: number, softness: number, bendDirection: number, compress: boolean, stretch: boolean): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, value: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class PathConstraintSpacingTimeline extends PathConstraintPositionTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, rotateMix: number, translateMix: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } +} +declare module spine { + class AnimationState { + static emptyAnimation: Animation; + static SUBSEQUENT: number; + static FIRST: number; + static HOLD_SUBSEQUENT: number; + static HOLD_FIRST: number; + static HOLD_MIX: number; + static SETUP: number; + static CURRENT: number; + data: AnimationStateData; + tracks: TrackEntry[]; + timeScale: number; + unkeyedState: number; + events: Event[]; + listeners: AnimationStateListener[]; + queue: EventQueue; + propertyIDs: IntSet; + animationsChanged: boolean; + trackEntryPool: Pool; + constructor(data: AnimationStateData); + update(delta: number): void; + updateMixingFrom(to: TrackEntry, delta: number): boolean; + apply(skeleton: Skeleton): boolean; + applyMixingFrom(to: TrackEntry, skeleton: Skeleton, blend: MixBlend): number; + applyAttachmentTimeline(timeline: AttachmentTimeline, skeleton: Skeleton, time: number, blend: MixBlend, attachments: boolean): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string, attachments: boolean): void; + applyRotateTimeline(timeline: Timeline, skeleton: Skeleton, time: number, alpha: number, blend: MixBlend, timelinesRotation: Array, 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; + computeHold(entry: TrackEntry): void; + getCurrent(trackIndex: number): TrackEntry; + addListener(listener: AnimationStateListener): void; + removeListener(listener: AnimationStateListener): void; + clearListeners(): void; + clearListenerNotifications(): void; + } + class TrackEntry { + animation: Animation; + next: TrackEntry; + mixingFrom: TrackEntry; + mixingTo: TrackEntry; + listener: AnimationStateListener; + trackIndex: number; + loop: boolean; + holdPrevious: 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; + mixBlend: MixBlend; + timelineMode: number[]; + timelineHoldMix: TrackEntry[]; + timelinesRotation: number[]; + reset(): void; + getAnimationTime(): number; + setAnimationLast(animationLast: number): void; + isComplete(): boolean; + resetRotationDirections(): void; + } + class EventQueue { + objects: Array; + 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 AnimationStateListener { + 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 AnimationStateAdapter implements AnimationStateListener { + 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; + 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; + private rawDataUris; + constructor(textureLoader: (image: HTMLImageElement) => any, pathPrefix?: string); + private downloadText; + private downloadBinary; + setRawDataURI(path: string, data: string): void; + loadBinary(path: string, success?: (path: string, binary: Uint8Array) => void, error?: (path: string, error: string) => void): void; + 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; + loadTextureAtlas(path: string, success?: (path: string, atlas: TextureAtlas) => 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; + } +} +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; + } +} +declare module spine { + 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; + c: number; + d: number; + worldY: number; + worldX: number; + sorted: boolean; + active: boolean; + constructor(data: BoneData, skeleton: Skeleton, parent: Bone); + isActive(): boolean; + 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; + skinRequired: boolean; + color: Color; + constructor(index: number, name: string, parent: BoneData); + } + enum TransformMode { + Normal = 0, + OnlyTranslation = 1, + NoRotationOrReflection = 2, + NoScale = 3, + NoScaleOrReflection = 4 + } +} +declare module spine { + abstract class ConstraintData { + name: string; + order: number; + skinRequired: boolean; + constructor(name: string, order: number, skinRequired: boolean); + } +} +declare module spine { + class Event { + data: EventData; + intValue: number; + floatValue: number; + stringValue: string; + time: number; + volume: number; + balance: number; + constructor(time: number, data: EventData); + } +} +declare module spine { + class EventData { + name: string; + intValue: number; + floatValue: number; + stringValue: string; + audioPath: string; + volume: number; + balance: number; + constructor(name: string); + } +} +declare module spine { + class IkConstraint implements Updatable { + data: IkConstraintData; + bones: Array; + target: Bone; + bendDirection: number; + compress: boolean; + stretch: boolean; + mix: number; + softness: number; + active: boolean; + constructor(data: IkConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + apply1(bone: Bone, targetX: number, targetY: number, compress: boolean, stretch: boolean, uniform: boolean, alpha: number): void; + apply2(parent: Bone, child: Bone, targetX: number, targetY: number, bendDir: number, stretch: boolean, softness: number, alpha: number): void; + } +} +declare module spine { + class IkConstraintData extends ConstraintData { + bones: BoneData[]; + target: BoneData; + bendDirection: number; + compress: boolean; + stretch: boolean; + uniform: boolean; + mix: number; + softness: number; + constructor(name: string); + } +} +declare module spine { + class PathConstraint implements Updatable { + static NONE: number; + static BEFORE: number; + static AFTER: number; + static epsilon: number; + data: PathConstraintData; + bones: Array; + target: Slot; + position: number; + spacing: number; + rotateMix: number; + translateMix: number; + spaces: number[]; + positions: number[]; + world: number[]; + curves: number[]; + lengths: number[]; + segments: number[]; + active: boolean; + constructor(data: PathConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + computeWorldPositions(path: PathAttachment, spacesCount: number, tangents: boolean, percentPosition: boolean, percentSpacing: boolean): number[]; + addBeforePosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addAfterPosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addCurvePosition(p: number, x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, out: Array, o: number, tangents: boolean): void; + } +} +declare module spine { + class PathConstraintData extends ConstraintData { + 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 + } +} +declare module spine { + class SharedAssetManager implements Disposable { + private pathPrefix; + private clientAssets; + private queuedAssets; + private rawAssets; + private errors; + constructor(pathPrefix?: string); + private queueAsset; + loadText(clientId: string, path: string): void; + loadJson(clientId: string, path: string): void; + loadTexture(clientId: string, textureLoader: (image: HTMLImageElement | ImageBitmap) => any, path: string): void; + get(clientId: string, path: string): any; + private updateClientAssets; + isLoadingComplete(clientId: string): boolean; + dispose(): void; + hasErrors(): boolean; + getErrors(): Map; + } +} +declare module spine { + class Skeleton { + data: SkeletonData; + bones: Array; + slots: Array; + drawOrder: Array; + ikConstraints: Array; + transformConstraints: Array; + pathConstraints: Array; + _updateCache: Updatable[]; + updateCacheReset: Updatable[]; + skin: Skin; + color: Color; + time: number; + scaleX: number; + scaleY: number; + 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): 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): void; + update(delta: number): void; + } +} +declare module spine { + class SkeletonBinary { + static AttachmentTypeValues: number[]; + static TransformModeValues: TransformMode[]; + static PositionModeValues: PositionMode[]; + static SpacingModeValues: SpacingMode[]; + static RotateModeValues: RotateMode[]; + static BlendModeValues: BlendMode[]; + static BONE_ROTATE: number; + static BONE_TRANSLATE: number; + static BONE_SCALE: number; + static BONE_SHEAR: number; + static SLOT_ATTACHMENT: number; + static SLOT_COLOR: number; + static SLOT_TWO_COLOR: number; + static PATH_POSITION: number; + static PATH_SPACING: number; + static PATH_MIX: number; + static CURVE_LINEAR: number; + static CURVE_STEPPED: number; + static CURVE_BEZIER: number; + scale: number; + attachmentLoader: AttachmentLoader; + private linkedMeshes; + constructor(attachmentLoader: AttachmentLoader); + readSkeletonData(binary: Uint8Array): SkeletonData; + private readSkin; + private readAttachment; + private readVertices; + private readFloatArray; + private readShortArray; + private readAnimation; + private readCurve; + setCurve(timeline: CurveTimeline, frameIndex: number, cx1: number, cy1: number, cx2: number, cy2: number): void; + } +} +declare module spine { + class SkeletonBounds { + minX: number; + minY: number; + maxX: number; + maxY: number; + boundingBoxes: BoundingBoxAttachment[]; + polygons: ArrayLike[]; + 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, x: number, y: number): boolean; + intersectsSegment(x1: number, y1: number, x2: number, y2: number): BoundingBoxAttachment; + intersectsSegmentPolygon(polygon: ArrayLike, x1: number, y1: number, x2: number, y2: number): boolean; + getPolygon(boundingBox: BoundingBoxAttachment): ArrayLike; + 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, verticesLength: number, triangles: ArrayLike, trianglesLength: number, uvs: ArrayLike, light: Color, dark: Color, twoColor: boolean): void; + clip(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, clippingArea: Array, output: Array): boolean; + static makeClockwise(polygon: ArrayLike): 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[]; + x: number; + y: number; + width: number; + height: number; + version: string; + hash: string; + fps: number; + imagesPath: string; + audioPath: 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; + } +} +declare module spine { + class SkinEntry { + slotIndex: number; + name: string; + attachment: Attachment; + constructor(slotIndex: number, name: string, attachment: Attachment); + } + class Skin { + name: string; + attachments: Map[]; + bones: BoneData[]; + constraints: ConstraintData[]; + constructor(name: string); + setAttachment(slotIndex: number, name: string, attachment: Attachment): void; + addSkin(skin: Skin): void; + copySkin(skin: Skin): void; + getAttachment(slotIndex: number, name: string): Attachment; + removeAttachment(slotIndex: number, name: string): void; + getAttachments(): Array; + getAttachmentsForSlot(slotIndex: number, attachments: Array): void; + clear(): void; + attachAll(skeleton: Skeleton, oldSkin: Skin): void; + } +} +declare module spine { + class Slot { + data: SlotData; + bone: Bone; + color: Color; + darkColor: Color; + attachment: Attachment; + private attachmentTime; + attachmentState: number; + deform: number[]; + constructor(data: SlotData, bone: Bone); + getSkeleton(): Skeleton; + 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); + } +} +declare module spine { + abstract class Texture { + protected _image: HTMLImageElement | ImageBitmap; + constructor(image: HTMLImageElement | ImageBitmap); + getImage(): HTMLImageElement | ImageBitmap; + 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; + } + class FakeTexture extends Texture { + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void; + dispose(): void; + } +} +declare module spine { + class TextureAtlas implements Disposable { + pages: TextureAtlasPage[]; + regions: TextureAtlasRegion[]; + constructor(atlasText: string, textureLoader: (path: string) => any); + private load; + 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; + degrees: number; + texture: Texture; + } +} +declare module spine { + class TransformConstraint implements Updatable { + data: TransformConstraintData; + bones: Array; + target: Bone; + rotateMix: number; + translateMix: number; + scaleMix: number; + shearMix: number; + temp: Vector2; + active: boolean; + constructor(data: TransformConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + applyAbsoluteWorld(): void; + applyRelativeWorld(): void; + applyAbsoluteLocal(): void; + applyRelativeLocal(): void; + } +} +declare module spine { + class TransformConstraintData extends ConstraintData { + 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): Array; + decompose(verticesArray: Array, triangles: Array): Array>; + private static isConcave; + private static positiveArea; + private static winding; + } +} +declare module spine { + interface Updatable { + update(): void; + isActive(): boolean; + } +} +declare module spine { + interface Map { + [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; + static rgba8888ToColor(color: Color, value: number): void; + static rgb888ToColor(color: Color, value: number): void; + } + 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(source: ArrayLike, sourceStart: number, dest: ArrayLike, destStart: number, numElements: number): void; + static setArraySize(array: Array, size: number, value?: any): Array; + static ensureArrayCapacity(array: Array, size: number, value?: any): Array; + static newArray(size: number, defaultValue: T): Array; + static newFloatArray(size: number): ArrayLike; + static newShortArray(size: number): ArrayLike; + static toFloatArray(array: Array): number[] | Float32Array; + static toSinglePrecision(value: number): number; + static webkit602BugfixHelper(alpha: number, blend: MixBlend): void; + static contains(array: Array, element: T, identity?: boolean): boolean; + } + class DebugUtils { + static logBones(skeleton: Skeleton): void; + } + class Pool { + private items; + private instantiator; + constructor(instantiator: () => T); + obtain(): T; + free(item: T): void; + freeAll(items: ArrayLike): 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 { + length: number; + [n: number]: T; + } + class WindowedMean { + values: Array; + 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 Math { + fround(n: number): number; +} +declare module spine { + abstract class Attachment { + name: string; + constructor(name: string); + abstract copy(): Attachment; + } + abstract class VertexAttachment extends Attachment { + private static nextID; + id: number; + bones: Array; + vertices: ArrayLike; + worldVerticesLength: number; + deformAttachment: VertexAttachment; + constructor(name: string); + computeWorldVertices(slot: Slot, start: number, count: number, worldVertices: ArrayLike, offset: number, stride: number): void; + copyTo(attachment: VertexAttachment): void; + } +} +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; + } +} +declare module spine { + enum AttachmentType { + Region = 0, + BoundingBox = 1, + Mesh = 2, + LinkedMesh = 3, + Path = 4, + Point = 5, + Clipping = 6 + } +} +declare module spine { + class BoundingBoxAttachment extends VertexAttachment { + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class ClippingAttachment extends VertexAttachment { + endSlot: SlotData; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class MeshAttachment extends VertexAttachment { + region: TextureRegion; + path: string; + regionUVs: ArrayLike; + uvs: ArrayLike; + triangles: Array; + color: Color; + width: number; + height: number; + hullLength: number; + edges: Array; + private parentMesh; + tempColor: Color; + constructor(name: string); + updateUVs(): void; + getParentMesh(): MeshAttachment; + setParentMesh(parentMesh: MeshAttachment): void; + copy(): Attachment; + newLinkedMesh(): MeshAttachment; + } +} +declare module spine { + class PathAttachment extends VertexAttachment { + lengths: Array; + closed: boolean; + constantSpeed: boolean; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +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; + copy(): Attachment; + } +} +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; + uvs: ArrayLike; + tempColor: Color; + constructor(name: string); + updateOffset(): void; + setRegion(region: TextureRegion): void; + computeWorldVertices(bone: Bone, worldVertices: ArrayLike, offset: number, stride: number): void; + copy(): Attachment; + } +} +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; + } +} +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; + } +} +declare module spine.threejs { + class AssetManager extends spine.AssetManager { + constructor(pathPrefix?: string); + } +} +declare module spine.threejs { + class MeshBatcher extends THREE.Mesh { + private static VERTEX_SIZE; + private vertexBuffer; + private vertices; + private verticesLength; + private indices; + private indicesLength; + constructor(maxVertices?: number, materialCustomizer?: SkeletonMeshMaterialParametersCustomizer); + dispose(): void; + clear(): void; + begin(): void; + canBatch(verticesLength: number, indicesLength: number): boolean; + batch(vertices: ArrayLike, verticesLength: number, indices: ArrayLike, indicesLength: number, z?: number): void; + end(): void; + } +} +declare module spine.threejs { + interface SkeletonMeshMaterialParametersCustomizer { + (materialParameters: THREE.ShaderMaterialParameters): void; + } + class SkeletonMeshMaterial extends THREE.ShaderMaterial { + constructor(customizer: SkeletonMeshMaterialParametersCustomizer); + } + class SkeletonMesh extends THREE.Object3D { + tempPos: Vector2; + tempUv: Vector2; + tempLight: Color; + tempDark: Color; + skeleton: Skeleton; + state: AnimationState; + zOffset: number; + vertexEffect: VertexEffect; + private batches; + private nextBatchIndex; + private clipper; + static QUAD_TRIANGLES: number[]; + static VERTEX_SIZE: number; + private vertices; + private tempColor; + private materialCustomizer; + constructor(skeletonData: SkeletonData, materialCustomizer?: SkeletonMeshMaterialParametersCustomizer); + update(deltaTime: number): void; + dispose(): void; + private clearBatches; + private nextBatch; + private updateGeometry; + } +} +declare module spine.threejs { + class ThreeJsTexture extends Texture { + texture: THREE.Texture; + constructor(image: HTMLImageElement); + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void; + dispose(): void; + static toThreeJsTextureFilter(filter: TextureFilter): THREE.TextureFilter; + static toThreeJsTextureWrap(wrap: TextureWrap): THREE.Wrapping; + } +} diff --git a/apps/module-ts/src/spine-ts/build/spine-threejs.js b/apps/module-ts/src/spine-ts/build/spine-threejs.js new file mode 100755 index 0000000..d86127c --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-threejs.js @@ -0,0 +1,8629 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var spine; +(function (spine) { + var Animation = (function () { + function Animation(name, timelines, duration) { + if (name == null) + throw new Error("name cannot be null."); + if (timelines == null) + throw new Error("timelines cannot be null."); + this.name = name; + this.timelines = timelines; + this.timelineIds = []; + for (var i = 0; i < timelines.length; i++) + this.timelineIds[timelines[i].getPropertyId()] = true; + this.duration = duration; + } + Animation.prototype.hasTimeline = function (id) { + return this.timelineIds[id] == true; + }; + Animation.prototype.apply = function (skeleton, lastTime, time, loop, events, alpha, blend, direction) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (loop && this.duration != 0) { + time %= this.duration; + if (lastTime > 0) + lastTime %= this.duration; + } + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction); + }; + Animation.binarySearch = function (values, target, step) { + if (step === void 0) { step = 1; } + var low = 0; + var high = values.length / step - 2; + if (high == 0) + return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) + return (low + 1) * step; + current = (low + high) >>> 1; + } + }; + Animation.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) + return i; + return -1; + }; + return Animation; + }()); + spine.Animation = Animation; + var MixBlend; + (function (MixBlend) { + MixBlend[MixBlend["setup"] = 0] = "setup"; + MixBlend[MixBlend["first"] = 1] = "first"; + MixBlend[MixBlend["replace"] = 2] = "replace"; + MixBlend[MixBlend["add"] = 3] = "add"; + })(MixBlend = spine.MixBlend || (spine.MixBlend = {})); + var MixDirection; + (function (MixDirection) { + MixDirection[MixDirection["mixIn"] = 0] = "mixIn"; + MixDirection[MixDirection["mixOut"] = 1] = "mixOut"; + })(MixDirection = spine.MixDirection || (spine.MixDirection = {})); + var TimelineType; + (function (TimelineType) { + TimelineType[TimelineType["rotate"] = 0] = "rotate"; + TimelineType[TimelineType["translate"] = 1] = "translate"; + TimelineType[TimelineType["scale"] = 2] = "scale"; + TimelineType[TimelineType["shear"] = 3] = "shear"; + TimelineType[TimelineType["attachment"] = 4] = "attachment"; + TimelineType[TimelineType["color"] = 5] = "color"; + TimelineType[TimelineType["deform"] = 6] = "deform"; + TimelineType[TimelineType["event"] = 7] = "event"; + TimelineType[TimelineType["drawOrder"] = 8] = "drawOrder"; + TimelineType[TimelineType["ikConstraint"] = 9] = "ikConstraint"; + TimelineType[TimelineType["transformConstraint"] = 10] = "transformConstraint"; + TimelineType[TimelineType["pathConstraintPosition"] = 11] = "pathConstraintPosition"; + TimelineType[TimelineType["pathConstraintSpacing"] = 12] = "pathConstraintSpacing"; + TimelineType[TimelineType["pathConstraintMix"] = 13] = "pathConstraintMix"; + TimelineType[TimelineType["twoColor"] = 14] = "twoColor"; + })(TimelineType = spine.TimelineType || (spine.TimelineType = {})); + var CurveTimeline = (function () { + function CurveTimeline(frameCount) { + if (frameCount <= 0) + throw new Error("frameCount must be > 0: " + frameCount); + this.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE); + } + CurveTimeline.prototype.getFrameCount = function () { + return this.curves.length / CurveTimeline.BEZIER_SIZE + 1; + }; + CurveTimeline.prototype.setLinear = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR; + }; + CurveTimeline.prototype.setStepped = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED; + }; + CurveTimeline.prototype.getCurveType = function (frameIndex) { + var index = frameIndex * CurveTimeline.BEZIER_SIZE; + if (index == this.curves.length) + return CurveTimeline.LINEAR; + var type = this.curves[index]; + if (type == CurveTimeline.LINEAR) + return CurveTimeline.LINEAR; + if (type == CurveTimeline.STEPPED) + return CurveTimeline.STEPPED; + return CurveTimeline.BEZIER; + }; + CurveTimeline.prototype.setCurve = function (frameIndex, cx1, cy1, cx2, cy2) { + var tmpx = (-cx1 * 2 + cx2) * 0.03, tmpy = (-cy1 * 2 + cy2) * 0.03; + var dddfx = ((cx1 - cx2) * 3 + 1) * 0.006, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006; + var ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy; + var dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667, dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var curves = this.curves; + curves[i++] = CurveTimeline.BEZIER; + var x = dfx, y = dfy; + for (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + }; + CurveTimeline.prototype.getCurvePercent = function (frameIndex, percent) { + percent = spine.MathUtils.clamp(percent, 0, 1); + var curves = this.curves; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var type = curves[i]; + if (type == CurveTimeline.LINEAR) + return percent; + if (type == CurveTimeline.STEPPED) + return 0; + i++; + var x = 0; + for (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + x = curves[i]; + if (x >= percent) { + var prevX = void 0, prevY = void 0; + if (i == start) { + prevX = 0; + prevY = 0; + } + else { + prevX = curves[i - 2]; + prevY = curves[i - 1]; + } + return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX); + } + } + var y = curves[i - 1]; + return y + (1 - y) * (percent - x) / (1 - x); + }; + CurveTimeline.LINEAR = 0; + CurveTimeline.STEPPED = 1; + CurveTimeline.BEZIER = 2; + CurveTimeline.BEZIER_SIZE = 10 * 2 - 1; + return CurveTimeline; + }()); + spine.CurveTimeline = CurveTimeline; + var RotateTimeline = (function (_super) { + __extends(RotateTimeline, _super); + function RotateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount << 1); + return _this; + } + RotateTimeline.prototype.getPropertyId = function () { + return (TimelineType.rotate << 24) + this.boneIndex; + }; + RotateTimeline.prototype.setFrame = function (frameIndex, time, degrees) { + frameIndex <<= 1; + this.frames[frameIndex] = time; + this.frames[frameIndex + RotateTimeline.ROTATION] = degrees; + }; + RotateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + return; + case MixBlend.first: + var r_1 = bone.data.rotation - bone.rotation; + bone.rotation += (r_1 - (16384 - ((16384.499999999996 - r_1 / 360) | 0)) * 360) * alpha; + } + return; + } + if (time >= frames[frames.length - RotateTimeline.ENTRIES]) { + var r_2 = frames[frames.length + RotateTimeline.PREV_ROTATION]; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + r_2 * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r_2 += bone.data.rotation - bone.rotation; + r_2 -= (16384 - ((16384.499999999996 - r_2 / 360) | 0)) * 360; + case MixBlend.add: + bone.rotation += r_2 * alpha; + } + return; + } + var frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES); + var prevRotation = frames[frame + RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime)); + var r = frames[frame + RotateTimeline.ROTATION] - prevRotation; + r = prevRotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * percent; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r += bone.data.rotation - bone.rotation; + case MixBlend.add: + bone.rotation += (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + } + }; + RotateTimeline.ENTRIES = 2; + RotateTimeline.PREV_TIME = -2; + RotateTimeline.PREV_ROTATION = -1; + RotateTimeline.ROTATION = 1; + return RotateTimeline; + }(CurveTimeline)); + spine.RotateTimeline = RotateTimeline; + var TranslateTimeline = (function (_super) { + __extends(TranslateTimeline, _super); + function TranslateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES); + return _this; + } + TranslateTimeline.prototype.getPropertyId = function () { + return (TimelineType.translate << 24) + this.boneIndex; + }; + TranslateTimeline.prototype.setFrame = function (frameIndex, time, x, y) { + frameIndex *= TranslateTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TranslateTimeline.X] = x; + this.frames[frameIndex + TranslateTimeline.Y] = y; + }; + TranslateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + bone.y = bone.data.y; + return; + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) { + x = frames[frames.length + TranslateTimeline.PREV_X]; + y = frames[frames.length + TranslateTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES); + x = frames[frame + TranslateTimeline.PREV_X]; + y = frames[frame + TranslateTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime)); + x += (frames[frame + TranslateTimeline.X] - x) * percent; + y += (frames[frame + TranslateTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + bone.y = bone.data.y + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + bone.y += (bone.data.y + y - bone.y) * alpha; + break; + case MixBlend.add: + bone.x += x * alpha; + bone.y += y * alpha; + } + }; + TranslateTimeline.ENTRIES = 3; + TranslateTimeline.PREV_TIME = -3; + TranslateTimeline.PREV_X = -2; + TranslateTimeline.PREV_Y = -1; + TranslateTimeline.X = 1; + TranslateTimeline.Y = 2; + return TranslateTimeline; + }(CurveTimeline)); + spine.TranslateTimeline = TranslateTimeline; + var ScaleTimeline = (function (_super) { + __extends(ScaleTimeline, _super); + function ScaleTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ScaleTimeline.prototype.getPropertyId = function () { + return (TimelineType.scale << 24) + this.boneIndex; + }; + ScaleTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + bone.scaleY = bone.data.scaleY; + return; + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) { + x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX; + y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY; + } + else { + var frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES); + x = frames[frame + ScaleTimeline.PREV_X]; + y = frames[frame + ScaleTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime)); + x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX; + y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY; + } + if (alpha == 1) { + if (blend == MixBlend.add) { + bone.scaleX += x - bone.data.scaleX; + bone.scaleY += y - bone.data.scaleY; + } + else { + bone.scaleX = x; + bone.scaleY = y; + } + } + else { + var bx = 0, by = 0; + if (direction == MixDirection.mixOut) { + switch (blend) { + case MixBlend.setup: + bx = bone.data.scaleX; + by = bone.data.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.add: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bone.data.scaleX) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - bone.data.scaleY) * alpha; + } + } + else { + switch (blend) { + case MixBlend.setup: + bx = Math.abs(bone.data.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.data.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = Math.abs(bone.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.add: + bx = spine.MathUtils.signum(x); + by = spine.MathUtils.signum(y); + bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha; + bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha; + } + } + } + }; + return ScaleTimeline; + }(TranslateTimeline)); + spine.ScaleTimeline = ScaleTimeline; + var ShearTimeline = (function (_super) { + __extends(ShearTimeline, _super); + function ShearTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ShearTimeline.prototype.getPropertyId = function () { + return (TimelineType.shear << 24) + this.boneIndex; + }; + ShearTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + bone.shearY = bone.data.shearY; + return; + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ShearTimeline.ENTRIES]) { + x = frames[frames.length + ShearTimeline.PREV_X]; + y = frames[frames.length + ShearTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES); + x = frames[frame + ShearTimeline.PREV_X]; + y = frames[frame + ShearTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime)); + x = x + (frames[frame + ShearTimeline.X] - x) * percent; + y = y + (frames[frame + ShearTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + bone.shearY = bone.data.shearY + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + break; + case MixBlend.add: + bone.shearX += x * alpha; + bone.shearY += y * alpha; + } + }; + return ShearTimeline; + }(TranslateTimeline)); + spine.ShearTimeline = ShearTimeline; + var ColorTimeline = (function (_super) { + __extends(ColorTimeline, _super); + function ColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES); + return _this; + } + ColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.color << 24) + this.slotIndex; + }; + ColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a) { + frameIndex *= ColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + ColorTimeline.R] = r; + this.frames[frameIndex + ColorTimeline.G] = g; + this.frames[frameIndex + ColorTimeline.B] = b; + this.frames[frameIndex + ColorTimeline.A] = a; + }; + ColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + return; + case MixBlend.first: + var color = slot.color, setup = slot.data.color; + color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha); + } + return; + } + var r = 0, g = 0, b = 0, a = 0; + if (time >= frames[frames.length - ColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + ColorTimeline.PREV_R]; + g = frames[i + ColorTimeline.PREV_G]; + b = frames[i + ColorTimeline.PREV_B]; + a = frames[i + ColorTimeline.PREV_A]; + } + else { + var frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES); + r = frames[frame + ColorTimeline.PREV_R]; + g = frames[frame + ColorTimeline.PREV_G]; + b = frames[frame + ColorTimeline.PREV_B]; + a = frames[frame + ColorTimeline.PREV_A]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + ColorTimeline.R] - r) * percent; + g += (frames[frame + ColorTimeline.G] - g) * percent; + b += (frames[frame + ColorTimeline.B] - b) * percent; + a += (frames[frame + ColorTimeline.A] - a) * percent; + } + if (alpha == 1) + slot.color.set(r, g, b, a); + else { + var color = slot.color; + if (blend == MixBlend.setup) + color.setFromColor(slot.data.color); + color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha); + } + }; + ColorTimeline.ENTRIES = 5; + ColorTimeline.PREV_TIME = -5; + ColorTimeline.PREV_R = -4; + ColorTimeline.PREV_G = -3; + ColorTimeline.PREV_B = -2; + ColorTimeline.PREV_A = -1; + ColorTimeline.R = 1; + ColorTimeline.G = 2; + ColorTimeline.B = 3; + ColorTimeline.A = 4; + return ColorTimeline; + }(CurveTimeline)); + spine.ColorTimeline = ColorTimeline; + var TwoColorTimeline = (function (_super) { + __extends(TwoColorTimeline, _super); + function TwoColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES); + return _this; + } + TwoColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.twoColor << 24) + this.slotIndex; + }; + TwoColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a, r2, g2, b2) { + frameIndex *= TwoColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TwoColorTimeline.R] = r; + this.frames[frameIndex + TwoColorTimeline.G] = g; + this.frames[frameIndex + TwoColorTimeline.B] = b; + this.frames[frameIndex + TwoColorTimeline.A] = a; + this.frames[frameIndex + TwoColorTimeline.R2] = r2; + this.frames[frameIndex + TwoColorTimeline.G2] = g2; + this.frames[frameIndex + TwoColorTimeline.B2] = b2; + }; + TwoColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + slot.darkColor.setFromColor(slot.data.darkColor); + return; + case MixBlend.first: + var light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor; + light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha); + dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0); + } + return; + } + var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; + if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + TwoColorTimeline.PREV_R]; + g = frames[i + TwoColorTimeline.PREV_G]; + b = frames[i + TwoColorTimeline.PREV_B]; + a = frames[i + TwoColorTimeline.PREV_A]; + r2 = frames[i + TwoColorTimeline.PREV_R2]; + g2 = frames[i + TwoColorTimeline.PREV_G2]; + b2 = frames[i + TwoColorTimeline.PREV_B2]; + } + else { + var frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES); + r = frames[frame + TwoColorTimeline.PREV_R]; + g = frames[frame + TwoColorTimeline.PREV_G]; + b = frames[frame + TwoColorTimeline.PREV_B]; + a = frames[frame + TwoColorTimeline.PREV_A]; + r2 = frames[frame + TwoColorTimeline.PREV_R2]; + g2 = frames[frame + TwoColorTimeline.PREV_G2]; + b2 = frames[frame + TwoColorTimeline.PREV_B2]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + TwoColorTimeline.R] - r) * percent; + g += (frames[frame + TwoColorTimeline.G] - g) * percent; + b += (frames[frame + TwoColorTimeline.B] - b) * percent; + a += (frames[frame + TwoColorTimeline.A] - a) * percent; + r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent; + g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent; + b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent; + } + if (alpha == 1) { + slot.color.set(r, g, b, a); + slot.darkColor.set(r2, g2, b2, 1); + } + else { + var light = slot.color, dark = slot.darkColor; + if (blend == MixBlend.setup) { + light.setFromColor(slot.data.color); + dark.setFromColor(slot.data.darkColor); + } + light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha); + dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0); + } + }; + TwoColorTimeline.ENTRIES = 8; + TwoColorTimeline.PREV_TIME = -8; + TwoColorTimeline.PREV_R = -7; + TwoColorTimeline.PREV_G = -6; + TwoColorTimeline.PREV_B = -5; + TwoColorTimeline.PREV_A = -4; + TwoColorTimeline.PREV_R2 = -3; + TwoColorTimeline.PREV_G2 = -2; + TwoColorTimeline.PREV_B2 = -1; + TwoColorTimeline.R = 1; + TwoColorTimeline.G = 2; + TwoColorTimeline.B = 3; + TwoColorTimeline.A = 4; + TwoColorTimeline.R2 = 5; + TwoColorTimeline.G2 = 6; + TwoColorTimeline.B2 = 7; + return TwoColorTimeline; + }(CurveTimeline)); + spine.TwoColorTimeline = TwoColorTimeline; + var AttachmentTimeline = (function () { + function AttachmentTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.attachmentNames = new Array(frameCount); + } + AttachmentTimeline.prototype.getPropertyId = function () { + return (TimelineType.attachment << 24) + this.slotIndex; + }; + AttachmentTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + AttachmentTimeline.prototype.setFrame = function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }; + AttachmentTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frameIndex = 0; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = Animation.binarySearch(frames, time, 1) - 1; + var attachmentName = this.attachmentNames[frameIndex]; + skeleton.slots[this.slotIndex] + .setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + AttachmentTimeline.prototype.setAttachment = function (skeleton, slot, attachmentName) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + return AttachmentTimeline; + }()); + spine.AttachmentTimeline = AttachmentTimeline; + var zeros = null; + var DeformTimeline = (function (_super) { + __extends(DeformTimeline, _super); + function DeformTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount); + _this.frameVertices = new Array(frameCount); + if (zeros == null) + zeros = spine.Utils.newFloatArray(64); + return _this; + } + DeformTimeline.prototype.getPropertyId = function () { + return (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex; + }; + DeformTimeline.prototype.setFrame = function (frameIndex, time, vertices) { + this.frames[frameIndex] = time; + this.frameVertices[frameIndex] = vertices; + }; + DeformTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var slotAttachment = slot.getAttachment(); + if (!(slotAttachment instanceof spine.VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment)) + return; + var deformArray = slot.deform; + if (deformArray.length == 0) + blend = MixBlend.setup; + var frameVertices = this.frameVertices; + var vertexCount = frameVertices[0].length; + var frames = this.frames; + if (time < frames[0]) { + var vertexAttachment = slotAttachment; + switch (blend) { + case MixBlend.setup: + deformArray.length = 0; + return; + case MixBlend.first: + if (alpha == 1) { + deformArray.length = 0; + break; + } + var deform_1 = spine.Utils.setArraySize(deformArray, vertexCount); + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i = 0; i < vertexCount; i++) + deform_1[i] += (setupVertices[i] - deform_1[i]) * alpha; + } + else { + alpha = 1 - alpha; + for (var i = 0; i < vertexCount; i++) + deform_1[i] *= alpha; + } + } + return; + } + var deform = spine.Utils.setArraySize(deformArray, vertexCount); + if (time >= frames[frames.length - 1]) { + var lastVertices = frameVertices[frames.length - 1]; + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_1 = 0; i_1 < vertexCount; i_1++) { + deform[i_1] += lastVertices[i_1] - setupVertices[i_1]; + } + } + else { + for (var i_2 = 0; i_2 < vertexCount; i_2++) + deform[i_2] += lastVertices[i_2]; + } + } + else { + spine.Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount); + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_1 = slotAttachment; + if (vertexAttachment_1.bones == null) { + var setupVertices = vertexAttachment_1.vertices; + for (var i_3 = 0; i_3 < vertexCount; i_3++) { + var setup = setupVertices[i_3]; + deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha; + } + } + else { + for (var i_4 = 0; i_4 < vertexCount; i_4++) + deform[i_4] = lastVertices[i_4] * alpha; + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_5 = 0; i_5 < vertexCount; i_5++) + deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha; + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_6 = 0; i_6 < vertexCount; i_6++) { + deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha; + } + } + else { + for (var i_7 = 0; i_7 < vertexCount; i_7++) + deform[i_7] += lastVertices[i_7] * alpha; + } + } + } + return; + } + var frame = Animation.binarySearch(frames, time); + var prevVertices = frameVertices[frame - 1]; + var nextVertices = frameVertices[frame]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime)); + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_8 = 0; i_8 < vertexCount; i_8++) { + var prev = prevVertices[i_8]; + deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8]; + } + } + else { + for (var i_9 = 0; i_9 < vertexCount; i_9++) { + var prev = prevVertices[i_9]; + deform[i_9] += prev + (nextVertices[i_9] - prev) * percent; + } + } + } + else { + for (var i_10 = 0; i_10 < vertexCount; i_10++) { + var prev = prevVertices[i_10]; + deform[i_10] = prev + (nextVertices[i_10] - prev) * percent; + } + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_2 = slotAttachment; + if (vertexAttachment_2.bones == null) { + var setupVertices = vertexAttachment_2.vertices; + for (var i_11 = 0; i_11 < vertexCount; i_11++) { + var prev = prevVertices[i_11], setup = setupVertices[i_11]; + deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha; + } + } + else { + for (var i_12 = 0; i_12 < vertexCount; i_12++) { + var prev = prevVertices[i_12]; + deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha; + } + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_13 = 0; i_13 < vertexCount; i_13++) { + var prev = prevVertices[i_13]; + deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha; + } + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_14 = 0; i_14 < vertexCount; i_14++) { + var prev = prevVertices[i_14]; + deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha; + } + } + else { + for (var i_15 = 0; i_15 < vertexCount; i_15++) { + var prev = prevVertices[i_15]; + deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha; + } + } + } + } + }; + return DeformTimeline; + }(CurveTimeline)); + spine.DeformTimeline = DeformTimeline; + var EventTimeline = (function () { + function EventTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.events = new Array(frameCount); + } + EventTimeline.prototype.getPropertyId = function () { + return TimelineType.event << 24; + }; + EventTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + EventTimeline.prototype.setFrame = function (frameIndex, event) { + this.frames[frameIndex] = event.time; + this.events[frameIndex] = event; + }; + EventTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + if (firedEvents == null) + return; + var frames = this.frames; + var frameCount = this.frames.length; + if (lastTime > time) { + this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction); + lastTime = -1; + } + else if (lastTime >= frames[frameCount - 1]) + return; + if (time < frames[0]) + return; + var frame = 0; + if (lastTime < frames[0]) + frame = 0; + else { + frame = Animation.binarySearch(frames, lastTime); + var frameTime = frames[frame]; + while (frame > 0) { + if (frames[frame - 1] != frameTime) + break; + frame--; + } + } + for (; frame < frameCount && time >= frames[frame]; frame++) + firedEvents.push(this.events[frame]); + }; + return EventTimeline; + }()); + spine.EventTimeline = EventTimeline; + var DrawOrderTimeline = (function () { + function DrawOrderTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.drawOrders = new Array(frameCount); + } + DrawOrderTimeline.prototype.getPropertyId = function () { + return TimelineType.drawOrder << 24; + }; + DrawOrderTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + DrawOrderTimeline.prototype.setFrame = function (frameIndex, time, drawOrder) { + this.frames[frameIndex] = time; + this.drawOrders[frameIndex] = drawOrder; + }; + DrawOrderTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var drawOrder = skeleton.drawOrder; + var slots = skeleton.slots; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frame = 0; + if (time >= frames[frames.length - 1]) + frame = frames.length - 1; + else + frame = Animation.binarySearch(frames, time) - 1; + var drawOrderToSetupIndex = this.drawOrders[frame]; + if (drawOrderToSetupIndex == null) + spine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length); + else { + for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++) + drawOrder[i] = slots[drawOrderToSetupIndex[i]]; + } + }; + return DrawOrderTimeline; + }()); + spine.DrawOrderTimeline = DrawOrderTimeline; + var IkConstraintTimeline = (function (_super) { + __extends(IkConstraintTimeline, _super); + function IkConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES); + return _this; + } + IkConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex; + }; + IkConstraintTimeline.prototype.setFrame = function (frameIndex, time, mix, softness, bendDirection, compress, stretch) { + frameIndex *= IkConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + IkConstraintTimeline.MIX] = mix; + this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness; + this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection; + this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0; + this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0; + }; + IkConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.ikConstraints[this.ikConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + return; + case MixBlend.first: + constraint.mix += (constraint.data.mix - constraint.mix) * alpha; + constraint.softness += (constraint.data.softness - constraint.softness) * alpha; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + return; + } + if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) { + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha; + constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + return; + } + var frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES); + var mix = frames[frame + IkConstraintTimeline.PREV_MIX]; + var softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime)); + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha; + constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + }; + IkConstraintTimeline.ENTRIES = 6; + IkConstraintTimeline.PREV_TIME = -6; + IkConstraintTimeline.PREV_MIX = -5; + IkConstraintTimeline.PREV_SOFTNESS = -4; + IkConstraintTimeline.PREV_BEND_DIRECTION = -3; + IkConstraintTimeline.PREV_COMPRESS = -2; + IkConstraintTimeline.PREV_STRETCH = -1; + IkConstraintTimeline.MIX = 1; + IkConstraintTimeline.SOFTNESS = 2; + IkConstraintTimeline.BEND_DIRECTION = 3; + IkConstraintTimeline.COMPRESS = 4; + IkConstraintTimeline.STRETCH = 5; + return IkConstraintTimeline; + }(CurveTimeline)); + spine.IkConstraintTimeline = IkConstraintTimeline; + var TransformConstraintTimeline = (function (_super) { + __extends(TransformConstraintTimeline, _super); + function TransformConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES); + return _this; + } + TransformConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex; + }; + TransformConstraintTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) { + frameIndex *= TransformConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix; + this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix; + this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix; + }; + TransformConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.transformConstraints[this.transformConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + var data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + return; + case MixBlend.first: + constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha; + constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha; + constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha; + } + return; + } + var rotate = 0, translate = 0, scale = 0, shear = 0; + if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) { + var i = frames.length; + rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[i + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[i + TransformConstraintTimeline.PREV_SHEAR]; + } + else { + var frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES); + rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[frame + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent; + scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent; + shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent; + } + if (blend == MixBlend.setup) { + var data = constraint.data; + constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha; + constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha; + constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha; + constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + constraint.scaleMix += (scale - constraint.scaleMix) * alpha; + constraint.shearMix += (shear - constraint.shearMix) * alpha; + } + }; + TransformConstraintTimeline.ENTRIES = 5; + TransformConstraintTimeline.PREV_TIME = -5; + TransformConstraintTimeline.PREV_ROTATE = -4; + TransformConstraintTimeline.PREV_TRANSLATE = -3; + TransformConstraintTimeline.PREV_SCALE = -2; + TransformConstraintTimeline.PREV_SHEAR = -1; + TransformConstraintTimeline.ROTATE = 1; + TransformConstraintTimeline.TRANSLATE = 2; + TransformConstraintTimeline.SCALE = 3; + TransformConstraintTimeline.SHEAR = 4; + return TransformConstraintTimeline; + }(CurveTimeline)); + spine.TransformConstraintTimeline = TransformConstraintTimeline; + var PathConstraintPositionTimeline = (function (_super) { + __extends(PathConstraintPositionTimeline, _super); + function PathConstraintPositionTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES); + return _this; + } + PathConstraintPositionTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex; + }; + PathConstraintPositionTimeline.prototype.setFrame = function (frameIndex, time, value) { + frameIndex *= PathConstraintPositionTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value; + }; + PathConstraintPositionTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.position = constraint.data.position; + return; + case MixBlend.first: + constraint.position += (constraint.data.position - constraint.position) * alpha; + } + return; + } + var position = 0; + if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES]) + position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES); + position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime)); + position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent; + } + if (blend == MixBlend.setup) + constraint.position = constraint.data.position + (position - constraint.data.position) * alpha; + else + constraint.position += (position - constraint.position) * alpha; + }; + PathConstraintPositionTimeline.ENTRIES = 2; + PathConstraintPositionTimeline.PREV_TIME = -2; + PathConstraintPositionTimeline.PREV_VALUE = -1; + PathConstraintPositionTimeline.VALUE = 1; + return PathConstraintPositionTimeline; + }(CurveTimeline)); + spine.PathConstraintPositionTimeline = PathConstraintPositionTimeline; + var PathConstraintSpacingTimeline = (function (_super) { + __extends(PathConstraintSpacingTimeline, _super); + function PathConstraintSpacingTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + PathConstraintSpacingTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex; + }; + PathConstraintSpacingTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.spacing = constraint.data.spacing; + return; + case MixBlend.first: + constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha; + } + return; + } + var spacing = 0; + if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES]) + spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES); + spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime)); + spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent; + } + if (blend == MixBlend.setup) + constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha; + else + constraint.spacing += (spacing - constraint.spacing) * alpha; + }; + return PathConstraintSpacingTimeline; + }(PathConstraintPositionTimeline)); + spine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline; + var PathConstraintMixTimeline = (function (_super) { + __extends(PathConstraintMixTimeline, _super); + function PathConstraintMixTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES); + return _this; + } + PathConstraintMixTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex; + }; + PathConstraintMixTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix) { + frameIndex *= PathConstraintMixTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix; + }; + PathConstraintMixTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = constraint.data.rotateMix; + constraint.translateMix = constraint.data.translateMix; + return; + case MixBlend.first: + constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha; + } + return; + } + var rotate = 0, translate = 0; + if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) { + rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE]; + } + else { + var frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES); + rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent; + } + if (blend == MixBlend.setup) { + constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha; + constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + } + }; + PathConstraintMixTimeline.ENTRIES = 3; + PathConstraintMixTimeline.PREV_TIME = -3; + PathConstraintMixTimeline.PREV_ROTATE = -2; + PathConstraintMixTimeline.PREV_TRANSLATE = -1; + PathConstraintMixTimeline.ROTATE = 1; + PathConstraintMixTimeline.TRANSLATE = 2; + return PathConstraintMixTimeline; + }(CurveTimeline)); + spine.PathConstraintMixTimeline = PathConstraintMixTimeline; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationState = (function () { + function AnimationState(data) { + this.tracks = new Array(); + this.timeScale = 1; + this.unkeyedState = 0; + this.events = new Array(); + this.listeners = new Array(); + this.queue = new EventQueue(this); + this.propertyIDs = new spine.IntSet(); + this.animationsChanged = false; + this.trackEntryPool = new spine.Pool(function () { return new TrackEntry(); }); + this.data = data; + } + AnimationState.prototype.update = function (delta) { + delta *= this.timeScale; + var tracks = this.tracks; + for (var i = 0, n = tracks.length; i < n; i++) { + var current = tracks[i]; + if (current == null) + continue; + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + var currentDelta = delta * current.timeScale; + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) + continue; + currentDelta = -current.delay; + current.delay = 0; + } + var next = current.next; + if (next != null) { + var nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setCurrent(i, next, true); + while (next.mixingFrom != null) { + next.mixTime += delta; + next = next.mixingFrom; + } + continue; + } + } + else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) { + tracks[i] = null; + this.queue.end(current); + this.disposeNext(current); + continue; + } + if (current.mixingFrom != null && this.updateMixingFrom(current, delta)) { + var from = current.mixingFrom; + current.mixingFrom = null; + if (from != null) + from.mixingTo = null; + while (from != null) { + this.queue.end(from); + from = from.mixingFrom; + } + } + current.trackTime += currentDelta; + } + this.queue.drain(); + }; + AnimationState.prototype.updateMixingFrom = function (to, delta) { + var from = to.mixingFrom; + if (from == null) + return true; + var finished = this.updateMixingFrom(from, delta); + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { + if (from.totalAlpha == 0 || to.mixDuration == 0) { + to.mixingFrom = from.mixingFrom; + if (from.mixingFrom != null) + from.mixingFrom.mixingTo = to; + to.interruptAlpha = from.interruptAlpha; + this.queue.end(from); + } + return finished; + } + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + }; + AnimationState.prototype.apply = function (skeleton) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (this.animationsChanged) + this._animationsChanged(); + var events = this.events; + var tracks = this.tracks; + var applied = false; + for (var i_16 = 0, n_1 = tracks.length; i_16 < n_1; i_16++) { + var current = tracks[i_16]; + if (current == null || current.delay > 0) + continue; + applied = true; + var blend = i_16 == 0 ? spine.MixBlend.first : current.mixBlend; + var mix = current.alpha; + if (current.mixingFrom != null) + mix *= this.applyMixingFrom(current, skeleton, blend); + else if (current.trackTime >= current.trackEnd && current.next == null) + mix = 0; + var animationLast = current.animationLast, animationTime = current.getAnimationTime(); + var timelineCount = current.animation.timelines.length; + var timelines = current.animation.timelines; + if ((i_16 == 0 && mix == 1) || blend == spine.MixBlend.add) { + for (var ii = 0; ii < timelineCount; ii++) { + spine.Utils.webkit602BugfixHelper(mix, blend); + var timeline = timelines[ii]; + if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, blend, true); + else + timeline.apply(skeleton, animationLast, animationTime, events, mix, blend, spine.MixDirection.mixIn); + } + } + else { + var timelineMode = current.timelineMode; + var firstFrame = current.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = current.timelinesRotation; + for (var ii = 0; ii < timelineCount; ii++) { + var timeline_1 = timelines[ii]; + var timelineBlend = timelineMode[ii] == AnimationState.SUBSEQUENT ? blend : spine.MixBlend.setup; + if (timeline_1 instanceof spine.RotateTimeline) { + this.applyRotateTimeline(timeline_1, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); + } + else if (timeline_1 instanceof spine.AttachmentTimeline) { + this.applyAttachmentTimeline(timeline_1, skeleton, animationTime, blend, true); + } + else { + spine.Utils.webkit602BugfixHelper(mix, blend); + timeline_1.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, spine.MixDirection.mixIn); + } + } + } + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + var setupState = this.unkeyedState + AnimationState.SETUP; + var slots = skeleton.slots; + for (var i = 0, n = skeleton.slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.attachmentState == setupState) { + var attachmentName = slot.data.attachmentName; + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + } + } + this.unkeyedState += 2; + this.queue.drain(); + return applied; + }; + AnimationState.prototype.applyMixingFrom = function (to, skeleton, blend) { + var from = to.mixingFrom; + if (from.mixingFrom != null) + this.applyMixingFrom(from, skeleton, blend); + var mix = 0; + if (to.mixDuration == 0) { + mix = 1; + if (blend == spine.MixBlend.first) + blend = spine.MixBlend.setup; + } + else { + mix = to.mixTime / to.mixDuration; + if (mix > 1) + mix = 1; + if (blend != spine.MixBlend.first) + blend = from.mixBlend; + } + var events = mix < from.eventThreshold ? this.events : null; + var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold; + var animationLast = from.animationLast, animationTime = from.getAnimationTime(); + var timelineCount = from.animation.timelines.length; + var timelines = from.animation.timelines; + var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); + if (blend == spine.MixBlend.add) { + for (var i = 0; i < timelineCount; i++) + timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, spine.MixDirection.mixOut); + } + else { + var timelineMode = from.timelineMode; + var timelineHoldMix = from.timelineHoldMix; + var firstFrame = from.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = from.timelinesRotation; + from.totalAlpha = 0; + for (var i = 0; i < timelineCount; i++) { + var timeline = timelines[i]; + var direction = spine.MixDirection.mixOut; + var timelineBlend = void 0; + var alpha = 0; + switch (timelineMode[i]) { + case AnimationState.SUBSEQUENT: + if (!drawOrder && timeline instanceof spine.DrawOrderTimeline) + continue; + timelineBlend = blend; + alpha = alphaMix; + break; + case AnimationState.FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaMix; + break; + case AnimationState.HOLD_SUBSEQUENT: + timelineBlend = blend; + alpha = alphaHold; + break; + case AnimationState.HOLD_FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaHold; + break; + default: + timelineBlend = spine.MixBlend.setup; + var holdMix = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + break; + } + from.totalAlpha += alpha; + if (timeline instanceof spine.RotateTimeline) + this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); + else if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, timelineBlend, attachments); + else { + spine.Utils.webkit602BugfixHelper(alpha, blend); + if (drawOrder && timeline instanceof spine.DrawOrderTimeline && timelineBlend == spine.MixBlend.setup) + direction = spine.MixDirection.mixIn; + timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction); + } + } + } + if (to.mixDuration > 0) + this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + return mix; + }; + AnimationState.prototype.applyAttachmentTimeline = function (timeline, skeleton, time, blend, attachments) { + var slot = skeleton.slots[timeline.slotIndex]; + if (!slot.bone.active) + return; + var frames = timeline.frames; + if (time < frames[0]) { + if (blend == spine.MixBlend.setup || blend == spine.MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments); + } + else { + var frameIndex; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = spine.Animation.binarySearch(frames, time) - 1; + this.setAttachment(skeleton, slot, timeline.attachmentNames[frameIndex], attachments); + } + if (slot.attachmentState <= this.unkeyedState) + slot.attachmentState = this.unkeyedState + AnimationState.SETUP; + }; + AnimationState.prototype.setAttachment = function (skeleton, slot, attachmentName, attachments) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + if (attachments) + slot.attachmentState = this.unkeyedState + AnimationState.CURRENT; + }; + AnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) { + if (firstFrame) + timelinesRotation[i] = 0; + if (alpha == 1) { + timeline.apply(skeleton, 0, time, null, 1, blend, spine.MixDirection.mixIn); + return; + } + var rotateTimeline = timeline; + var frames = rotateTimeline.frames; + var bone = skeleton.bones[rotateTimeline.boneIndex]; + if (!bone.active) + return; + var r1 = 0, r2 = 0; + if (time < frames[0]) { + switch (blend) { + case spine.MixBlend.setup: + bone.rotation = bone.data.rotation; + default: + return; + case spine.MixBlend.first: + r1 = bone.rotation; + r2 = bone.data.rotation; + } + } + else { + r1 = blend == spine.MixBlend.setup ? bone.data.rotation : bone.rotation; + if (time >= frames[frames.length - spine.RotateTimeline.ENTRIES]) + r2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION]; + else { + var frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES); + var prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime)); + r2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + r2 = prevRotation + r2 * percent + bone.data.rotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + } + } + var total = 0, diff = r2 - r1; + diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360; + if (diff == 0) { + total = timelinesRotation[i]; + } + else { + var lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } + else { + lastTotal = timelinesRotation[i]; + lastDiff = timelinesRotation[i + 1]; + } + var current = diff > 0, dir = lastTotal >= 0; + if (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) { + if (Math.abs(lastTotal) > 180) + lastTotal += 360 * spine.MathUtils.signum(lastTotal); + dir = current; + } + total = diff + lastTotal - lastTotal % 360; + if (dir != current) + total += 360 * spine.MathUtils.signum(lastTotal); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + r1 += total * alpha; + bone.rotation = r1 - (16384 - ((16384.499999999996 - r1 / 360) | 0)) * 360; + }; + AnimationState.prototype.queueEvents = function (entry, animationTime) { + var animationStart = entry.animationStart, animationEnd = entry.animationEnd; + var duration = animationEnd - animationStart; + var trackLastWrapped = entry.trackLast % duration; + var events = this.events; + var i = 0, n = events.length; + for (; i < n; i++) { + var event_1 = events[i]; + if (event_1.time < trackLastWrapped) + break; + if (event_1.time > animationEnd) + continue; + this.queue.event(entry, event_1); + } + var complete = false; + if (entry.loop) + complete = duration == 0 || trackLastWrapped > entry.trackTime % duration; + else + complete = animationTime >= animationEnd && entry.animationLast < animationEnd; + if (complete) + this.queue.complete(entry); + for (; i < n; i++) { + var event_2 = events[i]; + if (event_2.time < animationStart) + continue; + this.queue.event(entry, events[i]); + } + }; + AnimationState.prototype.clearTracks = function () { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) + this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.clearTrack = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return; + var current = this.tracks[trackIndex]; + if (current == null) + return; + this.queue.end(current); + this.disposeNext(current); + var entry = current; + while (true) { + var from = entry.mixingFrom; + if (from == null) + break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + this.tracks[current.trackIndex] = null; + this.queue.drain(); + }; + AnimationState.prototype.setCurrent = function (index, current, interrupt) { + var from = this.expandToIndex(index); + this.tracks[index] = current; + if (from != null) { + if (interrupt) + this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + if (from.mixingFrom != null && from.mixDuration > 0) + current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration); + from.timelinesRotation.length = 0; + } + this.queue.start(current); + }; + AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.setAnimationWith(trackIndex, animation, loop); + }; + AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) { + if (animation == null) + throw new Error("animation cannot be null."); + var interrupt = true; + var current = this.expandToIndex(trackIndex); + if (current != null) { + if (current.nextTrackLast == -1) { + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.disposeNext(current); + current = current.mixingFrom; + interrupt = false; + } + else + this.disposeNext(current); + } + var entry = this.trackEntry(trackIndex, animation, loop, current); + this.setCurrent(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + }; + AnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.addAnimationWith(trackIndex, animation, loop, delay); + }; + AnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) { + if (animation == null) + throw new Error("animation cannot be null."); + var last = this.expandToIndex(trackIndex); + if (last != null) { + while (last.next != null) + last = last.next; + } + var entry = this.trackEntry(trackIndex, animation, loop, last); + if (last == null) { + this.setCurrent(trackIndex, entry, true); + this.queue.drain(); + } + else { + last.next = entry; + if (delay <= 0) { + var duration = last.animationEnd - last.animationStart; + if (duration != 0) { + if (last.loop) + delay += duration * (1 + ((last.trackTime / duration) | 0)); + else + delay += Math.max(duration, last.trackTime); + delay -= this.data.getMix(last.animation, animation); + } + else + delay = last.trackTime; + } + } + entry.delay = delay; + return entry; + }; + AnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) { + var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) { + if (delay <= 0) + delay -= mixDuration; + var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.setEmptyAnimations = function (mixDuration) { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) { + var current = this.tracks[i]; + if (current != null) + this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.expandToIndex = function (index) { + if (index < this.tracks.length) + return this.tracks[index]; + spine.Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + }; + AnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) { + var entry = this.trackEntryPool.obtain(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + entry.eventThreshold = 0; + entry.attachmentThreshold = 0; + entry.drawOrderThreshold = 0; + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + entry.alpha = 1; + entry.interruptAlpha = 1; + entry.mixTime = 0; + entry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation); + entry.mixBlend = spine.MixBlend.replace; + return entry; + }; + AnimationState.prototype.disposeNext = function (entry) { + var next = entry.next; + while (next != null) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + }; + AnimationState.prototype._animationsChanged = function () { + this.animationsChanged = false; + this.propertyIDs.clear(); + for (var i = 0, n = this.tracks.length; i < n; i++) { + var entry = this.tracks[i]; + if (entry == null) + continue; + while (entry.mixingFrom != null) + entry = entry.mixingFrom; + do { + if (entry.mixingFrom == null || entry.mixBlend != spine.MixBlend.add) + this.computeHold(entry); + entry = entry.mixingTo; + } while (entry != null); + } + }; + AnimationState.prototype.computeHold = function (entry) { + var to = entry.mixingTo; + var timelines = entry.animation.timelines; + var timelinesCount = entry.animation.timelines.length; + var timelineMode = spine.Utils.setArraySize(entry.timelineMode, timelinesCount); + entry.timelineHoldMix.length = 0; + var timelineDipMix = spine.Utils.setArraySize(entry.timelineHoldMix, timelinesCount); + var propertyIDs = this.propertyIDs; + if (to != null && to.holdPrevious) { + for (var i = 0; i < timelinesCount; i++) { + timelineMode[i] = propertyIDs.add(timelines[i].getPropertyId()) ? AnimationState.HOLD_FIRST : AnimationState.HOLD_SUBSEQUENT; + } + return; + } + outer: for (var i = 0; i < timelinesCount; i++) { + var timeline = timelines[i]; + var id = timeline.getPropertyId(); + if (!propertyIDs.add(id)) + timelineMode[i] = AnimationState.SUBSEQUENT; + else if (to == null || timeline instanceof spine.AttachmentTimeline || timeline instanceof spine.DrawOrderTimeline + || timeline instanceof spine.EventTimeline || !to.animation.hasTimeline(id)) { + timelineMode[i] = AnimationState.FIRST; + } + else { + for (var next = to.mixingTo; next != null; next = next.mixingTo) { + if (next.animation.hasTimeline(id)) + continue; + if (entry.mixDuration > 0) { + timelineMode[i] = AnimationState.HOLD_MIX; + timelineDipMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = AnimationState.HOLD_FIRST; + } + } + }; + AnimationState.prototype.getCurrent = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return null; + return this.tracks[trackIndex]; + }; + AnimationState.prototype.addListener = function (listener) { + if (listener == null) + throw new Error("listener cannot be null."); + this.listeners.push(listener); + }; + AnimationState.prototype.removeListener = function (listener) { + var index = this.listeners.indexOf(listener); + if (index >= 0) + this.listeners.splice(index, 1); + }; + AnimationState.prototype.clearListeners = function () { + this.listeners.length = 0; + }; + AnimationState.prototype.clearListenerNotifications = function () { + this.queue.clear(); + }; + AnimationState.emptyAnimation = new spine.Animation("", [], 0); + AnimationState.SUBSEQUENT = 0; + AnimationState.FIRST = 1; + AnimationState.HOLD_SUBSEQUENT = 2; + AnimationState.HOLD_FIRST = 3; + AnimationState.HOLD_MIX = 4; + AnimationState.SETUP = 1; + AnimationState.CURRENT = 2; + return AnimationState; + }()); + spine.AnimationState = AnimationState; + var TrackEntry = (function () { + function TrackEntry() { + this.mixBlend = spine.MixBlend.replace; + this.timelineMode = new Array(); + this.timelineHoldMix = new Array(); + this.timelinesRotation = new Array(); + } + TrackEntry.prototype.reset = function () { + this.next = null; + this.mixingFrom = null; + this.mixingTo = null; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + }; + TrackEntry.prototype.getAnimationTime = function () { + if (this.loop) { + var duration = this.animationEnd - this.animationStart; + if (duration == 0) + return this.animationStart; + return (this.trackTime % duration) + this.animationStart; + } + return Math.min(this.trackTime + this.animationStart, this.animationEnd); + }; + TrackEntry.prototype.setAnimationLast = function (animationLast) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + }; + TrackEntry.prototype.isComplete = function () { + return this.trackTime >= this.animationEnd - this.animationStart; + }; + TrackEntry.prototype.resetRotationDirections = function () { + this.timelinesRotation.length = 0; + }; + return TrackEntry; + }()); + spine.TrackEntry = TrackEntry; + var EventQueue = (function () { + function EventQueue(animState) { + this.objects = []; + this.drainDisabled = false; + this.animState = animState; + } + EventQueue.prototype.start = function (entry) { + this.objects.push(EventType.start); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.interrupt = function (entry) { + this.objects.push(EventType.interrupt); + this.objects.push(entry); + }; + EventQueue.prototype.end = function (entry) { + this.objects.push(EventType.end); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.dispose = function (entry) { + this.objects.push(EventType.dispose); + this.objects.push(entry); + }; + EventQueue.prototype.complete = function (entry) { + this.objects.push(EventType.complete); + this.objects.push(entry); + }; + EventQueue.prototype.event = function (entry, event) { + this.objects.push(EventType.event); + this.objects.push(entry); + this.objects.push(event); + }; + EventQueue.prototype.drain = function () { + if (this.drainDisabled) + return; + this.drainDisabled = true; + var objects = this.objects; + var listeners = this.animState.listeners; + for (var i = 0; i < objects.length; i += 2) { + var type = objects[i]; + var entry = objects[i + 1]; + switch (type) { + case EventType.start: + if (entry.listener != null && entry.listener.start) + entry.listener.start(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].start) + listeners[ii].start(entry); + break; + case EventType.interrupt: + if (entry.listener != null && entry.listener.interrupt) + entry.listener.interrupt(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].interrupt) + listeners[ii].interrupt(entry); + break; + case EventType.end: + if (entry.listener != null && entry.listener.end) + entry.listener.end(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].end) + listeners[ii].end(entry); + case EventType.dispose: + if (entry.listener != null && entry.listener.dispose) + entry.listener.dispose(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].dispose) + listeners[ii].dispose(entry); + this.animState.trackEntryPool.free(entry); + break; + case EventType.complete: + if (entry.listener != null && entry.listener.complete) + entry.listener.complete(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].complete) + listeners[ii].complete(entry); + break; + case EventType.event: + var event_3 = objects[i++ + 2]; + if (entry.listener != null && entry.listener.event) + entry.listener.event(entry, event_3); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].event) + listeners[ii].event(entry, event_3); + break; + } + } + this.clear(); + this.drainDisabled = false; + }; + EventQueue.prototype.clear = function () { + this.objects.length = 0; + }; + return EventQueue; + }()); + spine.EventQueue = EventQueue; + var EventType; + (function (EventType) { + EventType[EventType["start"] = 0] = "start"; + EventType[EventType["interrupt"] = 1] = "interrupt"; + EventType[EventType["end"] = 2] = "end"; + EventType[EventType["dispose"] = 3] = "dispose"; + EventType[EventType["complete"] = 4] = "complete"; + EventType[EventType["event"] = 5] = "event"; + })(EventType = spine.EventType || (spine.EventType = {})); + var AnimationStateAdapter = (function () { + function AnimationStateAdapter() { + } + AnimationStateAdapter.prototype.start = function (entry) { + }; + AnimationStateAdapter.prototype.interrupt = function (entry) { + }; + AnimationStateAdapter.prototype.end = function (entry) { + }; + AnimationStateAdapter.prototype.dispose = function (entry) { + }; + AnimationStateAdapter.prototype.complete = function (entry) { + }; + AnimationStateAdapter.prototype.event = function (entry, event) { + }; + return AnimationStateAdapter; + }()); + spine.AnimationStateAdapter = AnimationStateAdapter; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationStateData = (function () { + function AnimationStateData(skeletonData) { + this.animationToMixTime = {}; + this.defaultMix = 0; + if (skeletonData == null) + throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + AnimationStateData.prototype.setMix = function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (from == null) + throw new Error("Animation not found: " + fromName); + var to = this.skeletonData.findAnimation(toName); + if (to == null) + throw new Error("Animation not found: " + toName); + this.setMixWith(from, to, duration); + }; + AnimationStateData.prototype.setMixWith = function (from, to, duration) { + if (from == null) + throw new Error("from cannot be null."); + if (to == null) + throw new Error("to cannot be null."); + var key = from.name + "." + to.name; + this.animationToMixTime[key] = duration; + }; + AnimationStateData.prototype.getMix = function (from, to) { + var key = from.name + "." + to.name; + var value = this.animationToMixTime[key]; + return value === undefined ? this.defaultMix : value; + }; + return AnimationStateData; + }()); + spine.AnimationStateData = AnimationStateData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AssetManager = (function () { + function AssetManager(textureLoader, pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.assets = {}; + this.errors = {}; + this.toLoad = 0; + this.loaded = 0; + this.rawDataUris = {}; + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + } + AssetManager.prototype.downloadText = function (url, success, error) { + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.onload = function () { + if (request.status == 200) { + success(request.responseText); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.downloadBinary = function (url, success, error) { + var request = new XMLHttpRequest(); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.responseType = "arraybuffer"; + request.onload = function () { + if (request.status == 200) { + success(new Uint8Array(request.response)); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.setRawDataURI = function (path, data) { + this.rawDataUris[this.pathPrefix + path] = data; + }; + AssetManager.prototype.loadBinary = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadBinary(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load binary " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load binary " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadText = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load text " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load text " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadTexture = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + var storagePath = path; + this.toLoad++; + var img = new Image(); + img.crossOrigin = "anonymous"; + img.onload = function (ev) { + var texture = _this.textureLoader(img); + _this.assets[storagePath] = texture; + _this.toLoad--; + _this.loaded++; + if (success) + success(path, img); + }; + img.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + _this.toLoad--; + _this.loaded++; + if (error) + error(path, "Couldn't load image " + path); + }; + if (this.rawDataUris[path]) + path = this.rawDataUris[path]; + img.src = path; + }; + AssetManager.prototype.loadTextureAtlas = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + var parent = path.lastIndexOf("/") >= 0 ? path.substring(0, path.lastIndexOf("/")) : ""; + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (atlasData) { + var pagesLoaded = { count: 0 }; + var atlasPages = new Array(); + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + atlasPages.push(parent == "" ? path : parent + "/" + path); + var image = document.createElement("img"); + image.width = 16; + image.height = 16; + return new spine.FakeTexture(image); + }); + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + return; + } + var _loop_1 = function (atlasPage) { + var pageLoadError = false; + _this.loadTexture(atlasPage, function (imagePath, image) { + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + if (!pageLoadError) { + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + return _this.get(parent == "" ? path : parent + "/" + path); + }); + _this.assets[path] = atlas; + if (success) + success(path, atlas); + _this.toLoad--; + _this.loaded++; + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + } + } + else { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + } + }, function (imagePath, errorMessage) { + pageLoadError = true; + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + }); + }; + for (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) { + var atlasPage = atlasPages_1[_i]; + _loop_1(atlasPage); + } + }, function (state, responseText) { + _this.errors[path] = "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.get = function (path) { + path = this.pathPrefix + path; + return this.assets[path]; + }; + AssetManager.prototype.remove = function (path) { + path = this.pathPrefix + path; + var asset = this.assets[path]; + if (asset.dispose) + asset.dispose(); + this.assets[path] = null; + }; + AssetManager.prototype.removeAll = function () { + for (var key in this.assets) { + var asset = this.assets[key]; + if (asset.dispose) + asset.dispose(); + } + this.assets = {}; + }; + AssetManager.prototype.isLoadingComplete = function () { + return this.toLoad == 0; + }; + AssetManager.prototype.getToLoad = function () { + return this.toLoad; + }; + AssetManager.prototype.getLoaded = function () { + return this.loaded; + }; + AssetManager.prototype.dispose = function () { + this.removeAll(); + }; + AssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + AssetManager.prototype.getErrors = function () { + return this.errors; + }; + return AssetManager; + }()); + spine.AssetManager = AssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AtlasAttachmentLoader = (function () { + function AtlasAttachmentLoader(atlas) { + this.atlas = atlas; + } + AtlasAttachmentLoader.prototype.newRegionAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.RegionAttachment(name); + attachment.setRegion(region); + return attachment; + }; + AtlasAttachmentLoader.prototype.newMeshAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.MeshAttachment(name); + attachment.region = region; + return attachment; + }; + AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function (skin, name) { + return new spine.BoundingBoxAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPathAttachment = function (skin, name) { + return new spine.PathAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPointAttachment = function (skin, name) { + return new spine.PointAttachment(name); + }; + AtlasAttachmentLoader.prototype.newClippingAttachment = function (skin, name) { + return new spine.ClippingAttachment(name); + }; + return AtlasAttachmentLoader; + }()); + spine.AtlasAttachmentLoader = AtlasAttachmentLoader; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BlendMode; + (function (BlendMode) { + BlendMode[BlendMode["Normal"] = 0] = "Normal"; + BlendMode[BlendMode["Additive"] = 1] = "Additive"; + BlendMode[BlendMode["Multiply"] = 2] = "Multiply"; + BlendMode[BlendMode["Screen"] = 3] = "Screen"; + })(BlendMode = spine.BlendMode || (spine.BlendMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Bone = (function () { + function Bone(data, skeleton, parent) { + this.children = new Array(); + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 0; + this.scaleY = 0; + this.shearX = 0; + this.shearY = 0; + this.ax = 0; + this.ay = 0; + this.arotation = 0; + this.ascaleX = 0; + this.ascaleY = 0; + this.ashearX = 0; + this.ashearY = 0; + this.appliedValid = false; + this.a = 0; + this.b = 0; + this.c = 0; + this.d = 0; + this.worldY = 0; + this.worldX = 0; + this.sorted = false; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.skeleton = skeleton; + this.parent = parent; + this.setToSetupPose(); + } + Bone.prototype.isActive = function () { + return this.active; + }; + Bone.prototype.update = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransform = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransformWith = function (x, y, rotation, scaleX, scaleY, shearX, shearY) { + this.ax = x; + this.ay = y; + this.arotation = rotation; + this.ascaleX = scaleX; + this.ascaleY = scaleY; + this.ashearX = shearX; + this.ashearY = shearY; + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + var skeleton = this.skeleton; + var rotationY = rotation + 90 + shearY; + var sx = skeleton.scaleX; + var sy = skeleton.scaleY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX * sx; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY * sx; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX * sy; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY * sy; + this.worldX = x * sx + skeleton.x; + this.worldY = y * sy + skeleton.y; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + this.worldX = pa * x + pb * y + parent.worldX; + this.worldY = pc * x + pd * y + parent.worldY; + switch (this.data.transformMode) { + case spine.TransformMode.Normal: { + var rotationY = rotation + 90 + shearY; + var la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(rotationY) * scaleY; + var lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(rotationY) * scaleY; + this.a = pa * la + pb * lc; + this.b = pa * lb + pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + return; + } + case spine.TransformMode.OnlyTranslation: { + var rotationY = rotation + 90 + shearY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY; + break; + } + case spine.TransformMode.NoRotationOrReflection: { + var s = pa * pa + pc * pc; + var prx = 0; + if (s > 0.0001) { + s = Math.abs(pa * pd - pb * pc) / s; + pa /= this.skeleton.scaleX; + pc /= this.skeleton.scaleY; + pb = pc * s; + pd = pa * s; + prx = Math.atan2(pc, pa) * spine.MathUtils.radDeg; + } + else { + pa = 0; + pc = 0; + prx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg; + } + var rx = rotation + shearX - prx; + var ry = rotation + shearY - prx + 90; + var la = spine.MathUtils.cosDeg(rx) * scaleX; + var lb = spine.MathUtils.cosDeg(ry) * scaleY; + var lc = spine.MathUtils.sinDeg(rx) * scaleX; + var ld = spine.MathUtils.sinDeg(ry) * scaleY; + this.a = pa * la - pb * lc; + this.b = pa * lb - pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + break; + } + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: { + var cos = spine.MathUtils.cosDeg(rotation); + var sin = spine.MathUtils.sinDeg(rotation); + var za = (pa * cos + pb * sin) / this.skeleton.scaleX; + var zc = (pc * cos + pd * sin) / this.skeleton.scaleY; + var s = Math.sqrt(za * za + zc * zc); + if (s > 0.00001) + s = 1 / s; + za *= s; + zc *= s; + s = Math.sqrt(za * za + zc * zc); + if (this.data.transformMode == spine.TransformMode.NoScale + && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) + s = -s; + var r = Math.PI / 2 + Math.atan2(zc, za); + var zb = Math.cos(r) * s; + var zd = Math.sin(r) * s; + var la = spine.MathUtils.cosDeg(shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY; + var lc = spine.MathUtils.sinDeg(shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY; + this.a = za * la + zb * lc; + this.b = za * lb + zb * ld; + this.c = zc * la + zd * lc; + this.d = zc * lb + zd * ld; + break; + } + } + this.a *= this.skeleton.scaleX; + this.b *= this.skeleton.scaleX; + this.c *= this.skeleton.scaleY; + this.d *= this.skeleton.scaleY; + }; + Bone.prototype.setToSetupPose = function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + this.shearX = data.shearX; + this.shearY = data.shearY; + }; + Bone.prototype.getWorldRotationX = function () { + return Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldRotationY = function () { + return Math.atan2(this.d, this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldScaleX = function () { + return Math.sqrt(this.a * this.a + this.c * this.c); + }; + Bone.prototype.getWorldScaleY = function () { + return Math.sqrt(this.b * this.b + this.d * this.d); + }; + Bone.prototype.updateAppliedTransform = function () { + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + this.ax = this.worldX; + this.ay = this.worldY; + this.arotation = Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c); + this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d); + this.ashearX = 0; + this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + var pid = 1 / (pa * pd - pb * pc); + var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY; + this.ax = (dx * pd * pid - dy * pb * pid); + this.ay = (dy * pa * pid - dx * pc * pid); + var ia = pid * pd; + var id = pid * pa; + var ib = pid * pb; + var ic = pid * pc; + var ra = ia * this.a - ib * this.c; + var rb = ia * this.b - ib * this.d; + var rc = id * this.c - ic * this.a; + var rd = id * this.d - ic * this.b; + this.ashearX = 0; + this.ascaleX = Math.sqrt(ra * ra + rc * rc); + if (this.ascaleX > 0.0001) { + var det = ra * rd - rb * rc; + this.ascaleY = det / this.ascaleX; + this.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg; + this.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg; + } + else { + this.ascaleX = 0; + this.ascaleY = Math.sqrt(rb * rb + rd * rd); + this.ashearY = 0; + this.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg; + } + }; + Bone.prototype.worldToLocal = function (world) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var invDet = 1 / (a * d - b * c); + var x = world.x - this.worldX, y = world.y - this.worldY; + world.x = (x * d * invDet - y * b * invDet); + world.y = (y * a * invDet - x * c * invDet); + return world; + }; + Bone.prototype.localToWorld = function (local) { + var x = local.x, y = local.y; + local.x = x * this.a + y * this.b + this.worldX; + local.y = x * this.c + y * this.d + this.worldY; + return local; + }; + Bone.prototype.worldToLocalRotation = function (worldRotation) { + var sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation); + return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg + this.rotation - this.shearX; + }; + Bone.prototype.localToWorldRotation = function (localRotation) { + localRotation -= this.rotation - this.shearX; + var sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation); + return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.rotateWorld = function (degrees) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees); + this.a = cos * a - sin * c; + this.b = cos * b - sin * d; + this.c = sin * a + cos * c; + this.d = sin * b + cos * d; + this.appliedValid = false; + }; + return Bone; + }()); + spine.Bone = Bone; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoneData = (function () { + function BoneData(index, name, parent) { + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 1; + this.scaleY = 1; + this.shearX = 0; + this.shearY = 0; + this.transformMode = TransformMode.Normal; + this.skinRequired = false; + this.color = new spine.Color(); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + this.index = index; + this.name = name; + this.parent = parent; + } + return BoneData; + }()); + spine.BoneData = BoneData; + var TransformMode; + (function (TransformMode) { + TransformMode[TransformMode["Normal"] = 0] = "Normal"; + TransformMode[TransformMode["OnlyTranslation"] = 1] = "OnlyTranslation"; + TransformMode[TransformMode["NoRotationOrReflection"] = 2] = "NoRotationOrReflection"; + TransformMode[TransformMode["NoScale"] = 3] = "NoScale"; + TransformMode[TransformMode["NoScaleOrReflection"] = 4] = "NoScaleOrReflection"; + })(TransformMode = spine.TransformMode || (spine.TransformMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var ConstraintData = (function () { + function ConstraintData(name, order, skinRequired) { + this.name = name; + this.order = order; + this.skinRequired = skinRequired; + } + return ConstraintData; + }()); + spine.ConstraintData = ConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Event = (function () { + function Event(time, data) { + if (data == null) + throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + return Event; + }()); + spine.Event = Event; +})(spine || (spine = {})); +var spine; +(function (spine) { + var EventData = (function () { + function EventData(name) { + this.name = name; + } + return EventData; + }()); + spine.EventData = EventData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraint = (function () { + function IkConstraint(data, skeleton) { + this.bendDirection = 0; + this.compress = false; + this.stretch = false; + this.mix = 1; + this.softness = 0; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + IkConstraint.prototype.isActive = function () { + return this.active; + }; + IkConstraint.prototype.apply = function () { + this.update(); + }; + IkConstraint.prototype.update = function () { + var target = this.target; + var bones = this.bones; + switch (bones.length) { + case 1: + this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); + break; + case 2: + this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix); + break; + } + }; + IkConstraint.prototype.apply1 = function (bone, targetX, targetY, compress, stretch, uniform, alpha) { + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var p = bone.parent; + var pa = p.a, pb = p.b, pc = p.c, pd = p.d; + var rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0; + switch (bone.data.transformMode) { + case spine.TransformMode.OnlyTranslation: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + break; + case spine.TransformMode.NoRotationOrReflection: + var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + var sa = pa / bone.skeleton.scaleX; + var sc = pc / bone.skeleton.scaleY; + pb = -sc * s * bone.skeleton.scaleX; + pd = sa * s * bone.skeleton.scaleY; + rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg; + default: + var x = targetX - p.worldX, y = targetY - p.worldY; + var d = pa * pd - pb * pc; + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + } + rotationIK += Math.atan2(ty, tx) * spine.MathUtils.radDeg; + if (bone.ascaleX < 0) + rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; + else if (rotationIK < -180) + rotationIK += 360; + var sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { + switch (bone.data.transformMode) { + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + } + var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty); + if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) { + var s = (dd / b - 1) * alpha + 1; + sx *= s; + if (uniform) + sy *= s; + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); + }; + IkConstraint.prototype.apply2 = function (parent, child, targetX, targetY, bendDir, stretch, softness, alpha) { + if (alpha == 0) { + child.updateWorldTransform(); + return; + } + if (!parent.appliedValid) + parent.updateAppliedTransform(); + if (!child.appliedValid) + child.updateAppliedTransform(); + var px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX; + var os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } + else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } + else + os2 = 0; + var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + var u = Math.abs(psx - psy) <= 0.0001; + if (!u) { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } + else { + cy = child.ay; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } + var pp = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; + if (l1 < 0.0001) { + this.apply1(parent, targetX, targetY, false, stretch, false, alpha); + child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + var dd = tx * tx + ty * ty; + if (softness != 0) { + softness *= psx * (csx + 1) / 2; + var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + var p = Math.min(1, sd / (softness * 2)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: if (u) { + l2 *= psx; + var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) + cos = -1; + else if (cos > 1) { + cos = 1; + if (stretch) + sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + } + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } + else { + a = psx * l2; + b = psy * l2; + var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + var c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + var q = Math.sqrt(d); + if (c1 < 0) + q = -q; + q = -(c1 + q) / 2; + var r0 = q / c2, r1 = c / q; + var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + if (r * r <= dd) { + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; + } + } + var minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; + } + } + if (dd <= (minDist + maxDist) / 2) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } + else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + var os = Math.atan2(cy, cx) * s2; + var rotation = parent.arotation; + a1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) + a1 += 360; + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0); + rotation = child.arotation; + a2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) + a2 += 360; + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + }; + return IkConstraint; + }()); + spine.IkConstraint = IkConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraintData = (function (_super) { + __extends(IkConstraintData, _super); + function IkConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.bendDirection = 1; + _this.compress = false; + _this.stretch = false; + _this.uniform = false; + _this.mix = 1; + _this.softness = 0; + return _this; + } + return IkConstraintData; + }(spine.ConstraintData)); + spine.IkConstraintData = IkConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraint = (function () { + function PathConstraint(data, skeleton) { + this.position = 0; + this.spacing = 0; + this.rotateMix = 0; + this.translateMix = 0; + this.spaces = new Array(); + this.positions = new Array(); + this.world = new Array(); + this.curves = new Array(); + this.lengths = new Array(); + this.segments = new Array(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0, n = data.bones.length; i < n; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findSlot(data.target.name); + this.position = data.position; + this.spacing = data.spacing; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + } + PathConstraint.prototype.isActive = function () { + return this.active; + }; + PathConstraint.prototype.apply = function () { + this.update(); + }; + PathConstraint.prototype.update = function () { + var attachment = this.target.getAttachment(); + if (!(attachment instanceof spine.PathAttachment)) + return; + var rotateMix = this.rotateMix, translateMix = this.translateMix; + var translate = translateMix > 0, rotate = rotateMix > 0; + if (!translate && !rotate) + return; + var data = this.data; + var percentSpacing = data.spacingMode == spine.SpacingMode.Percent; + var rotateMode = data.rotateMode; + var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; + var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + var bones = this.bones; + var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; + var spacing = this.spacing; + if (scale || !percentSpacing) { + if (scale) + lengths = spine.Utils.setArraySize(this.lengths, boneCount); + var lengthSpacing = data.spacingMode == spine.SpacingMode.Length; + for (var i = 0, n = spacesCount - 1; i < n;) { + var bone = bones[i]; + var setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + if (scale) + lengths[i] = 0; + spaces[++i] = 0; + } + else if (percentSpacing) { + if (scale) { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_1 = Math.sqrt(x * x + y * y); + lengths[i] = length_1; + } + spaces[++i] = spacing; + } + else { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_2 = Math.sqrt(x * x + y * y); + if (scale) + lengths[i] = length_2; + spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength; + } + } + } + else { + for (var i = 1; i < spacesCount; i++) + spaces[i] = spacing; + } + var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing); + var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + var tip = false; + if (offsetRotation == 0) + tip = rotateMode == spine.RotateMode.Chain; + else { + tip = false; + var p = this.target.bone; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + } + for (var i = 0, p = 3; i < boneCount; i++, p += 3) { + var bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * translateMix; + bone.worldY += (boneY - bone.worldY) * translateMix; + var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + var length_3 = lengths[i]; + if (length_3 != 0) { + var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * rotateMix + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + if (tangents) + r = positions[p - 1]; + else if (spaces[i + 1] == 0) + r = positions[p + 2]; + else + r = Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + var length_4 = bone.data.length; + boneX += (length_4 * (cos * a - sin * c) - dx) * rotateMix; + boneY += (length_4 * (sin * a + cos * c) - dy) * rotateMix; + } + else { + r += offsetRotation; + } + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.appliedValid = false; + } + }; + PathConstraint.prototype.computeWorldPositions = function (path, spacesCount, tangents, percentPosition, percentSpacing) { + var target = this.target; + var position = this.position; + var spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null; + var closed = path.closed; + var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE; + if (!path.constantSpeed) { + var lengths = path.lengths; + curveCount -= closed ? 1 : 2; + var pathLength_1 = lengths[curveCount]; + if (percentPosition) + position *= pathLength_1; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength_1; + } + world = spine.Utils.setArraySize(this.world, 8); + for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength_1; + if (p < 0) + p += pathLength_1; + curve = 0; + } + else if (p < 0) { + if (prevCurve != PathConstraint.BEFORE) { + prevCurve = PathConstraint.BEFORE; + path.computeWorldVertices(target, 2, 4, world, 0, 2); + } + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength_1) { + if (prevCurve != PathConstraint.AFTER) { + prevCurve = PathConstraint.AFTER; + path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength_1, world, 0, out, o); + continue; + } + for (;; curve++) { + var length_5 = lengths[curve]; + if (p > length_5) + continue; + if (curve == 0) + p /= length_5; + else { + var prev = lengths[curve - 1]; + p = (p - prev) / (length_5 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); + path.computeWorldVertices(target, 0, 4, world, 4, 2); + } + else + path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2); + } + this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0)); + } + return out; + } + if (closed) { + verticesLength += 2; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); + path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } + else { + curveCount--; + verticesLength -= 4; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + var curves = spine.Utils.setArraySize(this.curves, curveCount); + var pathLength = 0; + var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (var i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (percentPosition) + position *= pathLength; + else + position *= pathLength / path.lengths[curveCount - 1]; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength; + } + var segments = this.segments; + var curveLength = 0; + for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength; + if (p < 0) + p += pathLength; + curve = 0; + } + else if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + for (;; curve++) { + var length_6 = curves[curve]; + if (p > length_6) + continue; + if (curve == 0) + p /= length_6; + else { + var prev = curves[curve - 1]; + p = (p - prev) / (length_6 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + var ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + p *= curveLength; + for (;; segment++) { + var length_7 = segments[segment]; + if (p > length_7) + continue; + if (segment == 0) + p /= length_7; + else { + var prev = segments[segment - 1]; + p = segment + (p - prev) / (length_7 - prev); + } + break; + } + this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); + } + return out; + }; + PathConstraint.prototype.addBeforePosition = function (p, temp, i, out, o) { + var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addAfterPosition = function (p, temp, i, out, o) { + var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addCurvePosition = function (p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { + if (p == 0 || isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + var ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) { + if (p < 0.001) + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + else + out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + }; + PathConstraint.NONE = -1; + PathConstraint.BEFORE = -2; + PathConstraint.AFTER = -3; + PathConstraint.epsilon = 0.00001; + return PathConstraint; + }()); + spine.PathConstraint = PathConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraintData = (function (_super) { + __extends(PathConstraintData, _super); + function PathConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + return _this; + } + return PathConstraintData; + }(spine.ConstraintData)); + spine.PathConstraintData = PathConstraintData; + var PositionMode; + (function (PositionMode) { + PositionMode[PositionMode["Fixed"] = 0] = "Fixed"; + PositionMode[PositionMode["Percent"] = 1] = "Percent"; + })(PositionMode = spine.PositionMode || (spine.PositionMode = {})); + var SpacingMode; + (function (SpacingMode) { + SpacingMode[SpacingMode["Length"] = 0] = "Length"; + SpacingMode[SpacingMode["Fixed"] = 1] = "Fixed"; + SpacingMode[SpacingMode["Percent"] = 2] = "Percent"; + })(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {})); + var RotateMode; + (function (RotateMode) { + RotateMode[RotateMode["Tangent"] = 0] = "Tangent"; + RotateMode[RotateMode["Chain"] = 1] = "Chain"; + RotateMode[RotateMode["ChainScale"] = 2] = "ChainScale"; + })(RotateMode = spine.RotateMode || (spine.RotateMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Assets = (function () { + function Assets(clientId) { + this.toLoad = new Array(); + this.assets = {}; + this.clientId = clientId; + } + Assets.prototype.loaded = function () { + var i = 0; + for (var v in this.assets) + i++; + return i; + }; + return Assets; + }()); + var SharedAssetManager = (function () { + function SharedAssetManager(pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.clientAssets = {}; + this.queuedAssets = {}; + this.rawAssets = {}; + this.errors = {}; + this.pathPrefix = pathPrefix; + } + SharedAssetManager.prototype.queueAsset = function (clientId, textureLoader, path) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) { + clientAssets = new Assets(clientId); + this.clientAssets[clientId] = clientAssets; + } + if (textureLoader !== null) + clientAssets.textureLoader = textureLoader; + clientAssets.toLoad.push(path); + if (this.queuedAssets[path] === path) { + return false; + } + else { + this.queuedAssets[path] = path; + return true; + } + }; + SharedAssetManager.prototype.loadText = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = request.responseText; + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadJson = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = JSON.parse(request.responseText); + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadTexture = function (clientId, textureLoader, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, textureLoader, path)) + return; + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + if (isWebWorker) { + var options = { mode: "cors" }; + fetch(path, options).then(function (response) { + if (!response.ok) { + _this.errors[path] = "Couldn't load image " + path; + } + return response.blob(); + }).then(function (blob) { + return createImageBitmap(blob, { + premultiplyAlpha: 'none', + colorSpaceConversion: 'none' + }); + }).then(function (bitmap) { + _this.rawAssets[path] = bitmap; + }); + } + else { + var img_1 = new Image(); + img_1.crossOrigin = "anonymous"; + img_1.onload = function (ev) { + _this.rawAssets[path] = img_1; + }; + img_1.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + }; + img_1.src = path; + } + }; + SharedAssetManager.prototype.get = function (clientId, path) { + path = this.pathPrefix + path; + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + return clientAssets.assets[path]; + }; + SharedAssetManager.prototype.updateClientAssets = function (clientAssets) { + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + for (var i = 0; i < clientAssets.toLoad.length; i++) { + var path = clientAssets.toLoad[i]; + var asset = clientAssets.assets[path]; + if (asset === null || asset === undefined) { + var rawAsset = this.rawAssets[path]; + if (rawAsset === null || rawAsset === undefined) + continue; + if (isWebWorker) { + if (rawAsset instanceof ImageBitmap) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + else { + if (rawAsset instanceof HTMLImageElement) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + } + } + }; + SharedAssetManager.prototype.isLoadingComplete = function (clientId) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + this.updateClientAssets(clientAssets); + return clientAssets.toLoad.length == clientAssets.loaded(); + }; + SharedAssetManager.prototype.dispose = function () { + }; + SharedAssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + SharedAssetManager.prototype.getErrors = function () { + return this.errors; + }; + return SharedAssetManager; + }()); + spine.SharedAssetManager = SharedAssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Skeleton = (function () { + function Skeleton(data) { + this._updateCache = new Array(); + this.updateCacheReset = new Array(); + this.time = 0; + this.scaleX = 1; + this.scaleY = 1; + this.x = 0; + this.y = 0; + if (data == null) + throw new Error("data cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) { + var boneData = data.bones[i]; + var bone = void 0; + if (boneData.parent == null) + bone = new spine.Bone(boneData, this, null); + else { + var parent_1 = this.bones[boneData.parent.index]; + bone = new spine.Bone(boneData, this, parent_1); + parent_1.children.push(bone); + } + this.bones.push(bone); + } + this.slots = new Array(); + this.drawOrder = new Array(); + for (var i = 0; i < data.slots.length; i++) { + var slotData = data.slots[i]; + var bone = this.bones[slotData.boneData.index]; + var slot = new spine.Slot(slotData, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } + this.ikConstraints = new Array(); + for (var i = 0; i < data.ikConstraints.length; i++) { + var ikConstraintData = data.ikConstraints[i]; + this.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this)); + } + this.transformConstraints = new Array(); + for (var i = 0; i < data.transformConstraints.length; i++) { + var transformConstraintData = data.transformConstraints[i]; + this.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this)); + } + this.pathConstraints = new Array(); + for (var i = 0; i < data.pathConstraints.length; i++) { + var pathConstraintData = data.pathConstraints[i]; + this.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this)); + } + this.color = new spine.Color(1, 1, 1, 1); + this.updateCache(); + } + Skeleton.prototype.updateCache = function () { + var updateCache = this._updateCache; + updateCache.length = 0; + this.updateCacheReset.length = 0; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + } + if (this.skin != null) { + var skinBones = this.skin.bones; + for (var i = 0, n = this.skin.bones.length; i < n; i++) { + var bone = this.bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (bone != null); + } + } + var ikConstraints = this.ikConstraints; + var transformConstraints = this.transformConstraints; + var pathConstraints = this.pathConstraints; + var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length; + var constraintCount = ikCount + transformCount + pathCount; + outer: for (var i = 0; i < constraintCount; i++) { + for (var ii = 0; ii < ikCount; ii++) { + var constraint = ikConstraints[ii]; + if (constraint.data.order == i) { + this.sortIkConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < transformCount; ii++) { + var constraint = transformConstraints[ii]; + if (constraint.data.order == i) { + this.sortTransformConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < pathCount; ii++) { + var constraint = pathConstraints[ii]; + if (constraint.data.order == i) { + this.sortPathConstraint(constraint); + continue outer; + } + } + } + for (var i = 0, n = bones.length; i < n; i++) + this.sortBone(bones[i]); + }; + Skeleton.prototype.sortIkConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var target = constraint.target; + this.sortBone(target); + var constrained = constraint.bones; + var parent = constrained[0]; + this.sortBone(parent); + if (constrained.length > 1) { + var child = constrained[constrained.length - 1]; + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + this._updateCache.push(constraint); + this.sortReset(parent.children); + constrained[constrained.length - 1].sorted = true; + }; + Skeleton.prototype.sortPathConstraint = function (constraint) { + constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var slot = constraint.target; + var slotIndex = slot.data.index; + var slotBone = slot.bone; + if (this.skin != null) + this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); + if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin) + this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); + for (var i = 0, n = this.data.skins.length; i < n; i++) + this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); + var attachment = slot.getAttachment(); + if (attachment instanceof spine.PathAttachment) + this.sortPathConstraintAttachmentWith(attachment, slotBone); + var constrained = constraint.bones; + var boneCount = constrained.length; + for (var i = 0; i < boneCount; i++) + this.sortBone(constrained[i]); + this._updateCache.push(constraint); + for (var i = 0; i < boneCount; i++) + this.sortReset(constrained[i].children); + for (var i = 0; i < boneCount; i++) + constrained[i].sorted = true; + }; + Skeleton.prototype.sortTransformConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + this.sortBone(constraint.target); + var constrained = constraint.bones; + var boneCount = constrained.length; + if (constraint.data.local) { + for (var i = 0; i < boneCount; i++) { + var child = constrained[i]; + this.sortBone(child.parent); + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + } + else { + for (var i = 0; i < boneCount; i++) { + this.sortBone(constrained[i]); + } + } + this._updateCache.push(constraint); + for (var ii = 0; ii < boneCount; ii++) + this.sortReset(constrained[ii].children); + for (var ii = 0; ii < boneCount; ii++) + constrained[ii].sorted = true; + }; + Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) { + var attachments = skin.attachments[slotIndex]; + if (!attachments) + return; + for (var key in attachments) { + this.sortPathConstraintAttachmentWith(attachments[key], slotBone); + } + }; + Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) { + if (!(attachment instanceof spine.PathAttachment)) + return; + var pathBones = attachment.bones; + if (pathBones == null) + this.sortBone(slotBone); + else { + var bones = this.bones; + var i = 0; + while (i < pathBones.length) { + var boneCount = pathBones[i++]; + for (var n = i + boneCount; i < n; i++) { + var boneIndex = pathBones[i]; + this.sortBone(bones[boneIndex]); + } + } + } + }; + Skeleton.prototype.sortBone = function (bone) { + if (bone.sorted) + return; + var parent = bone.parent; + if (parent != null) + this.sortBone(parent); + bone.sorted = true; + this._updateCache.push(bone); + }; + Skeleton.prototype.sortReset = function (bones) { + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.active) + continue; + if (bone.sorted) + this.sortReset(bone.children); + bone.sorted = false; + } + }; + Skeleton.prototype.updateWorldTransform = function () { + var updateCacheReset = this.updateCacheReset; + for (var i = 0, n = updateCacheReset.length; i < n; i++) { + var bone = updateCacheReset[i]; + bone.ax = bone.x; + bone.ay = bone.y; + bone.arotation = bone.rotation; + bone.ascaleX = bone.scaleX; + bone.ascaleY = bone.scaleY; + bone.ashearX = bone.shearX; + bone.ashearY = bone.shearY; + bone.appliedValid = true; + } + var updateCache = this._updateCache; + for (var i = 0, n = updateCache.length; i < n; i++) + updateCache[i].update(); + }; + Skeleton.prototype.setToSetupPose = function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }; + Skeleton.prototype.setBonesToSetupPose = function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + var data = constraint.data; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + } + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + var data = constraint.data; + constraint.position = data.position; + constraint.spacing = data.spacing; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + } + }; + Skeleton.prototype.setSlotsToSetupPose = function () { + var slots = this.slots; + spine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length); + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(); + }; + Skeleton.prototype.getRootBone = function () { + if (this.bones.length == 0) + return null; + return this.bones[0]; + }; + Skeleton.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.data.name == boneName) + return bone; + } + return null; + }; + Skeleton.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) + return i; + return -1; + }; + Skeleton.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) + return slot; + } + return null; + }; + Skeleton.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) + return i; + return -1; + }; + Skeleton.prototype.setSkinByName = function (skinName) { + var skin = this.data.findSkin(skinName); + if (skin == null) + throw new Error("Skin not found: " + skinName); + this.setSkin(skin); + }; + Skeleton.prototype.setSkin = function (newSkin) { + if (newSkin == this.skin) + return; + if (newSkin != null) { + if (this.skin != null) + newSkin.attachAll(this, this.skin); + else { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var name_1 = slot.data.attachmentName; + if (name_1 != null) { + var attachment = newSkin.getAttachment(i, name_1); + if (attachment != null) + slot.setAttachment(attachment); + } + } + } + } + this.skin = newSkin; + this.updateCache(); + }; + Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) { + return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName); + }; + Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) { + if (attachmentName == null) + throw new Error("attachmentName cannot be null."); + if (this.skin != null) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment != null) + return attachment; + } + if (this.data.defaultSkin != null) + return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }; + Skeleton.prototype.setAttachment = function (slotName, attachmentName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName != null) { + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) + throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); + } + slot.setAttachment(attachment); + return; + } + } + throw new Error("Slot not found: " + slotName); + }; + Skeleton.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var ikConstraint = ikConstraints[i]; + if (ikConstraint.data.name == constraintName) + return ikConstraint; + } + return null; + }; + Skeleton.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.getBounds = function (offset, size, temp) { + if (temp === void 0) { temp = new Array(2); } + if (offset == null) + throw new Error("offset cannot be null."); + if (size == null) + throw new Error("size cannot be null."); + var drawOrder = this.drawOrder; + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + if (!slot.bone.active) + continue; + var verticesLength = 0; + var vertices = null; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.RegionAttachment) { + verticesLength = 8; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + attachment.computeWorldVertices(slot.bone, vertices, 0, 2); + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + verticesLength = mesh.worldVerticesLength; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); + } + if (vertices != null) { + for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) { + var x = vertices[ii], y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + } + offset.set(minX, minY); + size.set(maxX - minX, maxY - minY); + }; + Skeleton.prototype.update = function (delta) { + this.time += delta; + }; + return Skeleton; + }()); + spine.Skeleton = Skeleton; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBinary = (function () { + function SkeletonBinary(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonBinary.prototype.readSkeletonData = function (binary) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + skeletonData.name = ""; + var input = new BinaryInput(binary); + skeletonData.hash = input.readString(); + skeletonData.version = input.readString(); + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + var nonessential = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + var n = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) + input.strings.push(input.readString()); + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var name_2 = input.readString(); + var parent_2 = i == 0 ? null : skeletonData.bones[input.readInt(true)]; + var data = new spine.BoneData(i, name_2, parent_2); + data.rotation = input.readFloat(); + data.x = input.readFloat() * scale; + data.y = input.readFloat() * scale; + data.scaleX = input.readFloat(); + data.scaleY = input.readFloat(); + data.shearX = input.readFloat(); + data.shearY = input.readFloat(); + data.length = input.readFloat() * scale; + data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)]; + data.skinRequired = input.readBoolean(); + if (nonessential) + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + skeletonData.bones.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var slotName = input.readString(); + var boneData = skeletonData.bones[input.readInt(true)]; + var data = new spine.SlotData(i, slotName, boneData); + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + var darkColor = input.readInt32(); + if (darkColor != -1) + spine.Color.rgb888ToColor(data.darkColor = new spine.Color(), darkColor); + data.attachmentName = input.readStringRef(); + data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)]; + skeletonData.slots.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.IkConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.mix = input.readFloat(); + data.softness = input.readFloat() * scale; + data.bendDirection = input.readByte(); + data.compress = input.readBoolean(); + data.stretch = input.readBoolean(); + data.uniform = input.readBoolean(); + skeletonData.ikConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.TransformConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.local = input.readBoolean(); + data.relative = input.readBoolean(); + data.offsetRotation = input.readFloat(); + data.offsetX = input.readFloat() * scale; + data.offsetY = input.readFloat() * scale; + data.offsetScaleX = input.readFloat(); + data.offsetScaleY = input.readFloat(); + data.offsetShearY = input.readFloat(); + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + data.scaleMix = input.readFloat(); + data.shearMix = input.readFloat(); + skeletonData.transformConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.PathConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.slots[input.readInt(true)]; + data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)]; + data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)]; + data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)]; + data.offsetRotation = input.readFloat(); + data.position = input.readFloat(); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = input.readFloat(); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + skeletonData.pathConstraints.push(data); + } + var defaultSkin = this.readSkin(input, skeletonData, true, nonessential); + if (defaultSkin != null) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + { + var i = skeletonData.skins.length; + spine.Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true)); + for (; i < n; i++) + skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential); + } + n = this.linkedMeshes.length; + for (var i = 0; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_3 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_3 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_3); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var data = new spine.EventData(input.readStringRef()); + data.intValue = input.readInt(false); + data.floatValue = input.readFloat(); + data.stringValue = input.readString(); + data.audioPath = input.readString(); + if (data.audioPath != null) { + data.volume = input.readFloat(); + data.balance = input.readFloat(); + } + skeletonData.events.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) + skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData)); + return skeletonData; + }; + SkeletonBinary.prototype.readSkin = function (input, skeletonData, defaultSkin, nonessential) { + var skin = null; + var slotCount = 0; + if (defaultSkin) { + slotCount = input.readInt(true); + if (slotCount == 0) + return null; + skin = new spine.Skin("default"); + } + else { + skin = new spine.Skin(input.readStringRef()); + skin.bones.length = input.readInt(true); + for (var i = 0, n = skin.bones.length; i < n; i++) + skin.bones[i] = skeletonData.bones[input.readInt(true)]; + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]); + slotCount = input.readInt(true); + } + for (var i = 0; i < slotCount; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var name_3 = input.readStringRef(); + var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_3, nonessential); + if (attachment != null) + skin.setAttachment(slotIndex, name_3, attachment); + } + } + return skin; + }; + SkeletonBinary.prototype.readAttachment = function (input, skeletonData, skin, slotIndex, attachmentName, nonessential) { + var scale = this.scale; + var name = input.readStringRef(); + if (name == null) + name = attachmentName; + var typeIndex = input.readByte(); + var type = SkeletonBinary.AttachmentTypeValues[typeIndex]; + switch (type) { + case spine.AttachmentType.Region: { + var path = input.readStringRef(); + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var scaleX = input.readFloat(); + var scaleY = input.readFloat(); + var width = input.readFloat(); + var height = input.readFloat(); + var color = input.readInt32(); + if (path == null) + path = name; + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = x * scale; + region.y = y * scale; + region.scaleX = scaleX; + region.scaleY = scaleY; + region.rotation = rotation; + region.width = width * scale; + region.height = height * scale; + spine.Color.rgba8888ToColor(region.color, color); + region.updateOffset(); + return region; + } + case spine.AttachmentType.BoundingBox: { + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + box.worldVerticesLength = vertexCount << 1; + box.vertices = vertices.vertices; + box.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(box.color, color); + return box; + } + case spine.AttachmentType.Mesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var vertexCount = input.readInt(true); + var uvs = this.readFloatArray(input, vertexCount << 1, 1); + var triangles = this.readShortArray(input); + var vertices = this.readVertices(input, vertexCount); + var hullLength = input.readInt(true); + var edges = null; + var width = 0, height = 0; + if (nonessential) { + edges = this.readShortArray(input); + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertexCount << 1; + mesh.triangles = triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.hullLength = hullLength << 1; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + return mesh; + } + case spine.AttachmentType.LinkedMesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var skinName = input.readStringRef(); + var parent_4 = input.readStringRef(); + var inheritDeform = input.readBoolean(); + var width = 0, height = 0; + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_4, inheritDeform)); + return mesh; + } + case spine.AttachmentType.Path: { + var closed_1 = input.readBoolean(); + var constantSpeed = input.readBoolean(); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0, n = lengths.length; i < n; i++) + lengths[i] = input.readFloat() * scale; + var color = nonessential ? input.readInt32() : 0; + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = closed_1; + path.constantSpeed = constantSpeed; + path.worldVerticesLength = vertexCount << 1; + path.vertices = vertices.vertices; + path.bones = vertices.bones; + path.lengths = lengths; + if (nonessential) + spine.Color.rgba8888ToColor(path.color, color); + return path; + } + case spine.AttachmentType.Point: { + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var color = nonessential ? input.readInt32() : 0; + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + if (nonessential) + spine.Color.rgba8888ToColor(point.color, color); + return point; + } + case spine.AttachmentType.Clipping: { + var endSlotIndex = input.readInt(true); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.worldVerticesLength = vertexCount << 1; + clip.vertices = vertices.vertices; + clip.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(clip.color, color); + return clip; + } + } + return null; + }; + SkeletonBinary.prototype.readVertices = function (input, vertexCount) { + var verticesLength = vertexCount << 1; + var vertices = new Vertices(); + var scale = this.scale; + if (!input.readBoolean()) { + vertices.vertices = this.readFloatArray(input, verticesLength, scale); + return vertices; + } + var weights = new Array(); + var bonesArray = new Array(); + for (var i = 0; i < vertexCount; i++) { + var boneCount = input.readInt(true); + bonesArray.push(boneCount); + for (var ii = 0; ii < boneCount; ii++) { + bonesArray.push(input.readInt(true)); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat()); + } + } + vertices.vertices = spine.Utils.toFloatArray(weights); + vertices.bones = bonesArray; + return vertices; + }; + SkeletonBinary.prototype.readFloatArray = function (input, n, scale) { + var array = new Array(n); + if (scale == 1) { + for (var i = 0; i < n; i++) + array[i] = input.readFloat(); + } + else { + for (var i = 0; i < n; i++) + array[i] = input.readFloat() * scale; + } + return array; + }; + SkeletonBinary.prototype.readShortArray = function (input) { + var n = input.readInt(true); + var array = new Array(n); + for (var i = 0; i < n; i++) + array[i] = input.readShort(); + return array; + }; + SkeletonBinary.prototype.readAnimation = function (input, name, skeletonData) { + var timelines = new Array(); + var scale = this.scale; + var duration = 0; + var tempColor1 = new spine.Color(); + var tempColor2 = new spine.Color(); + for (var i = 0, n = input.readInt(true); i < n; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.SLOT_ATTACHMENT: { + var timeline = new spine.AttachmentTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) + timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef()); + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + break; + } + case SkeletonBinary.SLOT_COLOR: { + var timeline = new spine.ColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.ColorTimeline.ENTRIES]); + break; + } + case SkeletonBinary.SLOT_TWO_COLOR: { + var timeline = new spine.TwoColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + spine.Color.rgb888ToColor(tempColor2, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TwoColorTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var boneIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.BONE_ROTATE: { + var timeline = new spine.RotateTimeline(frameCount); + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.RotateTimeline.ENTRIES]); + break; + } + case SkeletonBinary.BONE_TRANSLATE: + case SkeletonBinary.BONE_SCALE: + case SkeletonBinary.BONE_SHEAR: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.BONE_SCALE) + timeline = new spine.ScaleTimeline(frameCount); + else if (timelineType == SkeletonBinary.BONE_SHEAR) + timeline = new spine.ShearTimeline(frameCount); + else { + timeline = new spine.TranslateTimeline(frameCount); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TranslateTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.IkConstraintTimeline(frameCount); + timeline.ikConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.TransformConstraintTimeline(frameCount); + timeline.transformConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var data = skeletonData.pathConstraints[index]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.PATH_POSITION: + case SkeletonBinary.PATH_SPACING: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.PATH_SPACING) { + timeline = new spine.PathConstraintSpacingTimeline(frameCount); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(frameCount); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + break; + } + case SkeletonBinary.PATH_MIX: { + var timeline = new spine.PathConstraintMixTimeline(frameCount); + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var skin = skeletonData.skins[input.readInt(true)]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var slotIndex = input.readInt(true); + for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { + var attachment = skin.getAttachment(slotIndex, input.readStringRef()); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var frameCount = input.readInt(true); + var timeline = new spine.DeformTimeline(frameCount); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + var deform = void 0; + var end = input.readInt(true); + if (end == 0) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = input.readInt(true); + end += start; + if (scale == 1) { + for (var v = start; v < end; v++) + deform[v] = input.readFloat(); + } + else { + for (var v = start; v < end; v++) + deform[v] = input.readFloat() * scale; + } + if (!weighted) { + for (var v = 0, vn = deform.length; v < vn; v++) + deform[v] += vertices[v]; + } + } + timeline.setFrame(frameIndex, time, deform); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + } + } + } + var drawOrderCount = input.readInt(true); + if (drawOrderCount > 0) { + var timeline = new spine.DrawOrderTimeline(drawOrderCount); + var slotCount = skeletonData.slots.length; + for (var i = 0; i < drawOrderCount; i++) { + var time = input.readFloat(); + var offsetCount = input.readInt(true); + var drawOrder = spine.Utils.newArray(slotCount, 0); + for (var ii = slotCount - 1; ii >= 0; ii--) + drawOrder[ii] = -1; + var unchanged = spine.Utils.newArray(slotCount - offsetCount, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var ii = 0; ii < offsetCount; ii++) { + var slotIndex = input.readInt(true); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + input.readInt(true)] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var ii = slotCount - 1; ii >= 0; ii--) + if (drawOrder[ii] == -1) + drawOrder[ii] = unchanged[--unchangedIndex]; + timeline.setFrame(i, time, drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[drawOrderCount - 1]); + } + var eventCount = input.readInt(true); + if (eventCount > 0) { + var timeline = new spine.EventTimeline(eventCount); + for (var i = 0; i < eventCount; i++) { + var time = input.readFloat(); + var eventData = skeletonData.events[input.readInt(true)]; + var event_4 = new spine.Event(time, eventData); + event_4.intValue = input.readInt(false); + event_4.floatValue = input.readFloat(); + event_4.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue; + if (event_4.data.audioPath != null) { + event_4.volume = input.readFloat(); + event_4.balance = input.readFloat(); + } + timeline.setFrame(i, event_4); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[eventCount - 1]); + } + return new spine.Animation(name, timelines, duration); + }; + SkeletonBinary.prototype.readCurve = function (input, frameIndex, timeline) { + switch (input.readByte()) { + case SkeletonBinary.CURVE_STEPPED: + timeline.setStepped(frameIndex); + break; + case SkeletonBinary.CURVE_BEZIER: + this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + break; + } + }; + SkeletonBinary.prototype.setCurve = function (timeline, frameIndex, cx1, cy1, cx2, cy2) { + timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2); + }; + SkeletonBinary.AttachmentTypeValues = [0, 1, 2, 3, 4, 5, 6]; + SkeletonBinary.TransformModeValues = [spine.TransformMode.Normal, spine.TransformMode.OnlyTranslation, spine.TransformMode.NoRotationOrReflection, spine.TransformMode.NoScale, spine.TransformMode.NoScaleOrReflection]; + SkeletonBinary.PositionModeValues = [spine.PositionMode.Fixed, spine.PositionMode.Percent]; + SkeletonBinary.SpacingModeValues = [spine.SpacingMode.Length, spine.SpacingMode.Fixed, spine.SpacingMode.Percent]; + SkeletonBinary.RotateModeValues = [spine.RotateMode.Tangent, spine.RotateMode.Chain, spine.RotateMode.ChainScale]; + SkeletonBinary.BlendModeValues = [spine.BlendMode.Normal, spine.BlendMode.Additive, spine.BlendMode.Multiply, spine.BlendMode.Screen]; + SkeletonBinary.BONE_ROTATE = 0; + SkeletonBinary.BONE_TRANSLATE = 1; + SkeletonBinary.BONE_SCALE = 2; + SkeletonBinary.BONE_SHEAR = 3; + SkeletonBinary.SLOT_ATTACHMENT = 0; + SkeletonBinary.SLOT_COLOR = 1; + SkeletonBinary.SLOT_TWO_COLOR = 2; + SkeletonBinary.PATH_POSITION = 0; + SkeletonBinary.PATH_SPACING = 1; + SkeletonBinary.PATH_MIX = 2; + SkeletonBinary.CURVE_LINEAR = 0; + SkeletonBinary.CURVE_STEPPED = 1; + SkeletonBinary.CURVE_BEZIER = 2; + return SkeletonBinary; + }()); + spine.SkeletonBinary = SkeletonBinary; + var BinaryInput = (function () { + function BinaryInput(data, strings, index, buffer) { + if (strings === void 0) { strings = new Array(); } + if (index === void 0) { index = 0; } + if (buffer === void 0) { buffer = new DataView(data.buffer); } + this.strings = strings; + this.index = index; + this.buffer = buffer; + } + BinaryInput.prototype.readByte = function () { + return this.buffer.getInt8(this.index++); + }; + BinaryInput.prototype.readShort = function () { + var value = this.buffer.getInt16(this.index); + this.index += 2; + return value; + }; + BinaryInput.prototype.readInt32 = function () { + var value = this.buffer.getInt32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readInt = function (optimizePositive) { + var b = this.readByte(); + var result = b & 0x7F; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 7; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 14; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 21; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 28; + } + } + } + } + return optimizePositive ? result : ((result >>> 1) ^ -(result & 1)); + }; + BinaryInput.prototype.readStringRef = function () { + var index = this.readInt(true); + return index == 0 ? null : this.strings[index - 1]; + }; + BinaryInput.prototype.readString = function () { + var byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + case 1: + return ""; + } + byteCount--; + var chars = ""; + var charCount = 0; + for (var i = 0; i < byteCount;) { + var b = this.readByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F)); + i += 2; + break; + case 14: + chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F)); + i += 3; + break; + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + }; + BinaryInput.prototype.readFloat = function () { + var value = this.buffer.getFloat32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readBoolean = function () { + return this.readByte() != 0; + }; + return BinaryInput; + }()); + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); + var Vertices = (function () { + function Vertices(bones, vertices) { + if (bones === void 0) { bones = null; } + if (vertices === void 0) { vertices = null; } + this.bones = bones; + this.vertices = vertices; + } + return Vertices; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBounds = (function () { + function SkeletonBounds() { + this.minX = 0; + this.minY = 0; + this.maxX = 0; + this.maxY = 0; + this.boundingBoxes = new Array(); + this.polygons = new Array(); + this.polygonPool = new spine.Pool(function () { + return spine.Utils.newFloatArray(16); + }); + } + SkeletonBounds.prototype.update = function (skeleton, updateAabb) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + var boundingBoxes = this.boundingBoxes; + var polygons = this.polygons; + var polygonPool = this.polygonPool; + var slots = skeleton.slots; + var slotCount = slots.length; + boundingBoxes.length = 0; + polygonPool.freeAll(polygons); + polygons.length = 0; + for (var i = 0; i < slotCount; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.BoundingBoxAttachment) { + var boundingBox = attachment; + boundingBoxes.push(boundingBox); + var polygon = polygonPool.obtain(); + if (polygon.length != boundingBox.worldVerticesLength) { + polygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength); + } + polygons.push(polygon); + boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2); + } + } + if (updateAabb) { + this.aabbCompute(); + } + else { + this.minX = Number.POSITIVE_INFINITY; + this.minY = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.maxY = Number.NEGATIVE_INFINITY; + } + }; + SkeletonBounds.prototype.aabbCompute = function () { + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) { + var polygon = polygons[i]; + var vertices = polygon; + for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) { + var x = vertices[ii]; + var y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + }; + SkeletonBounds.prototype.aabbContainsPoint = function (x, y) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + }; + SkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) { + var minX = this.minX; + var minY = this.minY; + var maxX = this.maxX; + var maxY = this.maxY; + if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY)) + return false; + var m = (y2 - y1) / (x2 - x1); + var y = m * (minX - x1) + y1; + if (y > minY && y < maxY) + return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) + return true; + var x = (minY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + return false; + }; + SkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + }; + SkeletonBounds.prototype.containsPoint = function (x, y) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.containsPointPolygon(polygons[i], x, y)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) { + var vertices = polygon; + var nn = polygon.length; + var prevIndex = nn - 2; + var inside = false; + for (var ii = 0; ii < nn; ii += 2) { + var vertexY = vertices[ii + 1]; + var prevY = vertices[prevIndex + 1]; + if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) { + var vertexX = vertices[ii]; + if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) + inside = !inside; + } + prevIndex = ii; + } + return inside; + }; + SkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) { + var vertices = polygon; + var nn = polygon.length; + var width12 = x1 - x2, height12 = y1 - y2; + var det1 = x1 * y2 - y1 * x2; + var x3 = vertices[nn - 2], y3 = vertices[nn - 1]; + for (var ii = 0; ii < nn; ii += 2) { + var x4 = vertices[ii], y4 = vertices[ii + 1]; + var det2 = x3 * y4 - y3 * x4; + var width34 = x3 - x4, height34 = y3 - y4; + var det3 = width12 * height34 - height12 * width34; + var x = (det1 * width34 - width12 * det2) / det3; + if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) { + var y = (det1 * height34 - height12 * det2) / det3; + if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1))) + return true; + } + x3 = x4; + y3 = y4; + } + return false; + }; + SkeletonBounds.prototype.getPolygon = function (boundingBox) { + if (boundingBox == null) + throw new Error("boundingBox cannot be null."); + var index = this.boundingBoxes.indexOf(boundingBox); + return index == -1 ? null : this.polygons[index]; + }; + SkeletonBounds.prototype.getWidth = function () { + return this.maxX - this.minX; + }; + SkeletonBounds.prototype.getHeight = function () { + return this.maxY - this.minY; + }; + return SkeletonBounds; + }()); + spine.SkeletonBounds = SkeletonBounds; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonClipping = (function () { + function SkeletonClipping() { + this.triangulator = new spine.Triangulator(); + this.clippingPolygon = new Array(); + this.clipOutput = new Array(); + this.clippedVertices = new Array(); + this.clippedTriangles = new Array(); + this.scratch = new Array(); + } + SkeletonClipping.prototype.clipStart = function (slot, clip) { + if (this.clipAttachment != null) + return 0; + this.clipAttachment = clip; + var n = clip.worldVerticesLength; + var vertices = spine.Utils.setArraySize(this.clippingPolygon, n); + clip.computeWorldVertices(slot, 0, n, vertices, 0, 2); + var clippingPolygon = this.clippingPolygon; + SkeletonClipping.makeClockwise(clippingPolygon); + var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)); + for (var i = 0, n_2 = clippingPolygons.length; i < n_2; i++) { + var polygon = clippingPolygons[i]; + SkeletonClipping.makeClockwise(polygon); + polygon.push(polygon[0]); + polygon.push(polygon[1]); + } + return clippingPolygons.length; + }; + SkeletonClipping.prototype.clipEndWithSlot = function (slot) { + if (this.clipAttachment != null && this.clipAttachment.endSlot == slot.data) + this.clipEnd(); + }; + SkeletonClipping.prototype.clipEnd = function () { + if (this.clipAttachment == null) + return; + this.clipAttachment = null; + this.clippingPolygons = null; + this.clippedVertices.length = 0; + this.clippedTriangles.length = 0; + this.clippingPolygon.length = 0; + }; + SkeletonClipping.prototype.isClipping = function () { + return this.clipAttachment != null; + }; + SkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) { + var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; + var clippedTriangles = this.clippedTriangles; + var polygons = this.clippingPolygons; + var polygonsCount = this.clippingPolygons.length; + var vertexSize = twoColor ? 12 : 8; + var index = 0; + clippedVertices.length = 0; + clippedTriangles.length = 0; + outer: for (var i = 0; i < trianglesLength; i += 3) { + var vertexOffset = triangles[i] << 1; + var x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; + var u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 1] << 1; + var x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1]; + var u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 2] << 1; + var x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1]; + var u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1]; + for (var p = 0; p < polygonsCount; p++) { + var s = clippedVertices.length; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { + var clipOutputLength = clipOutput.length; + if (clipOutputLength == 0) + continue; + var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1; + var d = 1 / (d0 * d2 + d1 * (y1 - y3)); + var clipOutputCount = clipOutputLength >> 1; + var clipOutputItems = this.clipOutput; + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); + for (var ii = 0; ii < clipOutputLength; ii += 2) { + var x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + var c0 = x - x3, c1 = y - y3; + var a = (d0 * c0 + d1 * c1) * d; + var b = (d4 * c0 + d2 * c1) * d; + var c = 1 - a - b; + clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c; + clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + } + s += vertexSize; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (var ii = 1; ii < clipOutputCount; ii++) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + ii); + clippedTrianglesItems[s + 2] = (index + ii + 1); + s += 3; + } + index += clipOutputCount + 1; + } + else { + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + if (!twoColor) { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = x2; + clippedVerticesItems[s + 9] = y2; + clippedVerticesItems[s + 10] = light.r; + clippedVerticesItems[s + 11] = light.g; + clippedVerticesItems[s + 12] = light.b; + clippedVerticesItems[s + 13] = light.a; + clippedVerticesItems[s + 14] = u2; + clippedVerticesItems[s + 15] = v2; + clippedVerticesItems[s + 16] = x3; + clippedVerticesItems[s + 17] = y3; + clippedVerticesItems[s + 18] = light.r; + clippedVerticesItems[s + 19] = light.g; + clippedVerticesItems[s + 20] = light.b; + clippedVerticesItems[s + 21] = light.a; + clippedVerticesItems[s + 22] = u3; + clippedVerticesItems[s + 23] = v3; + } + else { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + clippedVerticesItems[s + 12] = x2; + clippedVerticesItems[s + 13] = y2; + clippedVerticesItems[s + 14] = light.r; + clippedVerticesItems[s + 15] = light.g; + clippedVerticesItems[s + 16] = light.b; + clippedVerticesItems[s + 17] = light.a; + clippedVerticesItems[s + 18] = u2; + clippedVerticesItems[s + 19] = v2; + clippedVerticesItems[s + 20] = dark.r; + clippedVerticesItems[s + 21] = dark.g; + clippedVerticesItems[s + 22] = dark.b; + clippedVerticesItems[s + 23] = dark.a; + clippedVerticesItems[s + 24] = x3; + clippedVerticesItems[s + 25] = y3; + clippedVerticesItems[s + 26] = light.r; + clippedVerticesItems[s + 27] = light.g; + clippedVerticesItems[s + 28] = light.b; + clippedVerticesItems[s + 29] = light.a; + clippedVerticesItems[s + 30] = u3; + clippedVerticesItems[s + 31] = v3; + clippedVerticesItems[s + 32] = dark.r; + clippedVerticesItems[s + 33] = dark.g; + clippedVerticesItems[s + 34] = dark.b; + clippedVerticesItems[s + 35] = dark.a; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + 1); + clippedTrianglesItems[s + 2] = (index + 2); + index += 3; + continue outer; + } + } + } + }; + SkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) { + var originalOutput = output; + var clipped = false; + var input = null; + if (clippingArea.length % 4 >= 2) { + input = output; + output = this.scratch; + } + else + input = this.scratch; + input.length = 0; + input.push(x1); + input.push(y1); + input.push(x2); + input.push(y2); + input.push(x3); + input.push(y3); + input.push(x1); + input.push(y1); + output.length = 0; + var clippingVertices = clippingArea; + var clippingVerticesLast = clippingArea.length - 4; + for (var i = 0;; i += 2) { + var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1]; + var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3]; + var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2; + var inputVertices = input; + var inputVerticesLength = input.length - 2, outputStart = output.length; + for (var ii = 0; ii < inputVerticesLength; ii += 2) { + var inputX = inputVertices[ii], inputY = inputVertices[ii + 1]; + var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3]; + var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0; + if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) { + if (side2) { + output.push(inputX2); + output.push(inputY2); + continue; + } + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + } + else if (side2) { + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + output.push(inputX2); + output.push(inputY2); + } + clipped = true; + } + if (outputStart == output.length) { + originalOutput.length = 0; + return true; + } + output.push(output[0]); + output.push(output[1]); + if (i == clippingVerticesLast) + break; + var temp = output; + output = input; + output.length = 0; + input = temp; + } + if (originalOutput != output) { + originalOutput.length = 0; + for (var i = 0, n = output.length - 2; i < n; i++) + originalOutput[i] = output[i]; + } + else + originalOutput.length = originalOutput.length - 2; + return clipped; + }; + SkeletonClipping.makeClockwise = function (polygon) { + var vertices = polygon; + var verticeslength = polygon.length; + var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0; + for (var i = 0, n = verticeslength - 3; i < n; i += 2) { + p1x = vertices[i]; + p1y = vertices[i + 1]; + p2x = vertices[i + 2]; + p2y = vertices[i + 3]; + area += p1x * p2y - p2x * p1y; + } + if (area < 0) + return; + for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) { + var x = vertices[i], y = vertices[i + 1]; + var other = lastX - i; + vertices[i] = vertices[other]; + vertices[i + 1] = vertices[other + 1]; + vertices[other] = x; + vertices[other + 1] = y; + } + }; + return SkeletonClipping; + }()); + spine.SkeletonClipping = SkeletonClipping; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonData = (function () { + function SkeletonData() { + this.bones = new Array(); + this.slots = new Array(); + this.skins = new Array(); + this.events = new Array(); + this.animations = new Array(); + this.ikConstraints = new Array(); + this.transformConstraints = new Array(); + this.pathConstraints = new Array(); + this.fps = 0; + } + SkeletonData.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.name == boneName) + return bone; + } + return null; + }; + SkeletonData.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) + return i; + return -1; + }; + SkeletonData.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.name == slotName) + return slot; + } + return null; + }; + SkeletonData.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) + return i; + return -1; + }; + SkeletonData.prototype.findSkin = function (skinName) { + if (skinName == null) + throw new Error("skinName cannot be null."); + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) { + var skin = skins[i]; + if (skin.name == skinName) + return skin; + } + return null; + }; + SkeletonData.prototype.findEvent = function (eventDataName) { + if (eventDataName == null) + throw new Error("eventDataName cannot be null."); + var events = this.events; + for (var i = 0, n = events.length; i < n; i++) { + var event_5 = events[i]; + if (event_5.name == eventDataName) + return event_5; + } + return null; + }; + SkeletonData.prototype.findAnimation = function (animationName) { + if (animationName == null) + throw new Error("animationName cannot be null."); + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) { + var animation = animations[i]; + if (animation.name == animationName) + return animation; + } + return null; + }; + SkeletonData.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraintIndex = function (pathConstraintName) { + if (pathConstraintName == null) + throw new Error("pathConstraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) + if (pathConstraints[i].name == pathConstraintName) + return i; + return -1; + }; + return SkeletonData; + }()); + spine.SkeletonData = SkeletonData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonJson = (function () { + function SkeletonJson(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonJson.prototype.readSkeletonData = function (json) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + var root = typeof (json) === "string" ? JSON.parse(json) : json; + var skeletonMap = root.skeleton; + if (skeletonMap != null) { + skeletonData.hash = skeletonMap.hash; + skeletonData.version = skeletonMap.spine; + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = skeletonMap.x; + skeletonData.y = skeletonMap.y; + skeletonData.width = skeletonMap.width; + skeletonData.height = skeletonMap.height; + skeletonData.fps = skeletonMap.fps; + skeletonData.imagesPath = skeletonMap.images; + } + if (root.bones) { + for (var i = 0; i < root.bones.length; i++) { + var boneMap = root.bones[i]; + var parent_5 = null; + var parentName = this.getValue(boneMap, "parent", null); + if (parentName != null) { + parent_5 = skeletonData.findBone(parentName); + if (parent_5 == null) + throw new Error("Parent bone not found: " + parentName); + } + var data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_5); + data.length = this.getValue(boneMap, "length", 0) * scale; + data.x = this.getValue(boneMap, "x", 0) * scale; + data.y = this.getValue(boneMap, "y", 0) * scale; + data.rotation = this.getValue(boneMap, "rotation", 0); + data.scaleX = this.getValue(boneMap, "scaleX", 1); + data.scaleY = this.getValue(boneMap, "scaleY", 1); + data.shearX = this.getValue(boneMap, "shearX", 0); + data.shearY = this.getValue(boneMap, "shearY", 0); + data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, "transform", "normal")); + data.skinRequired = this.getValue(boneMap, "skin", false); + skeletonData.bones.push(data); + } + } + if (root.slots) { + for (var i = 0; i < root.slots.length; i++) { + var slotMap = root.slots[i]; + var slotName = slotMap.name; + var boneName = slotMap.bone; + var boneData = skeletonData.findBone(boneName); + if (boneData == null) + throw new Error("Slot bone not found: " + boneName); + var data = new spine.SlotData(skeletonData.slots.length, slotName, boneData); + var color = this.getValue(slotMap, "color", null); + if (color != null) + data.color.setFromString(color); + var dark = this.getValue(slotMap, "dark", null); + if (dark != null) { + data.darkColor = new spine.Color(1, 1, 1, 1); + data.darkColor.setFromString(dark); + } + data.attachmentName = this.getValue(slotMap, "attachment", null); + data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, "blend", "normal")); + skeletonData.slots.push(data); + } + } + if (root.ik) { + for (var i = 0; i < root.ik.length; i++) { + var constraintMap = root.ik[i]; + var data = new spine.IkConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("IK bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("IK target bone not found: " + targetName); + data.mix = this.getValue(constraintMap, "mix", 1); + data.softness = this.getValue(constraintMap, "softness", 0) * scale; + data.bendDirection = this.getValue(constraintMap, "bendPositive", true) ? 1 : -1; + data.compress = this.getValue(constraintMap, "compress", false); + data.stretch = this.getValue(constraintMap, "stretch", false); + data.uniform = this.getValue(constraintMap, "uniform", false); + skeletonData.ikConstraints.push(data); + } + } + if (root.transform) { + for (var i = 0; i < root.transform.length; i++) { + var constraintMap = root.transform[i]; + var data = new spine.TransformConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("Transform constraint target bone not found: " + targetName); + data.local = this.getValue(constraintMap, "local", false); + data.relative = this.getValue(constraintMap, "relative", false); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.offsetX = this.getValue(constraintMap, "x", 0) * scale; + data.offsetY = this.getValue(constraintMap, "y", 0) * scale; + data.offsetScaleX = this.getValue(constraintMap, "scaleX", 0); + data.offsetScaleY = this.getValue(constraintMap, "scaleY", 0); + data.offsetShearY = this.getValue(constraintMap, "shearY", 0); + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + data.scaleMix = this.getValue(constraintMap, "scaleMix", 1); + data.shearMix = this.getValue(constraintMap, "shearMix", 1); + skeletonData.transformConstraints.push(data); + } + } + if (root.path) { + for (var i = 0; i < root.path.length; i++) { + var constraintMap = root.path[i]; + var data = new spine.PathConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findSlot(targetName); + if (data.target == null) + throw new Error("Path target slot not found: " + targetName); + data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, "positionMode", "percent")); + data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, "spacingMode", "length")); + data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, "rotateMode", "tangent")); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.position = this.getValue(constraintMap, "position", 0); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = this.getValue(constraintMap, "spacing", 0); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + skeletonData.pathConstraints.push(data); + } + } + if (root.skins) { + for (var i = 0; i < root.skins.length; i++) { + var skinMap = root.skins[i]; + var skin = new spine.Skin(skinMap.name); + if (skinMap.bones) { + for (var ii = 0; ii < skinMap.bones.length; ii++) { + var bone = skeletonData.findBone(skinMap.bones[ii]); + if (bone == null) + throw new Error("Skin bone not found: " + skinMap.bones[i]); + skin.bones.push(bone); + } + } + if (skinMap.ik) { + for (var ii = 0; ii < skinMap.ik.length; ii++) { + var constraint = skeletonData.findIkConstraint(skinMap.ik[ii]); + if (constraint == null) + throw new Error("Skin IK constraint not found: " + skinMap.ik[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.transform) { + for (var ii = 0; ii < skinMap.transform.length; ii++) { + var constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]); + if (constraint == null) + throw new Error("Skin transform constraint not found: " + skinMap.transform[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.path) { + for (var ii = 0; ii < skinMap.path.length; ii++) { + var constraint = skeletonData.findPathConstraint(skinMap.path[ii]); + if (constraint == null) + throw new Error("Skin path constraint not found: " + skinMap.path[i]); + skin.constraints.push(constraint); + } + } + for (var slotName in skinMap.attachments) { + var slot = skeletonData.findSlot(slotName); + if (slot == null) + throw new Error("Slot not found: " + slotName); + var slotMap = skinMap.attachments[slotName]; + for (var entryName in slotMap) { + var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); + if (attachment != null) + skin.setAttachment(slot.index, entryName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") + skeletonData.defaultSkin = skin; + } + } + for (var i = 0, n = this.linkedMeshes.length; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_6 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_6 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_6 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_6); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + if (root.events) { + for (var eventName in root.events) { + var eventMap = root.events[eventName]; + var data = new spine.EventData(eventName); + data.intValue = this.getValue(eventMap, "int", 0); + data.floatValue = this.getValue(eventMap, "float", 0); + data.stringValue = this.getValue(eventMap, "string", ""); + data.audioPath = this.getValue(eventMap, "audio", null); + if (data.audioPath != null) { + data.volume = this.getValue(eventMap, "volume", 1); + data.balance = this.getValue(eventMap, "balance", 0); + } + skeletonData.events.push(data); + } + } + if (root.animations) { + for (var animationName in root.animations) { + var animationMap = root.animations[animationName]; + this.readAnimation(animationMap, animationName, skeletonData); + } + } + return skeletonData; + }; + SkeletonJson.prototype.readAttachment = function (map, skin, slotIndex, name, skeletonData) { + var scale = this.scale; + name = this.getValue(map, "name", name); + var type = this.getValue(map, "type", "region"); + switch (type) { + case "region": { + var path = this.getValue(map, "path", name); + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = this.getValue(map, "x", 0) * scale; + region.y = this.getValue(map, "y", 0) * scale; + region.scaleX = this.getValue(map, "scaleX", 1); + region.scaleY = this.getValue(map, "scaleY", 1); + region.rotation = this.getValue(map, "rotation", 0); + region.width = map.width * scale; + region.height = map.height * scale; + var color = this.getValue(map, "color", null); + if (color != null) + region.color.setFromString(color); + region.updateOffset(); + return region; + } + case "boundingbox": { + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + this.readVertices(map, box, map.vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + box.color.setFromString(color); + return box; + } + case "mesh": + case "linkedmesh": { + var path = this.getValue(map, "path", name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + var color = this.getValue(map, "color", null); + if (color != null) + mesh.color.setFromString(color); + mesh.width = this.getValue(map, "width", 0) * scale; + mesh.height = this.getValue(map, "height", 0) * scale; + var parent_7 = this.getValue(map, "parent", null); + if (parent_7 != null) { + this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, "skin", null), slotIndex, parent_7, this.getValue(map, "deform", true))); + return mesh; + } + var uvs = map.uvs; + this.readVertices(map, mesh, uvs.length); + mesh.triangles = map.triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.edges = this.getValue(map, "edges", null); + mesh.hullLength = this.getValue(map, "hull", 0) * 2; + return mesh; + } + case "path": { + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = this.getValue(map, "closed", false); + path.constantSpeed = this.getValue(map, "constantSpeed", true); + var vertexCount = map.vertexCount; + this.readVertices(map, path, vertexCount << 1); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0; i < map.lengths.length; i++) + lengths[i] = map.lengths[i] * scale; + path.lengths = lengths; + var color = this.getValue(map, "color", null); + if (color != null) + path.color.setFromString(color); + return path; + } + case "point": { + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = this.getValue(map, "x", 0) * scale; + point.y = this.getValue(map, "y", 0) * scale; + point.rotation = this.getValue(map, "rotation", 0); + var color = this.getValue(map, "color", null); + if (color != null) + point.color.setFromString(color); + return point; + } + case "clipping": { + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + var end = this.getValue(map, "end", null); + if (end != null) { + var slot = skeletonData.findSlot(end); + if (slot == null) + throw new Error("Clipping end slot not found: " + end); + clip.endSlot = slot; + } + var vertexCount = map.vertexCount; + this.readVertices(map, clip, vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + clip.color.setFromString(color); + return clip; + } + } + return null; + }; + SkeletonJson.prototype.readVertices = function (map, attachment, verticesLength) { + var scale = this.scale; + attachment.worldVerticesLength = verticesLength; + var vertices = map.vertices; + if (verticesLength == vertices.length) { + var scaledVertices = spine.Utils.toFloatArray(vertices); + if (scale != 1) { + for (var i = 0, n = vertices.length; i < n; i++) + scaledVertices[i] *= scale; + } + attachment.vertices = scaledVertices; + return; + } + var weights = new Array(); + var bones = new Array(); + for (var i = 0, n = vertices.length; i < n;) { + var boneCount = vertices[i++]; + bones.push(boneCount); + for (var nn = i + boneCount * 4; i < nn; i += 4) { + bones.push(vertices[i]); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = spine.Utils.toFloatArray(weights); + }; + SkeletonJson.prototype.readAnimation = function (map, name, skeletonData) { + var scale = this.scale; + var timelines = new Array(); + var duration = 0; + if (map.slots) { + for (var slotName in map.slots) { + var slotMap = map.slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotName); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex++, this.getValue(valueMap, "time", 0), valueMap.name); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + else if (timelineName == "color") { + var timeline = new spine.ColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var color = new spine.Color(); + color.setFromString(valueMap.color); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), color.r, color.g, color.b, color.a); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]); + } + else if (timelineName == "twoColor") { + var timeline = new spine.TwoColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var light = new spine.Color(); + var dark = new spine.Color(); + light.setFromString(valueMap.light); + dark.setFromString(valueMap.dark); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"); + } + } + } + if (map.bones) { + for (var boneName in map.bones) { + var boneMap = map.bones[boneName]; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) + throw new Error("Bone not found: " + boneName); + for (var timelineName in boneMap) { + var timelineMap = boneMap[timelineName]; + if (timelineName === "rotate") { + var timeline = new spine.RotateTimeline(timelineMap.length); + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "angle", 0)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]); + } + else if (timelineName === "translate" || timelineName === "scale" || timelineName === "shear") { + var timeline = null; + var timelineScale = 1, defaultValue = 0; + if (timelineName === "scale") { + timeline = new spine.ScaleTimeline(timelineMap.length); + defaultValue = 1; + } + else if (timelineName === "shear") + timeline = new spine.ShearTimeline(timelineMap.length); + else { + timeline = new spine.TranslateTimeline(timelineMap.length); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var x = this.getValue(valueMap, "x", defaultValue), y = this.getValue(valueMap, "y", defaultValue); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), x * timelineScale, y * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); + } + } + } + if (map.ik) { + for (var constraintName in map.ik) { + var constraintMap = map.ik[constraintName]; + var constraint = skeletonData.findIkConstraint(constraintName); + var timeline = new spine.IkConstraintTimeline(constraintMap.length); + timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "mix", 1), this.getValue(valueMap, "softness", 0) * scale, this.getValue(valueMap, "bendPositive", true) ? 1 : -1, this.getValue(valueMap, "compress", false), this.getValue(valueMap, "stretch", false)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + } + if (map.transform) { + for (var constraintName in map.transform) { + var constraintMap = map.transform[constraintName]; + var constraint = skeletonData.findTransformConstraint(constraintName); + var timeline = new spine.TransformConstraintTimeline(constraintMap.length); + timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1), this.getValue(valueMap, "scaleMix", 1), this.getValue(valueMap, "shearMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + } + if (map.path) { + for (var constraintName in map.path) { + var constraintMap = map.path[constraintName]; + var index = skeletonData.findPathConstraintIndex(constraintName); + if (index == -1) + throw new Error("Path constraint not found: " + constraintName); + var data = skeletonData.pathConstraints[index]; + for (var timelineName in constraintMap) { + var timelineMap = constraintMap[timelineName]; + if (timelineName === "position" || timelineName === "spacing") { + var timeline = null; + var timelineScale = 1; + if (timelineName === "spacing") { + timeline = new spine.PathConstraintSpacingTimeline(timelineMap.length); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(timelineMap.length); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, timelineName, 0) * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + } + else if (timelineName === "mix") { + var timeline = new spine.PathConstraintMixTimeline(timelineMap.length); + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + } + } + } + } + if (map.deform) { + for (var deformName in map.deform) { + var deformMap = map.deform[deformName]; + var skin = skeletonData.findSkin(deformName); + if (skin == null) + throw new Error("Skin not found: " + deformName); + for (var slotName in deformMap) { + var slotMap = deformMap[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotMap.name); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + var attachment = skin.getAttachment(slotIndex, timelineName); + if (attachment == null) + throw new Error("Deform attachment not found: " + timelineMap.name); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var timeline = new spine.DeformTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + var frameIndex = 0; + for (var j = 0; j < timelineMap.length; j++) { + var valueMap = timelineMap[j]; + var deform = void 0; + var verticesValue = this.getValue(valueMap, "vertices", null); + if (verticesValue == null) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = this.getValue(valueMap, "offset", 0); + spine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length); + if (scale != 1) { + for (var i = start, n = i + verticesValue.length; i < n; i++) + deform[i] *= scale; + } + if (!weighted) { + for (var i = 0; i < deformLength; i++) + deform[i] += vertices[i]; + } + } + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), deform); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + } + } + } + var drawOrderNode = map.drawOrder; + if (drawOrderNode == null) + drawOrderNode = map.draworder; + if (drawOrderNode != null) { + var timeline = new spine.DrawOrderTimeline(drawOrderNode.length); + var slotCount = skeletonData.slots.length; + var frameIndex = 0; + for (var j = 0; j < drawOrderNode.length; j++) { + var drawOrderMap = drawOrderNode[j]; + var drawOrder = null; + var offsets = this.getValue(drawOrderMap, "offsets", null); + if (offsets != null) { + drawOrder = spine.Utils.newArray(slotCount, -1); + var unchanged = spine.Utils.newArray(slotCount - offsets.length, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var i = 0; i < offsets.length; i++) { + var offsetMap = offsets[i]; + var slotIndex = skeletonData.findSlotIndex(offsetMap.slot); + if (slotIndex == -1) + throw new Error("Slot not found: " + offsetMap.slot); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + offsetMap.offset] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var i = slotCount - 1; i >= 0; i--) + if (drawOrder[i] == -1) + drawOrder[i] = unchanged[--unchangedIndex]; + } + timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, "time", 0), drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (map.events) { + var timeline = new spine.EventTimeline(map.events.length); + var frameIndex = 0; + for (var i = 0; i < map.events.length; i++) { + var eventMap = map.events[i]; + var eventData = skeletonData.findEvent(eventMap.name); + if (eventData == null) + throw new Error("Event not found: " + eventMap.name); + var event_6 = new spine.Event(spine.Utils.toSinglePrecision(this.getValue(eventMap, "time", 0)), eventData); + event_6.intValue = this.getValue(eventMap, "int", eventData.intValue); + event_6.floatValue = this.getValue(eventMap, "float", eventData.floatValue); + event_6.stringValue = this.getValue(eventMap, "string", eventData.stringValue); + if (event_6.data.audioPath != null) { + event_6.volume = this.getValue(eventMap, "volume", 1); + event_6.balance = this.getValue(eventMap, "balance", 0); + } + timeline.setFrame(frameIndex++, event_6); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (isNaN(duration)) { + throw new Error("Error while parsing animation, duration is NaN"); + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + }; + SkeletonJson.prototype.readCurve = function (map, timeline, frameIndex) { + if (!map.hasOwnProperty("curve")) + return; + if (map.curve == "stepped") + timeline.setStepped(frameIndex); + else { + var curve = map.curve; + timeline.setCurve(frameIndex, curve, this.getValue(map, "c2", 0), this.getValue(map, "c3", 1), this.getValue(map, "c4", 1)); + } + }; + SkeletonJson.prototype.getValue = function (map, prop, defaultValue) { + return map[prop] !== undefined ? map[prop] : defaultValue; + }; + SkeletonJson.blendModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.BlendMode.Normal; + if (str == "additive") + return spine.BlendMode.Additive; + if (str == "multiply") + return spine.BlendMode.Multiply; + if (str == "screen") + return spine.BlendMode.Screen; + throw new Error("Unknown blend mode: " + str); + }; + SkeletonJson.positionModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "fixed") + return spine.PositionMode.Fixed; + if (str == "percent") + return spine.PositionMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.spacingModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "length") + return spine.SpacingMode.Length; + if (str == "fixed") + return spine.SpacingMode.Fixed; + if (str == "percent") + return spine.SpacingMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.rotateModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "tangent") + return spine.RotateMode.Tangent; + if (str == "chain") + return spine.RotateMode.Chain; + if (str == "chainscale") + return spine.RotateMode.ChainScale; + throw new Error("Unknown rotate mode: " + str); + }; + SkeletonJson.transformModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.TransformMode.Normal; + if (str == "onlytranslation") + return spine.TransformMode.OnlyTranslation; + if (str == "norotationorreflection") + return spine.TransformMode.NoRotationOrReflection; + if (str == "noscale") + return spine.TransformMode.NoScale; + if (str == "noscaleorreflection") + return spine.TransformMode.NoScaleOrReflection; + throw new Error("Unknown transform mode: " + str); + }; + return SkeletonJson; + }()); + spine.SkeletonJson = SkeletonJson; + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkinEntry = (function () { + function SkinEntry(slotIndex, name, attachment) { + this.slotIndex = slotIndex; + this.name = name; + this.attachment = attachment; + } + return SkinEntry; + }()); + spine.SkinEntry = SkinEntry; + var Skin = (function () { + function Skin(name) { + this.attachments = new Array(); + this.bones = Array(); + this.constraints = new Array(); + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + Skin.prototype.setAttachment = function (slotIndex, name, attachment) { + if (attachment == null) + throw new Error("attachment cannot be null."); + var attachments = this.attachments; + if (slotIndex >= attachments.length) + attachments.length = slotIndex + 1; + if (!attachments[slotIndex]) + attachments[slotIndex] = {}; + attachments[slotIndex][name] = attachment; + }; + Skin.prototype.addSkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + }; + Skin.prototype.copySkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + if (attachment.attachment == null) + continue; + if (attachment.attachment instanceof spine.MeshAttachment) { + attachment.attachment = attachment.attachment.newLinkedMesh(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + else { + attachment.attachment = attachment.attachment.copy(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + }; + Skin.prototype.getAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + return dictionary ? dictionary[name] : null; + }; + Skin.prototype.removeAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + if (dictionary) + dictionary[name] = null; + }; + Skin.prototype.getAttachments = function () { + var entries = new Array(); + for (var i = 0; i < this.attachments.length; i++) { + var slotAttachments = this.attachments[i]; + if (slotAttachments) { + for (var name_4 in slotAttachments) { + var attachment = slotAttachments[name_4]; + if (attachment) + entries.push(new SkinEntry(i, name_4, attachment)); + } + } + } + return entries; + }; + Skin.prototype.getAttachmentsForSlot = function (slotIndex, attachments) { + var slotAttachments = this.attachments[slotIndex]; + if (slotAttachments) { + for (var name_5 in slotAttachments) { + var attachment = slotAttachments[name_5]; + if (attachment) + attachments.push(new SkinEntry(slotIndex, name_5, attachment)); + } + } + }; + Skin.prototype.clear = function () { + this.attachments.length = 0; + this.bones.length = 0; + this.constraints.length = 0; + }; + Skin.prototype.attachAll = function (skeleton, oldSkin) { + var slotIndex = 0; + for (var i = 0; i < skeleton.slots.length; i++) { + var slot = skeleton.slots[i]; + var slotAttachment = slot.getAttachment(); + if (slotAttachment && slotIndex < oldSkin.attachments.length) { + var dictionary = oldSkin.attachments[slotIndex]; + for (var key in dictionary) { + var skinAttachment = dictionary[key]; + if (slotAttachment == skinAttachment) { + var attachment = this.getAttachment(slotIndex, key); + if (attachment != null) + slot.setAttachment(attachment); + break; + } + } + } + slotIndex++; + } + }; + return Skin; + }()); + spine.Skin = Skin; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Slot = (function () { + function Slot(data, bone) { + this.deform = new Array(); + if (data == null) + throw new Error("data cannot be null."); + if (bone == null) + throw new Error("bone cannot be null."); + this.data = data; + this.bone = bone; + this.color = new spine.Color(); + this.darkColor = data.darkColor == null ? null : new spine.Color(); + this.setToSetupPose(); + } + Slot.prototype.getSkeleton = function () { + return this.bone.skeleton; + }; + Slot.prototype.getAttachment = function () { + return this.attachment; + }; + Slot.prototype.setAttachment = function (attachment) { + if (this.attachment == attachment) + return; + this.attachment = attachment; + this.attachmentTime = this.bone.skeleton.time; + this.deform.length = 0; + }; + Slot.prototype.setAttachmentTime = function (time) { + this.attachmentTime = this.bone.skeleton.time - time; + }; + Slot.prototype.getAttachmentTime = function () { + return this.bone.skeleton.time - this.attachmentTime; + }; + Slot.prototype.setToSetupPose = function () { + this.color.setFromColor(this.data.color); + if (this.darkColor != null) + this.darkColor.setFromColor(this.data.darkColor); + if (this.data.attachmentName == null) + this.attachment = null; + else { + this.attachment = null; + this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + }; + return Slot; + }()); + spine.Slot = Slot; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SlotData = (function () { + function SlotData(index, name, boneData) { + this.color = new spine.Color(1, 1, 1, 1); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + if (boneData == null) + throw new Error("boneData cannot be null."); + this.index = index; + this.name = name; + this.boneData = boneData; + } + return SlotData; + }()); + spine.SlotData = SlotData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Texture = (function () { + function Texture(image) { + this._image = image; + } + Texture.prototype.getImage = function () { + return this._image; + }; + Texture.filterFromString = function (text) { + switch (text.toLowerCase()) { + case "nearest": return TextureFilter.Nearest; + case "linear": return TextureFilter.Linear; + case "mipmap": return TextureFilter.MipMap; + case "mipmapnearestnearest": return TextureFilter.MipMapNearestNearest; + case "mipmaplinearnearest": return TextureFilter.MipMapLinearNearest; + case "mipmapnearestlinear": return TextureFilter.MipMapNearestLinear; + case "mipmaplinearlinear": return TextureFilter.MipMapLinearLinear; + default: throw new Error("Unknown texture filter " + text); + } + }; + Texture.wrapFromString = function (text) { + switch (text.toLowerCase()) { + case "mirroredtepeat": return TextureWrap.MirroredRepeat; + case "clamptoedge": return TextureWrap.ClampToEdge; + case "repeat": return TextureWrap.Repeat; + default: throw new Error("Unknown texture wrap " + text); + } + }; + return Texture; + }()); + spine.Texture = Texture; + var TextureFilter; + (function (TextureFilter) { + TextureFilter[TextureFilter["Nearest"] = 9728] = "Nearest"; + TextureFilter[TextureFilter["Linear"] = 9729] = "Linear"; + TextureFilter[TextureFilter["MipMap"] = 9987] = "MipMap"; + TextureFilter[TextureFilter["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; + TextureFilter[TextureFilter["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; + TextureFilter[TextureFilter["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; + TextureFilter[TextureFilter["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; + })(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {})); + var TextureWrap; + (function (TextureWrap) { + TextureWrap[TextureWrap["MirroredRepeat"] = 33648] = "MirroredRepeat"; + TextureWrap[TextureWrap["ClampToEdge"] = 33071] = "ClampToEdge"; + TextureWrap[TextureWrap["Repeat"] = 10497] = "Repeat"; + })(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {})); + var TextureRegion = (function () { + function TextureRegion() { + this.u = 0; + this.v = 0; + this.u2 = 0; + this.v2 = 0; + this.width = 0; + this.height = 0; + this.rotate = false; + this.offsetX = 0; + this.offsetY = 0; + this.originalWidth = 0; + this.originalHeight = 0; + } + return TextureRegion; + }()); + spine.TextureRegion = TextureRegion; + var FakeTexture = (function (_super) { + __extends(FakeTexture, _super); + function FakeTexture() { + return _super !== null && _super.apply(this, arguments) || this; + } + FakeTexture.prototype.setFilters = function (minFilter, magFilter) { }; + FakeTexture.prototype.setWraps = function (uWrap, vWrap) { }; + FakeTexture.prototype.dispose = function () { }; + return FakeTexture; + }(Texture)); + spine.FakeTexture = FakeTexture; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TextureAtlas = (function () { + function TextureAtlas(atlasText, textureLoader) { + this.pages = new Array(); + this.regions = new Array(); + this.load(atlasText, textureLoader); + } + TextureAtlas.prototype.load = function (atlasText, textureLoader) { + if (textureLoader == null) + throw new Error("textureLoader cannot be null."); + var reader = new TextureAtlasReader(atlasText); + var tuple = new Array(4); + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) + break; + line = line.trim(); + if (line.length == 0) + page = null; + else if (!page) { + page = new TextureAtlasPage(); + page.name = line; + if (reader.readTuple(tuple) == 2) { + page.width = parseInt(tuple[0]); + page.height = parseInt(tuple[1]); + reader.readTuple(tuple); + } + reader.readTuple(tuple); + page.minFilter = spine.Texture.filterFromString(tuple[0]); + page.magFilter = spine.Texture.filterFromString(tuple[1]); + var direction = reader.readValue(); + page.uWrap = spine.TextureWrap.ClampToEdge; + page.vWrap = spine.TextureWrap.ClampToEdge; + if (direction == "x") + page.uWrap = spine.TextureWrap.Repeat; + else if (direction == "y") + page.vWrap = spine.TextureWrap.Repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.TextureWrap.Repeat; + page.texture = textureLoader(line); + page.texture.setFilters(page.minFilter, page.magFilter); + page.texture.setWraps(page.uWrap, page.vWrap); + page.width = page.texture.getImage().width; + page.height = page.texture.getImage().height; + this.pages.push(page); + } + else { + var region = new TextureAtlasRegion(); + region.name = line; + region.page = page; + var rotateValue = reader.readValue(); + if (rotateValue.toLocaleLowerCase() == "true") { + region.degrees = 90; + } + else if (rotateValue.toLocaleLowerCase() == "false") { + region.degrees = 0; + } + else { + region.degrees = parseFloat(rotateValue); + } + region.rotate = region.degrees == 90; + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } + else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + if (reader.readTuple(tuple) == 4) { + if (reader.readTuple(tuple) == 4) { + reader.readTuple(tuple); + } + } + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + region.index = parseInt(reader.readValue()); + region.texture = page.texture; + this.regions.push(region); + } + } + }; + TextureAtlas.prototype.findRegion = function (name) { + for (var i = 0; i < this.regions.length; i++) { + if (this.regions[i].name == name) { + return this.regions[i]; + } + } + return null; + }; + TextureAtlas.prototype.dispose = function () { + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].texture.dispose(); + } + }; + return TextureAtlas; + }()); + spine.TextureAtlas = TextureAtlas; + var TextureAtlasReader = (function () { + function TextureAtlasReader(text) { + this.index = 0; + this.lines = text.split(/\r\n|\r|\n/); + } + TextureAtlasReader.prototype.readLine = function () { + if (this.index >= this.lines.length) + return null; + return this.lines[this.index++]; + }; + TextureAtlasReader.prototype.readValue = function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + return line.substring(colon + 1).trim(); + }; + TextureAtlasReader.prototype.readTuple = function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + var i = 0, lastMatch = colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) + break; + tuple[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + } + tuple[i] = line.substring(lastMatch).trim(); + return i + 1; + }; + return TextureAtlasReader; + }()); + var TextureAtlasPage = (function () { + function TextureAtlasPage() { + } + return TextureAtlasPage; + }()); + spine.TextureAtlasPage = TextureAtlasPage; + var TextureAtlasRegion = (function (_super) { + __extends(TextureAtlasRegion, _super); + function TextureAtlasRegion() { + return _super !== null && _super.apply(this, arguments) || this; + } + return TextureAtlasRegion; + }(spine.TextureRegion)); + spine.TextureAtlasRegion = TextureAtlasRegion; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraint = (function () { + function TransformConstraint(data, skeleton) { + this.rotateMix = 0; + this.translateMix = 0; + this.scaleMix = 0; + this.shearMix = 0; + this.temp = new spine.Vector2(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + this.scaleMix = data.scaleMix; + this.shearMix = data.shearMix; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + TransformConstraint.prototype.isActive = function () { + return this.active; + }; + TransformConstraint.prototype.apply = function () { + this.update(); + }; + TransformConstraint.prototype.update = function () { + if (this.data.local) { + if (this.data.relative) + this.applyRelativeLocal(); + else + this.applyAbsoluteLocal(); + } + else { + if (this.data.relative) + this.applyRelativeWorld(); + else + this.applyAbsoluteWorld(); + } + }; + TransformConstraint.prototype.applyAbsoluteWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect; + var offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += (temp.x - bone.worldX) * translateMix; + bone.worldY += (temp.y - bone.worldY) * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + var ts = Math.sqrt(ta * ta + tc * tc); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s; + bone.a *= s; + bone.c *= s; + s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + ts = Math.sqrt(tb * tb + td * td); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var b = bone.b, d = bone.d; + var by = Math.atan2(d, b); + var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r = by + (r + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyRelativeWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += temp.x * translateMix; + bone.worldY += temp.y * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1; + bone.a *= s; + bone.c *= s; + s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var r = Math.atan2(td, tb) - Math.atan2(tc, ta); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + var b = bone.b, d = bone.d; + r = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyAbsoluteLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) { + var r = target.arotation - rotation + this.data.offsetRotation; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + rotation += r * rotateMix; + } + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax - x + this.data.offsetX) * translateMix; + y += (target.ay - y + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX; + if (scaleY > 0.00001) + scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY; + } + var shearY = bone.ashearY; + if (shearMix != 0) { + var r = target.ashearY - shearY + this.data.offsetShearY; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + bone.shearY += r * shearMix; + } + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + TransformConstraint.prototype.applyRelativeLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) + rotation += (target.arotation + this.data.offsetRotation) * rotateMix; + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax + this.data.offsetX) * translateMix; + y += (target.ay + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX *= ((target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix) + 1; + if (scaleY > 0.00001) + scaleY *= ((target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix) + 1; + } + var shearY = bone.ashearY; + if (shearMix != 0) + shearY += (target.ashearY + this.data.offsetShearY) * shearMix; + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + return TransformConstraint; + }()); + spine.TransformConstraint = TransformConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraintData = (function (_super) { + __extends(TransformConstraintData, _super); + function TransformConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.rotateMix = 0; + _this.translateMix = 0; + _this.scaleMix = 0; + _this.shearMix = 0; + _this.offsetRotation = 0; + _this.offsetX = 0; + _this.offsetY = 0; + _this.offsetScaleX = 0; + _this.offsetScaleY = 0; + _this.offsetShearY = 0; + _this.relative = false; + _this.local = false; + return _this; + } + return TransformConstraintData; + }(spine.ConstraintData)); + spine.TransformConstraintData = TransformConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Triangulator = (function () { + function Triangulator() { + this.convexPolygons = new Array(); + this.convexPolygonsIndices = new Array(); + this.indicesArray = new Array(); + this.isConcaveArray = new Array(); + this.triangles = new Array(); + this.polygonPool = new spine.Pool(function () { + return new Array(); + }); + this.polygonIndicesPool = new spine.Pool(function () { + return new Array(); + }); + } + Triangulator.prototype.triangulate = function (verticesArray) { + var vertices = verticesArray; + var vertexCount = verticesArray.length >> 1; + var indices = this.indicesArray; + indices.length = 0; + for (var i = 0; i < vertexCount; i++) + indices[i] = i; + var isConcave = this.isConcaveArray; + isConcave.length = 0; + for (var i = 0, n = vertexCount; i < n; ++i) + isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices); + var triangles = this.triangles; + triangles.length = 0; + while (vertexCount > 3) { + var previous = vertexCount - 1, i = 0, next = 1; + while (true) { + outer: if (!isConcave[i]) { + var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; + var p1x = vertices[p1], p1y = vertices[p1 + 1]; + var p2x = vertices[p2], p2y = vertices[p2 + 1]; + var p3x = vertices[p3], p3y = vertices[p3 + 1]; + for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) { + if (!isConcave[ii]) + continue; + var v = indices[ii] << 1; + var vx = vertices[v], vy = vertices[v + 1]; + if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) { + if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) { + if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) + break outer; + } + } + } + break; + } + if (next == 0) { + do { + if (!isConcave[i]) + break; + i--; + } while (i > 0); + break; + } + previous = i; + i = next; + next = (next + 1) % vertexCount; + } + triangles.push(indices[(vertexCount + i - 1) % vertexCount]); + triangles.push(indices[i]); + triangles.push(indices[(i + 1) % vertexCount]); + indices.splice(i, 1); + isConcave.splice(i, 1); + vertexCount--; + var previousIndex = (vertexCount + i - 1) % vertexCount; + var nextIndex = i == vertexCount ? 0 : i; + isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices); + isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices); + } + if (vertexCount == 3) { + triangles.push(indices[2]); + triangles.push(indices[0]); + triangles.push(indices[1]); + } + return triangles; + }; + Triangulator.prototype.decompose = function (verticesArray, triangles) { + var vertices = verticesArray; + var convexPolygons = this.convexPolygons; + this.polygonPool.freeAll(convexPolygons); + convexPolygons.length = 0; + var convexPolygonsIndices = this.convexPolygonsIndices; + this.polygonIndicesPool.freeAll(convexPolygonsIndices); + convexPolygonsIndices.length = 0; + var polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + var polygon = this.polygonPool.obtain(); + polygon.length = 0; + var fanBaseIndex = -1, lastWinding = 0; + for (var i = 0, n = triangles.length; i < n; i += 3) { + var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1; + var x1 = vertices[t1], y1 = vertices[t1 + 1]; + var x2 = vertices[t2], y2 = vertices[t2 + 1]; + var x3 = vertices[t3], y3 = vertices[t3 + 1]; + var merged = false; + if (fanBaseIndex == t1) { + var o = polygon.length - 4; + var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3); + var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]); + if (winding1 == lastWinding && winding2 == lastWinding) { + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(t3); + merged = true; + } + } + if (!merged) { + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + else { + this.polygonPool.free(polygon); + this.polygonIndicesPool.free(polygonIndices); + } + polygon = this.polygonPool.obtain(); + polygon.length = 0; + polygon.push(x1); + polygon.push(y1); + polygon.push(x2); + polygon.push(y2); + polygon.push(x3); + polygon.push(y3); + polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + polygonIndices.push(t1); + polygonIndices.push(t2); + polygonIndices.push(t3); + lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + } + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + for (var i = 0, n = convexPolygons.length; i < n; i++) { + polygonIndices = convexPolygonsIndices[i]; + if (polygonIndices.length == 0) + continue; + var firstIndex = polygonIndices[0]; + var lastIndex = polygonIndices[polygonIndices.length - 1]; + polygon = convexPolygons[i]; + var o = polygon.length - 4; + var prevPrevX = polygon[o], prevPrevY = polygon[o + 1]; + var prevX = polygon[o + 2], prevY = polygon[o + 3]; + var firstX = polygon[0], firstY = polygon[1]; + var secondX = polygon[2], secondY = polygon[3]; + var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + for (var ii = 0; ii < n; ii++) { + if (ii == i) + continue; + var otherIndices = convexPolygonsIndices[ii]; + if (otherIndices.length != 3) + continue; + var otherFirstIndex = otherIndices[0]; + var otherSecondIndex = otherIndices[1]; + var otherLastIndex = otherIndices[2]; + var otherPoly = convexPolygons[ii]; + var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1]; + if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) + continue; + var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); + var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY); + if (winding1 == winding && winding2 == winding) { + otherPoly.length = 0; + otherIndices.length = 0; + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(otherLastIndex); + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = 0; + } + } + } + for (var i = convexPolygons.length - 1; i >= 0; i--) { + polygon = convexPolygons[i]; + if (polygon.length == 0) { + convexPolygons.splice(i, 1); + this.polygonPool.free(polygon); + polygonIndices = convexPolygonsIndices[i]; + convexPolygonsIndices.splice(i, 1); + this.polygonIndicesPool.free(polygonIndices); + } + } + return convexPolygons; + }; + Triangulator.isConcave = function (index, vertexCount, vertices, indices) { + var previous = indices[(vertexCount + index - 1) % vertexCount] << 1; + var current = indices[index] << 1; + var next = indices[(index + 1) % vertexCount] << 1; + return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]); + }; + Triangulator.positiveArea = function (p1x, p1y, p2x, p2y, p3x, p3y) { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + }; + Triangulator.winding = function (p1x, p1y, p2x, p2y, p3x, p3y) { + var px = p2x - p1x, py = p2y - p1y; + return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; + }; + return Triangulator; + }()); + spine.Triangulator = Triangulator; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IntSet = (function () { + function IntSet() { + this.array = new Array(); + } + IntSet.prototype.add = function (value) { + var contains = this.contains(value); + this.array[value | 0] = value | 0; + return !contains; + }; + IntSet.prototype.contains = function (value) { + return this.array[value | 0] != undefined; + }; + IntSet.prototype.remove = function (value) { + this.array[value | 0] = undefined; + }; + IntSet.prototype.clear = function () { + this.array.length = 0; + }; + return IntSet; + }()); + spine.IntSet = IntSet; + var Color = (function () { + function Color(r, g, b, a) { + if (r === void 0) { r = 0; } + if (g === void 0) { g = 0; } + if (b === void 0) { b = 0; } + if (a === void 0) { a = 0; } + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + Color.prototype.set = function (r, g, b, a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + this.clamp(); + return this; + }; + Color.prototype.setFromColor = function (c) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + }; + Color.prototype.setFromString = function (hex) { + hex = hex.charAt(0) == '#' ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255.0; + this.g = parseInt(hex.substr(2, 2), 16) / 255.0; + this.b = parseInt(hex.substr(4, 2), 16) / 255.0; + this.a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0; + return this; + }; + Color.prototype.add = function (r, g, b, a) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + this.clamp(); + return this; + }; + Color.prototype.clamp = function () { + if (this.r < 0) + this.r = 0; + else if (this.r > 1) + this.r = 1; + if (this.g < 0) + this.g = 0; + else if (this.g > 1) + this.g = 1; + if (this.b < 0) + this.b = 0; + else if (this.b > 1) + this.b = 1; + if (this.a < 0) + this.a = 0; + else if (this.a > 1) + this.a = 1; + return this; + }; + Color.rgba8888ToColor = function (color, value) { + color.r = ((value & 0xff000000) >>> 24) / 255; + color.g = ((value & 0x00ff0000) >>> 16) / 255; + color.b = ((value & 0x0000ff00) >>> 8) / 255; + color.a = ((value & 0x000000ff)) / 255; + }; + Color.rgb888ToColor = function (color, value) { + color.r = ((value & 0x00ff0000) >>> 16) / 255; + color.g = ((value & 0x0000ff00) >>> 8) / 255; + color.b = ((value & 0x000000ff)) / 255; + }; + Color.WHITE = new Color(1, 1, 1, 1); + Color.RED = new Color(1, 0, 0, 1); + Color.GREEN = new Color(0, 1, 0, 1); + Color.BLUE = new Color(0, 0, 1, 1); + Color.MAGENTA = new Color(1, 0, 1, 1); + return Color; + }()); + spine.Color = Color; + var MathUtils = (function () { + function MathUtils() { + } + MathUtils.clamp = function (value, min, max) { + if (value < min) + return min; + if (value > max) + return max; + return value; + }; + MathUtils.cosDeg = function (degrees) { + return Math.cos(degrees * MathUtils.degRad); + }; + MathUtils.sinDeg = function (degrees) { + return Math.sin(degrees * MathUtils.degRad); + }; + MathUtils.signum = function (value) { + return value > 0 ? 1 : value < 0 ? -1 : 0; + }; + MathUtils.toInt = function (x) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + }; + MathUtils.cbrt = function (x) { + var y = Math.pow(Math.abs(x), 1 / 3); + return x < 0 ? -y : y; + }; + MathUtils.randomTriangular = function (min, max) { + return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); + }; + MathUtils.randomTriangularWith = function (min, max, mode) { + var u = Math.random(); + var d = max - min; + if (u <= (mode - min) / d) + return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + }; + MathUtils.PI = 3.1415927; + MathUtils.PI2 = MathUtils.PI * 2; + MathUtils.radiansToDegrees = 180 / MathUtils.PI; + MathUtils.radDeg = MathUtils.radiansToDegrees; + MathUtils.degreesToRadians = MathUtils.PI / 180; + MathUtils.degRad = MathUtils.degreesToRadians; + return MathUtils; + }()); + spine.MathUtils = MathUtils; + var Interpolation = (function () { + function Interpolation() { + } + Interpolation.prototype.apply = function (start, end, a) { + return start + (end - start) * this.applyInternal(a); + }; + return Interpolation; + }()); + spine.Interpolation = Interpolation; + var Pow = (function (_super) { + __extends(Pow, _super); + function Pow(power) { + var _this = _super.call(this) || this; + _this.power = 2; + _this.power = power; + return _this; + } + Pow.prototype.applyInternal = function (a) { + if (a <= 0.5) + return Math.pow(a * 2, this.power) / 2; + return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; + }; + return Pow; + }(Interpolation)); + spine.Pow = Pow; + var PowOut = (function (_super) { + __extends(PowOut, _super); + function PowOut(power) { + return _super.call(this, power) || this; + } + PowOut.prototype.applyInternal = function (a) { + return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; + }; + return PowOut; + }(Pow)); + spine.PowOut = PowOut; + var Utils = (function () { + function Utils() { + } + Utils.arrayCopy = function (source, sourceStart, dest, destStart, numElements) { + for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { + dest[j] = source[i]; + } + }; + Utils.setArraySize = function (array, size, value) { + if (value === void 0) { value = 0; } + var oldSize = array.length; + if (oldSize == size) + return array; + array.length = size; + if (oldSize < size) { + for (var i = oldSize; i < size; i++) + array[i] = value; + } + return array; + }; + Utils.ensureArrayCapacity = function (array, size, value) { + if (value === void 0) { value = 0; } + if (array.length >= size) + return array; + return Utils.setArraySize(array, size, value); + }; + Utils.newArray = function (size, defaultValue) { + var array = new Array(size); + for (var i = 0; i < size; i++) + array[i] = defaultValue; + return array; + }; + Utils.newFloatArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Float32Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.newShortArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Int16Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.toFloatArray = function (array) { + return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + }; + Utils.toSinglePrecision = function (value) { + return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + }; + Utils.webkit602BugfixHelper = function (alpha, blend) { + }; + Utils.contains = function (array, element, identity) { + if (identity === void 0) { identity = true; } + for (var i = 0; i < array.length; i++) { + if (array[i] == element) + return true; + } + return false; + }; + Utils.SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== "undefined"; + return Utils; + }()); + spine.Utils = Utils; + var DebugUtils = (function () { + function DebugUtils() { + } + DebugUtils.logBones = function (skeleton) { + for (var i = 0; i < skeleton.bones.length; i++) { + var bone = skeleton.bones[i]; + console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); + } + }; + return DebugUtils; + }()); + spine.DebugUtils = DebugUtils; + var Pool = (function () { + function Pool(instantiator) { + this.items = new Array(); + this.instantiator = instantiator; + } + Pool.prototype.obtain = function () { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + }; + Pool.prototype.free = function (item) { + if (item.reset) + item.reset(); + this.items.push(item); + }; + Pool.prototype.freeAll = function (items) { + for (var i = 0; i < items.length; i++) { + this.free(items[i]); + } + }; + Pool.prototype.clear = function () { + this.items.length = 0; + }; + return Pool; + }()); + spine.Pool = Pool; + var Vector2 = (function () { + function Vector2(x, y) { + if (x === void 0) { x = 0; } + if (y === void 0) { y = 0; } + this.x = x; + this.y = y; + } + Vector2.prototype.set = function (x, y) { + this.x = x; + this.y = y; + return this; + }; + Vector2.prototype.length = function () { + var x = this.x; + var y = this.y; + return Math.sqrt(x * x + y * y); + }; + Vector2.prototype.normalize = function () { + var len = this.length(); + if (len != 0) { + this.x /= len; + this.y /= len; + } + return this; + }; + return Vector2; + }()); + spine.Vector2 = Vector2; + var TimeKeeper = (function () { + function TimeKeeper() { + this.maxDelta = 0.064; + this.framesPerSecond = 0; + this.delta = 0; + this.totalTime = 0; + this.lastTime = Date.now() / 1000; + this.frameCount = 0; + this.frameTime = 0; + } + TimeKeeper.prototype.update = function () { + var now = Date.now() / 1000; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + if (this.delta > this.maxDelta) + this.delta = this.maxDelta; + this.lastTime = now; + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + }; + return TimeKeeper; + }()); + spine.TimeKeeper = TimeKeeper; + var WindowedMean = (function () { + function WindowedMean(windowSize) { + if (windowSize === void 0) { windowSize = 32; } + this.addedValues = 0; + this.lastValue = 0; + this.mean = 0; + this.dirty = true; + this.values = new Array(windowSize); + } + WindowedMean.prototype.hasEnoughData = function () { + return this.addedValues >= this.values.length; + }; + WindowedMean.prototype.addValue = function (value) { + if (this.addedValues < this.values.length) + this.addedValues++; + this.values[this.lastValue++] = value; + if (this.lastValue > this.values.length - 1) + this.lastValue = 0; + this.dirty = true; + }; + WindowedMean.prototype.getMean = function () { + if (this.hasEnoughData()) { + if (this.dirty) { + var mean = 0; + for (var i = 0; i < this.values.length; i++) { + mean += this.values[i]; + } + this.mean = mean / this.values.length; + this.dirty = false; + } + return this.mean; + } + else { + return 0; + } + }; + return WindowedMean; + }()); + spine.WindowedMean = WindowedMean; +})(spine || (spine = {})); +(function () { + if (!Math.fround) { + Math.fround = (function (array) { + return function (x) { + return array[0] = x, array[0]; + }; + })(new Float32Array(1)); + } +})(); +var spine; +(function (spine) { + var Attachment = (function () { + function Attachment(name) { + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + return Attachment; + }()); + spine.Attachment = Attachment; + var VertexAttachment = (function (_super) { + __extends(VertexAttachment, _super); + function VertexAttachment(name) { + var _this = _super.call(this, name) || this; + _this.id = (VertexAttachment.nextID++ & 65535) << 11; + _this.worldVerticesLength = 0; + _this.deformAttachment = _this; + return _this; + } + VertexAttachment.prototype.computeWorldVertices = function (slot, start, count, worldVertices, offset, stride) { + count = offset + (count >> 1) * stride; + var skeleton = slot.bone.skeleton; + var deformArray = slot.deform; + var vertices = this.vertices; + var bones = this.bones; + if (bones == null) { + if (deformArray.length > 0) + vertices = deformArray; + var bone = slot.bone; + var x = bone.worldX; + var y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) { + var vx = vertices[v_1], vy = vertices[v_1 + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + var v = 0, skip = 0; + for (var i = 0; i < start; i += 2) { + var n = bones[v]; + v += n + 1; + skip += n; + } + var skeletonBones = skeleton.bones; + if (deformArray.length == 0) { + for (var w = offset, b = skip * 3; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + else { + var deform = deformArray; + for (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + }; + VertexAttachment.prototype.copyTo = function (attachment) { + if (this.bones != null) { + attachment.bones = new Array(this.bones.length); + spine.Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); + } + else + attachment.bones = null; + if (this.vertices != null) { + attachment.vertices = spine.Utils.newFloatArray(this.vertices.length); + spine.Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); + } + else + attachment.vertices = null; + attachment.worldVerticesLength = this.worldVerticesLength; + attachment.deformAttachment = this.deformAttachment; + }; + VertexAttachment.nextID = 0; + return VertexAttachment; + }(Attachment)); + spine.VertexAttachment = VertexAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AttachmentType; + (function (AttachmentType) { + AttachmentType[AttachmentType["Region"] = 0] = "Region"; + AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox"; + AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh"; + AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh"; + AttachmentType[AttachmentType["Path"] = 4] = "Path"; + AttachmentType[AttachmentType["Point"] = 5] = "Point"; + AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping"; + })(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoundingBoxAttachment = (function (_super) { + __extends(BoundingBoxAttachment, _super); + function BoundingBoxAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + BoundingBoxAttachment.prototype.copy = function () { + var copy = new BoundingBoxAttachment(this.name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + }; + return BoundingBoxAttachment; + }(spine.VertexAttachment)); + spine.BoundingBoxAttachment = BoundingBoxAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var ClippingAttachment = (function (_super) { + __extends(ClippingAttachment, _super); + function ClippingAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.2275, 0.2275, 0.8078, 1); + return _this; + } + ClippingAttachment.prototype.copy = function () { + var copy = new ClippingAttachment(this.name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.color.setFromColor(this.color); + return copy; + }; + return ClippingAttachment; + }(spine.VertexAttachment)); + spine.ClippingAttachment = ClippingAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var MeshAttachment = (function (_super) { + __extends(MeshAttachment, _super); + function MeshAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + _this.tempColor = new spine.Color(0, 0, 0, 0); + return _this; + } + MeshAttachment.prototype.updateUVs = function () { + var regionUVs = this.regionUVs; + if (this.uvs == null || this.uvs.length != regionUVs.length) + this.uvs = spine.Utils.newFloatArray(regionUVs.length); + var uvs = this.uvs; + var n = this.uvs.length; + var u = this.region.u, v = this.region.v, width = 0, height = 0; + if (this.region instanceof spine.TextureAtlasRegion) { + var region = this.region; + var textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height; + switch (region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; + } + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } + else if (this.region == null) { + u = v = 0; + width = height = 1; + } + else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + }; + MeshAttachment.prototype.getParentMesh = function () { + return this.parentMesh; + }; + MeshAttachment.prototype.setParentMesh = function (parentMesh) { + this.parentMesh = parentMesh; + if (parentMesh != null) { + this.bones = parentMesh.bones; + this.vertices = parentMesh.vertices; + this.worldVerticesLength = parentMesh.worldVerticesLength; + this.regionUVs = parentMesh.regionUVs; + this.triangles = parentMesh.triangles; + this.hullLength = parentMesh.hullLength; + this.worldVerticesLength = parentMesh.worldVerticesLength; + } + }; + MeshAttachment.prototype.copy = function () { + if (this.parentMesh != null) + return this.newLinkedMesh(); + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + this.copyTo(copy); + copy.regionUVs = new Array(this.regionUVs.length); + spine.Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.uvs = new Array(this.uvs.length); + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); + copy.triangles = new Array(this.triangles.length); + spine.Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + if (this.edges != null) { + copy.edges = new Array(this.edges.length); + spine.Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + return copy; + }; + MeshAttachment.prototype.newLinkedMesh = function () { + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + copy.deformAttachment = this.deformAttachment; + copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this); + copy.updateUVs(); + return copy; + }; + return MeshAttachment; + }(spine.VertexAttachment)); + spine.MeshAttachment = MeshAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathAttachment = (function (_super) { + __extends(PathAttachment, _super); + function PathAttachment(name) { + var _this = _super.call(this, name) || this; + _this.closed = false; + _this.constantSpeed = false; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + PathAttachment.prototype.copy = function () { + var copy = new PathAttachment(this.name); + this.copyTo(copy); + copy.lengths = new Array(this.lengths.length); + spine.Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + }; + return PathAttachment; + }(spine.VertexAttachment)); + spine.PathAttachment = PathAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PointAttachment = (function (_super) { + __extends(PointAttachment, _super); + function PointAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.38, 0.94, 0, 1); + return _this; + } + PointAttachment.prototype.computeWorldPosition = function (bone, point) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + }; + PointAttachment.prototype.computeWorldRotation = function (bone) { + var cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation); + var x = cos * bone.a + sin * bone.b; + var y = cos * bone.c + sin * bone.d; + return Math.atan2(y, x) * spine.MathUtils.radDeg; + }; + PointAttachment.prototype.copy = function () { + var copy = new PointAttachment(this.name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + }; + return PointAttachment; + }(spine.VertexAttachment)); + spine.PointAttachment = PointAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var RegionAttachment = (function (_super) { + __extends(RegionAttachment, _super); + function RegionAttachment(name) { + var _this = _super.call(this, name) || this; + _this.x = 0; + _this.y = 0; + _this.scaleX = 1; + _this.scaleY = 1; + _this.rotation = 0; + _this.width = 0; + _this.height = 0; + _this.color = new spine.Color(1, 1, 1, 1); + _this.offset = spine.Utils.newFloatArray(8); + _this.uvs = spine.Utils.newFloatArray(8); + _this.tempColor = new spine.Color(1, 1, 1, 1); + return _this; + } + RegionAttachment.prototype.updateOffset = function () { + var regionScaleX = this.width / this.region.originalWidth * this.scaleX; + var regionScaleY = this.height / this.region.originalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY; + var localX2 = localX + this.region.width * regionScaleX; + var localY2 = localY + this.region.height * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[RegionAttachment.OX1] = localXCos - localYSin; + offset[RegionAttachment.OY1] = localYCos + localXSin; + offset[RegionAttachment.OX2] = localXCos - localY2Sin; + offset[RegionAttachment.OY2] = localY2Cos + localXSin; + offset[RegionAttachment.OX3] = localX2Cos - localY2Sin; + offset[RegionAttachment.OY3] = localY2Cos + localX2Sin; + offset[RegionAttachment.OX4] = localX2Cos - localYSin; + offset[RegionAttachment.OY4] = localYCos + localX2Sin; + }; + RegionAttachment.prototype.setRegion = function (region) { + this.region = region; + var uvs = this.uvs; + if (region.rotate) { + uvs[2] = region.u; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v; + uvs[0] = region.u2; + uvs[1] = region.v2; + } + else { + uvs[0] = region.u; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v2; + } + }; + RegionAttachment.prototype.computeWorldVertices = function (bone, worldVertices, offset, stride) { + var vertexOffset = this.offset; + var x = bone.worldX, y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var offsetX = 0, offsetY = 0; + offsetX = vertexOffset[RegionAttachment.OX1]; + offsetY = vertexOffset[RegionAttachment.OY1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX2]; + offsetY = vertexOffset[RegionAttachment.OY2]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX3]; + offsetY = vertexOffset[RegionAttachment.OY3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX4]; + offsetY = vertexOffset[RegionAttachment.OY4]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + }; + RegionAttachment.prototype.copy = function () { + var copy = new RegionAttachment(this.name); + copy.region = this.region; + copy.rendererObject = this.rendererObject; + copy.path = this.path; + copy.x = this.x; + copy.y = this.y; + copy.scaleX = this.scaleX; + copy.scaleY = this.scaleY; + copy.rotation = this.rotation; + copy.width = this.width; + copy.height = this.height; + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); + spine.Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); + copy.color.setFromColor(this.color); + return copy; + }; + RegionAttachment.OX1 = 0; + RegionAttachment.OY1 = 1; + RegionAttachment.OX2 = 2; + RegionAttachment.OY2 = 3; + RegionAttachment.OX3 = 4; + RegionAttachment.OY3 = 5; + RegionAttachment.OX4 = 6; + RegionAttachment.OY4 = 7; + RegionAttachment.X1 = 0; + RegionAttachment.Y1 = 1; + RegionAttachment.C1R = 2; + RegionAttachment.C1G = 3; + RegionAttachment.C1B = 4; + RegionAttachment.C1A = 5; + RegionAttachment.U1 = 6; + RegionAttachment.V1 = 7; + RegionAttachment.X2 = 8; + RegionAttachment.Y2 = 9; + RegionAttachment.C2R = 10; + RegionAttachment.C2G = 11; + RegionAttachment.C2B = 12; + RegionAttachment.C2A = 13; + RegionAttachment.U2 = 14; + RegionAttachment.V2 = 15; + RegionAttachment.X3 = 16; + RegionAttachment.Y3 = 17; + RegionAttachment.C3R = 18; + RegionAttachment.C3G = 19; + RegionAttachment.C3B = 20; + RegionAttachment.C3A = 21; + RegionAttachment.U3 = 22; + RegionAttachment.V3 = 23; + RegionAttachment.X4 = 24; + RegionAttachment.Y4 = 25; + RegionAttachment.C4R = 26; + RegionAttachment.C4G = 27; + RegionAttachment.C4B = 28; + RegionAttachment.C4A = 29; + RegionAttachment.U4 = 30; + RegionAttachment.V4 = 31; + return RegionAttachment; + }(spine.Attachment)); + spine.RegionAttachment = RegionAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var JitterEffect = (function () { + function JitterEffect(jitterX, jitterY) { + this.jitterX = 0; + this.jitterY = 0; + this.jitterX = jitterX; + this.jitterY = jitterY; + } + JitterEffect.prototype.begin = function (skeleton) { + }; + JitterEffect.prototype.transform = function (position, uv, light, dark) { + position.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + position.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + }; + JitterEffect.prototype.end = function () { + }; + return JitterEffect; + }()); + spine.JitterEffect = JitterEffect; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SwirlEffect = (function () { + function SwirlEffect(radius) { + this.centerX = 0; + this.centerY = 0; + this.radius = 0; + this.angle = 0; + this.worldX = 0; + this.worldY = 0; + this.radius = radius; + } + SwirlEffect.prototype.begin = function (skeleton) { + this.worldX = skeleton.x + this.centerX; + this.worldY = skeleton.y + this.centerY; + }; + SwirlEffect.prototype.transform = function (position, uv, light, dark) { + var radAngle = this.angle * spine.MathUtils.degreesToRadians; + var x = position.x - this.worldX; + var y = position.y - this.worldY; + var dist = Math.sqrt(x * x + y * y); + if (dist < this.radius) { + var theta = SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius); + var cos = Math.cos(theta); + var sin = Math.sin(theta); + position.x = cos * x - sin * y + this.worldX; + position.y = sin * x + cos * y + this.worldY; + } + }; + SwirlEffect.prototype.end = function () { + }; + SwirlEffect.interpolation = new spine.PowOut(2); + return SwirlEffect; + }()); + spine.SwirlEffect = SwirlEffect; +})(spine || (spine = {})); +var spine; +(function (spine) { + var threejs; + (function (threejs) { + var AssetManager = (function (_super) { + __extends(AssetManager, _super); + function AssetManager(pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + return _super.call(this, function (image) { + return new threejs.ThreeJsTexture(image); + }, pathPrefix) || this; + } + return AssetManager; + }(spine.AssetManager)); + threejs.AssetManager = AssetManager; + })(threejs = spine.threejs || (spine.threejs = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var threejs; + (function (threejs) { + var MeshBatcher = (function (_super) { + __extends(MeshBatcher, _super); + function MeshBatcher(maxVertices, materialCustomizer) { + if (maxVertices === void 0) { maxVertices = 10920; } + if (materialCustomizer === void 0) { materialCustomizer = function (parameters) { }; } + var _this = _super.call(this) || this; + _this.verticesLength = 0; + _this.indicesLength = 0; + if (maxVertices > 10920) + throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); + var vertices = _this.vertices = new Float32Array(maxVertices * MeshBatcher.VERTEX_SIZE); + var indices = _this.indices = new Uint16Array(maxVertices * 3); + var geo = new THREE.BufferGeometry(); + var vertexBuffer = _this.vertexBuffer = new THREE.InterleavedBuffer(vertices, MeshBatcher.VERTEX_SIZE); + vertexBuffer.usage = WebGLRenderingContext.DYNAMIC_DRAW; + geo.setAttribute("position", new THREE.InterleavedBufferAttribute(vertexBuffer, 3, 0, false)); + geo.setAttribute("color", new THREE.InterleavedBufferAttribute(vertexBuffer, 4, 3, false)); + geo.setAttribute("uv", new THREE.InterleavedBufferAttribute(vertexBuffer, 2, 7, false)); + geo.setIndex(new THREE.BufferAttribute(indices, 1)); + geo.getIndex().usage = WebGLRenderingContext.DYNAMIC_DRAW; + ; + geo.drawRange.start = 0; + geo.drawRange.count = 0; + _this.geometry = geo; + _this.material = new threejs.SkeletonMeshMaterial(materialCustomizer); + return _this; + } + MeshBatcher.prototype.dispose = function () { + this.geometry.dispose(); + if (this.material instanceof THREE.Material) + this.material.dispose(); + else if (this.material) { + for (var i = 0; i < this.material.length; i++) { + var material = this.material[i]; + if (material instanceof THREE.Material) + material.dispose(); + } + } + }; + MeshBatcher.prototype.clear = function () { + var geo = this.geometry; + geo.drawRange.start = 0; + geo.drawRange.count = 0; + this.material.uniforms.map.value = null; + }; + MeshBatcher.prototype.begin = function () { + this.verticesLength = 0; + this.indicesLength = 0; + }; + MeshBatcher.prototype.canBatch = function (verticesLength, indicesLength) { + if (this.indicesLength + indicesLength >= this.indices.byteLength / 2) + return false; + if (this.verticesLength + verticesLength >= this.vertices.byteLength / 2) + return false; + return true; + }; + MeshBatcher.prototype.batch = function (vertices, verticesLength, indices, indicesLength, z) { + if (z === void 0) { z = 0; } + var indexStart = this.verticesLength / MeshBatcher.VERTEX_SIZE; + var vertexBuffer = this.vertices; + var i = this.verticesLength; + var j = 0; + for (; j < verticesLength;) { + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = z; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + } + this.verticesLength = i; + var indicesArray = this.indices; + for (i = this.indicesLength, j = 0; j < indicesLength; i++, j++) + indicesArray[i] = indices[j] + indexStart; + this.indicesLength += indicesLength; + }; + MeshBatcher.prototype.end = function () { + this.vertexBuffer.needsUpdate = this.verticesLength > 0; + this.vertexBuffer.updateRange.offset = 0; + this.vertexBuffer.updateRange.count = this.verticesLength; + var geo = this.geometry; + geo.getIndex().needsUpdate = this.indicesLength > 0; + geo.getIndex().updateRange.offset = 0; + geo.getIndex().updateRange.count = this.indicesLength; + geo.drawRange.start = 0; + geo.drawRange.count = this.indicesLength; + }; + MeshBatcher.VERTEX_SIZE = 9; + return MeshBatcher; + }(THREE.Mesh)); + threejs.MeshBatcher = MeshBatcher; + })(threejs = spine.threejs || (spine.threejs = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var threejs; + (function (threejs) { + var SkeletonMeshMaterial = (function (_super) { + __extends(SkeletonMeshMaterial, _super); + function SkeletonMeshMaterial(customizer) { + var _this = this; + var vertexShader = "\n\t\t\t\tattribute vec4 color;\n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tvarying vec4 vColor;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvColor = color;\n\t\t\t\t\tgl_Position = projectionMatrix*modelViewMatrix*vec4(position,1.0);\n\t\t\t\t}\n\t\t\t"; + var fragmentShader = "\n\t\t\t\tuniform sampler2D map;\n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tvarying vec4 vColor;\n\t\t\t\tvoid main(void) {\n\t\t\t\t\tgl_FragColor = texture2D(map, vUv)*vColor;\n\t\t\t\t}\n\t\t\t"; + var parameters = { + uniforms: { + map: { type: "t", value: null } + }, + vertexShader: vertexShader, + fragmentShader: fragmentShader, + side: THREE.DoubleSide, + transparent: true, + alphaTest: 0.5 + }; + customizer(parameters); + _this = _super.call(this, parameters) || this; + return _this; + } + ; + return SkeletonMeshMaterial; + }(THREE.ShaderMaterial)); + threejs.SkeletonMeshMaterial = SkeletonMeshMaterial; + var SkeletonMesh = (function (_super) { + __extends(SkeletonMesh, _super); + function SkeletonMesh(skeletonData, materialCustomizer) { + if (materialCustomizer === void 0) { materialCustomizer = function (parameters) { }; } + var _this = _super.call(this) || this; + _this.tempPos = new spine.Vector2(); + _this.tempUv = new spine.Vector2(); + _this.tempLight = new spine.Color(); + _this.tempDark = new spine.Color(); + _this.zOffset = 0.1; + _this.batches = new Array(); + _this.nextBatchIndex = 0; + _this.clipper = new spine.SkeletonClipping(); + _this.vertices = spine.Utils.newFloatArray(1024); + _this.tempColor = new spine.Color(); + _this.materialCustomizer = materialCustomizer; + _this.skeleton = new spine.Skeleton(skeletonData); + var animData = new spine.AnimationStateData(skeletonData); + _this.state = new spine.AnimationState(animData); + return _this; + } + SkeletonMesh.prototype.update = function (deltaTime) { + var state = this.state; + var skeleton = this.skeleton; + state.update(deltaTime); + state.apply(skeleton); + skeleton.updateWorldTransform(); + this.updateGeometry(); + }; + SkeletonMesh.prototype.dispose = function () { + for (var i = 0; i < this.batches.length; i++) { + this.batches[i].dispose(); + } + }; + SkeletonMesh.prototype.clearBatches = function () { + for (var i = 0; i < this.batches.length; i++) { + this.batches[i].clear(); + this.batches[i].visible = false; + } + this.nextBatchIndex = 0; + }; + SkeletonMesh.prototype.nextBatch = function () { + if (this.batches.length == this.nextBatchIndex) { + var batch_1 = new threejs.MeshBatcher(10920, this.materialCustomizer); + this.add(batch_1); + this.batches.push(batch_1); + } + var batch = this.batches[this.nextBatchIndex++]; + batch.visible = true; + return batch; + }; + SkeletonMesh.prototype.updateGeometry = function () { + this.clearBatches(); + var tempPos = this.tempPos; + var tempUv = this.tempUv; + var tempLight = this.tempLight; + var tempDark = this.tempDark; + var numVertices = 0; + var verticesLength = 0; + var indicesLength = 0; + var blendMode = null; + var clipper = this.clipper; + var vertices = this.vertices; + var triangles = null; + var uvs = null; + var drawOrder = this.skeleton.drawOrder; + var batch = this.nextBatch(); + batch.begin(); + var z = 0; + var zOffset = this.zOffset; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var vertexSize = clipper.isClipping() ? 2 : SkeletonMesh.VERTEX_SIZE; + var slot = drawOrder[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + var attachmentColor = null; + var texture = null; + var numFloats = 0; + if (attachment instanceof spine.RegionAttachment) { + var region = attachment; + attachmentColor = region.color; + vertices = this.vertices; + numFloats = vertexSize * 4; + region.computeWorldVertices(slot.bone, vertices, 0, vertexSize); + triangles = SkeletonMesh.QUAD_TRIANGLES; + uvs = region.uvs; + texture = region.region.renderObject.texture; + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + attachmentColor = mesh.color; + vertices = this.vertices; + numFloats = (mesh.worldVerticesLength >> 1) * vertexSize; + if (numFloats > vertices.length) { + vertices = this.vertices = spine.Utils.newFloatArray(numFloats); + } + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, vertexSize); + triangles = mesh.triangles; + uvs = mesh.uvs; + texture = mesh.region.renderObject.texture; + } + else if (attachment instanceof spine.ClippingAttachment) { + var clip = (attachment); + clipper.clipStart(slot, clip); + continue; + } + else + continue; + if (texture != null) { + var skeleton = slot.bone.skeleton; + var skeletonColor = skeleton.color; + var slotColor = slot.color; + var alpha = skeletonColor.a * slotColor.a * attachmentColor.a; + var color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * attachmentColor.r, skeletonColor.g * slotColor.g * attachmentColor.g, skeletonColor.b * slotColor.b * attachmentColor.b, alpha); + var finalVertices = void 0; + var finalVerticesLength = void 0; + var finalIndices = void 0; + var finalIndicesLength = void 0; + if (clipper.isClipping()) { + clipper.clipTriangles(vertices, numFloats, triangles, triangles.length, uvs, color, null, false); + var clippedVertices = clipper.clippedVertices; + var clippedTriangles = clipper.clippedTriangles; + if (this.vertexEffect != null) { + var vertexEffect = this.vertexEffect; + var verts = clippedVertices; + for (var v = 0, n_3 = clippedVertices.length; v < n_3; v += vertexSize) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.setFromColor(color); + tempDark.set(0, 0, 0, 0); + tempUv.x = verts[v + 6]; + tempUv.y = verts[v + 7]; + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } + finalVertices = clippedVertices; + finalVerticesLength = clippedVertices.length; + finalIndices = clippedTriangles; + finalIndicesLength = clippedTriangles.length; + } + else { + var verts = vertices; + if (this.vertexEffect != null) { + var vertexEffect = this.vertexEffect; + for (var v = 0, u = 0, n_4 = numFloats; v < n_4; v += vertexSize, u += 2) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.setFromColor(color); + tempDark.set(0, 0, 0, 0); + tempUv.x = uvs[u]; + tempUv.y = uvs[u + 1]; + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } + else { + for (var v = 2, u = 0, n_5 = numFloats; v < n_5; v += vertexSize, u += 2) { + verts[v] = color.r; + verts[v + 1] = color.g; + verts[v + 2] = color.b; + verts[v + 3] = color.a; + verts[v + 4] = uvs[u]; + verts[v + 5] = uvs[u + 1]; + } + } + finalVertices = vertices; + finalVerticesLength = numFloats; + finalIndices = triangles; + finalIndicesLength = triangles.length; + } + if (finalVerticesLength == 0 || finalIndicesLength == 0) + continue; + if (!batch.canBatch(finalVerticesLength, finalIndicesLength)) { + batch.end(); + batch = this.nextBatch(); + batch.begin(); + } + var batchMaterial = batch.material; + if (batchMaterial.uniforms.map.value == null) { + batchMaterial.uniforms.map.value = texture.texture; + } + if (batchMaterial.uniforms.map.value != texture.texture) { + batch.end(); + batch = this.nextBatch(); + batch.begin(); + batchMaterial = batch.material; + batchMaterial.uniforms.map.value = texture.texture; + } + batchMaterial.needsUpdate = true; + batch.batch(finalVertices, finalVerticesLength, finalIndices, finalIndicesLength, z); + z += zOffset; + } + clipper.clipEndWithSlot(slot); + } + clipper.clipEnd(); + batch.end(); + }; + SkeletonMesh.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + SkeletonMesh.VERTEX_SIZE = 2 + 2 + 4; + return SkeletonMesh; + }(THREE.Object3D)); + threejs.SkeletonMesh = SkeletonMesh; + })(threejs = spine.threejs || (spine.threejs = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var threejs; + (function (threejs) { + var ThreeJsTexture = (function (_super) { + __extends(ThreeJsTexture, _super); + function ThreeJsTexture(image) { + var _this = _super.call(this, image) || this; + _this.texture = new THREE.Texture(image); + _this.texture.flipY = false; + _this.texture.needsUpdate = true; + return _this; + } + ThreeJsTexture.prototype.setFilters = function (minFilter, magFilter) { + this.texture.minFilter = ThreeJsTexture.toThreeJsTextureFilter(minFilter); + this.texture.magFilter = ThreeJsTexture.toThreeJsTextureFilter(magFilter); + }; + ThreeJsTexture.prototype.setWraps = function (uWrap, vWrap) { + this.texture.wrapS = ThreeJsTexture.toThreeJsTextureWrap(uWrap); + this.texture.wrapT = ThreeJsTexture.toThreeJsTextureWrap(vWrap); + }; + ThreeJsTexture.prototype.dispose = function () { + this.texture.dispose(); + }; + ThreeJsTexture.toThreeJsTextureFilter = function (filter) { + if (filter === spine.TextureFilter.Linear) + return THREE.LinearFilter; + else if (filter === spine.TextureFilter.MipMap) + return THREE.LinearMipMapLinearFilter; + else if (filter === spine.TextureFilter.MipMapLinearNearest) + return THREE.LinearMipMapNearestFilter; + else if (filter === spine.TextureFilter.MipMapNearestLinear) + return THREE.NearestMipMapLinearFilter; + else if (filter === spine.TextureFilter.MipMapNearestNearest) + return THREE.NearestMipMapNearestFilter; + else if (filter === spine.TextureFilter.Nearest) + return THREE.NearestFilter; + else + throw new Error("Unknown texture filter: " + filter); + }; + ThreeJsTexture.toThreeJsTextureWrap = function (wrap) { + if (wrap === spine.TextureWrap.ClampToEdge) + return THREE.ClampToEdgeWrapping; + else if (wrap === spine.TextureWrap.MirroredRepeat) + return THREE.MirroredRepeatWrapping; + else if (wrap === spine.TextureWrap.Repeat) + return THREE.RepeatWrapping; + else + throw new Error("Unknown texture wrap: " + wrap); + }; + return ThreeJsTexture; + }(spine.Texture)); + threejs.ThreeJsTexture = ThreeJsTexture; + })(threejs = spine.threejs || (spine.threejs = {})); +})(spine || (spine = {})); +//# sourceMappingURL=spine-threejs.js.map \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-threejs.js.map b/apps/module-ts/src/spine-ts/build/spine-threejs.js.map new file mode 100755 index 0000000..ba88aa3 --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-threejs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spine-threejs.js","sourceRoot":"","sources":["../core/src/Animation.ts","../core/src/AnimationState.ts","../core/src/AnimationStateData.ts","../core/src/AssetManager.ts","../core/src/AtlasAttachmentLoader.ts","../core/src/BlendMode.ts","../core/src/Bone.ts","../core/src/BoneData.ts","../core/src/ConstraintData.ts","../core/src/Event.ts","../core/src/EventData.ts","../core/src/IkConstraint.ts","../core/src/IkConstraintData.ts","../core/src/PathConstraint.ts","../core/src/PathConstraintData.ts","../core/src/SharedAssetManager.ts","../core/src/Skeleton.ts","../core/src/SkeletonBinary.ts","../core/src/SkeletonBounds.ts","../core/src/SkeletonClipping.ts","../core/src/SkeletonData.ts","../core/src/SkeletonJson.ts","../core/src/Skin.ts","../core/src/Slot.ts","../core/src/SlotData.ts","../core/src/Texture.ts","../core/src/TextureAtlas.ts","../core/src/TransformConstraint.ts","../core/src/TransformConstraintData.ts","../core/src/Triangulator.ts","../core/src/Updatable.ts","../core/src/Utils.ts","../core/src/VertexEffect.ts","../core/src/polyfills.ts","../core/src/attachments/Attachment.ts","../core/src/attachments/AttachmentLoader.ts","../core/src/attachments/AttachmentType.ts","../core/src/attachments/BoundingBoxAttachment.ts","../core/src/attachments/ClippingAttachment.ts","../core/src/attachments/MeshAttachment.ts","../core/src/attachments/PathAttachment.ts","../core/src/attachments/PointAttachment.ts","../core/src/attachments/RegionAttachment.ts","../core/src/vertexeffects/JitterEffect.ts","../core/src/vertexeffects/SwirlEffect.ts","../threejs/src/AssetManager.ts","../threejs/src/MeshBatcher.ts","../threejs/src/SkeletonMesh.ts","../threejs/src/ThreeJsTexture.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-webgl.d.ts b/apps/module-ts/src/spine-ts/build/spine-webgl.d.ts new file mode 100755 index 0000000..af34ec6 --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-webgl.d.ts @@ -0,0 +1,1777 @@ +/// +declare module spine { + class Animation { + name: string; + timelines: Array; + timelineIds: Array; + duration: number; + constructor(name: string, timelines: Array, duration: number); + hasTimeline(id: number): boolean; + apply(skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + static binarySearch(values: ArrayLike, target: number, step?: number): number; + static linearSearch(values: ArrayLike, target: number, step: number): number; + } + interface Timeline { + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + getPropertyId(): number; + } + enum MixBlend { + setup = 0, + first = 1, + replace = 2, + add = 3 + } + enum MixDirection { + mixIn = 0, + mixOut = 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, degrees: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, x: number, y: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ScaleTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class ShearTimeline extends TranslateTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class AttachmentTimeline implements Timeline { + slotIndex: number; + frames: ArrayLike; + attachmentNames: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, attachmentName: string): void; + apply(skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string): void; + } + class DeformTimeline extends CurveTimeline { + slotIndex: number; + attachment: VertexAttachment; + frames: ArrayLike; + frameVertices: Array>; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, vertices: ArrayLike): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class EventTimeline implements Timeline { + frames: ArrayLike; + events: Array; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, event: Event): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class DrawOrderTimeline implements Timeline { + frames: ArrayLike; + drawOrders: Array>; + constructor(frameCount: number); + getPropertyId(): number; + getFrameCount(): number; + setFrame(frameIndex: number, time: number, drawOrder: Array): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class IkConstraintTimeline extends CurveTimeline { + static ENTRIES: number; + static PREV_TIME: number; + static PREV_MIX: number; + static PREV_SOFTNESS: number; + static PREV_BEND_DIRECTION: number; + static PREV_COMPRESS: number; + static PREV_STRETCH: number; + static MIX: number; + static SOFTNESS: number; + static BEND_DIRECTION: number; + static COMPRESS: number; + static STRETCH: number; + ikConstraintIndex: number; + frames: ArrayLike; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, mix: number, softness: number, bendDirection: number, compress: boolean, stretch: boolean): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + 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, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, value: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + class PathConstraintSpacingTimeline extends PathConstraintPositionTimeline { + constructor(frameCount: number); + getPropertyId(): number; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, 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; + constructor(frameCount: number); + getPropertyId(): number; + setFrame(frameIndex: number, time: number, rotateMix: number, translateMix: number): void; + apply(skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } +} +declare module spine { + class AnimationState { + static emptyAnimation: Animation; + static SUBSEQUENT: number; + static FIRST: number; + static HOLD_SUBSEQUENT: number; + static HOLD_FIRST: number; + static HOLD_MIX: number; + static SETUP: number; + static CURRENT: number; + data: AnimationStateData; + tracks: TrackEntry[]; + timeScale: number; + unkeyedState: number; + events: Event[]; + listeners: AnimationStateListener[]; + queue: EventQueue; + propertyIDs: IntSet; + animationsChanged: boolean; + trackEntryPool: Pool; + constructor(data: AnimationStateData); + update(delta: number): void; + updateMixingFrom(to: TrackEntry, delta: number): boolean; + apply(skeleton: Skeleton): boolean; + applyMixingFrom(to: TrackEntry, skeleton: Skeleton, blend: MixBlend): number; + applyAttachmentTimeline(timeline: AttachmentTimeline, skeleton: Skeleton, time: number, blend: MixBlend, attachments: boolean): void; + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string, attachments: boolean): void; + applyRotateTimeline(timeline: Timeline, skeleton: Skeleton, time: number, alpha: number, blend: MixBlend, timelinesRotation: Array, 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; + computeHold(entry: TrackEntry): void; + getCurrent(trackIndex: number): TrackEntry; + addListener(listener: AnimationStateListener): void; + removeListener(listener: AnimationStateListener): void; + clearListeners(): void; + clearListenerNotifications(): void; + } + class TrackEntry { + animation: Animation; + next: TrackEntry; + mixingFrom: TrackEntry; + mixingTo: TrackEntry; + listener: AnimationStateListener; + trackIndex: number; + loop: boolean; + holdPrevious: 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; + mixBlend: MixBlend; + timelineMode: number[]; + timelineHoldMix: TrackEntry[]; + timelinesRotation: number[]; + reset(): void; + getAnimationTime(): number; + setAnimationLast(animationLast: number): void; + isComplete(): boolean; + resetRotationDirections(): void; + } + class EventQueue { + objects: Array; + 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 AnimationStateListener { + 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 AnimationStateAdapter implements AnimationStateListener { + 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; + 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; + private rawDataUris; + constructor(textureLoader: (image: HTMLImageElement) => any, pathPrefix?: string); + private downloadText; + private downloadBinary; + setRawDataURI(path: string, data: string): void; + loadBinary(path: string, success?: (path: string, binary: Uint8Array) => void, error?: (path: string, error: string) => void): void; + 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; + loadTextureAtlas(path: string, success?: (path: string, atlas: TextureAtlas) => 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; + } +} +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; + } +} +declare module spine { + 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; + c: number; + d: number; + worldY: number; + worldX: number; + sorted: boolean; + active: boolean; + constructor(data: BoneData, skeleton: Skeleton, parent: Bone); + isActive(): boolean; + 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; + skinRequired: boolean; + color: Color; + constructor(index: number, name: string, parent: BoneData); + } + enum TransformMode { + Normal = 0, + OnlyTranslation = 1, + NoRotationOrReflection = 2, + NoScale = 3, + NoScaleOrReflection = 4 + } +} +declare module spine { + abstract class ConstraintData { + name: string; + order: number; + skinRequired: boolean; + constructor(name: string, order: number, skinRequired: boolean); + } +} +declare module spine { + class Event { + data: EventData; + intValue: number; + floatValue: number; + stringValue: string; + time: number; + volume: number; + balance: number; + constructor(time: number, data: EventData); + } +} +declare module spine { + class EventData { + name: string; + intValue: number; + floatValue: number; + stringValue: string; + audioPath: string; + volume: number; + balance: number; + constructor(name: string); + } +} +declare module spine { + class IkConstraint implements Updatable { + data: IkConstraintData; + bones: Array; + target: Bone; + bendDirection: number; + compress: boolean; + stretch: boolean; + mix: number; + softness: number; + active: boolean; + constructor(data: IkConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + apply1(bone: Bone, targetX: number, targetY: number, compress: boolean, stretch: boolean, uniform: boolean, alpha: number): void; + apply2(parent: Bone, child: Bone, targetX: number, targetY: number, bendDir: number, stretch: boolean, softness: number, alpha: number): void; + } +} +declare module spine { + class IkConstraintData extends ConstraintData { + bones: BoneData[]; + target: BoneData; + bendDirection: number; + compress: boolean; + stretch: boolean; + uniform: boolean; + mix: number; + softness: number; + constructor(name: string); + } +} +declare module spine { + class PathConstraint implements Updatable { + static NONE: number; + static BEFORE: number; + static AFTER: number; + static epsilon: number; + data: PathConstraintData; + bones: Array; + target: Slot; + position: number; + spacing: number; + rotateMix: number; + translateMix: number; + spaces: number[]; + positions: number[]; + world: number[]; + curves: number[]; + lengths: number[]; + segments: number[]; + active: boolean; + constructor(data: PathConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + computeWorldPositions(path: PathAttachment, spacesCount: number, tangents: boolean, percentPosition: boolean, percentSpacing: boolean): number[]; + addBeforePosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addAfterPosition(p: number, temp: Array, i: number, out: Array, o: number): void; + addCurvePosition(p: number, x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, out: Array, o: number, tangents: boolean): void; + } +} +declare module spine { + class PathConstraintData extends ConstraintData { + 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 + } +} +declare module spine { + class SharedAssetManager implements Disposable { + private pathPrefix; + private clientAssets; + private queuedAssets; + private rawAssets; + private errors; + constructor(pathPrefix?: string); + private queueAsset; + loadText(clientId: string, path: string): void; + loadJson(clientId: string, path: string): void; + loadTexture(clientId: string, textureLoader: (image: HTMLImageElement | ImageBitmap) => any, path: string): void; + get(clientId: string, path: string): any; + private updateClientAssets; + isLoadingComplete(clientId: string): boolean; + dispose(): void; + hasErrors(): boolean; + getErrors(): Map; + } +} +declare module spine { + class Skeleton { + data: SkeletonData; + bones: Array; + slots: Array; + drawOrder: Array; + ikConstraints: Array; + transformConstraints: Array; + pathConstraints: Array; + _updateCache: Updatable[]; + updateCacheReset: Updatable[]; + skin: Skin; + color: Color; + time: number; + scaleX: number; + scaleY: number; + 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): 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): void; + update(delta: number): void; + } +} +declare module spine { + class SkeletonBinary { + static AttachmentTypeValues: number[]; + static TransformModeValues: TransformMode[]; + static PositionModeValues: PositionMode[]; + static SpacingModeValues: SpacingMode[]; + static RotateModeValues: RotateMode[]; + static BlendModeValues: BlendMode[]; + static BONE_ROTATE: number; + static BONE_TRANSLATE: number; + static BONE_SCALE: number; + static BONE_SHEAR: number; + static SLOT_ATTACHMENT: number; + static SLOT_COLOR: number; + static SLOT_TWO_COLOR: number; + static PATH_POSITION: number; + static PATH_SPACING: number; + static PATH_MIX: number; + static CURVE_LINEAR: number; + static CURVE_STEPPED: number; + static CURVE_BEZIER: number; + scale: number; + attachmentLoader: AttachmentLoader; + private linkedMeshes; + constructor(attachmentLoader: AttachmentLoader); + readSkeletonData(binary: Uint8Array): SkeletonData; + private readSkin; + private readAttachment; + private readVertices; + private readFloatArray; + private readShortArray; + private readAnimation; + private readCurve; + setCurve(timeline: CurveTimeline, frameIndex: number, cx1: number, cy1: number, cx2: number, cy2: number): void; + } +} +declare module spine { + class SkeletonBounds { + minX: number; + minY: number; + maxX: number; + maxY: number; + boundingBoxes: BoundingBoxAttachment[]; + polygons: ArrayLike[]; + 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, x: number, y: number): boolean; + intersectsSegment(x1: number, y1: number, x2: number, y2: number): BoundingBoxAttachment; + intersectsSegmentPolygon(polygon: ArrayLike, x1: number, y1: number, x2: number, y2: number): boolean; + getPolygon(boundingBox: BoundingBoxAttachment): ArrayLike; + 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, verticesLength: number, triangles: ArrayLike, trianglesLength: number, uvs: ArrayLike, light: Color, dark: Color, twoColor: boolean): void; + clip(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, clippingArea: Array, output: Array): boolean; + static makeClockwise(polygon: ArrayLike): 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[]; + x: number; + y: number; + width: number; + height: number; + version: string; + hash: string; + fps: number; + imagesPath: string; + audioPath: 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; + } +} +declare module spine { + class SkinEntry { + slotIndex: number; + name: string; + attachment: Attachment; + constructor(slotIndex: number, name: string, attachment: Attachment); + } + class Skin { + name: string; + attachments: Map[]; + bones: BoneData[]; + constraints: ConstraintData[]; + constructor(name: string); + setAttachment(slotIndex: number, name: string, attachment: Attachment): void; + addSkin(skin: Skin): void; + copySkin(skin: Skin): void; + getAttachment(slotIndex: number, name: string): Attachment; + removeAttachment(slotIndex: number, name: string): void; + getAttachments(): Array; + getAttachmentsForSlot(slotIndex: number, attachments: Array): void; + clear(): void; + attachAll(skeleton: Skeleton, oldSkin: Skin): void; + } +} +declare module spine { + class Slot { + data: SlotData; + bone: Bone; + color: Color; + darkColor: Color; + attachment: Attachment; + private attachmentTime; + attachmentState: number; + deform: number[]; + constructor(data: SlotData, bone: Bone); + getSkeleton(): Skeleton; + 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); + } +} +declare module spine { + abstract class Texture { + protected _image: HTMLImageElement | ImageBitmap; + constructor(image: HTMLImageElement | ImageBitmap); + getImage(): HTMLImageElement | ImageBitmap; + 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; + } + class FakeTexture extends Texture { + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + setWraps(uWrap: TextureWrap, vWrap: TextureWrap): void; + dispose(): void; + } +} +declare module spine { + class TextureAtlas implements Disposable { + pages: TextureAtlasPage[]; + regions: TextureAtlasRegion[]; + constructor(atlasText: string, textureLoader: (path: string) => any); + private load; + 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; + degrees: number; + texture: Texture; + } +} +declare module spine { + class TransformConstraint implements Updatable { + data: TransformConstraintData; + bones: Array; + target: Bone; + rotateMix: number; + translateMix: number; + scaleMix: number; + shearMix: number; + temp: Vector2; + active: boolean; + constructor(data: TransformConstraintData, skeleton: Skeleton); + isActive(): boolean; + apply(): void; + update(): void; + applyAbsoluteWorld(): void; + applyRelativeWorld(): void; + applyAbsoluteLocal(): void; + applyRelativeLocal(): void; + } +} +declare module spine { + class TransformConstraintData extends ConstraintData { + 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): Array; + decompose(verticesArray: Array, triangles: Array): Array>; + private static isConcave; + private static positiveArea; + private static winding; + } +} +declare module spine { + interface Updatable { + update(): void; + isActive(): boolean; + } +} +declare module spine { + interface Map { + [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; + static rgba8888ToColor(color: Color, value: number): void; + static rgb888ToColor(color: Color, value: number): void; + } + 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(source: ArrayLike, sourceStart: number, dest: ArrayLike, destStart: number, numElements: number): void; + static setArraySize(array: Array, size: number, value?: any): Array; + static ensureArrayCapacity(array: Array, size: number, value?: any): Array; + static newArray(size: number, defaultValue: T): Array; + static newFloatArray(size: number): ArrayLike; + static newShortArray(size: number): ArrayLike; + static toFloatArray(array: Array): number[] | Float32Array; + static toSinglePrecision(value: number): number; + static webkit602BugfixHelper(alpha: number, blend: MixBlend): void; + static contains(array: Array, element: T, identity?: boolean): boolean; + } + class DebugUtils { + static logBones(skeleton: Skeleton): void; + } + class Pool { + private items; + private instantiator; + constructor(instantiator: () => T); + obtain(): T; + free(item: T): void; + freeAll(items: ArrayLike): 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 { + length: number; + [n: number]: T; + } + class WindowedMean { + values: Array; + 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 Math { + fround(n: number): number; +} +declare module spine { + abstract class Attachment { + name: string; + constructor(name: string); + abstract copy(): Attachment; + } + abstract class VertexAttachment extends Attachment { + private static nextID; + id: number; + bones: Array; + vertices: ArrayLike; + worldVerticesLength: number; + deformAttachment: VertexAttachment; + constructor(name: string); + computeWorldVertices(slot: Slot, start: number, count: number, worldVertices: ArrayLike, offset: number, stride: number): void; + copyTo(attachment: VertexAttachment): void; + } +} +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; + } +} +declare module spine { + enum AttachmentType { + Region = 0, + BoundingBox = 1, + Mesh = 2, + LinkedMesh = 3, + Path = 4, + Point = 5, + Clipping = 6 + } +} +declare module spine { + class BoundingBoxAttachment extends VertexAttachment { + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class ClippingAttachment extends VertexAttachment { + endSlot: SlotData; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +declare module spine { + class MeshAttachment extends VertexAttachment { + region: TextureRegion; + path: string; + regionUVs: ArrayLike; + uvs: ArrayLike; + triangles: Array; + color: Color; + width: number; + height: number; + hullLength: number; + edges: Array; + private parentMesh; + tempColor: Color; + constructor(name: string); + updateUVs(): void; + getParentMesh(): MeshAttachment; + setParentMesh(parentMesh: MeshAttachment): void; + copy(): Attachment; + newLinkedMesh(): MeshAttachment; + } +} +declare module spine { + class PathAttachment extends VertexAttachment { + lengths: Array; + closed: boolean; + constantSpeed: boolean; + color: Color; + constructor(name: string); + copy(): Attachment; + } +} +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; + copy(): Attachment; + } +} +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; + uvs: ArrayLike; + tempColor: Color; + constructor(name: string); + updateOffset(): void; + setRegion(region: TextureRegion): void; + computeWorldVertices(bone: Bone, worldVertices: ArrayLike, offset: number, stride: number): void; + copy(): Attachment; + } +} +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; + } +} +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; + } +} +declare module spine.webgl { + 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; + } +} +declare module spine.webgl { + class GLTexture extends Texture implements Disposable, Restorable { + private context; + private texture; + private boundUnit; + private useMipMaps; + static DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL: boolean; + constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, image: HTMLImageElement | ImageBitmap, useMipMaps?: boolean); + setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void; + static validateMagFilter(magFilter: TextureFilter): TextureFilter.Nearest | TextureFilter.Linear; + 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; + private listeners; + constructor(element: HTMLElement); + private setupCallbacks; + 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; + } +} +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): 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): void; + setIndices(indices: Array): 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, indices: Array): 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; + skeletonRenderer: SkeletonRenderer; + skeletonDebugRenderer: SkeletonDebugRenderer; + private QUAD; + private QUAD_TRIANGLES; + private WHITE; + constructor(canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint?: boolean); + begin(): void; + drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean, slotRangeStart?: number, slotRangeEnd?: number): void; + drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array): void; + drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void; + drawTextureUV(texture: GLTexture, x: number, y: number, width: number, height: number, u: number, v: number, u2: number, v2: 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, 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; + 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 vsSource; + private fs; + private fsSource; + private program; + private tmp2x2; + private tmp3x3; + private tmp4x4; + getProgram(): WebGLProgram; + getVertexShader(): string; + getFragmentShader(): string; + getVertexShaderSource(): string; + getFragmentSource(): string; + constructor(context: ManagedWebGLRenderingContext | WebGLRenderingContext, vertexShader: string, fragmentShader: string); + private compile; + private compileShader; + private compileProgram; + 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): void; + setUniform3x3f(uniform: string, value: ArrayLike): void; + setUniform4x4f(uniform: string, value: ArrayLike): 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, 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; + end(): void; + private flush; + private check; + 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): 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, slotRangeStart?: number, slotRangeEnd?: number): 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; + } +} +declare module spine.webgl { + class ManagedWebGLRenderingContext { + canvas: HTMLCanvasElement | OffscreenCanvas; + gl: WebGLRenderingContext; + private restorables; + constructor(canvasOrContext: HTMLCanvasElement | WebGLRenderingContext | EventTarget | WebGL2RenderingContext, contextConfig?: any); + private setupCanvas; + 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; + } +} diff --git a/apps/module-ts/src/spine-ts/build/spine-webgl.js b/apps/module-ts/src/spine-ts/build/spine-webgl.js new file mode 100755 index 0000000..c6395ed --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-webgl.js @@ -0,0 +1,10839 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var spine; +(function (spine) { + var Animation = (function () { + function Animation(name, timelines, duration) { + if (name == null) + throw new Error("name cannot be null."); + if (timelines == null) + throw new Error("timelines cannot be null."); + this.name = name; + this.timelines = timelines; + this.timelineIds = []; + for (var i = 0; i < timelines.length; i++) + this.timelineIds[timelines[i].getPropertyId()] = true; + this.duration = duration; + } + Animation.prototype.hasTimeline = function (id) { + return this.timelineIds[id] == true; + }; + Animation.prototype.apply = function (skeleton, lastTime, time, loop, events, alpha, blend, direction) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (loop && this.duration != 0) { + time %= this.duration; + if (lastTime > 0) + lastTime %= this.duration; + } + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction); + }; + Animation.binarySearch = function (values, target, step) { + if (step === void 0) { step = 1; } + var low = 0; + var high = values.length / step - 2; + if (high == 0) + return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) + return (low + 1) * step; + current = (low + high) >>> 1; + } + }; + Animation.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) + return i; + return -1; + }; + return Animation; + }()); + spine.Animation = Animation; + var MixBlend; + (function (MixBlend) { + MixBlend[MixBlend["setup"] = 0] = "setup"; + MixBlend[MixBlend["first"] = 1] = "first"; + MixBlend[MixBlend["replace"] = 2] = "replace"; + MixBlend[MixBlend["add"] = 3] = "add"; + })(MixBlend = spine.MixBlend || (spine.MixBlend = {})); + var MixDirection; + (function (MixDirection) { + MixDirection[MixDirection["mixIn"] = 0] = "mixIn"; + MixDirection[MixDirection["mixOut"] = 1] = "mixOut"; + })(MixDirection = spine.MixDirection || (spine.MixDirection = {})); + var TimelineType; + (function (TimelineType) { + TimelineType[TimelineType["rotate"] = 0] = "rotate"; + TimelineType[TimelineType["translate"] = 1] = "translate"; + TimelineType[TimelineType["scale"] = 2] = "scale"; + TimelineType[TimelineType["shear"] = 3] = "shear"; + TimelineType[TimelineType["attachment"] = 4] = "attachment"; + TimelineType[TimelineType["color"] = 5] = "color"; + TimelineType[TimelineType["deform"] = 6] = "deform"; + TimelineType[TimelineType["event"] = 7] = "event"; + TimelineType[TimelineType["drawOrder"] = 8] = "drawOrder"; + TimelineType[TimelineType["ikConstraint"] = 9] = "ikConstraint"; + TimelineType[TimelineType["transformConstraint"] = 10] = "transformConstraint"; + TimelineType[TimelineType["pathConstraintPosition"] = 11] = "pathConstraintPosition"; + TimelineType[TimelineType["pathConstraintSpacing"] = 12] = "pathConstraintSpacing"; + TimelineType[TimelineType["pathConstraintMix"] = 13] = "pathConstraintMix"; + TimelineType[TimelineType["twoColor"] = 14] = "twoColor"; + })(TimelineType = spine.TimelineType || (spine.TimelineType = {})); + var CurveTimeline = (function () { + function CurveTimeline(frameCount) { + if (frameCount <= 0) + throw new Error("frameCount must be > 0: " + frameCount); + this.curves = spine.Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE); + } + CurveTimeline.prototype.getFrameCount = function () { + return this.curves.length / CurveTimeline.BEZIER_SIZE + 1; + }; + CurveTimeline.prototype.setLinear = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR; + }; + CurveTimeline.prototype.setStepped = function (frameIndex) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED; + }; + CurveTimeline.prototype.getCurveType = function (frameIndex) { + var index = frameIndex * CurveTimeline.BEZIER_SIZE; + if (index == this.curves.length) + return CurveTimeline.LINEAR; + var type = this.curves[index]; + if (type == CurveTimeline.LINEAR) + return CurveTimeline.LINEAR; + if (type == CurveTimeline.STEPPED) + return CurveTimeline.STEPPED; + return CurveTimeline.BEZIER; + }; + CurveTimeline.prototype.setCurve = function (frameIndex, cx1, cy1, cx2, cy2) { + var tmpx = (-cx1 * 2 + cx2) * 0.03, tmpy = (-cy1 * 2 + cy2) * 0.03; + var dddfx = ((cx1 - cx2) * 3 + 1) * 0.006, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006; + var ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy; + var dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667, dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var curves = this.curves; + curves[i++] = CurveTimeline.BEZIER; + var x = dfx, y = dfy; + for (var n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + }; + CurveTimeline.prototype.getCurvePercent = function (frameIndex, percent) { + percent = spine.MathUtils.clamp(percent, 0, 1); + var curves = this.curves; + var i = frameIndex * CurveTimeline.BEZIER_SIZE; + var type = curves[i]; + if (type == CurveTimeline.LINEAR) + return percent; + if (type == CurveTimeline.STEPPED) + return 0; + i++; + var x = 0; + for (var start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + x = curves[i]; + if (x >= percent) { + var prevX = void 0, prevY = void 0; + if (i == start) { + prevX = 0; + prevY = 0; + } + else { + prevX = curves[i - 2]; + prevY = curves[i - 1]; + } + return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX); + } + } + var y = curves[i - 1]; + return y + (1 - y) * (percent - x) / (1 - x); + }; + CurveTimeline.LINEAR = 0; + CurveTimeline.STEPPED = 1; + CurveTimeline.BEZIER = 2; + CurveTimeline.BEZIER_SIZE = 10 * 2 - 1; + return CurveTimeline; + }()); + spine.CurveTimeline = CurveTimeline; + var RotateTimeline = (function (_super) { + __extends(RotateTimeline, _super); + function RotateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount << 1); + return _this; + } + RotateTimeline.prototype.getPropertyId = function () { + return (TimelineType.rotate << 24) + this.boneIndex; + }; + RotateTimeline.prototype.setFrame = function (frameIndex, time, degrees) { + frameIndex <<= 1; + this.frames[frameIndex] = time; + this.frames[frameIndex + RotateTimeline.ROTATION] = degrees; + }; + RotateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + return; + case MixBlend.first: + var r_1 = bone.data.rotation - bone.rotation; + bone.rotation += (r_1 - (16384 - ((16384.499999999996 - r_1 / 360) | 0)) * 360) * alpha; + } + return; + } + if (time >= frames[frames.length - RotateTimeline.ENTRIES]) { + var r_2 = frames[frames.length + RotateTimeline.PREV_ROTATION]; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + r_2 * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r_2 += bone.data.rotation - bone.rotation; + r_2 -= (16384 - ((16384.499999999996 - r_2 / 360) | 0)) * 360; + case MixBlend.add: + bone.rotation += r_2 * alpha; + } + return; + } + var frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES); + var prevRotation = frames[frame + RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime)); + var r = frames[frame + RotateTimeline.ROTATION] - prevRotation; + r = prevRotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * percent; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r += bone.data.rotation - bone.rotation; + case MixBlend.add: + bone.rotation += (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + } + }; + RotateTimeline.ENTRIES = 2; + RotateTimeline.PREV_TIME = -2; + RotateTimeline.PREV_ROTATION = -1; + RotateTimeline.ROTATION = 1; + return RotateTimeline; + }(CurveTimeline)); + spine.RotateTimeline = RotateTimeline; + var TranslateTimeline = (function (_super) { + __extends(TranslateTimeline, _super); + function TranslateTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES); + return _this; + } + TranslateTimeline.prototype.getPropertyId = function () { + return (TimelineType.translate << 24) + this.boneIndex; + }; + TranslateTimeline.prototype.setFrame = function (frameIndex, time, x, y) { + frameIndex *= TranslateTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TranslateTimeline.X] = x; + this.frames[frameIndex + TranslateTimeline.Y] = y; + }; + TranslateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + bone.y = bone.data.y; + return; + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) { + x = frames[frames.length + TranslateTimeline.PREV_X]; + y = frames[frames.length + TranslateTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES); + x = frames[frame + TranslateTimeline.PREV_X]; + y = frames[frame + TranslateTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime)); + x += (frames[frame + TranslateTimeline.X] - x) * percent; + y += (frames[frame + TranslateTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + bone.y = bone.data.y + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + bone.y += (bone.data.y + y - bone.y) * alpha; + break; + case MixBlend.add: + bone.x += x * alpha; + bone.y += y * alpha; + } + }; + TranslateTimeline.ENTRIES = 3; + TranslateTimeline.PREV_TIME = -3; + TranslateTimeline.PREV_X = -2; + TranslateTimeline.PREV_Y = -1; + TranslateTimeline.X = 1; + TranslateTimeline.Y = 2; + return TranslateTimeline; + }(CurveTimeline)); + spine.TranslateTimeline = TranslateTimeline; + var ScaleTimeline = (function (_super) { + __extends(ScaleTimeline, _super); + function ScaleTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ScaleTimeline.prototype.getPropertyId = function () { + return (TimelineType.scale << 24) + this.boneIndex; + }; + ScaleTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + bone.scaleY = bone.data.scaleY; + return; + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) { + x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX; + y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY; + } + else { + var frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES); + x = frames[frame + ScaleTimeline.PREV_X]; + y = frames[frame + ScaleTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime)); + x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX; + y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY; + } + if (alpha == 1) { + if (blend == MixBlend.add) { + bone.scaleX += x - bone.data.scaleX; + bone.scaleY += y - bone.data.scaleY; + } + else { + bone.scaleX = x; + bone.scaleY = y; + } + } + else { + var bx = 0, by = 0; + if (direction == MixDirection.mixOut) { + switch (blend) { + case MixBlend.setup: + bx = bone.data.scaleX; + by = bone.data.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.add: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * spine.MathUtils.signum(bx) - bone.data.scaleX) * alpha; + bone.scaleY = by + (Math.abs(y) * spine.MathUtils.signum(by) - bone.data.scaleY) * alpha; + } + } + else { + switch (blend) { + case MixBlend.setup: + bx = Math.abs(bone.data.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.data.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = Math.abs(bone.scaleX) * spine.MathUtils.signum(x); + by = Math.abs(bone.scaleY) * spine.MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.add: + bx = spine.MathUtils.signum(x); + by = spine.MathUtils.signum(y); + bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha; + bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha; + } + } + } + }; + return ScaleTimeline; + }(TranslateTimeline)); + spine.ScaleTimeline = ScaleTimeline; + var ShearTimeline = (function (_super) { + __extends(ShearTimeline, _super); + function ShearTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + ShearTimeline.prototype.getPropertyId = function () { + return (TimelineType.shear << 24) + this.boneIndex; + }; + ShearTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var frames = this.frames; + var bone = skeleton.bones[this.boneIndex]; + if (!bone.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + bone.shearY = bone.data.shearY; + return; + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + var x = 0, y = 0; + if (time >= frames[frames.length - ShearTimeline.ENTRIES]) { + x = frames[frames.length + ShearTimeline.PREV_X]; + y = frames[frames.length + ShearTimeline.PREV_Y]; + } + else { + var frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES); + x = frames[frame + ShearTimeline.PREV_X]; + y = frames[frame + ShearTimeline.PREV_Y]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime)); + x = x + (frames[frame + ShearTimeline.X] - x) * percent; + y = y + (frames[frame + ShearTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + bone.shearY = bone.data.shearY + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + break; + case MixBlend.add: + bone.shearX += x * alpha; + bone.shearY += y * alpha; + } + }; + return ShearTimeline; + }(TranslateTimeline)); + spine.ShearTimeline = ShearTimeline; + var ColorTimeline = (function (_super) { + __extends(ColorTimeline, _super); + function ColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES); + return _this; + } + ColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.color << 24) + this.slotIndex; + }; + ColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a) { + frameIndex *= ColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + ColorTimeline.R] = r; + this.frames[frameIndex + ColorTimeline.G] = g; + this.frames[frameIndex + ColorTimeline.B] = b; + this.frames[frameIndex + ColorTimeline.A] = a; + }; + ColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + return; + case MixBlend.first: + var color = slot.color, setup = slot.data.color; + color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha); + } + return; + } + var r = 0, g = 0, b = 0, a = 0; + if (time >= frames[frames.length - ColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + ColorTimeline.PREV_R]; + g = frames[i + ColorTimeline.PREV_G]; + b = frames[i + ColorTimeline.PREV_B]; + a = frames[i + ColorTimeline.PREV_A]; + } + else { + var frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES); + r = frames[frame + ColorTimeline.PREV_R]; + g = frames[frame + ColorTimeline.PREV_G]; + b = frames[frame + ColorTimeline.PREV_B]; + a = frames[frame + ColorTimeline.PREV_A]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + ColorTimeline.R] - r) * percent; + g += (frames[frame + ColorTimeline.G] - g) * percent; + b += (frames[frame + ColorTimeline.B] - b) * percent; + a += (frames[frame + ColorTimeline.A] - a) * percent; + } + if (alpha == 1) + slot.color.set(r, g, b, a); + else { + var color = slot.color; + if (blend == MixBlend.setup) + color.setFromColor(slot.data.color); + color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha); + } + }; + ColorTimeline.ENTRIES = 5; + ColorTimeline.PREV_TIME = -5; + ColorTimeline.PREV_R = -4; + ColorTimeline.PREV_G = -3; + ColorTimeline.PREV_B = -2; + ColorTimeline.PREV_A = -1; + ColorTimeline.R = 1; + ColorTimeline.G = 2; + ColorTimeline.B = 3; + ColorTimeline.A = 4; + return ColorTimeline; + }(CurveTimeline)); + spine.ColorTimeline = ColorTimeline; + var TwoColorTimeline = (function (_super) { + __extends(TwoColorTimeline, _super); + function TwoColorTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES); + return _this; + } + TwoColorTimeline.prototype.getPropertyId = function () { + return (TimelineType.twoColor << 24) + this.slotIndex; + }; + TwoColorTimeline.prototype.setFrame = function (frameIndex, time, r, g, b, a, r2, g2, b2) { + frameIndex *= TwoColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TwoColorTimeline.R] = r; + this.frames[frameIndex + TwoColorTimeline.G] = g; + this.frames[frameIndex + TwoColorTimeline.B] = b; + this.frames[frameIndex + TwoColorTimeline.A] = a; + this.frames[frameIndex + TwoColorTimeline.R2] = r2; + this.frames[frameIndex + TwoColorTimeline.G2] = g2; + this.frames[frameIndex + TwoColorTimeline.B2] = b2; + }; + TwoColorTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + slot.darkColor.setFromColor(slot.data.darkColor); + return; + case MixBlend.first: + var light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor; + light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha); + dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0); + } + return; + } + var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; + if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) { + var i = frames.length; + r = frames[i + TwoColorTimeline.PREV_R]; + g = frames[i + TwoColorTimeline.PREV_G]; + b = frames[i + TwoColorTimeline.PREV_B]; + a = frames[i + TwoColorTimeline.PREV_A]; + r2 = frames[i + TwoColorTimeline.PREV_R2]; + g2 = frames[i + TwoColorTimeline.PREV_G2]; + b2 = frames[i + TwoColorTimeline.PREV_B2]; + } + else { + var frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES); + r = frames[frame + TwoColorTimeline.PREV_R]; + g = frames[frame + TwoColorTimeline.PREV_G]; + b = frames[frame + TwoColorTimeline.PREV_B]; + a = frames[frame + TwoColorTimeline.PREV_A]; + r2 = frames[frame + TwoColorTimeline.PREV_R2]; + g2 = frames[frame + TwoColorTimeline.PREV_G2]; + b2 = frames[frame + TwoColorTimeline.PREV_B2]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime)); + r += (frames[frame + TwoColorTimeline.R] - r) * percent; + g += (frames[frame + TwoColorTimeline.G] - g) * percent; + b += (frames[frame + TwoColorTimeline.B] - b) * percent; + a += (frames[frame + TwoColorTimeline.A] - a) * percent; + r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent; + g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent; + b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent; + } + if (alpha == 1) { + slot.color.set(r, g, b, a); + slot.darkColor.set(r2, g2, b2, 1); + } + else { + var light = slot.color, dark = slot.darkColor; + if (blend == MixBlend.setup) { + light.setFromColor(slot.data.color); + dark.setFromColor(slot.data.darkColor); + } + light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha); + dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0); + } + }; + TwoColorTimeline.ENTRIES = 8; + TwoColorTimeline.PREV_TIME = -8; + TwoColorTimeline.PREV_R = -7; + TwoColorTimeline.PREV_G = -6; + TwoColorTimeline.PREV_B = -5; + TwoColorTimeline.PREV_A = -4; + TwoColorTimeline.PREV_R2 = -3; + TwoColorTimeline.PREV_G2 = -2; + TwoColorTimeline.PREV_B2 = -1; + TwoColorTimeline.R = 1; + TwoColorTimeline.G = 2; + TwoColorTimeline.B = 3; + TwoColorTimeline.A = 4; + TwoColorTimeline.R2 = 5; + TwoColorTimeline.G2 = 6; + TwoColorTimeline.B2 = 7; + return TwoColorTimeline; + }(CurveTimeline)); + spine.TwoColorTimeline = TwoColorTimeline; + var AttachmentTimeline = (function () { + function AttachmentTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.attachmentNames = new Array(frameCount); + } + AttachmentTimeline.prototype.getPropertyId = function () { + return (TimelineType.attachment << 24) + this.slotIndex; + }; + AttachmentTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + AttachmentTimeline.prototype.setFrame = function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }; + AttachmentTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + var frameIndex = 0; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = Animation.binarySearch(frames, time, 1) - 1; + var attachmentName = this.attachmentNames[frameIndex]; + skeleton.slots[this.slotIndex] + .setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + AttachmentTimeline.prototype.setAttachment = function (skeleton, slot, attachmentName) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + }; + return AttachmentTimeline; + }()); + spine.AttachmentTimeline = AttachmentTimeline; + var zeros = null; + var DeformTimeline = (function (_super) { + __extends(DeformTimeline, _super); + function DeformTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount); + _this.frameVertices = new Array(frameCount); + if (zeros == null) + zeros = spine.Utils.newFloatArray(64); + return _this; + } + DeformTimeline.prototype.getPropertyId = function () { + return (TimelineType.deform << 27) + +this.attachment.id + this.slotIndex; + }; + DeformTimeline.prototype.setFrame = function (frameIndex, time, vertices) { + this.frames[frameIndex] = time; + this.frameVertices[frameIndex] = vertices; + }; + DeformTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) + return; + var slotAttachment = slot.getAttachment(); + if (!(slotAttachment instanceof spine.VertexAttachment) || !(slotAttachment.deformAttachment == this.attachment)) + return; + var deformArray = slot.deform; + if (deformArray.length == 0) + blend = MixBlend.setup; + var frameVertices = this.frameVertices; + var vertexCount = frameVertices[0].length; + var frames = this.frames; + if (time < frames[0]) { + var vertexAttachment = slotAttachment; + switch (blend) { + case MixBlend.setup: + deformArray.length = 0; + return; + case MixBlend.first: + if (alpha == 1) { + deformArray.length = 0; + break; + } + var deform_1 = spine.Utils.setArraySize(deformArray, vertexCount); + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i = 0; i < vertexCount; i++) + deform_1[i] += (setupVertices[i] - deform_1[i]) * alpha; + } + else { + alpha = 1 - alpha; + for (var i = 0; i < vertexCount; i++) + deform_1[i] *= alpha; + } + } + return; + } + var deform = spine.Utils.setArraySize(deformArray, vertexCount); + if (time >= frames[frames.length - 1]) { + var lastVertices = frameVertices[frames.length - 1]; + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_1 = 0; i_1 < vertexCount; i_1++) { + deform[i_1] += lastVertices[i_1] - setupVertices[i_1]; + } + } + else { + for (var i_2 = 0; i_2 < vertexCount; i_2++) + deform[i_2] += lastVertices[i_2]; + } + } + else { + spine.Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount); + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_1 = slotAttachment; + if (vertexAttachment_1.bones == null) { + var setupVertices = vertexAttachment_1.vertices; + for (var i_3 = 0; i_3 < vertexCount; i_3++) { + var setup = setupVertices[i_3]; + deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha; + } + } + else { + for (var i_4 = 0; i_4 < vertexCount; i_4++) + deform[i_4] = lastVertices[i_4] * alpha; + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_5 = 0; i_5 < vertexCount; i_5++) + deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha; + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_6 = 0; i_6 < vertexCount; i_6++) { + deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha; + } + } + else { + for (var i_7 = 0; i_7 < vertexCount; i_7++) + deform[i_7] += lastVertices[i_7] * alpha; + } + } + } + return; + } + var frame = Animation.binarySearch(frames, time); + var prevVertices = frameVertices[frame - 1]; + var nextVertices = frameVertices[frame]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime)); + if (alpha == 1) { + if (blend == MixBlend.add) { + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_8 = 0; i_8 < vertexCount; i_8++) { + var prev = prevVertices[i_8]; + deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8]; + } + } + else { + for (var i_9 = 0; i_9 < vertexCount; i_9++) { + var prev = prevVertices[i_9]; + deform[i_9] += prev + (nextVertices[i_9] - prev) * percent; + } + } + } + else { + for (var i_10 = 0; i_10 < vertexCount; i_10++) { + var prev = prevVertices[i_10]; + deform[i_10] = prev + (nextVertices[i_10] - prev) * percent; + } + } + } + else { + switch (blend) { + case MixBlend.setup: { + var vertexAttachment_2 = slotAttachment; + if (vertexAttachment_2.bones == null) { + var setupVertices = vertexAttachment_2.vertices; + for (var i_11 = 0; i_11 < vertexCount; i_11++) { + var prev = prevVertices[i_11], setup = setupVertices[i_11]; + deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha; + } + } + else { + for (var i_12 = 0; i_12 < vertexCount; i_12++) { + var prev = prevVertices[i_12]; + deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha; + } + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (var i_13 = 0; i_13 < vertexCount; i_13++) { + var prev = prevVertices[i_13]; + deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha; + } + break; + case MixBlend.add: + var vertexAttachment = slotAttachment; + if (vertexAttachment.bones == null) { + var setupVertices = vertexAttachment.vertices; + for (var i_14 = 0; i_14 < vertexCount; i_14++) { + var prev = prevVertices[i_14]; + deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha; + } + } + else { + for (var i_15 = 0; i_15 < vertexCount; i_15++) { + var prev = prevVertices[i_15]; + deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha; + } + } + } + } + }; + return DeformTimeline; + }(CurveTimeline)); + spine.DeformTimeline = DeformTimeline; + var EventTimeline = (function () { + function EventTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.events = new Array(frameCount); + } + EventTimeline.prototype.getPropertyId = function () { + return TimelineType.event << 24; + }; + EventTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + EventTimeline.prototype.setFrame = function (frameIndex, event) { + this.frames[frameIndex] = event.time; + this.events[frameIndex] = event; + }; + EventTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + if (firedEvents == null) + return; + var frames = this.frames; + var frameCount = this.frames.length; + if (lastTime > time) { + this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction); + lastTime = -1; + } + else if (lastTime >= frames[frameCount - 1]) + return; + if (time < frames[0]) + return; + var frame = 0; + if (lastTime < frames[0]) + frame = 0; + else { + frame = Animation.binarySearch(frames, lastTime); + var frameTime = frames[frame]; + while (frame > 0) { + if (frames[frame - 1] != frameTime) + break; + frame--; + } + } + for (; frame < frameCount && time >= frames[frame]; frame++) + firedEvents.push(this.events[frame]); + }; + return EventTimeline; + }()); + spine.EventTimeline = EventTimeline; + var DrawOrderTimeline = (function () { + function DrawOrderTimeline(frameCount) { + this.frames = spine.Utils.newFloatArray(frameCount); + this.drawOrders = new Array(frameCount); + } + DrawOrderTimeline.prototype.getPropertyId = function () { + return TimelineType.drawOrder << 24; + }; + DrawOrderTimeline.prototype.getFrameCount = function () { + return this.frames.length; + }; + DrawOrderTimeline.prototype.setFrame = function (frameIndex, time, drawOrder) { + this.frames[frameIndex] = time; + this.drawOrders[frameIndex] = drawOrder; + }; + DrawOrderTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var drawOrder = skeleton.drawOrder; + var slots = skeleton.slots; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + spine.Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + var frame = 0; + if (time >= frames[frames.length - 1]) + frame = frames.length - 1; + else + frame = Animation.binarySearch(frames, time) - 1; + var drawOrderToSetupIndex = this.drawOrders[frame]; + if (drawOrderToSetupIndex == null) + spine.Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length); + else { + for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++) + drawOrder[i] = slots[drawOrderToSetupIndex[i]]; + } + }; + return DrawOrderTimeline; + }()); + spine.DrawOrderTimeline = DrawOrderTimeline; + var IkConstraintTimeline = (function (_super) { + __extends(IkConstraintTimeline, _super); + function IkConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES); + return _this; + } + IkConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex; + }; + IkConstraintTimeline.prototype.setFrame = function (frameIndex, time, mix, softness, bendDirection, compress, stretch) { + frameIndex *= IkConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + IkConstraintTimeline.MIX] = mix; + this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness; + this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection; + this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0; + this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0; + }; + IkConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.ikConstraints[this.ikConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + return; + case MixBlend.first: + constraint.mix += (constraint.data.mix - constraint.mix) * alpha; + constraint.softness += (constraint.data.softness - constraint.softness) * alpha; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + return; + } + if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) { + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha; + constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + return; + } + var frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES); + var mix = frames[frame + IkConstraintTimeline.PREV_MIX]; + var softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime)); + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + else { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + else { + constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha; + constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + }; + IkConstraintTimeline.ENTRIES = 6; + IkConstraintTimeline.PREV_TIME = -6; + IkConstraintTimeline.PREV_MIX = -5; + IkConstraintTimeline.PREV_SOFTNESS = -4; + IkConstraintTimeline.PREV_BEND_DIRECTION = -3; + IkConstraintTimeline.PREV_COMPRESS = -2; + IkConstraintTimeline.PREV_STRETCH = -1; + IkConstraintTimeline.MIX = 1; + IkConstraintTimeline.SOFTNESS = 2; + IkConstraintTimeline.BEND_DIRECTION = 3; + IkConstraintTimeline.COMPRESS = 4; + IkConstraintTimeline.STRETCH = 5; + return IkConstraintTimeline; + }(CurveTimeline)); + spine.IkConstraintTimeline = IkConstraintTimeline; + var TransformConstraintTimeline = (function (_super) { + __extends(TransformConstraintTimeline, _super); + function TransformConstraintTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES); + return _this; + } + TransformConstraintTimeline.prototype.getPropertyId = function () { + return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex; + }; + TransformConstraintTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix, scaleMix, shearMix) { + frameIndex *= TransformConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix; + this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix; + this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix; + }; + TransformConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.transformConstraints[this.transformConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + var data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + return; + case MixBlend.first: + constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha; + constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha; + constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha; + } + return; + } + var rotate = 0, translate = 0, scale = 0, shear = 0; + if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) { + var i = frames.length; + rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[i + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[i + TransformConstraintTimeline.PREV_SHEAR]; + } + else { + var frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES); + rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[frame + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent; + scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent; + shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent; + } + if (blend == MixBlend.setup) { + var data = constraint.data; + constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha; + constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha; + constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha; + constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + constraint.scaleMix += (scale - constraint.scaleMix) * alpha; + constraint.shearMix += (shear - constraint.shearMix) * alpha; + } + }; + TransformConstraintTimeline.ENTRIES = 5; + TransformConstraintTimeline.PREV_TIME = -5; + TransformConstraintTimeline.PREV_ROTATE = -4; + TransformConstraintTimeline.PREV_TRANSLATE = -3; + TransformConstraintTimeline.PREV_SCALE = -2; + TransformConstraintTimeline.PREV_SHEAR = -1; + TransformConstraintTimeline.ROTATE = 1; + TransformConstraintTimeline.TRANSLATE = 2; + TransformConstraintTimeline.SCALE = 3; + TransformConstraintTimeline.SHEAR = 4; + return TransformConstraintTimeline; + }(CurveTimeline)); + spine.TransformConstraintTimeline = TransformConstraintTimeline; + var PathConstraintPositionTimeline = (function (_super) { + __extends(PathConstraintPositionTimeline, _super); + function PathConstraintPositionTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES); + return _this; + } + PathConstraintPositionTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex; + }; + PathConstraintPositionTimeline.prototype.setFrame = function (frameIndex, time, value) { + frameIndex *= PathConstraintPositionTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value; + }; + PathConstraintPositionTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.position = constraint.data.position; + return; + case MixBlend.first: + constraint.position += (constraint.data.position - constraint.position) * alpha; + } + return; + } + var position = 0; + if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES]) + position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES); + position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime)); + position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent; + } + if (blend == MixBlend.setup) + constraint.position = constraint.data.position + (position - constraint.data.position) * alpha; + else + constraint.position += (position - constraint.position) * alpha; + }; + PathConstraintPositionTimeline.ENTRIES = 2; + PathConstraintPositionTimeline.PREV_TIME = -2; + PathConstraintPositionTimeline.PREV_VALUE = -1; + PathConstraintPositionTimeline.VALUE = 1; + return PathConstraintPositionTimeline; + }(CurveTimeline)); + spine.PathConstraintPositionTimeline = PathConstraintPositionTimeline; + var PathConstraintSpacingTimeline = (function (_super) { + __extends(PathConstraintSpacingTimeline, _super); + function PathConstraintSpacingTimeline(frameCount) { + return _super.call(this, frameCount) || this; + } + PathConstraintSpacingTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex; + }; + PathConstraintSpacingTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.spacing = constraint.data.spacing; + return; + case MixBlend.first: + constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha; + } + return; + } + var spacing = 0; + if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES]) + spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE]; + else { + var frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES); + spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime)); + spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent; + } + if (blend == MixBlend.setup) + constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha; + else + constraint.spacing += (spacing - constraint.spacing) * alpha; + }; + return PathConstraintSpacingTimeline; + }(PathConstraintPositionTimeline)); + spine.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline; + var PathConstraintMixTimeline = (function (_super) { + __extends(PathConstraintMixTimeline, _super); + function PathConstraintMixTimeline(frameCount) { + var _this = _super.call(this, frameCount) || this; + _this.frames = spine.Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES); + return _this; + } + PathConstraintMixTimeline.prototype.getPropertyId = function () { + return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex; + }; + PathConstraintMixTimeline.prototype.setFrame = function (frameIndex, time, rotateMix, translateMix) { + frameIndex *= PathConstraintMixTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix; + }; + PathConstraintMixTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) { + var frames = this.frames; + var constraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) + return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = constraint.data.rotateMix; + constraint.translateMix = constraint.data.translateMix; + return; + case MixBlend.first: + constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha; + } + return; + } + var rotate = 0, translate = 0; + if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) { + rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE]; + } + else { + var frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES); + rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE]; + var frameTime = frames[frame]; + var percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime)); + rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent; + } + if (blend == MixBlend.setup) { + constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha; + constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha; + } + else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + } + }; + PathConstraintMixTimeline.ENTRIES = 3; + PathConstraintMixTimeline.PREV_TIME = -3; + PathConstraintMixTimeline.PREV_ROTATE = -2; + PathConstraintMixTimeline.PREV_TRANSLATE = -1; + PathConstraintMixTimeline.ROTATE = 1; + PathConstraintMixTimeline.TRANSLATE = 2; + return PathConstraintMixTimeline; + }(CurveTimeline)); + spine.PathConstraintMixTimeline = PathConstraintMixTimeline; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationState = (function () { + function AnimationState(data) { + this.tracks = new Array(); + this.timeScale = 1; + this.unkeyedState = 0; + this.events = new Array(); + this.listeners = new Array(); + this.queue = new EventQueue(this); + this.propertyIDs = new spine.IntSet(); + this.animationsChanged = false; + this.trackEntryPool = new spine.Pool(function () { return new TrackEntry(); }); + this.data = data; + } + AnimationState.prototype.update = function (delta) { + delta *= this.timeScale; + var tracks = this.tracks; + for (var i = 0, n = tracks.length; i < n; i++) { + var current = tracks[i]; + if (current == null) + continue; + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + var currentDelta = delta * current.timeScale; + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) + continue; + currentDelta = -current.delay; + current.delay = 0; + } + var next = current.next; + if (next != null) { + var nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setCurrent(i, next, true); + while (next.mixingFrom != null) { + next.mixTime += delta; + next = next.mixingFrom; + } + continue; + } + } + else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) { + tracks[i] = null; + this.queue.end(current); + this.disposeNext(current); + continue; + } + if (current.mixingFrom != null && this.updateMixingFrom(current, delta)) { + var from = current.mixingFrom; + current.mixingFrom = null; + if (from != null) + from.mixingTo = null; + while (from != null) { + this.queue.end(from); + from = from.mixingFrom; + } + } + current.trackTime += currentDelta; + } + this.queue.drain(); + }; + AnimationState.prototype.updateMixingFrom = function (to, delta) { + var from = to.mixingFrom; + if (from == null) + return true; + var finished = this.updateMixingFrom(from, delta); + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { + if (from.totalAlpha == 0 || to.mixDuration == 0) { + to.mixingFrom = from.mixingFrom; + if (from.mixingFrom != null) + from.mixingFrom.mixingTo = to; + to.interruptAlpha = from.interruptAlpha; + this.queue.end(from); + } + return finished; + } + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + }; + AnimationState.prototype.apply = function (skeleton) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + if (this.animationsChanged) + this._animationsChanged(); + var events = this.events; + var tracks = this.tracks; + var applied = false; + for (var i_16 = 0, n_1 = tracks.length; i_16 < n_1; i_16++) { + var current = tracks[i_16]; + if (current == null || current.delay > 0) + continue; + applied = true; + var blend = i_16 == 0 ? spine.MixBlend.first : current.mixBlend; + var mix = current.alpha; + if (current.mixingFrom != null) + mix *= this.applyMixingFrom(current, skeleton, blend); + else if (current.trackTime >= current.trackEnd && current.next == null) + mix = 0; + var animationLast = current.animationLast, animationTime = current.getAnimationTime(); + var timelineCount = current.animation.timelines.length; + var timelines = current.animation.timelines; + if ((i_16 == 0 && mix == 1) || blend == spine.MixBlend.add) { + for (var ii = 0; ii < timelineCount; ii++) { + spine.Utils.webkit602BugfixHelper(mix, blend); + var timeline = timelines[ii]; + if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, blend, true); + else + timeline.apply(skeleton, animationLast, animationTime, events, mix, blend, spine.MixDirection.mixIn); + } + } + else { + var timelineMode = current.timelineMode; + var firstFrame = current.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = current.timelinesRotation; + for (var ii = 0; ii < timelineCount; ii++) { + var timeline_1 = timelines[ii]; + var timelineBlend = timelineMode[ii] == AnimationState.SUBSEQUENT ? blend : spine.MixBlend.setup; + if (timeline_1 instanceof spine.RotateTimeline) { + this.applyRotateTimeline(timeline_1, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); + } + else if (timeline_1 instanceof spine.AttachmentTimeline) { + this.applyAttachmentTimeline(timeline_1, skeleton, animationTime, blend, true); + } + else { + spine.Utils.webkit602BugfixHelper(mix, blend); + timeline_1.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, spine.MixDirection.mixIn); + } + } + } + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + var setupState = this.unkeyedState + AnimationState.SETUP; + var slots = skeleton.slots; + for (var i = 0, n = skeleton.slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.attachmentState == setupState) { + var attachmentName = slot.data.attachmentName; + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + } + } + this.unkeyedState += 2; + this.queue.drain(); + return applied; + }; + AnimationState.prototype.applyMixingFrom = function (to, skeleton, blend) { + var from = to.mixingFrom; + if (from.mixingFrom != null) + this.applyMixingFrom(from, skeleton, blend); + var mix = 0; + if (to.mixDuration == 0) { + mix = 1; + if (blend == spine.MixBlend.first) + blend = spine.MixBlend.setup; + } + else { + mix = to.mixTime / to.mixDuration; + if (mix > 1) + mix = 1; + if (blend != spine.MixBlend.first) + blend = from.mixBlend; + } + var events = mix < from.eventThreshold ? this.events : null; + var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold; + var animationLast = from.animationLast, animationTime = from.getAnimationTime(); + var timelineCount = from.animation.timelines.length; + var timelines = from.animation.timelines; + var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); + if (blend == spine.MixBlend.add) { + for (var i = 0; i < timelineCount; i++) + timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, spine.MixDirection.mixOut); + } + else { + var timelineMode = from.timelineMode; + var timelineHoldMix = from.timelineHoldMix; + var firstFrame = from.timelinesRotation.length == 0; + if (firstFrame) + spine.Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null); + var timelinesRotation = from.timelinesRotation; + from.totalAlpha = 0; + for (var i = 0; i < timelineCount; i++) { + var timeline = timelines[i]; + var direction = spine.MixDirection.mixOut; + var timelineBlend = void 0; + var alpha = 0; + switch (timelineMode[i]) { + case AnimationState.SUBSEQUENT: + if (!drawOrder && timeline instanceof spine.DrawOrderTimeline) + continue; + timelineBlend = blend; + alpha = alphaMix; + break; + case AnimationState.FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaMix; + break; + case AnimationState.HOLD_SUBSEQUENT: + timelineBlend = blend; + alpha = alphaHold; + break; + case AnimationState.HOLD_FIRST: + timelineBlend = spine.MixBlend.setup; + alpha = alphaHold; + break; + default: + timelineBlend = spine.MixBlend.setup; + var holdMix = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + break; + } + from.totalAlpha += alpha; + if (timeline instanceof spine.RotateTimeline) + this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); + else if (timeline instanceof spine.AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, timelineBlend, attachments); + else { + spine.Utils.webkit602BugfixHelper(alpha, blend); + if (drawOrder && timeline instanceof spine.DrawOrderTimeline && timelineBlend == spine.MixBlend.setup) + direction = spine.MixDirection.mixIn; + timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction); + } + } + } + if (to.mixDuration > 0) + this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + return mix; + }; + AnimationState.prototype.applyAttachmentTimeline = function (timeline, skeleton, time, blend, attachments) { + var slot = skeleton.slots[timeline.slotIndex]; + if (!slot.bone.active) + return; + var frames = timeline.frames; + if (time < frames[0]) { + if (blend == spine.MixBlend.setup || blend == spine.MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments); + } + else { + var frameIndex; + if (time >= frames[frames.length - 1]) + frameIndex = frames.length - 1; + else + frameIndex = spine.Animation.binarySearch(frames, time) - 1; + this.setAttachment(skeleton, slot, timeline.attachmentNames[frameIndex], attachments); + } + if (slot.attachmentState <= this.unkeyedState) + slot.attachmentState = this.unkeyedState + AnimationState.SETUP; + }; + AnimationState.prototype.setAttachment = function (skeleton, slot, attachmentName, attachments) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + if (attachments) + slot.attachmentState = this.unkeyedState + AnimationState.CURRENT; + }; + AnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) { + if (firstFrame) + timelinesRotation[i] = 0; + if (alpha == 1) { + timeline.apply(skeleton, 0, time, null, 1, blend, spine.MixDirection.mixIn); + return; + } + var rotateTimeline = timeline; + var frames = rotateTimeline.frames; + var bone = skeleton.bones[rotateTimeline.boneIndex]; + if (!bone.active) + return; + var r1 = 0, r2 = 0; + if (time < frames[0]) { + switch (blend) { + case spine.MixBlend.setup: + bone.rotation = bone.data.rotation; + default: + return; + case spine.MixBlend.first: + r1 = bone.rotation; + r2 = bone.data.rotation; + } + } + else { + r1 = blend == spine.MixBlend.setup ? bone.data.rotation : bone.rotation; + if (time >= frames[frames.length - spine.RotateTimeline.ENTRIES]) + r2 = bone.data.rotation + frames[frames.length + spine.RotateTimeline.PREV_ROTATION]; + else { + var frame = spine.Animation.binarySearch(frames, time, spine.RotateTimeline.ENTRIES); + var prevRotation = frames[frame + spine.RotateTimeline.PREV_ROTATION]; + var frameTime = frames[frame]; + var percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + spine.RotateTimeline.PREV_TIME] - frameTime)); + r2 = frames[frame + spine.RotateTimeline.ROTATION] - prevRotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + r2 = prevRotation + r2 * percent + bone.data.rotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + } + } + var total = 0, diff = r2 - r1; + diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360; + if (diff == 0) { + total = timelinesRotation[i]; + } + else { + var lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } + else { + lastTotal = timelinesRotation[i]; + lastDiff = timelinesRotation[i + 1]; + } + var current = diff > 0, dir = lastTotal >= 0; + if (spine.MathUtils.signum(lastDiff) != spine.MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) { + if (Math.abs(lastTotal) > 180) + lastTotal += 360 * spine.MathUtils.signum(lastTotal); + dir = current; + } + total = diff + lastTotal - lastTotal % 360; + if (dir != current) + total += 360 * spine.MathUtils.signum(lastTotal); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + r1 += total * alpha; + bone.rotation = r1 - (16384 - ((16384.499999999996 - r1 / 360) | 0)) * 360; + }; + AnimationState.prototype.queueEvents = function (entry, animationTime) { + var animationStart = entry.animationStart, animationEnd = entry.animationEnd; + var duration = animationEnd - animationStart; + var trackLastWrapped = entry.trackLast % duration; + var events = this.events; + var i = 0, n = events.length; + for (; i < n; i++) { + var event_1 = events[i]; + if (event_1.time < trackLastWrapped) + break; + if (event_1.time > animationEnd) + continue; + this.queue.event(entry, event_1); + } + var complete = false; + if (entry.loop) + complete = duration == 0 || trackLastWrapped > entry.trackTime % duration; + else + complete = animationTime >= animationEnd && entry.animationLast < animationEnd; + if (complete) + this.queue.complete(entry); + for (; i < n; i++) { + var event_2 = events[i]; + if (event_2.time < animationStart) + continue; + this.queue.event(entry, events[i]); + } + }; + AnimationState.prototype.clearTracks = function () { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) + this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.clearTrack = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return; + var current = this.tracks[trackIndex]; + if (current == null) + return; + this.queue.end(current); + this.disposeNext(current); + var entry = current; + while (true) { + var from = entry.mixingFrom; + if (from == null) + break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + this.tracks[current.trackIndex] = null; + this.queue.drain(); + }; + AnimationState.prototype.setCurrent = function (index, current, interrupt) { + var from = this.expandToIndex(index); + this.tracks[index] = current; + if (from != null) { + if (interrupt) + this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + if (from.mixingFrom != null && from.mixDuration > 0) + current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration); + from.timelinesRotation.length = 0; + } + this.queue.start(current); + }; + AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.setAnimationWith(trackIndex, animation, loop); + }; + AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) { + if (animation == null) + throw new Error("animation cannot be null."); + var interrupt = true; + var current = this.expandToIndex(trackIndex); + if (current != null) { + if (current.nextTrackLast == -1) { + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.disposeNext(current); + current = current.mixingFrom; + interrupt = false; + } + else + this.disposeNext(current); + } + var entry = this.trackEntry(trackIndex, animation, loop, current); + this.setCurrent(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + }; + AnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) + throw new Error("Animation not found: " + animationName); + return this.addAnimationWith(trackIndex, animation, loop, delay); + }; + AnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) { + if (animation == null) + throw new Error("animation cannot be null."); + var last = this.expandToIndex(trackIndex); + if (last != null) { + while (last.next != null) + last = last.next; + } + var entry = this.trackEntry(trackIndex, animation, loop, last); + if (last == null) { + this.setCurrent(trackIndex, entry, true); + this.queue.drain(); + } + else { + last.next = entry; + if (delay <= 0) { + var duration = last.animationEnd - last.animationStart; + if (duration != 0) { + if (last.loop) + delay += duration * (1 + ((last.trackTime / duration) | 0)); + else + delay += Math.max(duration, last.trackTime); + delay -= this.data.getMix(last.animation, animation); + } + else + delay = last.trackTime; + } + } + entry.delay = delay; + return entry; + }; + AnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) { + var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) { + if (delay <= 0) + delay -= mixDuration; + var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + }; + AnimationState.prototype.setEmptyAnimations = function (mixDuration) { + var oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (var i = 0, n = this.tracks.length; i < n; i++) { + var current = this.tracks[i]; + if (current != null) + this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + }; + AnimationState.prototype.expandToIndex = function (index) { + if (index < this.tracks.length) + return this.tracks[index]; + spine.Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + }; + AnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) { + var entry = this.trackEntryPool.obtain(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + entry.eventThreshold = 0; + entry.attachmentThreshold = 0; + entry.drawOrderThreshold = 0; + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + entry.alpha = 1; + entry.interruptAlpha = 1; + entry.mixTime = 0; + entry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation); + entry.mixBlend = spine.MixBlend.replace; + return entry; + }; + AnimationState.prototype.disposeNext = function (entry) { + var next = entry.next; + while (next != null) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + }; + AnimationState.prototype._animationsChanged = function () { + this.animationsChanged = false; + this.propertyIDs.clear(); + for (var i = 0, n = this.tracks.length; i < n; i++) { + var entry = this.tracks[i]; + if (entry == null) + continue; + while (entry.mixingFrom != null) + entry = entry.mixingFrom; + do { + if (entry.mixingFrom == null || entry.mixBlend != spine.MixBlend.add) + this.computeHold(entry); + entry = entry.mixingTo; + } while (entry != null); + } + }; + AnimationState.prototype.computeHold = function (entry) { + var to = entry.mixingTo; + var timelines = entry.animation.timelines; + var timelinesCount = entry.animation.timelines.length; + var timelineMode = spine.Utils.setArraySize(entry.timelineMode, timelinesCount); + entry.timelineHoldMix.length = 0; + var timelineDipMix = spine.Utils.setArraySize(entry.timelineHoldMix, timelinesCount); + var propertyIDs = this.propertyIDs; + if (to != null && to.holdPrevious) { + for (var i = 0; i < timelinesCount; i++) { + timelineMode[i] = propertyIDs.add(timelines[i].getPropertyId()) ? AnimationState.HOLD_FIRST : AnimationState.HOLD_SUBSEQUENT; + } + return; + } + outer: for (var i = 0; i < timelinesCount; i++) { + var timeline = timelines[i]; + var id = timeline.getPropertyId(); + if (!propertyIDs.add(id)) + timelineMode[i] = AnimationState.SUBSEQUENT; + else if (to == null || timeline instanceof spine.AttachmentTimeline || timeline instanceof spine.DrawOrderTimeline + || timeline instanceof spine.EventTimeline || !to.animation.hasTimeline(id)) { + timelineMode[i] = AnimationState.FIRST; + } + else { + for (var next = to.mixingTo; next != null; next = next.mixingTo) { + if (next.animation.hasTimeline(id)) + continue; + if (entry.mixDuration > 0) { + timelineMode[i] = AnimationState.HOLD_MIX; + timelineDipMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = AnimationState.HOLD_FIRST; + } + } + }; + AnimationState.prototype.getCurrent = function (trackIndex) { + if (trackIndex >= this.tracks.length) + return null; + return this.tracks[trackIndex]; + }; + AnimationState.prototype.addListener = function (listener) { + if (listener == null) + throw new Error("listener cannot be null."); + this.listeners.push(listener); + }; + AnimationState.prototype.removeListener = function (listener) { + var index = this.listeners.indexOf(listener); + if (index >= 0) + this.listeners.splice(index, 1); + }; + AnimationState.prototype.clearListeners = function () { + this.listeners.length = 0; + }; + AnimationState.prototype.clearListenerNotifications = function () { + this.queue.clear(); + }; + AnimationState.emptyAnimation = new spine.Animation("", [], 0); + AnimationState.SUBSEQUENT = 0; + AnimationState.FIRST = 1; + AnimationState.HOLD_SUBSEQUENT = 2; + AnimationState.HOLD_FIRST = 3; + AnimationState.HOLD_MIX = 4; + AnimationState.SETUP = 1; + AnimationState.CURRENT = 2; + return AnimationState; + }()); + spine.AnimationState = AnimationState; + var TrackEntry = (function () { + function TrackEntry() { + this.mixBlend = spine.MixBlend.replace; + this.timelineMode = new Array(); + this.timelineHoldMix = new Array(); + this.timelinesRotation = new Array(); + } + TrackEntry.prototype.reset = function () { + this.next = null; + this.mixingFrom = null; + this.mixingTo = null; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + }; + TrackEntry.prototype.getAnimationTime = function () { + if (this.loop) { + var duration = this.animationEnd - this.animationStart; + if (duration == 0) + return this.animationStart; + return (this.trackTime % duration) + this.animationStart; + } + return Math.min(this.trackTime + this.animationStart, this.animationEnd); + }; + TrackEntry.prototype.setAnimationLast = function (animationLast) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + }; + TrackEntry.prototype.isComplete = function () { + return this.trackTime >= this.animationEnd - this.animationStart; + }; + TrackEntry.prototype.resetRotationDirections = function () { + this.timelinesRotation.length = 0; + }; + return TrackEntry; + }()); + spine.TrackEntry = TrackEntry; + var EventQueue = (function () { + function EventQueue(animState) { + this.objects = []; + this.drainDisabled = false; + this.animState = animState; + } + EventQueue.prototype.start = function (entry) { + this.objects.push(EventType.start); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.interrupt = function (entry) { + this.objects.push(EventType.interrupt); + this.objects.push(entry); + }; + EventQueue.prototype.end = function (entry) { + this.objects.push(EventType.end); + this.objects.push(entry); + this.animState.animationsChanged = true; + }; + EventQueue.prototype.dispose = function (entry) { + this.objects.push(EventType.dispose); + this.objects.push(entry); + }; + EventQueue.prototype.complete = function (entry) { + this.objects.push(EventType.complete); + this.objects.push(entry); + }; + EventQueue.prototype.event = function (entry, event) { + this.objects.push(EventType.event); + this.objects.push(entry); + this.objects.push(event); + }; + EventQueue.prototype.drain = function () { + if (this.drainDisabled) + return; + this.drainDisabled = true; + var objects = this.objects; + var listeners = this.animState.listeners; + for (var i = 0; i < objects.length; i += 2) { + var type = objects[i]; + var entry = objects[i + 1]; + switch (type) { + case EventType.start: + if (entry.listener != null && entry.listener.start) + entry.listener.start(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].start) + listeners[ii].start(entry); + break; + case EventType.interrupt: + if (entry.listener != null && entry.listener.interrupt) + entry.listener.interrupt(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].interrupt) + listeners[ii].interrupt(entry); + break; + case EventType.end: + if (entry.listener != null && entry.listener.end) + entry.listener.end(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].end) + listeners[ii].end(entry); + case EventType.dispose: + if (entry.listener != null && entry.listener.dispose) + entry.listener.dispose(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].dispose) + listeners[ii].dispose(entry); + this.animState.trackEntryPool.free(entry); + break; + case EventType.complete: + if (entry.listener != null && entry.listener.complete) + entry.listener.complete(entry); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].complete) + listeners[ii].complete(entry); + break; + case EventType.event: + var event_3 = objects[i++ + 2]; + if (entry.listener != null && entry.listener.event) + entry.listener.event(entry, event_3); + for (var ii = 0; ii < listeners.length; ii++) + if (listeners[ii].event) + listeners[ii].event(entry, event_3); + break; + } + } + this.clear(); + this.drainDisabled = false; + }; + EventQueue.prototype.clear = function () { + this.objects.length = 0; + }; + return EventQueue; + }()); + spine.EventQueue = EventQueue; + var EventType; + (function (EventType) { + EventType[EventType["start"] = 0] = "start"; + EventType[EventType["interrupt"] = 1] = "interrupt"; + EventType[EventType["end"] = 2] = "end"; + EventType[EventType["dispose"] = 3] = "dispose"; + EventType[EventType["complete"] = 4] = "complete"; + EventType[EventType["event"] = 5] = "event"; + })(EventType = spine.EventType || (spine.EventType = {})); + var AnimationStateAdapter = (function () { + function AnimationStateAdapter() { + } + AnimationStateAdapter.prototype.start = function (entry) { + }; + AnimationStateAdapter.prototype.interrupt = function (entry) { + }; + AnimationStateAdapter.prototype.end = function (entry) { + }; + AnimationStateAdapter.prototype.dispose = function (entry) { + }; + AnimationStateAdapter.prototype.complete = function (entry) { + }; + AnimationStateAdapter.prototype.event = function (entry, event) { + }; + return AnimationStateAdapter; + }()); + spine.AnimationStateAdapter = AnimationStateAdapter; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AnimationStateData = (function () { + function AnimationStateData(skeletonData) { + this.animationToMixTime = {}; + this.defaultMix = 0; + if (skeletonData == null) + throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + AnimationStateData.prototype.setMix = function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (from == null) + throw new Error("Animation not found: " + fromName); + var to = this.skeletonData.findAnimation(toName); + if (to == null) + throw new Error("Animation not found: " + toName); + this.setMixWith(from, to, duration); + }; + AnimationStateData.prototype.setMixWith = function (from, to, duration) { + if (from == null) + throw new Error("from cannot be null."); + if (to == null) + throw new Error("to cannot be null."); + var key = from.name + "." + to.name; + this.animationToMixTime[key] = duration; + }; + AnimationStateData.prototype.getMix = function (from, to) { + var key = from.name + "." + to.name; + var value = this.animationToMixTime[key]; + return value === undefined ? this.defaultMix : value; + }; + return AnimationStateData; + }()); + spine.AnimationStateData = AnimationStateData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AssetManager = (function () { + function AssetManager(textureLoader, pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.assets = {}; + this.errors = {}; + this.toLoad = 0; + this.loaded = 0; + this.rawDataUris = {}; + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + } + AssetManager.prototype.downloadText = function (url, success, error) { + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.onload = function () { + if (request.status == 200) { + success(request.responseText); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.downloadBinary = function (url, success, error) { + var request = new XMLHttpRequest(); + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + request.open("GET", url, true); + request.responseType = "arraybuffer"; + request.onload = function () { + if (request.status == 200) { + success(new Uint8Array(request.response)); + } + else { + error(request.status, request.responseText); + } + }; + request.onerror = function () { + error(request.status, request.responseText); + }; + request.send(); + }; + AssetManager.prototype.setRawDataURI = function (path, data) { + this.rawDataUris[this.pathPrefix + path] = data; + }; + AssetManager.prototype.loadBinary = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadBinary(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load binary " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load binary " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadText = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (data) { + _this.assets[path] = data; + if (success) + success(path, data); + _this.toLoad--; + _this.loaded++; + }, function (state, responseText) { + _this.errors[path] = "Couldn't load text " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load text " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.loadTexture = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + path = this.pathPrefix + path; + var storagePath = path; + this.toLoad++; + var img = new Image(); + img.crossOrigin = "anonymous"; + img.onload = function (ev) { + var texture = _this.textureLoader(img); + _this.assets[storagePath] = texture; + _this.toLoad--; + _this.loaded++; + if (success) + success(path, img); + }; + img.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + _this.toLoad--; + _this.loaded++; + if (error) + error(path, "Couldn't load image " + path); + }; + if (this.rawDataUris[path]) + path = this.rawDataUris[path]; + img.src = path; + }; + AssetManager.prototype.loadTextureAtlas = function (path, success, error) { + var _this = this; + if (success === void 0) { success = null; } + if (error === void 0) { error = null; } + var parent = path.lastIndexOf("/") >= 0 ? path.substring(0, path.lastIndexOf("/")) : ""; + path = this.pathPrefix + path; + this.toLoad++; + this.downloadText(path, function (atlasData) { + var pagesLoaded = { count: 0 }; + var atlasPages = new Array(); + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + atlasPages.push(parent == "" ? path : parent + "/" + path); + var image = document.createElement("img"); + image.width = 16; + image.height = 16; + return new spine.FakeTexture(image); + }); + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + return; + } + var _loop_1 = function (atlasPage) { + var pageLoadError = false; + _this.loadTexture(atlasPage, function (imagePath, image) { + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + if (!pageLoadError) { + try { + var atlas = new spine.TextureAtlas(atlasData, function (path) { + return _this.get(parent == "" ? path : parent + "/" + path); + }); + _this.assets[path] = atlas; + if (success) + success(path, atlas); + _this.toLoad--; + _this.loaded++; + } + catch (e) { + var ex = e; + _this.errors[path] = "Couldn't load texture atlas " + path + ": " + ex.message; + if (error) + error(path, "Couldn't load texture atlas " + path + ": " + ex.message); + _this.toLoad--; + _this.loaded++; + } + } + else { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + } + }, function (imagePath, errorMessage) { + pageLoadError = true; + pagesLoaded.count++; + if (pagesLoaded.count == atlasPages.length) { + _this.errors[path] = "Couldn't load texture atlas page " + imagePath + "} of atlas " + path; + if (error) + error(path, "Couldn't load texture atlas page " + imagePath + " of atlas " + path); + _this.toLoad--; + _this.loaded++; + } + }); + }; + for (var _i = 0, atlasPages_1 = atlasPages; _i < atlasPages_1.length; _i++) { + var atlasPage = atlasPages_1[_i]; + _loop_1(atlasPage); + } + }, function (state, responseText) { + _this.errors[path] = "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText; + if (error) + error(path, "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText); + _this.toLoad--; + _this.loaded++; + }); + }; + AssetManager.prototype.get = function (path) { + path = this.pathPrefix + path; + return this.assets[path]; + }; + AssetManager.prototype.remove = function (path) { + path = this.pathPrefix + path; + var asset = this.assets[path]; + if (asset.dispose) + asset.dispose(); + this.assets[path] = null; + }; + AssetManager.prototype.removeAll = function () { + for (var key in this.assets) { + var asset = this.assets[key]; + if (asset.dispose) + asset.dispose(); + } + this.assets = {}; + }; + AssetManager.prototype.isLoadingComplete = function () { + return this.toLoad == 0; + }; + AssetManager.prototype.getToLoad = function () { + return this.toLoad; + }; + AssetManager.prototype.getLoaded = function () { + return this.loaded; + }; + AssetManager.prototype.dispose = function () { + this.removeAll(); + }; + AssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + AssetManager.prototype.getErrors = function () { + return this.errors; + }; + return AssetManager; + }()); + spine.AssetManager = AssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AtlasAttachmentLoader = (function () { + function AtlasAttachmentLoader(atlas) { + this.atlas = atlas; + } + AtlasAttachmentLoader.prototype.newRegionAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.RegionAttachment(name); + attachment.setRegion(region); + return attachment; + }; + AtlasAttachmentLoader.prototype.newMeshAttachment = function (skin, name, path) { + var region = this.atlas.findRegion(path); + if (region == null) + throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); + region.renderObject = region; + var attachment = new spine.MeshAttachment(name); + attachment.region = region; + return attachment; + }; + AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function (skin, name) { + return new spine.BoundingBoxAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPathAttachment = function (skin, name) { + return new spine.PathAttachment(name); + }; + AtlasAttachmentLoader.prototype.newPointAttachment = function (skin, name) { + return new spine.PointAttachment(name); + }; + AtlasAttachmentLoader.prototype.newClippingAttachment = function (skin, name) { + return new spine.ClippingAttachment(name); + }; + return AtlasAttachmentLoader; + }()); + spine.AtlasAttachmentLoader = AtlasAttachmentLoader; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BlendMode; + (function (BlendMode) { + BlendMode[BlendMode["Normal"] = 0] = "Normal"; + BlendMode[BlendMode["Additive"] = 1] = "Additive"; + BlendMode[BlendMode["Multiply"] = 2] = "Multiply"; + BlendMode[BlendMode["Screen"] = 3] = "Screen"; + })(BlendMode = spine.BlendMode || (spine.BlendMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Bone = (function () { + function Bone(data, skeleton, parent) { + this.children = new Array(); + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 0; + this.scaleY = 0; + this.shearX = 0; + this.shearY = 0; + this.ax = 0; + this.ay = 0; + this.arotation = 0; + this.ascaleX = 0; + this.ascaleY = 0; + this.ashearX = 0; + this.ashearY = 0; + this.appliedValid = false; + this.a = 0; + this.b = 0; + this.c = 0; + this.d = 0; + this.worldY = 0; + this.worldX = 0; + this.sorted = false; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.skeleton = skeleton; + this.parent = parent; + this.setToSetupPose(); + } + Bone.prototype.isActive = function () { + return this.active; + }; + Bone.prototype.update = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransform = function () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + }; + Bone.prototype.updateWorldTransformWith = function (x, y, rotation, scaleX, scaleY, shearX, shearY) { + this.ax = x; + this.ay = y; + this.arotation = rotation; + this.ascaleX = scaleX; + this.ascaleY = scaleY; + this.ashearX = shearX; + this.ashearY = shearY; + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + var skeleton = this.skeleton; + var rotationY = rotation + 90 + shearY; + var sx = skeleton.scaleX; + var sy = skeleton.scaleY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX * sx; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY * sx; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX * sy; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY * sy; + this.worldX = x * sx + skeleton.x; + this.worldY = y * sy + skeleton.y; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + this.worldX = pa * x + pb * y + parent.worldX; + this.worldY = pc * x + pd * y + parent.worldY; + switch (this.data.transformMode) { + case spine.TransformMode.Normal: { + var rotationY = rotation + 90 + shearY; + var la = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(rotationY) * scaleY; + var lc = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(rotationY) * scaleY; + this.a = pa * la + pb * lc; + this.b = pa * lb + pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + return; + } + case spine.TransformMode.OnlyTranslation: { + var rotationY = rotation + 90 + shearY; + this.a = spine.MathUtils.cosDeg(rotation + shearX) * scaleX; + this.b = spine.MathUtils.cosDeg(rotationY) * scaleY; + this.c = spine.MathUtils.sinDeg(rotation + shearX) * scaleX; + this.d = spine.MathUtils.sinDeg(rotationY) * scaleY; + break; + } + case spine.TransformMode.NoRotationOrReflection: { + var s = pa * pa + pc * pc; + var prx = 0; + if (s > 0.0001) { + s = Math.abs(pa * pd - pb * pc) / s; + pa /= this.skeleton.scaleX; + pc /= this.skeleton.scaleY; + pb = pc * s; + pd = pa * s; + prx = Math.atan2(pc, pa) * spine.MathUtils.radDeg; + } + else { + pa = 0; + pc = 0; + prx = 90 - Math.atan2(pd, pb) * spine.MathUtils.radDeg; + } + var rx = rotation + shearX - prx; + var ry = rotation + shearY - prx + 90; + var la = spine.MathUtils.cosDeg(rx) * scaleX; + var lb = spine.MathUtils.cosDeg(ry) * scaleY; + var lc = spine.MathUtils.sinDeg(rx) * scaleX; + var ld = spine.MathUtils.sinDeg(ry) * scaleY; + this.a = pa * la - pb * lc; + this.b = pa * lb - pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + break; + } + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: { + var cos = spine.MathUtils.cosDeg(rotation); + var sin = spine.MathUtils.sinDeg(rotation); + var za = (pa * cos + pb * sin) / this.skeleton.scaleX; + var zc = (pc * cos + pd * sin) / this.skeleton.scaleY; + var s = Math.sqrt(za * za + zc * zc); + if (s > 0.00001) + s = 1 / s; + za *= s; + zc *= s; + s = Math.sqrt(za * za + zc * zc); + if (this.data.transformMode == spine.TransformMode.NoScale + && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) + s = -s; + var r = Math.PI / 2 + Math.atan2(zc, za); + var zb = Math.cos(r) * s; + var zd = Math.sin(r) * s; + var la = spine.MathUtils.cosDeg(shearX) * scaleX; + var lb = spine.MathUtils.cosDeg(90 + shearY) * scaleY; + var lc = spine.MathUtils.sinDeg(shearX) * scaleX; + var ld = spine.MathUtils.sinDeg(90 + shearY) * scaleY; + this.a = za * la + zb * lc; + this.b = za * lb + zb * ld; + this.c = zc * la + zd * lc; + this.d = zc * lb + zd * ld; + break; + } + } + this.a *= this.skeleton.scaleX; + this.b *= this.skeleton.scaleX; + this.c *= this.skeleton.scaleY; + this.d *= this.skeleton.scaleY; + }; + Bone.prototype.setToSetupPose = function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + this.shearX = data.shearX; + this.shearY = data.shearY; + }; + Bone.prototype.getWorldRotationX = function () { + return Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldRotationY = function () { + return Math.atan2(this.d, this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.getWorldScaleX = function () { + return Math.sqrt(this.a * this.a + this.c * this.c); + }; + Bone.prototype.getWorldScaleY = function () { + return Math.sqrt(this.b * this.b + this.d * this.d); + }; + Bone.prototype.updateAppliedTransform = function () { + this.appliedValid = true; + var parent = this.parent; + if (parent == null) { + this.ax = this.worldX; + this.ay = this.worldY; + this.arotation = Math.atan2(this.c, this.a) * spine.MathUtils.radDeg; + this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c); + this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d); + this.ashearX = 0; + this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * spine.MathUtils.radDeg; + return; + } + var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + var pid = 1 / (pa * pd - pb * pc); + var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY; + this.ax = (dx * pd * pid - dy * pb * pid); + this.ay = (dy * pa * pid - dx * pc * pid); + var ia = pid * pd; + var id = pid * pa; + var ib = pid * pb; + var ic = pid * pc; + var ra = ia * this.a - ib * this.c; + var rb = ia * this.b - ib * this.d; + var rc = id * this.c - ic * this.a; + var rd = id * this.d - ic * this.b; + this.ashearX = 0; + this.ascaleX = Math.sqrt(ra * ra + rc * rc); + if (this.ascaleX > 0.0001) { + var det = ra * rd - rb * rc; + this.ascaleY = det / this.ascaleX; + this.ashearY = Math.atan2(ra * rb + rc * rd, det) * spine.MathUtils.radDeg; + this.arotation = Math.atan2(rc, ra) * spine.MathUtils.radDeg; + } + else { + this.ascaleX = 0; + this.ascaleY = Math.sqrt(rb * rb + rd * rd); + this.ashearY = 0; + this.arotation = 90 - Math.atan2(rd, rb) * spine.MathUtils.radDeg; + } + }; + Bone.prototype.worldToLocal = function (world) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var invDet = 1 / (a * d - b * c); + var x = world.x - this.worldX, y = world.y - this.worldY; + world.x = (x * d * invDet - y * b * invDet); + world.y = (y * a * invDet - x * c * invDet); + return world; + }; + Bone.prototype.localToWorld = function (local) { + var x = local.x, y = local.y; + local.x = x * this.a + y * this.b + this.worldX; + local.y = x * this.c + y * this.d + this.worldY; + return local; + }; + Bone.prototype.worldToLocalRotation = function (worldRotation) { + var sin = spine.MathUtils.sinDeg(worldRotation), cos = spine.MathUtils.cosDeg(worldRotation); + return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * spine.MathUtils.radDeg + this.rotation - this.shearX; + }; + Bone.prototype.localToWorldRotation = function (localRotation) { + localRotation -= this.rotation - this.shearX; + var sin = spine.MathUtils.sinDeg(localRotation), cos = spine.MathUtils.cosDeg(localRotation); + return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * spine.MathUtils.radDeg; + }; + Bone.prototype.rotateWorld = function (degrees) { + var a = this.a, b = this.b, c = this.c, d = this.d; + var cos = spine.MathUtils.cosDeg(degrees), sin = spine.MathUtils.sinDeg(degrees); + this.a = cos * a - sin * c; + this.b = cos * b - sin * d; + this.c = sin * a + cos * c; + this.d = sin * b + cos * d; + this.appliedValid = false; + }; + return Bone; + }()); + spine.Bone = Bone; +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoneData = (function () { + function BoneData(index, name, parent) { + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 1; + this.scaleY = 1; + this.shearX = 0; + this.shearY = 0; + this.transformMode = TransformMode.Normal; + this.skinRequired = false; + this.color = new spine.Color(); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + this.index = index; + this.name = name; + this.parent = parent; + } + return BoneData; + }()); + spine.BoneData = BoneData; + var TransformMode; + (function (TransformMode) { + TransformMode[TransformMode["Normal"] = 0] = "Normal"; + TransformMode[TransformMode["OnlyTranslation"] = 1] = "OnlyTranslation"; + TransformMode[TransformMode["NoRotationOrReflection"] = 2] = "NoRotationOrReflection"; + TransformMode[TransformMode["NoScale"] = 3] = "NoScale"; + TransformMode[TransformMode["NoScaleOrReflection"] = 4] = "NoScaleOrReflection"; + })(TransformMode = spine.TransformMode || (spine.TransformMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var ConstraintData = (function () { + function ConstraintData(name, order, skinRequired) { + this.name = name; + this.order = order; + this.skinRequired = skinRequired; + } + return ConstraintData; + }()); + spine.ConstraintData = ConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Event = (function () { + function Event(time, data) { + if (data == null) + throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + return Event; + }()); + spine.Event = Event; +})(spine || (spine = {})); +var spine; +(function (spine) { + var EventData = (function () { + function EventData(name) { + this.name = name; + } + return EventData; + }()); + spine.EventData = EventData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraint = (function () { + function IkConstraint(data, skeleton) { + this.bendDirection = 0; + this.compress = false; + this.stretch = false; + this.mix = 1; + this.softness = 0; + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + IkConstraint.prototype.isActive = function () { + return this.active; + }; + IkConstraint.prototype.apply = function () { + this.update(); + }; + IkConstraint.prototype.update = function () { + var target = this.target; + var bones = this.bones; + switch (bones.length) { + case 1: + this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); + break; + case 2: + this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix); + break; + } + }; + IkConstraint.prototype.apply1 = function (bone, targetX, targetY, compress, stretch, uniform, alpha) { + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var p = bone.parent; + var pa = p.a, pb = p.b, pc = p.c, pd = p.d; + var rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0; + switch (bone.data.transformMode) { + case spine.TransformMode.OnlyTranslation: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + break; + case spine.TransformMode.NoRotationOrReflection: + var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + var sa = pa / bone.skeleton.scaleX; + var sc = pc / bone.skeleton.scaleY; + pb = -sc * s * bone.skeleton.scaleX; + pd = sa * s * bone.skeleton.scaleY; + rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg; + default: + var x = targetX - p.worldX, y = targetY - p.worldY; + var d = pa * pd - pb * pc; + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + } + rotationIK += Math.atan2(ty, tx) * spine.MathUtils.radDeg; + if (bone.ascaleX < 0) + rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; + else if (rotationIK < -180) + rotationIK += 360; + var sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { + switch (bone.data.transformMode) { + case spine.TransformMode.NoScale: + case spine.TransformMode.NoScaleOrReflection: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + } + var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty); + if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) { + var s = (dd / b - 1) * alpha + 1; + sx *= s; + if (uniform) + sy *= s; + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); + }; + IkConstraint.prototype.apply2 = function (parent, child, targetX, targetY, bendDir, stretch, softness, alpha) { + if (alpha == 0) { + child.updateWorldTransform(); + return; + } + if (!parent.appliedValid) + parent.updateAppliedTransform(); + if (!child.appliedValid) + child.updateAppliedTransform(); + var px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX; + var os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } + else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } + else + os2 = 0; + var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + var u = Math.abs(psx - psy) <= 0.0001; + if (!u) { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } + else { + cy = child.ay; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } + var pp = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; + if (l1 < 0.0001) { + this.apply1(parent, targetX, targetY, false, stretch, false, alpha); + child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + var dd = tx * tx + ty * ty; + if (softness != 0) { + softness *= psx * (csx + 1) / 2; + var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + var p = Math.min(1, sd / (softness * 2)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: if (u) { + l2 *= psx; + var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) + cos = -1; + else if (cos > 1) { + cos = 1; + if (stretch) + sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + } + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } + else { + a = psx * l2; + b = psy * l2; + var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + var c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + var q = Math.sqrt(d); + if (c1 < 0) + q = -q; + q = -(c1 + q) / 2; + var r0 = q / c2, r1 = c / q; + var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + if (r * r <= dd) { + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; + } + } + var minAngle = spine.MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; + } + } + if (dd <= (minDist + maxDist) / 2) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } + else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + var os = Math.atan2(cy, cx) * s2; + var rotation = parent.arotation; + a1 = (a1 - os) * spine.MathUtils.radDeg + os1 - rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) + a1 += 360; + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0); + rotation = child.arotation; + a2 = ((a2 + os) * spine.MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) + a2 += 360; + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + }; + return IkConstraint; + }()); + spine.IkConstraint = IkConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IkConstraintData = (function (_super) { + __extends(IkConstraintData, _super); + function IkConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.bendDirection = 1; + _this.compress = false; + _this.stretch = false; + _this.uniform = false; + _this.mix = 1; + _this.softness = 0; + return _this; + } + return IkConstraintData; + }(spine.ConstraintData)); + spine.IkConstraintData = IkConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraint = (function () { + function PathConstraint(data, skeleton) { + this.position = 0; + this.spacing = 0; + this.rotateMix = 0; + this.translateMix = 0; + this.spaces = new Array(); + this.positions = new Array(); + this.world = new Array(); + this.curves = new Array(); + this.lengths = new Array(); + this.segments = new Array(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0, n = data.bones.length; i < n; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findSlot(data.target.name); + this.position = data.position; + this.spacing = data.spacing; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + } + PathConstraint.prototype.isActive = function () { + return this.active; + }; + PathConstraint.prototype.apply = function () { + this.update(); + }; + PathConstraint.prototype.update = function () { + var attachment = this.target.getAttachment(); + if (!(attachment instanceof spine.PathAttachment)) + return; + var rotateMix = this.rotateMix, translateMix = this.translateMix; + var translate = translateMix > 0, rotate = rotateMix > 0; + if (!translate && !rotate) + return; + var data = this.data; + var percentSpacing = data.spacingMode == spine.SpacingMode.Percent; + var rotateMode = data.rotateMode; + var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; + var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + var bones = this.bones; + var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; + var spacing = this.spacing; + if (scale || !percentSpacing) { + if (scale) + lengths = spine.Utils.setArraySize(this.lengths, boneCount); + var lengthSpacing = data.spacingMode == spine.SpacingMode.Length; + for (var i = 0, n = spacesCount - 1; i < n;) { + var bone = bones[i]; + var setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + if (scale) + lengths[i] = 0; + spaces[++i] = 0; + } + else if (percentSpacing) { + if (scale) { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_1 = Math.sqrt(x * x + y * y); + lengths[i] = length_1; + } + spaces[++i] = spacing; + } + else { + var x = setupLength * bone.a, y = setupLength * bone.c; + var length_2 = Math.sqrt(x * x + y * y); + if (scale) + lengths[i] = length_2; + spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength; + } + } + } + else { + for (var i = 1; i < spacesCount; i++) + spaces[i] = spacing; + } + var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing); + var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + var tip = false; + if (offsetRotation == 0) + tip = rotateMode == spine.RotateMode.Chain; + else { + tip = false; + var p = this.target.bone; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + } + for (var i = 0, p = 3; i < boneCount; i++, p += 3) { + var bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * translateMix; + bone.worldY += (boneY - bone.worldY) * translateMix; + var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + var length_3 = lengths[i]; + if (length_3 != 0) { + var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * rotateMix + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + if (tangents) + r = positions[p - 1]; + else if (spaces[i + 1] == 0) + r = positions[p + 2]; + else + r = Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + var length_4 = bone.data.length; + boneX += (length_4 * (cos * a - sin * c) - dx) * rotateMix; + boneY += (length_4 * (sin * a + cos * c) - dy) * rotateMix; + } + else { + r += offsetRotation; + } + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.appliedValid = false; + } + }; + PathConstraint.prototype.computeWorldPositions = function (path, spacesCount, tangents, percentPosition, percentSpacing) { + var target = this.target; + var position = this.position; + var spaces = this.spaces, out = spine.Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null; + var closed = path.closed; + var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE; + if (!path.constantSpeed) { + var lengths = path.lengths; + curveCount -= closed ? 1 : 2; + var pathLength_1 = lengths[curveCount]; + if (percentPosition) + position *= pathLength_1; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength_1; + } + world = spine.Utils.setArraySize(this.world, 8); + for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength_1; + if (p < 0) + p += pathLength_1; + curve = 0; + } + else if (p < 0) { + if (prevCurve != PathConstraint.BEFORE) { + prevCurve = PathConstraint.BEFORE; + path.computeWorldVertices(target, 2, 4, world, 0, 2); + } + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength_1) { + if (prevCurve != PathConstraint.AFTER) { + prevCurve = PathConstraint.AFTER; + path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength_1, world, 0, out, o); + continue; + } + for (;; curve++) { + var length_5 = lengths[curve]; + if (p > length_5) + continue; + if (curve == 0) + p /= length_5; + else { + var prev = lengths[curve - 1]; + p = (p - prev) / (length_5 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); + path.computeWorldVertices(target, 0, 4, world, 4, 2); + } + else + path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2); + } + this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0)); + } + return out; + } + if (closed) { + verticesLength += 2; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); + path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } + else { + curveCount--; + verticesLength -= 4; + world = spine.Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + var curves = spine.Utils.setArraySize(this.curves, curveCount); + var pathLength = 0; + var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (var i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (percentPosition) + position *= pathLength; + else + position *= pathLength / path.lengths[curveCount - 1]; + if (percentSpacing) { + for (var i = 1; i < spacesCount; i++) + spaces[i] *= pathLength; + } + var segments = this.segments; + var curveLength = 0; + for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (closed) { + p %= pathLength; + if (p < 0) + p += pathLength; + curve = 0; + } + else if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } + else if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + for (;; curve++) { + var length_6 = curves[curve]; + if (p > length_6) + continue; + if (curve == 0) + p /= length_6; + else { + var prev = curves[curve - 1]; + p = (p - prev) / (length_6 - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + var ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + p *= curveLength; + for (;; segment++) { + var length_7 = segments[segment]; + if (p > length_7) + continue; + if (segment == 0) + p /= length_7; + else { + var prev = segments[segment - 1]; + p = segment + (p - prev) / (length_7 - prev); + } + break; + } + this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); + } + return out; + }; + PathConstraint.prototype.addBeforePosition = function (p, temp, i, out, o) { + var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addAfterPosition = function (p, temp, i, out, o) { + var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + }; + PathConstraint.prototype.addCurvePosition = function (p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { + if (p == 0 || isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + var ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) { + if (p < 0.001) + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + else + out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + }; + PathConstraint.NONE = -1; + PathConstraint.BEFORE = -2; + PathConstraint.AFTER = -3; + PathConstraint.epsilon = 0.00001; + return PathConstraint; + }()); + spine.PathConstraint = PathConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathConstraintData = (function (_super) { + __extends(PathConstraintData, _super); + function PathConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + return _this; + } + return PathConstraintData; + }(spine.ConstraintData)); + spine.PathConstraintData = PathConstraintData; + var PositionMode; + (function (PositionMode) { + PositionMode[PositionMode["Fixed"] = 0] = "Fixed"; + PositionMode[PositionMode["Percent"] = 1] = "Percent"; + })(PositionMode = spine.PositionMode || (spine.PositionMode = {})); + var SpacingMode; + (function (SpacingMode) { + SpacingMode[SpacingMode["Length"] = 0] = "Length"; + SpacingMode[SpacingMode["Fixed"] = 1] = "Fixed"; + SpacingMode[SpacingMode["Percent"] = 2] = "Percent"; + })(SpacingMode = spine.SpacingMode || (spine.SpacingMode = {})); + var RotateMode; + (function (RotateMode) { + RotateMode[RotateMode["Tangent"] = 0] = "Tangent"; + RotateMode[RotateMode["Chain"] = 1] = "Chain"; + RotateMode[RotateMode["ChainScale"] = 2] = "ChainScale"; + })(RotateMode = spine.RotateMode || (spine.RotateMode = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var Assets = (function () { + function Assets(clientId) { + this.toLoad = new Array(); + this.assets = {}; + this.clientId = clientId; + } + Assets.prototype.loaded = function () { + var i = 0; + for (var v in this.assets) + i++; + return i; + }; + return Assets; + }()); + var SharedAssetManager = (function () { + function SharedAssetManager(pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + this.clientAssets = {}; + this.queuedAssets = {}; + this.rawAssets = {}; + this.errors = {}; + this.pathPrefix = pathPrefix; + } + SharedAssetManager.prototype.queueAsset = function (clientId, textureLoader, path) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) { + clientAssets = new Assets(clientId); + this.clientAssets[clientId] = clientAssets; + } + if (textureLoader !== null) + clientAssets.textureLoader = textureLoader; + clientAssets.toLoad.push(path); + if (this.queuedAssets[path] === path) { + return false; + } + else { + this.queuedAssets[path] = path; + return true; + } + }; + SharedAssetManager.prototype.loadText = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = request.responseText; + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadJson = function (clientId, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) + return; + var request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = function () { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + _this.rawAssets[path] = JSON.parse(request.responseText); + } + else { + _this.errors[path] = "Couldn't load text " + path + ": status " + request.status + ", " + request.responseText; + } + } + }; + request.open("GET", path, true); + request.send(); + }; + SharedAssetManager.prototype.loadTexture = function (clientId, textureLoader, path) { + var _this = this; + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, textureLoader, path)) + return; + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + if (isWebWorker) { + var options = { mode: "cors" }; + fetch(path, options).then(function (response) { + if (!response.ok) { + _this.errors[path] = "Couldn't load image " + path; + } + return response.blob(); + }).then(function (blob) { + return createImageBitmap(blob, { + premultiplyAlpha: 'none', + colorSpaceConversion: 'none' + }); + }).then(function (bitmap) { + _this.rawAssets[path] = bitmap; + }); + } + else { + var img_1 = new Image(); + img_1.crossOrigin = "anonymous"; + img_1.onload = function (ev) { + _this.rawAssets[path] = img_1; + }; + img_1.onerror = function (ev) { + _this.errors[path] = "Couldn't load image " + path; + }; + img_1.src = path; + } + }; + SharedAssetManager.prototype.get = function (clientId, path) { + path = this.pathPrefix + path; + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + return clientAssets.assets[path]; + }; + SharedAssetManager.prototype.updateClientAssets = function (clientAssets) { + var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + var isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + for (var i = 0; i < clientAssets.toLoad.length; i++) { + var path = clientAssets.toLoad[i]; + var asset = clientAssets.assets[path]; + if (asset === null || asset === undefined) { + var rawAsset = this.rawAssets[path]; + if (rawAsset === null || rawAsset === undefined) + continue; + if (isWebWorker) { + if (rawAsset instanceof ImageBitmap) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + else { + if (rawAsset instanceof HTMLImageElement) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } + else { + clientAssets.assets[path] = rawAsset; + } + } + } + } + }; + SharedAssetManager.prototype.isLoadingComplete = function (clientId) { + var clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) + return true; + this.updateClientAssets(clientAssets); + return clientAssets.toLoad.length == clientAssets.loaded(); + }; + SharedAssetManager.prototype.dispose = function () { + }; + SharedAssetManager.prototype.hasErrors = function () { + return Object.keys(this.errors).length > 0; + }; + SharedAssetManager.prototype.getErrors = function () { + return this.errors; + }; + return SharedAssetManager; + }()); + spine.SharedAssetManager = SharedAssetManager; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Skeleton = (function () { + function Skeleton(data) { + this._updateCache = new Array(); + this.updateCacheReset = new Array(); + this.time = 0; + this.scaleX = 1; + this.scaleY = 1; + this.x = 0; + this.y = 0; + if (data == null) + throw new Error("data cannot be null."); + this.data = data; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) { + var boneData = data.bones[i]; + var bone = void 0; + if (boneData.parent == null) + bone = new spine.Bone(boneData, this, null); + else { + var parent_1 = this.bones[boneData.parent.index]; + bone = new spine.Bone(boneData, this, parent_1); + parent_1.children.push(bone); + } + this.bones.push(bone); + } + this.slots = new Array(); + this.drawOrder = new Array(); + for (var i = 0; i < data.slots.length; i++) { + var slotData = data.slots[i]; + var bone = this.bones[slotData.boneData.index]; + var slot = new spine.Slot(slotData, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } + this.ikConstraints = new Array(); + for (var i = 0; i < data.ikConstraints.length; i++) { + var ikConstraintData = data.ikConstraints[i]; + this.ikConstraints.push(new spine.IkConstraint(ikConstraintData, this)); + } + this.transformConstraints = new Array(); + for (var i = 0; i < data.transformConstraints.length; i++) { + var transformConstraintData = data.transformConstraints[i]; + this.transformConstraints.push(new spine.TransformConstraint(transformConstraintData, this)); + } + this.pathConstraints = new Array(); + for (var i = 0; i < data.pathConstraints.length; i++) { + var pathConstraintData = data.pathConstraints[i]; + this.pathConstraints.push(new spine.PathConstraint(pathConstraintData, this)); + } + this.color = new spine.Color(1, 1, 1, 1); + this.updateCache(); + } + Skeleton.prototype.updateCache = function () { + var updateCache = this._updateCache; + updateCache.length = 0; + this.updateCacheReset.length = 0; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + } + if (this.skin != null) { + var skinBones = this.skin.bones; + for (var i = 0, n = this.skin.bones.length; i < n; i++) { + var bone = this.bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (bone != null); + } + } + var ikConstraints = this.ikConstraints; + var transformConstraints = this.transformConstraints; + var pathConstraints = this.pathConstraints; + var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length; + var constraintCount = ikCount + transformCount + pathCount; + outer: for (var i = 0; i < constraintCount; i++) { + for (var ii = 0; ii < ikCount; ii++) { + var constraint = ikConstraints[ii]; + if (constraint.data.order == i) { + this.sortIkConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < transformCount; ii++) { + var constraint = transformConstraints[ii]; + if (constraint.data.order == i) { + this.sortTransformConstraint(constraint); + continue outer; + } + } + for (var ii = 0; ii < pathCount; ii++) { + var constraint = pathConstraints[ii]; + if (constraint.data.order == i) { + this.sortPathConstraint(constraint); + continue outer; + } + } + } + for (var i = 0, n = bones.length; i < n; i++) + this.sortBone(bones[i]); + }; + Skeleton.prototype.sortIkConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var target = constraint.target; + this.sortBone(target); + var constrained = constraint.bones; + var parent = constrained[0]; + this.sortBone(parent); + if (constrained.length > 1) { + var child = constrained[constrained.length - 1]; + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + this._updateCache.push(constraint); + this.sortReset(parent.children); + constrained[constrained.length - 1].sorted = true; + }; + Skeleton.prototype.sortPathConstraint = function (constraint) { + constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + var slot = constraint.target; + var slotIndex = slot.data.index; + var slotBone = slot.bone; + if (this.skin != null) + this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); + if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin) + this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); + for (var i = 0, n = this.data.skins.length; i < n; i++) + this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); + var attachment = slot.getAttachment(); + if (attachment instanceof spine.PathAttachment) + this.sortPathConstraintAttachmentWith(attachment, slotBone); + var constrained = constraint.bones; + var boneCount = constrained.length; + for (var i = 0; i < boneCount; i++) + this.sortBone(constrained[i]); + this._updateCache.push(constraint); + for (var i = 0; i < boneCount; i++) + this.sortReset(constrained[i].children); + for (var i = 0; i < boneCount; i++) + constrained[i].sorted = true; + }; + Skeleton.prototype.sortTransformConstraint = function (constraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && spine.Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) + return; + this.sortBone(constraint.target); + var constrained = constraint.bones; + var boneCount = constrained.length; + if (constraint.data.local) { + for (var i = 0; i < boneCount; i++) { + var child = constrained[i]; + this.sortBone(child.parent); + if (!(this._updateCache.indexOf(child) > -1)) + this.updateCacheReset.push(child); + } + } + else { + for (var i = 0; i < boneCount; i++) { + this.sortBone(constrained[i]); + } + } + this._updateCache.push(constraint); + for (var ii = 0; ii < boneCount; ii++) + this.sortReset(constrained[ii].children); + for (var ii = 0; ii < boneCount; ii++) + constrained[ii].sorted = true; + }; + Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) { + var attachments = skin.attachments[slotIndex]; + if (!attachments) + return; + for (var key in attachments) { + this.sortPathConstraintAttachmentWith(attachments[key], slotBone); + } + }; + Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) { + if (!(attachment instanceof spine.PathAttachment)) + return; + var pathBones = attachment.bones; + if (pathBones == null) + this.sortBone(slotBone); + else { + var bones = this.bones; + var i = 0; + while (i < pathBones.length) { + var boneCount = pathBones[i++]; + for (var n = i + boneCount; i < n; i++) { + var boneIndex = pathBones[i]; + this.sortBone(bones[boneIndex]); + } + } + } + }; + Skeleton.prototype.sortBone = function (bone) { + if (bone.sorted) + return; + var parent = bone.parent; + if (parent != null) + this.sortBone(parent); + bone.sorted = true; + this._updateCache.push(bone); + }; + Skeleton.prototype.sortReset = function (bones) { + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.active) + continue; + if (bone.sorted) + this.sortReset(bone.children); + bone.sorted = false; + } + }; + Skeleton.prototype.updateWorldTransform = function () { + var updateCacheReset = this.updateCacheReset; + for (var i = 0, n = updateCacheReset.length; i < n; i++) { + var bone = updateCacheReset[i]; + bone.ax = bone.x; + bone.ay = bone.y; + bone.arotation = bone.rotation; + bone.ascaleX = bone.scaleX; + bone.ascaleY = bone.scaleY; + bone.ashearX = bone.shearX; + bone.ashearY = bone.shearY; + bone.appliedValid = true; + } + var updateCache = this._updateCache; + for (var i = 0, n = updateCache.length; i < n; i++) + updateCache[i].update(); + }; + Skeleton.prototype.setToSetupPose = function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }; + Skeleton.prototype.setBonesToSetupPose = function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + var data = constraint.data; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + } + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + var data = constraint.data; + constraint.position = data.position; + constraint.spacing = data.spacing; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + } + }; + Skeleton.prototype.setSlotsToSetupPose = function () { + var slots = this.slots; + spine.Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length); + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(); + }; + Skeleton.prototype.getRootBone = function () { + if (this.bones.length == 0) + return null; + return this.bones[0]; + }; + Skeleton.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.data.name == boneName) + return bone; + } + return null; + }; + Skeleton.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) + return i; + return -1; + }; + Skeleton.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) + return slot; + } + return null; + }; + Skeleton.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) + return i; + return -1; + }; + Skeleton.prototype.setSkinByName = function (skinName) { + var skin = this.data.findSkin(skinName); + if (skin == null) + throw new Error("Skin not found: " + skinName); + this.setSkin(skin); + }; + Skeleton.prototype.setSkin = function (newSkin) { + if (newSkin == this.skin) + return; + if (newSkin != null) { + if (this.skin != null) + newSkin.attachAll(this, this.skin); + else { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var name_1 = slot.data.attachmentName; + if (name_1 != null) { + var attachment = newSkin.getAttachment(i, name_1); + if (attachment != null) + slot.setAttachment(attachment); + } + } + } + } + this.skin = newSkin; + this.updateCache(); + }; + Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) { + return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName); + }; + Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) { + if (attachmentName == null) + throw new Error("attachmentName cannot be null."); + if (this.skin != null) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment != null) + return attachment; + } + if (this.data.defaultSkin != null) + return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }; + Skeleton.prototype.setAttachment = function (slotName, attachmentName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName != null) { + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) + throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); + } + slot.setAttachment(attachment); + return; + } + } + throw new Error("Slot not found: " + slotName); + }; + Skeleton.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var ikConstraint = ikConstraints[i]; + if (ikConstraint.data.name == constraintName) + return ikConstraint; + } + return null; + }; + Skeleton.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.data.name == constraintName) + return constraint; + } + return null; + }; + Skeleton.prototype.getBounds = function (offset, size, temp) { + if (temp === void 0) { temp = new Array(2); } + if (offset == null) + throw new Error("offset cannot be null."); + if (size == null) + throw new Error("size cannot be null."); + var drawOrder = this.drawOrder; + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var slot = drawOrder[i]; + if (!slot.bone.active) + continue; + var verticesLength = 0; + var vertices = null; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.RegionAttachment) { + verticesLength = 8; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + attachment.computeWorldVertices(slot.bone, vertices, 0, 2); + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + verticesLength = mesh.worldVerticesLength; + vertices = spine.Utils.setArraySize(temp, verticesLength, 0); + mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); + } + if (vertices != null) { + for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) { + var x = vertices[ii], y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + } + offset.set(minX, minY); + size.set(maxX - minX, maxY - minY); + }; + Skeleton.prototype.update = function (delta) { + this.time += delta; + }; + return Skeleton; + }()); + spine.Skeleton = Skeleton; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBinary = (function () { + function SkeletonBinary(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonBinary.prototype.readSkeletonData = function (binary) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + skeletonData.name = ""; + var input = new BinaryInput(binary); + skeletonData.hash = input.readString(); + skeletonData.version = input.readString(); + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + var nonessential = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + var n = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) + input.strings.push(input.readString()); + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var name_2 = input.readString(); + var parent_2 = i == 0 ? null : skeletonData.bones[input.readInt(true)]; + var data = new spine.BoneData(i, name_2, parent_2); + data.rotation = input.readFloat(); + data.x = input.readFloat() * scale; + data.y = input.readFloat() * scale; + data.scaleX = input.readFloat(); + data.scaleY = input.readFloat(); + data.shearX = input.readFloat(); + data.shearY = input.readFloat(); + data.length = input.readFloat() * scale; + data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)]; + data.skinRequired = input.readBoolean(); + if (nonessential) + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + skeletonData.bones.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var slotName = input.readString(); + var boneData = skeletonData.bones[input.readInt(true)]; + var data = new spine.SlotData(i, slotName, boneData); + spine.Color.rgba8888ToColor(data.color, input.readInt32()); + var darkColor = input.readInt32(); + if (darkColor != -1) + spine.Color.rgb888ToColor(data.darkColor = new spine.Color(), darkColor); + data.attachmentName = input.readStringRef(); + data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)]; + skeletonData.slots.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.IkConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.mix = input.readFloat(); + data.softness = input.readFloat() * scale; + data.bendDirection = input.readByte(); + data.compress = input.readBoolean(); + data.stretch = input.readBoolean(); + data.uniform = input.readBoolean(); + skeletonData.ikConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.TransformConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.local = input.readBoolean(); + data.relative = input.readBoolean(); + data.offsetRotation = input.readFloat(); + data.offsetX = input.readFloat() * scale; + data.offsetY = input.readFloat() * scale; + data.offsetScaleX = input.readFloat(); + data.offsetScaleY = input.readFloat(); + data.offsetShearY = input.readFloat(); + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + data.scaleMix = input.readFloat(); + data.shearMix = input.readFloat(); + skeletonData.transformConstraints.push(data); + } + n = input.readInt(true); + for (var i = 0, nn = void 0; i < n; i++) { + var data = new spine.PathConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (var ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.slots[input.readInt(true)]; + data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)]; + data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)]; + data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)]; + data.offsetRotation = input.readFloat(); + data.position = input.readFloat(); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = input.readFloat(); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + skeletonData.pathConstraints.push(data); + } + var defaultSkin = this.readSkin(input, skeletonData, true, nonessential); + if (defaultSkin != null) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + { + var i = skeletonData.skins.length; + spine.Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true)); + for (; i < n; i++) + skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential); + } + n = this.linkedMeshes.length; + for (var i = 0; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_3 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_3 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_3 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_3); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + n = input.readInt(true); + for (var i = 0; i < n; i++) { + var data = new spine.EventData(input.readStringRef()); + data.intValue = input.readInt(false); + data.floatValue = input.readFloat(); + data.stringValue = input.readString(); + data.audioPath = input.readString(); + if (data.audioPath != null) { + data.volume = input.readFloat(); + data.balance = input.readFloat(); + } + skeletonData.events.push(data); + } + n = input.readInt(true); + for (var i = 0; i < n; i++) + skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData)); + return skeletonData; + }; + SkeletonBinary.prototype.readSkin = function (input, skeletonData, defaultSkin, nonessential) { + var skin = null; + var slotCount = 0; + if (defaultSkin) { + slotCount = input.readInt(true); + if (slotCount == 0) + return null; + skin = new spine.Skin("default"); + } + else { + skin = new spine.Skin(input.readStringRef()); + skin.bones.length = input.readInt(true); + for (var i = 0, n = skin.bones.length; i < n; i++) + skin.bones[i] = skeletonData.bones[input.readInt(true)]; + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]); + for (var i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]); + slotCount = input.readInt(true); + } + for (var i = 0; i < slotCount; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var name_3 = input.readStringRef(); + var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_3, nonessential); + if (attachment != null) + skin.setAttachment(slotIndex, name_3, attachment); + } + } + return skin; + }; + SkeletonBinary.prototype.readAttachment = function (input, skeletonData, skin, slotIndex, attachmentName, nonessential) { + var scale = this.scale; + var name = input.readStringRef(); + if (name == null) + name = attachmentName; + var typeIndex = input.readByte(); + var type = SkeletonBinary.AttachmentTypeValues[typeIndex]; + switch (type) { + case spine.AttachmentType.Region: { + var path = input.readStringRef(); + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var scaleX = input.readFloat(); + var scaleY = input.readFloat(); + var width = input.readFloat(); + var height = input.readFloat(); + var color = input.readInt32(); + if (path == null) + path = name; + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = x * scale; + region.y = y * scale; + region.scaleX = scaleX; + region.scaleY = scaleY; + region.rotation = rotation; + region.width = width * scale; + region.height = height * scale; + spine.Color.rgba8888ToColor(region.color, color); + region.updateOffset(); + return region; + } + case spine.AttachmentType.BoundingBox: { + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + box.worldVerticesLength = vertexCount << 1; + box.vertices = vertices.vertices; + box.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(box.color, color); + return box; + } + case spine.AttachmentType.Mesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var vertexCount = input.readInt(true); + var uvs = this.readFloatArray(input, vertexCount << 1, 1); + var triangles = this.readShortArray(input); + var vertices = this.readVertices(input, vertexCount); + var hullLength = input.readInt(true); + var edges = null; + var width = 0, height = 0; + if (nonessential) { + edges = this.readShortArray(input); + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertexCount << 1; + mesh.triangles = triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.hullLength = hullLength << 1; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + return mesh; + } + case spine.AttachmentType.LinkedMesh: { + var path = input.readStringRef(); + var color = input.readInt32(); + var skinName = input.readStringRef(); + var parent_4 = input.readStringRef(); + var inheritDeform = input.readBoolean(); + var width = 0, height = 0; + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + if (path == null) + path = name; + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + spine.Color.rgba8888ToColor(mesh.color, color); + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_4, inheritDeform)); + return mesh; + } + case spine.AttachmentType.Path: { + var closed_1 = input.readBoolean(); + var constantSpeed = input.readBoolean(); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0, n = lengths.length; i < n; i++) + lengths[i] = input.readFloat() * scale; + var color = nonessential ? input.readInt32() : 0; + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = closed_1; + path.constantSpeed = constantSpeed; + path.worldVerticesLength = vertexCount << 1; + path.vertices = vertices.vertices; + path.bones = vertices.bones; + path.lengths = lengths; + if (nonessential) + spine.Color.rgba8888ToColor(path.color, color); + return path; + } + case spine.AttachmentType.Point: { + var rotation = input.readFloat(); + var x = input.readFloat(); + var y = input.readFloat(); + var color = nonessential ? input.readInt32() : 0; + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + if (nonessential) + spine.Color.rgba8888ToColor(point.color, color); + return point; + } + case spine.AttachmentType.Clipping: { + var endSlotIndex = input.readInt(true); + var vertexCount = input.readInt(true); + var vertices = this.readVertices(input, vertexCount); + var color = nonessential ? input.readInt32() : 0; + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.worldVerticesLength = vertexCount << 1; + clip.vertices = vertices.vertices; + clip.bones = vertices.bones; + if (nonessential) + spine.Color.rgba8888ToColor(clip.color, color); + return clip; + } + } + return null; + }; + SkeletonBinary.prototype.readVertices = function (input, vertexCount) { + var verticesLength = vertexCount << 1; + var vertices = new Vertices(); + var scale = this.scale; + if (!input.readBoolean()) { + vertices.vertices = this.readFloatArray(input, verticesLength, scale); + return vertices; + } + var weights = new Array(); + var bonesArray = new Array(); + for (var i = 0; i < vertexCount; i++) { + var boneCount = input.readInt(true); + bonesArray.push(boneCount); + for (var ii = 0; ii < boneCount; ii++) { + bonesArray.push(input.readInt(true)); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat()); + } + } + vertices.vertices = spine.Utils.toFloatArray(weights); + vertices.bones = bonesArray; + return vertices; + }; + SkeletonBinary.prototype.readFloatArray = function (input, n, scale) { + var array = new Array(n); + if (scale == 1) { + for (var i = 0; i < n; i++) + array[i] = input.readFloat(); + } + else { + for (var i = 0; i < n; i++) + array[i] = input.readFloat() * scale; + } + return array; + }; + SkeletonBinary.prototype.readShortArray = function (input) { + var n = input.readInt(true); + var array = new Array(n); + for (var i = 0; i < n; i++) + array[i] = input.readShort(); + return array; + }; + SkeletonBinary.prototype.readAnimation = function (input, name, skeletonData) { + var timelines = new Array(); + var scale = this.scale; + var duration = 0; + var tempColor1 = new spine.Color(); + var tempColor2 = new spine.Color(); + for (var i = 0, n = input.readInt(true); i < n; i++) { + var slotIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.SLOT_ATTACHMENT: { + var timeline = new spine.AttachmentTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) + timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef()); + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + break; + } + case SkeletonBinary.SLOT_COLOR: { + var timeline = new spine.ColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.ColorTimeline.ENTRIES]); + break; + } + case SkeletonBinary.SLOT_TWO_COLOR: { + var timeline = new spine.TwoColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + spine.Color.rgba8888ToColor(tempColor1, input.readInt32()); + spine.Color.rgb888ToColor(tempColor2, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, tempColor2.g, tempColor2.b); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TwoColorTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var boneIndex = input.readInt(true); + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.BONE_ROTATE: { + var timeline = new spine.RotateTimeline(frameCount); + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.RotateTimeline.ENTRIES]); + break; + } + case SkeletonBinary.BONE_TRANSLATE: + case SkeletonBinary.BONE_SCALE: + case SkeletonBinary.BONE_SHEAR: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.BONE_SCALE) + timeline = new spine.ScaleTimeline(frameCount); + else if (timelineType == SkeletonBinary.BONE_SHEAR) + timeline = new spine.ShearTimeline(frameCount); + else { + timeline = new spine.TranslateTimeline(frameCount); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TranslateTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.IkConstraintTimeline(frameCount); + timeline.ikConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), input.readBoolean()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var frameCount = input.readInt(true); + var timeline = new spine.TransformConstraintTimeline(frameCount); + timeline.transformConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var index = input.readInt(true); + var data = skeletonData.pathConstraints[index]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var timelineType = input.readByte(); + var frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.PATH_POSITION: + case SkeletonBinary.PATH_SPACING: { + var timeline = void 0; + var timelineScale = 1; + if (timelineType == SkeletonBinary.PATH_SPACING) { + timeline = new spine.PathConstraintSpacingTimeline(frameCount); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(frameCount); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + break; + } + case SkeletonBinary.PATH_MIX: { + var timeline = new spine.PathConstraintMixTimeline(frameCount); + timeline.pathConstraintIndex = index; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + break; + } + } + } + } + for (var i = 0, n = input.readInt(true); i < n; i++) { + var skin = skeletonData.skins[input.readInt(true)]; + for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) { + var slotIndex = input.readInt(true); + for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { + var attachment = skin.getAttachment(slotIndex, input.readStringRef()); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var frameCount = input.readInt(true); + var timeline = new spine.DeformTimeline(frameCount); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + for (var frameIndex = 0; frameIndex < frameCount; frameIndex++) { + var time = input.readFloat(); + var deform = void 0; + var end = input.readInt(true); + if (end == 0) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = input.readInt(true); + end += start; + if (scale == 1) { + for (var v = start; v < end; v++) + deform[v] = input.readFloat(); + } + else { + for (var v = start; v < end; v++) + deform[v] = input.readFloat() * scale; + } + if (!weighted) { + for (var v = 0, vn = deform.length; v < vn; v++) + deform[v] += vertices[v]; + } + } + timeline.setFrame(frameIndex, time, deform); + if (frameIndex < frameCount - 1) + this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + } + } + } + var drawOrderCount = input.readInt(true); + if (drawOrderCount > 0) { + var timeline = new spine.DrawOrderTimeline(drawOrderCount); + var slotCount = skeletonData.slots.length; + for (var i = 0; i < drawOrderCount; i++) { + var time = input.readFloat(); + var offsetCount = input.readInt(true); + var drawOrder = spine.Utils.newArray(slotCount, 0); + for (var ii = slotCount - 1; ii >= 0; ii--) + drawOrder[ii] = -1; + var unchanged = spine.Utils.newArray(slotCount - offsetCount, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var ii = 0; ii < offsetCount; ii++) { + var slotIndex = input.readInt(true); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + input.readInt(true)] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var ii = slotCount - 1; ii >= 0; ii--) + if (drawOrder[ii] == -1) + drawOrder[ii] = unchanged[--unchangedIndex]; + timeline.setFrame(i, time, drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[drawOrderCount - 1]); + } + var eventCount = input.readInt(true); + if (eventCount > 0) { + var timeline = new spine.EventTimeline(eventCount); + for (var i = 0; i < eventCount; i++) { + var time = input.readFloat(); + var eventData = skeletonData.events[input.readInt(true)]; + var event_4 = new spine.Event(time, eventData); + event_4.intValue = input.readInt(false); + event_4.floatValue = input.readFloat(); + event_4.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue; + if (event_4.data.audioPath != null) { + event_4.volume = input.readFloat(); + event_4.balance = input.readFloat(); + } + timeline.setFrame(i, event_4); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[eventCount - 1]); + } + return new spine.Animation(name, timelines, duration); + }; + SkeletonBinary.prototype.readCurve = function (input, frameIndex, timeline) { + switch (input.readByte()) { + case SkeletonBinary.CURVE_STEPPED: + timeline.setStepped(frameIndex); + break; + case SkeletonBinary.CURVE_BEZIER: + this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + break; + } + }; + SkeletonBinary.prototype.setCurve = function (timeline, frameIndex, cx1, cy1, cx2, cy2) { + timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2); + }; + SkeletonBinary.AttachmentTypeValues = [0, 1, 2, 3, 4, 5, 6]; + SkeletonBinary.TransformModeValues = [spine.TransformMode.Normal, spine.TransformMode.OnlyTranslation, spine.TransformMode.NoRotationOrReflection, spine.TransformMode.NoScale, spine.TransformMode.NoScaleOrReflection]; + SkeletonBinary.PositionModeValues = [spine.PositionMode.Fixed, spine.PositionMode.Percent]; + SkeletonBinary.SpacingModeValues = [spine.SpacingMode.Length, spine.SpacingMode.Fixed, spine.SpacingMode.Percent]; + SkeletonBinary.RotateModeValues = [spine.RotateMode.Tangent, spine.RotateMode.Chain, spine.RotateMode.ChainScale]; + SkeletonBinary.BlendModeValues = [spine.BlendMode.Normal, spine.BlendMode.Additive, spine.BlendMode.Multiply, spine.BlendMode.Screen]; + SkeletonBinary.BONE_ROTATE = 0; + SkeletonBinary.BONE_TRANSLATE = 1; + SkeletonBinary.BONE_SCALE = 2; + SkeletonBinary.BONE_SHEAR = 3; + SkeletonBinary.SLOT_ATTACHMENT = 0; + SkeletonBinary.SLOT_COLOR = 1; + SkeletonBinary.SLOT_TWO_COLOR = 2; + SkeletonBinary.PATH_POSITION = 0; + SkeletonBinary.PATH_SPACING = 1; + SkeletonBinary.PATH_MIX = 2; + SkeletonBinary.CURVE_LINEAR = 0; + SkeletonBinary.CURVE_STEPPED = 1; + SkeletonBinary.CURVE_BEZIER = 2; + return SkeletonBinary; + }()); + spine.SkeletonBinary = SkeletonBinary; + var BinaryInput = (function () { + function BinaryInput(data, strings, index, buffer) { + if (strings === void 0) { strings = new Array(); } + if (index === void 0) { index = 0; } + if (buffer === void 0) { buffer = new DataView(data.buffer); } + this.strings = strings; + this.index = index; + this.buffer = buffer; + } + BinaryInput.prototype.readByte = function () { + return this.buffer.getInt8(this.index++); + }; + BinaryInput.prototype.readShort = function () { + var value = this.buffer.getInt16(this.index); + this.index += 2; + return value; + }; + BinaryInput.prototype.readInt32 = function () { + var value = this.buffer.getInt32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readInt = function (optimizePositive) { + var b = this.readByte(); + var result = b & 0x7F; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 7; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 14; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 21; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 28; + } + } + } + } + return optimizePositive ? result : ((result >>> 1) ^ -(result & 1)); + }; + BinaryInput.prototype.readStringRef = function () { + var index = this.readInt(true); + return index == 0 ? null : this.strings[index - 1]; + }; + BinaryInput.prototype.readString = function () { + var byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + case 1: + return ""; + } + byteCount--; + var chars = ""; + var charCount = 0; + for (var i = 0; i < byteCount;) { + var b = this.readByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F)); + i += 2; + break; + case 14: + chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F)); + i += 3; + break; + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + }; + BinaryInput.prototype.readFloat = function () { + var value = this.buffer.getFloat32(this.index); + this.index += 4; + return value; + }; + BinaryInput.prototype.readBoolean = function () { + return this.readByte() != 0; + }; + return BinaryInput; + }()); + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); + var Vertices = (function () { + function Vertices(bones, vertices) { + if (bones === void 0) { bones = null; } + if (vertices === void 0) { vertices = null; } + this.bones = bones; + this.vertices = vertices; + } + return Vertices; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonBounds = (function () { + function SkeletonBounds() { + this.minX = 0; + this.minY = 0; + this.maxX = 0; + this.maxY = 0; + this.boundingBoxes = new Array(); + this.polygons = new Array(); + this.polygonPool = new spine.Pool(function () { + return spine.Utils.newFloatArray(16); + }); + } + SkeletonBounds.prototype.update = function (skeleton, updateAabb) { + if (skeleton == null) + throw new Error("skeleton cannot be null."); + var boundingBoxes = this.boundingBoxes; + var polygons = this.polygons; + var polygonPool = this.polygonPool; + var slots = skeleton.slots; + var slotCount = slots.length; + boundingBoxes.length = 0; + polygonPool.freeAll(polygons); + polygons.length = 0; + for (var i = 0; i < slotCount; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.BoundingBoxAttachment) { + var boundingBox = attachment; + boundingBoxes.push(boundingBox); + var polygon = polygonPool.obtain(); + if (polygon.length != boundingBox.worldVerticesLength) { + polygon = spine.Utils.newFloatArray(boundingBox.worldVerticesLength); + } + polygons.push(polygon); + boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2); + } + } + if (updateAabb) { + this.aabbCompute(); + } + else { + this.minX = Number.POSITIVE_INFINITY; + this.minY = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.maxY = Number.NEGATIVE_INFINITY; + } + }; + SkeletonBounds.prototype.aabbCompute = function () { + var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) { + var polygon = polygons[i]; + var vertices = polygon; + for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) { + var x = vertices[ii]; + var y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + }; + SkeletonBounds.prototype.aabbContainsPoint = function (x, y) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + }; + SkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) { + var minX = this.minX; + var minY = this.minY; + var maxX = this.maxX; + var maxY = this.maxY; + if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY)) + return false; + var m = (y2 - y1) / (x2 - x1); + var y = m * (minX - x1) + y1; + if (y > minY && y < maxY) + return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) + return true; + var x = (minY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) + return true; + return false; + }; + SkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + }; + SkeletonBounds.prototype.containsPoint = function (x, y) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.containsPointPolygon(polygons[i], x, y)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) { + var vertices = polygon; + var nn = polygon.length; + var prevIndex = nn - 2; + var inside = false; + for (var ii = 0; ii < nn; ii += 2) { + var vertexY = vertices[ii + 1]; + var prevY = vertices[prevIndex + 1]; + if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) { + var vertexX = vertices[ii]; + if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) + inside = !inside; + } + prevIndex = ii; + } + return inside; + }; + SkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) { + var polygons = this.polygons; + for (var i = 0, n = polygons.length; i < n; i++) + if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) + return this.boundingBoxes[i]; + return null; + }; + SkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) { + var vertices = polygon; + var nn = polygon.length; + var width12 = x1 - x2, height12 = y1 - y2; + var det1 = x1 * y2 - y1 * x2; + var x3 = vertices[nn - 2], y3 = vertices[nn - 1]; + for (var ii = 0; ii < nn; ii += 2) { + var x4 = vertices[ii], y4 = vertices[ii + 1]; + var det2 = x3 * y4 - y3 * x4; + var width34 = x3 - x4, height34 = y3 - y4; + var det3 = width12 * height34 - height12 * width34; + var x = (det1 * width34 - width12 * det2) / det3; + if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) { + var y = (det1 * height34 - height12 * det2) / det3; + if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1))) + return true; + } + x3 = x4; + y3 = y4; + } + return false; + }; + SkeletonBounds.prototype.getPolygon = function (boundingBox) { + if (boundingBox == null) + throw new Error("boundingBox cannot be null."); + var index = this.boundingBoxes.indexOf(boundingBox); + return index == -1 ? null : this.polygons[index]; + }; + SkeletonBounds.prototype.getWidth = function () { + return this.maxX - this.minX; + }; + SkeletonBounds.prototype.getHeight = function () { + return this.maxY - this.minY; + }; + return SkeletonBounds; + }()); + spine.SkeletonBounds = SkeletonBounds; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonClipping = (function () { + function SkeletonClipping() { + this.triangulator = new spine.Triangulator(); + this.clippingPolygon = new Array(); + this.clipOutput = new Array(); + this.clippedVertices = new Array(); + this.clippedTriangles = new Array(); + this.scratch = new Array(); + } + SkeletonClipping.prototype.clipStart = function (slot, clip) { + if (this.clipAttachment != null) + return 0; + this.clipAttachment = clip; + var n = clip.worldVerticesLength; + var vertices = spine.Utils.setArraySize(this.clippingPolygon, n); + clip.computeWorldVertices(slot, 0, n, vertices, 0, 2); + var clippingPolygon = this.clippingPolygon; + SkeletonClipping.makeClockwise(clippingPolygon); + var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)); + for (var i = 0, n_2 = clippingPolygons.length; i < n_2; i++) { + var polygon = clippingPolygons[i]; + SkeletonClipping.makeClockwise(polygon); + polygon.push(polygon[0]); + polygon.push(polygon[1]); + } + return clippingPolygons.length; + }; + SkeletonClipping.prototype.clipEndWithSlot = function (slot) { + if (this.clipAttachment != null && this.clipAttachment.endSlot == slot.data) + this.clipEnd(); + }; + SkeletonClipping.prototype.clipEnd = function () { + if (this.clipAttachment == null) + return; + this.clipAttachment = null; + this.clippingPolygons = null; + this.clippedVertices.length = 0; + this.clippedTriangles.length = 0; + this.clippingPolygon.length = 0; + }; + SkeletonClipping.prototype.isClipping = function () { + return this.clipAttachment != null; + }; + SkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) { + var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; + var clippedTriangles = this.clippedTriangles; + var polygons = this.clippingPolygons; + var polygonsCount = this.clippingPolygons.length; + var vertexSize = twoColor ? 12 : 8; + var index = 0; + clippedVertices.length = 0; + clippedTriangles.length = 0; + outer: for (var i = 0; i < trianglesLength; i += 3) { + var vertexOffset = triangles[i] << 1; + var x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; + var u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 1] << 1; + var x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1]; + var u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1]; + vertexOffset = triangles[i + 2] << 1; + var x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1]; + var u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1]; + for (var p = 0; p < polygonsCount; p++) { + var s = clippedVertices.length; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { + var clipOutputLength = clipOutput.length; + if (clipOutputLength == 0) + continue; + var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1; + var d = 1 / (d0 * d2 + d1 * (y1 - y3)); + var clipOutputCount = clipOutputLength >> 1; + var clipOutputItems = this.clipOutput; + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); + for (var ii = 0; ii < clipOutputLength; ii += 2) { + var x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + var c0 = x - x3, c1 = y - y3; + var a = (d0 * c0 + d1 * c1) * d; + var b = (d4 * c0 + d2 * c1) * d; + var c = 1 - a - b; + clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c; + clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + } + s += vertexSize; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (var ii = 1; ii < clipOutputCount; ii++) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + ii); + clippedTrianglesItems[s + 2] = (index + ii + 1); + s += 3; + } + index += clipOutputCount + 1; + } + else { + var clippedVerticesItems = spine.Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + if (!twoColor) { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = x2; + clippedVerticesItems[s + 9] = y2; + clippedVerticesItems[s + 10] = light.r; + clippedVerticesItems[s + 11] = light.g; + clippedVerticesItems[s + 12] = light.b; + clippedVerticesItems[s + 13] = light.a; + clippedVerticesItems[s + 14] = u2; + clippedVerticesItems[s + 15] = v2; + clippedVerticesItems[s + 16] = x3; + clippedVerticesItems[s + 17] = y3; + clippedVerticesItems[s + 18] = light.r; + clippedVerticesItems[s + 19] = light.g; + clippedVerticesItems[s + 20] = light.b; + clippedVerticesItems[s + 21] = light.a; + clippedVerticesItems[s + 22] = u3; + clippedVerticesItems[s + 23] = v3; + } + else { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + clippedVerticesItems[s + 12] = x2; + clippedVerticesItems[s + 13] = y2; + clippedVerticesItems[s + 14] = light.r; + clippedVerticesItems[s + 15] = light.g; + clippedVerticesItems[s + 16] = light.b; + clippedVerticesItems[s + 17] = light.a; + clippedVerticesItems[s + 18] = u2; + clippedVerticesItems[s + 19] = v2; + clippedVerticesItems[s + 20] = dark.r; + clippedVerticesItems[s + 21] = dark.g; + clippedVerticesItems[s + 22] = dark.b; + clippedVerticesItems[s + 23] = dark.a; + clippedVerticesItems[s + 24] = x3; + clippedVerticesItems[s + 25] = y3; + clippedVerticesItems[s + 26] = light.r; + clippedVerticesItems[s + 27] = light.g; + clippedVerticesItems[s + 28] = light.b; + clippedVerticesItems[s + 29] = light.a; + clippedVerticesItems[s + 30] = u3; + clippedVerticesItems[s + 31] = v3; + clippedVerticesItems[s + 32] = dark.r; + clippedVerticesItems[s + 33] = dark.g; + clippedVerticesItems[s + 34] = dark.b; + clippedVerticesItems[s + 35] = dark.a; + } + s = clippedTriangles.length; + var clippedTrianglesItems = spine.Utils.setArraySize(clippedTriangles, s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + 1); + clippedTrianglesItems[s + 2] = (index + 2); + index += 3; + continue outer; + } + } + } + }; + SkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) { + var originalOutput = output; + var clipped = false; + var input = null; + if (clippingArea.length % 4 >= 2) { + input = output; + output = this.scratch; + } + else + input = this.scratch; + input.length = 0; + input.push(x1); + input.push(y1); + input.push(x2); + input.push(y2); + input.push(x3); + input.push(y3); + input.push(x1); + input.push(y1); + output.length = 0; + var clippingVertices = clippingArea; + var clippingVerticesLast = clippingArea.length - 4; + for (var i = 0;; i += 2) { + var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1]; + var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3]; + var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2; + var inputVertices = input; + var inputVerticesLength = input.length - 2, outputStart = output.length; + for (var ii = 0; ii < inputVerticesLength; ii += 2) { + var inputX = inputVertices[ii], inputY = inputVertices[ii + 1]; + var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3]; + var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0; + if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) { + if (side2) { + output.push(inputX2); + output.push(inputY2); + continue; + } + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + } + else if (side2) { + var c0 = inputY2 - inputY, c2 = inputX2 - inputX; + var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } + else { + output.push(edgeX); + output.push(edgeY); + } + output.push(inputX2); + output.push(inputY2); + } + clipped = true; + } + if (outputStart == output.length) { + originalOutput.length = 0; + return true; + } + output.push(output[0]); + output.push(output[1]); + if (i == clippingVerticesLast) + break; + var temp = output; + output = input; + output.length = 0; + input = temp; + } + if (originalOutput != output) { + originalOutput.length = 0; + for (var i = 0, n = output.length - 2; i < n; i++) + originalOutput[i] = output[i]; + } + else + originalOutput.length = originalOutput.length - 2; + return clipped; + }; + SkeletonClipping.makeClockwise = function (polygon) { + var vertices = polygon; + var verticeslength = polygon.length; + var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0; + for (var i = 0, n = verticeslength - 3; i < n; i += 2) { + p1x = vertices[i]; + p1y = vertices[i + 1]; + p2x = vertices[i + 2]; + p2y = vertices[i + 3]; + area += p1x * p2y - p2x * p1y; + } + if (area < 0) + return; + for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) { + var x = vertices[i], y = vertices[i + 1]; + var other = lastX - i; + vertices[i] = vertices[other]; + vertices[i + 1] = vertices[other + 1]; + vertices[other] = x; + vertices[other + 1] = y; + } + }; + return SkeletonClipping; + }()); + spine.SkeletonClipping = SkeletonClipping; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonData = (function () { + function SkeletonData() { + this.bones = new Array(); + this.slots = new Array(); + this.skins = new Array(); + this.events = new Array(); + this.animations = new Array(); + this.ikConstraints = new Array(); + this.transformConstraints = new Array(); + this.pathConstraints = new Array(); + this.fps = 0; + } + SkeletonData.prototype.findBone = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (bone.name == boneName) + return bone; + } + return null; + }; + SkeletonData.prototype.findBoneIndex = function (boneName) { + if (boneName == null) + throw new Error("boneName cannot be null."); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) + return i; + return -1; + }; + SkeletonData.prototype.findSlot = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.name == slotName) + return slot; + } + return null; + }; + SkeletonData.prototype.findSlotIndex = function (slotName) { + if (slotName == null) + throw new Error("slotName cannot be null."); + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) + return i; + return -1; + }; + SkeletonData.prototype.findSkin = function (skinName) { + if (skinName == null) + throw new Error("skinName cannot be null."); + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) { + var skin = skins[i]; + if (skin.name == skinName) + return skin; + } + return null; + }; + SkeletonData.prototype.findEvent = function (eventDataName) { + if (eventDataName == null) + throw new Error("eventDataName cannot be null."); + var events = this.events; + for (var i = 0, n = events.length; i < n; i++) { + var event_5 = events[i]; + if (event_5.name == eventDataName) + return event_5; + } + return null; + }; + SkeletonData.prototype.findAnimation = function (animationName) { + if (animationName == null) + throw new Error("animationName cannot be null."); + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) { + var animation = animations[i]; + if (animation.name == animationName) + return animation; + } + return null; + }; + SkeletonData.prototype.findIkConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var ikConstraints = this.ikConstraints; + for (var i = 0, n = ikConstraints.length; i < n; i++) { + var constraint = ikConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findTransformConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var transformConstraints = this.transformConstraints; + for (var i = 0, n = transformConstraints.length; i < n; i++) { + var constraint = transformConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraint = function (constraintName) { + if (constraintName == null) + throw new Error("constraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) { + var constraint = pathConstraints[i]; + if (constraint.name == constraintName) + return constraint; + } + return null; + }; + SkeletonData.prototype.findPathConstraintIndex = function (pathConstraintName) { + if (pathConstraintName == null) + throw new Error("pathConstraintName cannot be null."); + var pathConstraints = this.pathConstraints; + for (var i = 0, n = pathConstraints.length; i < n; i++) + if (pathConstraints[i].name == pathConstraintName) + return i; + return -1; + }; + return SkeletonData; + }()); + spine.SkeletonData = SkeletonData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkeletonJson = (function () { + function SkeletonJson(attachmentLoader) { + this.scale = 1; + this.linkedMeshes = new Array(); + this.attachmentLoader = attachmentLoader; + } + SkeletonJson.prototype.readSkeletonData = function (json) { + var scale = this.scale; + var skeletonData = new spine.SkeletonData(); + var root = typeof (json) === "string" ? JSON.parse(json) : json; + var skeletonMap = root.skeleton; + if (skeletonMap != null) { + skeletonData.hash = skeletonMap.hash; + skeletonData.version = skeletonMap.spine; + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = skeletonMap.x; + skeletonData.y = skeletonMap.y; + skeletonData.width = skeletonMap.width; + skeletonData.height = skeletonMap.height; + skeletonData.fps = skeletonMap.fps; + skeletonData.imagesPath = skeletonMap.images; + } + if (root.bones) { + for (var i = 0; i < root.bones.length; i++) { + var boneMap = root.bones[i]; + var parent_5 = null; + var parentName = this.getValue(boneMap, "parent", null); + if (parentName != null) { + parent_5 = skeletonData.findBone(parentName); + if (parent_5 == null) + throw new Error("Parent bone not found: " + parentName); + } + var data = new spine.BoneData(skeletonData.bones.length, boneMap.name, parent_5); + data.length = this.getValue(boneMap, "length", 0) * scale; + data.x = this.getValue(boneMap, "x", 0) * scale; + data.y = this.getValue(boneMap, "y", 0) * scale; + data.rotation = this.getValue(boneMap, "rotation", 0); + data.scaleX = this.getValue(boneMap, "scaleX", 1); + data.scaleY = this.getValue(boneMap, "scaleY", 1); + data.shearX = this.getValue(boneMap, "shearX", 0); + data.shearY = this.getValue(boneMap, "shearY", 0); + data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, "transform", "normal")); + data.skinRequired = this.getValue(boneMap, "skin", false); + skeletonData.bones.push(data); + } + } + if (root.slots) { + for (var i = 0; i < root.slots.length; i++) { + var slotMap = root.slots[i]; + var slotName = slotMap.name; + var boneName = slotMap.bone; + var boneData = skeletonData.findBone(boneName); + if (boneData == null) + throw new Error("Slot bone not found: " + boneName); + var data = new spine.SlotData(skeletonData.slots.length, slotName, boneData); + var color = this.getValue(slotMap, "color", null); + if (color != null) + data.color.setFromString(color); + var dark = this.getValue(slotMap, "dark", null); + if (dark != null) { + data.darkColor = new spine.Color(1, 1, 1, 1); + data.darkColor.setFromString(dark); + } + data.attachmentName = this.getValue(slotMap, "attachment", null); + data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, "blend", "normal")); + skeletonData.slots.push(data); + } + } + if (root.ik) { + for (var i = 0; i < root.ik.length; i++) { + var constraintMap = root.ik[i]; + var data = new spine.IkConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("IK bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("IK target bone not found: " + targetName); + data.mix = this.getValue(constraintMap, "mix", 1); + data.softness = this.getValue(constraintMap, "softness", 0) * scale; + data.bendDirection = this.getValue(constraintMap, "bendPositive", true) ? 1 : -1; + data.compress = this.getValue(constraintMap, "compress", false); + data.stretch = this.getValue(constraintMap, "stretch", false); + data.uniform = this.getValue(constraintMap, "uniform", false); + skeletonData.ikConstraints.push(data); + } + } + if (root.transform) { + for (var i = 0; i < root.transform.length; i++) { + var constraintMap = root.transform[i]; + var data = new spine.TransformConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) + throw new Error("Transform constraint target bone not found: " + targetName); + data.local = this.getValue(constraintMap, "local", false); + data.relative = this.getValue(constraintMap, "relative", false); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.offsetX = this.getValue(constraintMap, "x", 0) * scale; + data.offsetY = this.getValue(constraintMap, "y", 0) * scale; + data.offsetScaleX = this.getValue(constraintMap, "scaleX", 0); + data.offsetScaleY = this.getValue(constraintMap, "scaleY", 0); + data.offsetShearY = this.getValue(constraintMap, "shearY", 0); + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + data.scaleMix = this.getValue(constraintMap, "scaleMix", 1); + data.shearMix = this.getValue(constraintMap, "shearMix", 1); + skeletonData.transformConstraints.push(data); + } + } + if (root.path) { + for (var i = 0; i < root.path.length; i++) { + var constraintMap = root.path[i]; + var data = new spine.PathConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + for (var j = 0; j < constraintMap.bones.length; j++) { + var boneName = constraintMap.bones[j]; + var bone = skeletonData.findBone(boneName); + if (bone == null) + throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + var targetName = constraintMap.target; + data.target = skeletonData.findSlot(targetName); + if (data.target == null) + throw new Error("Path target slot not found: " + targetName); + data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, "positionMode", "percent")); + data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, "spacingMode", "length")); + data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, "rotateMode", "tangent")); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.position = this.getValue(constraintMap, "position", 0); + if (data.positionMode == spine.PositionMode.Fixed) + data.position *= scale; + data.spacing = this.getValue(constraintMap, "spacing", 0); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + data.spacing *= scale; + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + skeletonData.pathConstraints.push(data); + } + } + if (root.skins) { + for (var i = 0; i < root.skins.length; i++) { + var skinMap = root.skins[i]; + var skin = new spine.Skin(skinMap.name); + if (skinMap.bones) { + for (var ii = 0; ii < skinMap.bones.length; ii++) { + var bone = skeletonData.findBone(skinMap.bones[ii]); + if (bone == null) + throw new Error("Skin bone not found: " + skinMap.bones[i]); + skin.bones.push(bone); + } + } + if (skinMap.ik) { + for (var ii = 0; ii < skinMap.ik.length; ii++) { + var constraint = skeletonData.findIkConstraint(skinMap.ik[ii]); + if (constraint == null) + throw new Error("Skin IK constraint not found: " + skinMap.ik[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.transform) { + for (var ii = 0; ii < skinMap.transform.length; ii++) { + var constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]); + if (constraint == null) + throw new Error("Skin transform constraint not found: " + skinMap.transform[i]); + skin.constraints.push(constraint); + } + } + if (skinMap.path) { + for (var ii = 0; ii < skinMap.path.length; ii++) { + var constraint = skeletonData.findPathConstraint(skinMap.path[ii]); + if (constraint == null) + throw new Error("Skin path constraint not found: " + skinMap.path[i]); + skin.constraints.push(constraint); + } + } + for (var slotName in skinMap.attachments) { + var slot = skeletonData.findSlot(slotName); + if (slot == null) + throw new Error("Slot not found: " + slotName); + var slotMap = skinMap.attachments[slotName]; + for (var entryName in slotMap) { + var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); + if (attachment != null) + skin.setAttachment(slot.index, entryName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") + skeletonData.defaultSkin = skin; + } + } + for (var i = 0, n = this.linkedMeshes.length; i < n; i++) { + var linkedMesh = this.linkedMeshes[i]; + var skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) + throw new Error("Skin not found: " + linkedMesh.skin); + var parent_6 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent_6 == null) + throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_6 : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent_6); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + if (root.events) { + for (var eventName in root.events) { + var eventMap = root.events[eventName]; + var data = new spine.EventData(eventName); + data.intValue = this.getValue(eventMap, "int", 0); + data.floatValue = this.getValue(eventMap, "float", 0); + data.stringValue = this.getValue(eventMap, "string", ""); + data.audioPath = this.getValue(eventMap, "audio", null); + if (data.audioPath != null) { + data.volume = this.getValue(eventMap, "volume", 1); + data.balance = this.getValue(eventMap, "balance", 0); + } + skeletonData.events.push(data); + } + } + if (root.animations) { + for (var animationName in root.animations) { + var animationMap = root.animations[animationName]; + this.readAnimation(animationMap, animationName, skeletonData); + } + } + return skeletonData; + }; + SkeletonJson.prototype.readAttachment = function (map, skin, slotIndex, name, skeletonData) { + var scale = this.scale; + name = this.getValue(map, "name", name); + var type = this.getValue(map, "type", "region"); + switch (type) { + case "region": { + var path = this.getValue(map, "path", name); + var region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) + return null; + region.path = path; + region.x = this.getValue(map, "x", 0) * scale; + region.y = this.getValue(map, "y", 0) * scale; + region.scaleX = this.getValue(map, "scaleX", 1); + region.scaleY = this.getValue(map, "scaleY", 1); + region.rotation = this.getValue(map, "rotation", 0); + region.width = map.width * scale; + region.height = map.height * scale; + var color = this.getValue(map, "color", null); + if (color != null) + region.color.setFromString(color); + region.updateOffset(); + return region; + } + case "boundingbox": { + var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) + return null; + this.readVertices(map, box, map.vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + box.color.setFromString(color); + return box; + } + case "mesh": + case "linkedmesh": { + var path = this.getValue(map, "path", name); + var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) + return null; + mesh.path = path; + var color = this.getValue(map, "color", null); + if (color != null) + mesh.color.setFromString(color); + mesh.width = this.getValue(map, "width", 0) * scale; + mesh.height = this.getValue(map, "height", 0) * scale; + var parent_7 = this.getValue(map, "parent", null); + if (parent_7 != null) { + this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, "skin", null), slotIndex, parent_7, this.getValue(map, "deform", true))); + return mesh; + } + var uvs = map.uvs; + this.readVertices(map, mesh, uvs.length); + mesh.triangles = map.triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.edges = this.getValue(map, "edges", null); + mesh.hullLength = this.getValue(map, "hull", 0) * 2; + return mesh; + } + case "path": { + var path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) + return null; + path.closed = this.getValue(map, "closed", false); + path.constantSpeed = this.getValue(map, "constantSpeed", true); + var vertexCount = map.vertexCount; + this.readVertices(map, path, vertexCount << 1); + var lengths = spine.Utils.newArray(vertexCount / 3, 0); + for (var i = 0; i < map.lengths.length; i++) + lengths[i] = map.lengths[i] * scale; + path.lengths = lengths; + var color = this.getValue(map, "color", null); + if (color != null) + path.color.setFromString(color); + return path; + } + case "point": { + var point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) + return null; + point.x = this.getValue(map, "x", 0) * scale; + point.y = this.getValue(map, "y", 0) * scale; + point.rotation = this.getValue(map, "rotation", 0); + var color = this.getValue(map, "color", null); + if (color != null) + point.color.setFromString(color); + return point; + } + case "clipping": { + var clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) + return null; + var end = this.getValue(map, "end", null); + if (end != null) { + var slot = skeletonData.findSlot(end); + if (slot == null) + throw new Error("Clipping end slot not found: " + end); + clip.endSlot = slot; + } + var vertexCount = map.vertexCount; + this.readVertices(map, clip, vertexCount << 1); + var color = this.getValue(map, "color", null); + if (color != null) + clip.color.setFromString(color); + return clip; + } + } + return null; + }; + SkeletonJson.prototype.readVertices = function (map, attachment, verticesLength) { + var scale = this.scale; + attachment.worldVerticesLength = verticesLength; + var vertices = map.vertices; + if (verticesLength == vertices.length) { + var scaledVertices = spine.Utils.toFloatArray(vertices); + if (scale != 1) { + for (var i = 0, n = vertices.length; i < n; i++) + scaledVertices[i] *= scale; + } + attachment.vertices = scaledVertices; + return; + } + var weights = new Array(); + var bones = new Array(); + for (var i = 0, n = vertices.length; i < n;) { + var boneCount = vertices[i++]; + bones.push(boneCount); + for (var nn = i + boneCount * 4; i < nn; i += 4) { + bones.push(vertices[i]); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = spine.Utils.toFloatArray(weights); + }; + SkeletonJson.prototype.readAnimation = function (map, name, skeletonData) { + var scale = this.scale; + var timelines = new Array(); + var duration = 0; + if (map.slots) { + for (var slotName in map.slots) { + var slotMap = map.slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotName); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex++, this.getValue(valueMap, "time", 0), valueMap.name); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + else if (timelineName == "color") { + var timeline = new spine.ColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var color = new spine.Color(); + color.setFromString(valueMap.color); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), color.r, color.g, color.b, color.a); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.ColorTimeline.ENTRIES]); + } + else if (timelineName == "twoColor") { + var timeline = new spine.TwoColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var light = new spine.Color(); + var dark = new spine.Color(); + light.setFromString(valueMap.light); + dark.setFromString(valueMap.dark); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TwoColorTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"); + } + } + } + if (map.bones) { + for (var boneName in map.bones) { + var boneMap = map.bones[boneName]; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) + throw new Error("Bone not found: " + boneName); + for (var timelineName in boneMap) { + var timelineMap = boneMap[timelineName]; + if (timelineName === "rotate") { + var timeline = new spine.RotateTimeline(timelineMap.length); + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "angle", 0)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.RotateTimeline.ENTRIES]); + } + else if (timelineName === "translate" || timelineName === "scale" || timelineName === "shear") { + var timeline = null; + var timelineScale = 1, defaultValue = 0; + if (timelineName === "scale") { + timeline = new spine.ScaleTimeline(timelineMap.length); + defaultValue = 1; + } + else if (timelineName === "shear") + timeline = new spine.ShearTimeline(timelineMap.length); + else { + timeline = new spine.TranslateTimeline(timelineMap.length); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + var x = this.getValue(valueMap, "x", defaultValue), y = this.getValue(valueMap, "y", defaultValue); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), x * timelineScale, y * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TranslateTimeline.ENTRIES]); + } + else + throw new Error("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); + } + } + } + if (map.ik) { + for (var constraintName in map.ik) { + var constraintMap = map.ik[constraintName]; + var constraint = skeletonData.findIkConstraint(constraintName); + var timeline = new spine.IkConstraintTimeline(constraintMap.length); + timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "mix", 1), this.getValue(valueMap, "softness", 0) * scale, this.getValue(valueMap, "bendPositive", true) ? 1 : -1, this.getValue(valueMap, "compress", false), this.getValue(valueMap, "stretch", false)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.IkConstraintTimeline.ENTRIES]); + } + } + if (map.transform) { + for (var constraintName in map.transform) { + var constraintMap = map.transform[constraintName]; + var constraint = skeletonData.findTransformConstraint(constraintName); + var timeline = new spine.TransformConstraintTimeline(constraintMap.length); + timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint); + var frameIndex = 0; + for (var i = 0; i < constraintMap.length; i++) { + var valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1), this.getValue(valueMap, "scaleMix", 1), this.getValue(valueMap, "shearMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.TransformConstraintTimeline.ENTRIES]); + } + } + if (map.path) { + for (var constraintName in map.path) { + var constraintMap = map.path[constraintName]; + var index = skeletonData.findPathConstraintIndex(constraintName); + if (index == -1) + throw new Error("Path constraint not found: " + constraintName); + var data = skeletonData.pathConstraints[index]; + for (var timelineName in constraintMap) { + var timelineMap = constraintMap[timelineName]; + if (timelineName === "position" || timelineName === "spacing") { + var timeline = null; + var timelineScale = 1; + if (timelineName === "spacing") { + timeline = new spine.PathConstraintSpacingTimeline(timelineMap.length); + if (data.spacingMode == spine.SpacingMode.Length || data.spacingMode == spine.SpacingMode.Fixed) + timelineScale = scale; + } + else { + timeline = new spine.PathConstraintPositionTimeline(timelineMap.length); + if (data.positionMode == spine.PositionMode.Fixed) + timelineScale = scale; + } + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, timelineName, 0) * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintPositionTimeline.ENTRIES]); + } + else if (timelineName === "mix") { + var timeline = new spine.PathConstraintMixTimeline(timelineMap.length); + timeline.pathConstraintIndex = index; + var frameIndex = 0; + for (var i = 0; i < timelineMap.length; i++) { + var valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), this.getValue(valueMap, "translateMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * spine.PathConstraintMixTimeline.ENTRIES]); + } + } + } + } + if (map.deform) { + for (var deformName in map.deform) { + var deformMap = map.deform[deformName]; + var skin = skeletonData.findSkin(deformName); + if (skin == null) + throw new Error("Skin not found: " + deformName); + for (var slotName in deformMap) { + var slotMap = deformMap[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) + throw new Error("Slot not found: " + slotMap.name); + for (var timelineName in slotMap) { + var timelineMap = slotMap[timelineName]; + var attachment = skin.getAttachment(slotIndex, timelineName); + if (attachment == null) + throw new Error("Deform attachment not found: " + timelineMap.name); + var weighted = attachment.bones != null; + var vertices = attachment.vertices; + var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + var timeline = new spine.DeformTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + var frameIndex = 0; + for (var j = 0; j < timelineMap.length; j++) { + var valueMap = timelineMap[j]; + var deform = void 0; + var verticesValue = this.getValue(valueMap, "vertices", null); + if (verticesValue == null) + deform = weighted ? spine.Utils.newFloatArray(deformLength) : vertices; + else { + deform = spine.Utils.newFloatArray(deformLength); + var start = this.getValue(valueMap, "offset", 0); + spine.Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length); + if (scale != 1) { + for (var i = start, n = i + verticesValue.length; i < n; i++) + deform[i] *= scale; + } + if (!weighted) { + for (var i = 0; i < deformLength; i++) + deform[i] += vertices[i]; + } + } + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), deform); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + } + } + } + var drawOrderNode = map.drawOrder; + if (drawOrderNode == null) + drawOrderNode = map.draworder; + if (drawOrderNode != null) { + var timeline = new spine.DrawOrderTimeline(drawOrderNode.length); + var slotCount = skeletonData.slots.length; + var frameIndex = 0; + for (var j = 0; j < drawOrderNode.length; j++) { + var drawOrderMap = drawOrderNode[j]; + var drawOrder = null; + var offsets = this.getValue(drawOrderMap, "offsets", null); + if (offsets != null) { + drawOrder = spine.Utils.newArray(slotCount, -1); + var unchanged = spine.Utils.newArray(slotCount - offsets.length, 0); + var originalIndex = 0, unchangedIndex = 0; + for (var i = 0; i < offsets.length; i++) { + var offsetMap = offsets[i]; + var slotIndex = skeletonData.findSlotIndex(offsetMap.slot); + if (slotIndex == -1) + throw new Error("Slot not found: " + offsetMap.slot); + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + offsetMap.offset] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (var i = slotCount - 1; i >= 0; i--) + if (drawOrder[i] == -1) + drawOrder[i] = unchanged[--unchangedIndex]; + } + timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, "time", 0), drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (map.events) { + var timeline = new spine.EventTimeline(map.events.length); + var frameIndex = 0; + for (var i = 0; i < map.events.length; i++) { + var eventMap = map.events[i]; + var eventData = skeletonData.findEvent(eventMap.name); + if (eventData == null) + throw new Error("Event not found: " + eventMap.name); + var event_6 = new spine.Event(spine.Utils.toSinglePrecision(this.getValue(eventMap, "time", 0)), eventData); + event_6.intValue = this.getValue(eventMap, "int", eventData.intValue); + event_6.floatValue = this.getValue(eventMap, "float", eventData.floatValue); + event_6.stringValue = this.getValue(eventMap, "string", eventData.stringValue); + if (event_6.data.audioPath != null) { + event_6.volume = this.getValue(eventMap, "volume", 1); + event_6.balance = this.getValue(eventMap, "balance", 0); + } + timeline.setFrame(frameIndex++, event_6); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + if (isNaN(duration)) { + throw new Error("Error while parsing animation, duration is NaN"); + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + }; + SkeletonJson.prototype.readCurve = function (map, timeline, frameIndex) { + if (!map.hasOwnProperty("curve")) + return; + if (map.curve == "stepped") + timeline.setStepped(frameIndex); + else { + var curve = map.curve; + timeline.setCurve(frameIndex, curve, this.getValue(map, "c2", 0), this.getValue(map, "c3", 1), this.getValue(map, "c4", 1)); + } + }; + SkeletonJson.prototype.getValue = function (map, prop, defaultValue) { + return map[prop] !== undefined ? map[prop] : defaultValue; + }; + SkeletonJson.blendModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.BlendMode.Normal; + if (str == "additive") + return spine.BlendMode.Additive; + if (str == "multiply") + return spine.BlendMode.Multiply; + if (str == "screen") + return spine.BlendMode.Screen; + throw new Error("Unknown blend mode: " + str); + }; + SkeletonJson.positionModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "fixed") + return spine.PositionMode.Fixed; + if (str == "percent") + return spine.PositionMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.spacingModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "length") + return spine.SpacingMode.Length; + if (str == "fixed") + return spine.SpacingMode.Fixed; + if (str == "percent") + return spine.SpacingMode.Percent; + throw new Error("Unknown position mode: " + str); + }; + SkeletonJson.rotateModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "tangent") + return spine.RotateMode.Tangent; + if (str == "chain") + return spine.RotateMode.Chain; + if (str == "chainscale") + return spine.RotateMode.ChainScale; + throw new Error("Unknown rotate mode: " + str); + }; + SkeletonJson.transformModeFromString = function (str) { + str = str.toLowerCase(); + if (str == "normal") + return spine.TransformMode.Normal; + if (str == "onlytranslation") + return spine.TransformMode.OnlyTranslation; + if (str == "norotationorreflection") + return spine.TransformMode.NoRotationOrReflection; + if (str == "noscale") + return spine.TransformMode.NoScale; + if (str == "noscaleorreflection") + return spine.TransformMode.NoScaleOrReflection; + throw new Error("Unknown transform mode: " + str); + }; + return SkeletonJson; + }()); + spine.SkeletonJson = SkeletonJson; + var LinkedMesh = (function () { + function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + return LinkedMesh; + }()); +})(spine || (spine = {})); +var spine; +(function (spine) { + var SkinEntry = (function () { + function SkinEntry(slotIndex, name, attachment) { + this.slotIndex = slotIndex; + this.name = name; + this.attachment = attachment; + } + return SkinEntry; + }()); + spine.SkinEntry = SkinEntry; + var Skin = (function () { + function Skin(name) { + this.attachments = new Array(); + this.bones = Array(); + this.constraints = new Array(); + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + Skin.prototype.setAttachment = function (slotIndex, name, attachment) { + if (attachment == null) + throw new Error("attachment cannot be null."); + var attachments = this.attachments; + if (slotIndex >= attachments.length) + attachments.length = slotIndex + 1; + if (!attachments[slotIndex]) + attachments[slotIndex] = {}; + attachments[slotIndex][name] = attachment; + }; + Skin.prototype.addSkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + }; + Skin.prototype.copySkin = function (skin) { + for (var i = 0; i < skin.bones.length; i++) { + var bone = skin.bones[i]; + var contained = false; + for (var j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) + this.bones.push(bone); + } + for (var i = 0; i < skin.constraints.length; i++) { + var constraint = skin.constraints[i]; + var contained = false; + for (var j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) + this.constraints.push(constraint); + } + var attachments = skin.getAttachments(); + for (var i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + if (attachment.attachment == null) + continue; + if (attachment.attachment instanceof spine.MeshAttachment) { + attachment.attachment = attachment.attachment.newLinkedMesh(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + else { + attachment.attachment = attachment.attachment.copy(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + }; + Skin.prototype.getAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + return dictionary ? dictionary[name] : null; + }; + Skin.prototype.removeAttachment = function (slotIndex, name) { + var dictionary = this.attachments[slotIndex]; + if (dictionary) + dictionary[name] = null; + }; + Skin.prototype.getAttachments = function () { + var entries = new Array(); + for (var i = 0; i < this.attachments.length; i++) { + var slotAttachments = this.attachments[i]; + if (slotAttachments) { + for (var name_4 in slotAttachments) { + var attachment = slotAttachments[name_4]; + if (attachment) + entries.push(new SkinEntry(i, name_4, attachment)); + } + } + } + return entries; + }; + Skin.prototype.getAttachmentsForSlot = function (slotIndex, attachments) { + var slotAttachments = this.attachments[slotIndex]; + if (slotAttachments) { + for (var name_5 in slotAttachments) { + var attachment = slotAttachments[name_5]; + if (attachment) + attachments.push(new SkinEntry(slotIndex, name_5, attachment)); + } + } + }; + Skin.prototype.clear = function () { + this.attachments.length = 0; + this.bones.length = 0; + this.constraints.length = 0; + }; + Skin.prototype.attachAll = function (skeleton, oldSkin) { + var slotIndex = 0; + for (var i = 0; i < skeleton.slots.length; i++) { + var slot = skeleton.slots[i]; + var slotAttachment = slot.getAttachment(); + if (slotAttachment && slotIndex < oldSkin.attachments.length) { + var dictionary = oldSkin.attachments[slotIndex]; + for (var key in dictionary) { + var skinAttachment = dictionary[key]; + if (slotAttachment == skinAttachment) { + var attachment = this.getAttachment(slotIndex, key); + if (attachment != null) + slot.setAttachment(attachment); + break; + } + } + } + slotIndex++; + } + }; + return Skin; + }()); + spine.Skin = Skin; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Slot = (function () { + function Slot(data, bone) { + this.deform = new Array(); + if (data == null) + throw new Error("data cannot be null."); + if (bone == null) + throw new Error("bone cannot be null."); + this.data = data; + this.bone = bone; + this.color = new spine.Color(); + this.darkColor = data.darkColor == null ? null : new spine.Color(); + this.setToSetupPose(); + } + Slot.prototype.getSkeleton = function () { + return this.bone.skeleton; + }; + Slot.prototype.getAttachment = function () { + return this.attachment; + }; + Slot.prototype.setAttachment = function (attachment) { + if (this.attachment == attachment) + return; + this.attachment = attachment; + this.attachmentTime = this.bone.skeleton.time; + this.deform.length = 0; + }; + Slot.prototype.setAttachmentTime = function (time) { + this.attachmentTime = this.bone.skeleton.time - time; + }; + Slot.prototype.getAttachmentTime = function () { + return this.bone.skeleton.time - this.attachmentTime; + }; + Slot.prototype.setToSetupPose = function () { + this.color.setFromColor(this.data.color); + if (this.darkColor != null) + this.darkColor.setFromColor(this.data.darkColor); + if (this.data.attachmentName == null) + this.attachment = null; + else { + this.attachment = null; + this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + }; + return Slot; + }()); + spine.Slot = Slot; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SlotData = (function () { + function SlotData(index, name, boneData) { + this.color = new spine.Color(1, 1, 1, 1); + if (index < 0) + throw new Error("index must be >= 0."); + if (name == null) + throw new Error("name cannot be null."); + if (boneData == null) + throw new Error("boneData cannot be null."); + this.index = index; + this.name = name; + this.boneData = boneData; + } + return SlotData; + }()); + spine.SlotData = SlotData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Texture = (function () { + function Texture(image) { + this._image = image; + } + Texture.prototype.getImage = function () { + return this._image; + }; + Texture.filterFromString = function (text) { + switch (text.toLowerCase()) { + case "nearest": return TextureFilter.Nearest; + case "linear": return TextureFilter.Linear; + case "mipmap": return TextureFilter.MipMap; + case "mipmapnearestnearest": return TextureFilter.MipMapNearestNearest; + case "mipmaplinearnearest": return TextureFilter.MipMapLinearNearest; + case "mipmapnearestlinear": return TextureFilter.MipMapNearestLinear; + case "mipmaplinearlinear": return TextureFilter.MipMapLinearLinear; + default: throw new Error("Unknown texture filter " + text); + } + }; + Texture.wrapFromString = function (text) { + switch (text.toLowerCase()) { + case "mirroredtepeat": return TextureWrap.MirroredRepeat; + case "clamptoedge": return TextureWrap.ClampToEdge; + case "repeat": return TextureWrap.Repeat; + default: throw new Error("Unknown texture wrap " + text); + } + }; + return Texture; + }()); + spine.Texture = Texture; + var TextureFilter; + (function (TextureFilter) { + TextureFilter[TextureFilter["Nearest"] = 9728] = "Nearest"; + TextureFilter[TextureFilter["Linear"] = 9729] = "Linear"; + TextureFilter[TextureFilter["MipMap"] = 9987] = "MipMap"; + TextureFilter[TextureFilter["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; + TextureFilter[TextureFilter["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; + TextureFilter[TextureFilter["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; + TextureFilter[TextureFilter["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; + })(TextureFilter = spine.TextureFilter || (spine.TextureFilter = {})); + var TextureWrap; + (function (TextureWrap) { + TextureWrap[TextureWrap["MirroredRepeat"] = 33648] = "MirroredRepeat"; + TextureWrap[TextureWrap["ClampToEdge"] = 33071] = "ClampToEdge"; + TextureWrap[TextureWrap["Repeat"] = 10497] = "Repeat"; + })(TextureWrap = spine.TextureWrap || (spine.TextureWrap = {})); + var TextureRegion = (function () { + function TextureRegion() { + this.u = 0; + this.v = 0; + this.u2 = 0; + this.v2 = 0; + this.width = 0; + this.height = 0; + this.rotate = false; + this.offsetX = 0; + this.offsetY = 0; + this.originalWidth = 0; + this.originalHeight = 0; + } + return TextureRegion; + }()); + spine.TextureRegion = TextureRegion; + var FakeTexture = (function (_super) { + __extends(FakeTexture, _super); + function FakeTexture() { + return _super !== null && _super.apply(this, arguments) || this; + } + FakeTexture.prototype.setFilters = function (minFilter, magFilter) { }; + FakeTexture.prototype.setWraps = function (uWrap, vWrap) { }; + FakeTexture.prototype.dispose = function () { }; + return FakeTexture; + }(Texture)); + spine.FakeTexture = FakeTexture; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TextureAtlas = (function () { + function TextureAtlas(atlasText, textureLoader) { + this.pages = new Array(); + this.regions = new Array(); + this.load(atlasText, textureLoader); + } + TextureAtlas.prototype.load = function (atlasText, textureLoader) { + if (textureLoader == null) + throw new Error("textureLoader cannot be null."); + var reader = new TextureAtlasReader(atlasText); + var tuple = new Array(4); + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) + break; + line = line.trim(); + if (line.length == 0) + page = null; + else if (!page) { + page = new TextureAtlasPage(); + page.name = line; + if (reader.readTuple(tuple) == 2) { + page.width = parseInt(tuple[0]); + page.height = parseInt(tuple[1]); + reader.readTuple(tuple); + } + reader.readTuple(tuple); + page.minFilter = spine.Texture.filterFromString(tuple[0]); + page.magFilter = spine.Texture.filterFromString(tuple[1]); + var direction = reader.readValue(); + page.uWrap = spine.TextureWrap.ClampToEdge; + page.vWrap = spine.TextureWrap.ClampToEdge; + if (direction == "x") + page.uWrap = spine.TextureWrap.Repeat; + else if (direction == "y") + page.vWrap = spine.TextureWrap.Repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.TextureWrap.Repeat; + page.texture = textureLoader(line); + page.texture.setFilters(page.minFilter, page.magFilter); + page.texture.setWraps(page.uWrap, page.vWrap); + page.width = page.texture.getImage().width; + page.height = page.texture.getImage().height; + this.pages.push(page); + } + else { + var region = new TextureAtlasRegion(); + region.name = line; + region.page = page; + var rotateValue = reader.readValue(); + if (rotateValue.toLocaleLowerCase() == "true") { + region.degrees = 90; + } + else if (rotateValue.toLocaleLowerCase() == "false") { + region.degrees = 0; + } + else { + region.degrees = parseFloat(rotateValue); + } + region.rotate = region.degrees == 90; + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } + else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + if (reader.readTuple(tuple) == 4) { + if (reader.readTuple(tuple) == 4) { + reader.readTuple(tuple); + } + } + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + region.index = parseInt(reader.readValue()); + region.texture = page.texture; + this.regions.push(region); + } + } + }; + TextureAtlas.prototype.findRegion = function (name) { + for (var i = 0; i < this.regions.length; i++) { + if (this.regions[i].name == name) { + return this.regions[i]; + } + } + return null; + }; + TextureAtlas.prototype.dispose = function () { + for (var i = 0; i < this.pages.length; i++) { + this.pages[i].texture.dispose(); + } + }; + return TextureAtlas; + }()); + spine.TextureAtlas = TextureAtlas; + var TextureAtlasReader = (function () { + function TextureAtlasReader(text) { + this.index = 0; + this.lines = text.split(/\r\n|\r|\n/); + } + TextureAtlasReader.prototype.readLine = function () { + if (this.index >= this.lines.length) + return null; + return this.lines[this.index++]; + }; + TextureAtlasReader.prototype.readValue = function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + return line.substring(colon + 1).trim(); + }; + TextureAtlasReader.prototype.readTuple = function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + var i = 0, lastMatch = colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) + break; + tuple[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + } + tuple[i] = line.substring(lastMatch).trim(); + return i + 1; + }; + return TextureAtlasReader; + }()); + var TextureAtlasPage = (function () { + function TextureAtlasPage() { + } + return TextureAtlasPage; + }()); + spine.TextureAtlasPage = TextureAtlasPage; + var TextureAtlasRegion = (function (_super) { + __extends(TextureAtlasRegion, _super); + function TextureAtlasRegion() { + return _super !== null && _super.apply(this, arguments) || this; + } + return TextureAtlasRegion; + }(spine.TextureRegion)); + spine.TextureAtlasRegion = TextureAtlasRegion; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraint = (function () { + function TransformConstraint(data, skeleton) { + this.rotateMix = 0; + this.translateMix = 0; + this.scaleMix = 0; + this.shearMix = 0; + this.temp = new spine.Vector2(); + this.active = false; + if (data == null) + throw new Error("data cannot be null."); + if (skeleton == null) + throw new Error("skeleton cannot be null."); + this.data = data; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + this.scaleMix = data.scaleMix; + this.shearMix = data.shearMix; + this.bones = new Array(); + for (var i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + TransformConstraint.prototype.isActive = function () { + return this.active; + }; + TransformConstraint.prototype.apply = function () { + this.update(); + }; + TransformConstraint.prototype.update = function () { + if (this.data.local) { + if (this.data.relative) + this.applyRelativeLocal(); + else + this.applyAbsoluteLocal(); + } + else { + if (this.data.relative) + this.applyRelativeWorld(); + else + this.applyAbsoluteWorld(); + } + }; + TransformConstraint.prototype.applyAbsoluteWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect; + var offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += (temp.x - bone.worldX) * translateMix; + bone.worldY += (temp.y - bone.worldY) * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + var ts = Math.sqrt(ta * ta + tc * tc); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s; + bone.a *= s; + bone.c *= s; + s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + ts = Math.sqrt(tb * tb + td * td); + if (s > 0.00001) + s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var b = bone.b, d = bone.d; + var by = Math.atan2(d, b); + var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r = by + (r + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyRelativeWorld = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + var ta = target.a, tb = target.b, tc = target.c, td = target.d; + var degRadReflect = ta * td - tb * tc > 0 ? spine.MathUtils.degRad : -spine.MathUtils.degRad; + var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + var modified = false; + if (rotateMix != 0) { + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var r = Math.atan2(tc, ta) + offsetRotation; + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + r *= rotateMix; + var cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + if (translateMix != 0) { + var temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += temp.x * translateMix; + bone.worldY += temp.y * translateMix; + modified = true; + } + if (scaleMix > 0) { + var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1; + bone.a *= s; + bone.c *= s; + s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1; + bone.b *= s; + bone.d *= s; + modified = true; + } + if (shearMix > 0) { + var r = Math.atan2(td, tb) - Math.atan2(tc, ta); + if (r > spine.MathUtils.PI) + r -= spine.MathUtils.PI2; + else if (r < -spine.MathUtils.PI) + r += spine.MathUtils.PI2; + var b = bone.b, d = bone.d; + r = Math.atan2(d, b) + (r - spine.MathUtils.PI / 2 + offsetShearY) * shearMix; + var s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + if (modified) + bone.appliedValid = false; + } + }; + TransformConstraint.prototype.applyAbsoluteLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) { + var r = target.arotation - rotation + this.data.offsetRotation; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + rotation += r * rotateMix; + } + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax - x + this.data.offsetX) * translateMix; + y += (target.ay - y + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX; + if (scaleY > 0.00001) + scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY; + } + var shearY = bone.ashearY; + if (shearMix != 0) { + var r = target.ashearY - shearY + this.data.offsetShearY; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + bone.shearY += r * shearMix; + } + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + TransformConstraint.prototype.applyRelativeLocal = function () { + var rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + var target = this.target; + if (!target.appliedValid) + target.updateAppliedTransform(); + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (!bone.appliedValid) + bone.updateAppliedTransform(); + var rotation = bone.arotation; + if (rotateMix != 0) + rotation += (target.arotation + this.data.offsetRotation) * rotateMix; + var x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax + this.data.offsetX) * translateMix; + y += (target.ay + this.data.offsetY) * translateMix; + } + var scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) + scaleX *= ((target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix) + 1; + if (scaleY > 0.00001) + scaleY *= ((target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix) + 1; + } + var shearY = bone.ashearY; + if (shearMix != 0) + shearY += (target.ashearY + this.data.offsetShearY) * shearMix; + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + }; + return TransformConstraint; + }()); + spine.TransformConstraint = TransformConstraint; +})(spine || (spine = {})); +var spine; +(function (spine) { + var TransformConstraintData = (function (_super) { + __extends(TransformConstraintData, _super); + function TransformConstraintData(name) { + var _this = _super.call(this, name, 0, false) || this; + _this.bones = new Array(); + _this.rotateMix = 0; + _this.translateMix = 0; + _this.scaleMix = 0; + _this.shearMix = 0; + _this.offsetRotation = 0; + _this.offsetX = 0; + _this.offsetY = 0; + _this.offsetScaleX = 0; + _this.offsetScaleY = 0; + _this.offsetShearY = 0; + _this.relative = false; + _this.local = false; + return _this; + } + return TransformConstraintData; + }(spine.ConstraintData)); + spine.TransformConstraintData = TransformConstraintData; +})(spine || (spine = {})); +var spine; +(function (spine) { + var Triangulator = (function () { + function Triangulator() { + this.convexPolygons = new Array(); + this.convexPolygonsIndices = new Array(); + this.indicesArray = new Array(); + this.isConcaveArray = new Array(); + this.triangles = new Array(); + this.polygonPool = new spine.Pool(function () { + return new Array(); + }); + this.polygonIndicesPool = new spine.Pool(function () { + return new Array(); + }); + } + Triangulator.prototype.triangulate = function (verticesArray) { + var vertices = verticesArray; + var vertexCount = verticesArray.length >> 1; + var indices = this.indicesArray; + indices.length = 0; + for (var i = 0; i < vertexCount; i++) + indices[i] = i; + var isConcave = this.isConcaveArray; + isConcave.length = 0; + for (var i = 0, n = vertexCount; i < n; ++i) + isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices); + var triangles = this.triangles; + triangles.length = 0; + while (vertexCount > 3) { + var previous = vertexCount - 1, i = 0, next = 1; + while (true) { + outer: if (!isConcave[i]) { + var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; + var p1x = vertices[p1], p1y = vertices[p1 + 1]; + var p2x = vertices[p2], p2y = vertices[p2 + 1]; + var p3x = vertices[p3], p3y = vertices[p3 + 1]; + for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) { + if (!isConcave[ii]) + continue; + var v = indices[ii] << 1; + var vx = vertices[v], vy = vertices[v + 1]; + if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) { + if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) { + if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) + break outer; + } + } + } + break; + } + if (next == 0) { + do { + if (!isConcave[i]) + break; + i--; + } while (i > 0); + break; + } + previous = i; + i = next; + next = (next + 1) % vertexCount; + } + triangles.push(indices[(vertexCount + i - 1) % vertexCount]); + triangles.push(indices[i]); + triangles.push(indices[(i + 1) % vertexCount]); + indices.splice(i, 1); + isConcave.splice(i, 1); + vertexCount--; + var previousIndex = (vertexCount + i - 1) % vertexCount; + var nextIndex = i == vertexCount ? 0 : i; + isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices); + isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices); + } + if (vertexCount == 3) { + triangles.push(indices[2]); + triangles.push(indices[0]); + triangles.push(indices[1]); + } + return triangles; + }; + Triangulator.prototype.decompose = function (verticesArray, triangles) { + var vertices = verticesArray; + var convexPolygons = this.convexPolygons; + this.polygonPool.freeAll(convexPolygons); + convexPolygons.length = 0; + var convexPolygonsIndices = this.convexPolygonsIndices; + this.polygonIndicesPool.freeAll(convexPolygonsIndices); + convexPolygonsIndices.length = 0; + var polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + var polygon = this.polygonPool.obtain(); + polygon.length = 0; + var fanBaseIndex = -1, lastWinding = 0; + for (var i = 0, n = triangles.length; i < n; i += 3) { + var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1; + var x1 = vertices[t1], y1 = vertices[t1 + 1]; + var x2 = vertices[t2], y2 = vertices[t2 + 1]; + var x3 = vertices[t3], y3 = vertices[t3 + 1]; + var merged = false; + if (fanBaseIndex == t1) { + var o = polygon.length - 4; + var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3); + var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]); + if (winding1 == lastWinding && winding2 == lastWinding) { + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(t3); + merged = true; + } + } + if (!merged) { + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + else { + this.polygonPool.free(polygon); + this.polygonIndicesPool.free(polygonIndices); + } + polygon = this.polygonPool.obtain(); + polygon.length = 0; + polygon.push(x1); + polygon.push(y1); + polygon.push(x2); + polygon.push(y2); + polygon.push(x3); + polygon.push(y3); + polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + polygonIndices.push(t1); + polygonIndices.push(t2); + polygonIndices.push(t3); + lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + } + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + for (var i = 0, n = convexPolygons.length; i < n; i++) { + polygonIndices = convexPolygonsIndices[i]; + if (polygonIndices.length == 0) + continue; + var firstIndex = polygonIndices[0]; + var lastIndex = polygonIndices[polygonIndices.length - 1]; + polygon = convexPolygons[i]; + var o = polygon.length - 4; + var prevPrevX = polygon[o], prevPrevY = polygon[o + 1]; + var prevX = polygon[o + 2], prevY = polygon[o + 3]; + var firstX = polygon[0], firstY = polygon[1]; + var secondX = polygon[2], secondY = polygon[3]; + var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + for (var ii = 0; ii < n; ii++) { + if (ii == i) + continue; + var otherIndices = convexPolygonsIndices[ii]; + if (otherIndices.length != 3) + continue; + var otherFirstIndex = otherIndices[0]; + var otherSecondIndex = otherIndices[1]; + var otherLastIndex = otherIndices[2]; + var otherPoly = convexPolygons[ii]; + var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1]; + if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) + continue; + var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); + var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY); + if (winding1 == winding && winding2 == winding) { + otherPoly.length = 0; + otherIndices.length = 0; + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(otherLastIndex); + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = 0; + } + } + } + for (var i = convexPolygons.length - 1; i >= 0; i--) { + polygon = convexPolygons[i]; + if (polygon.length == 0) { + convexPolygons.splice(i, 1); + this.polygonPool.free(polygon); + polygonIndices = convexPolygonsIndices[i]; + convexPolygonsIndices.splice(i, 1); + this.polygonIndicesPool.free(polygonIndices); + } + } + return convexPolygons; + }; + Triangulator.isConcave = function (index, vertexCount, vertices, indices) { + var previous = indices[(vertexCount + index - 1) % vertexCount] << 1; + var current = indices[index] << 1; + var next = indices[(index + 1) % vertexCount] << 1; + return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]); + }; + Triangulator.positiveArea = function (p1x, p1y, p2x, p2y, p3x, p3y) { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + }; + Triangulator.winding = function (p1x, p1y, p2x, p2y, p3x, p3y) { + var px = p2x - p1x, py = p2y - p1y; + return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; + }; + return Triangulator; + }()); + spine.Triangulator = Triangulator; +})(spine || (spine = {})); +var spine; +(function (spine) { + var IntSet = (function () { + function IntSet() { + this.array = new Array(); + } + IntSet.prototype.add = function (value) { + var contains = this.contains(value); + this.array[value | 0] = value | 0; + return !contains; + }; + IntSet.prototype.contains = function (value) { + return this.array[value | 0] != undefined; + }; + IntSet.prototype.remove = function (value) { + this.array[value | 0] = undefined; + }; + IntSet.prototype.clear = function () { + this.array.length = 0; + }; + return IntSet; + }()); + spine.IntSet = IntSet; + var Color = (function () { + function Color(r, g, b, a) { + if (r === void 0) { r = 0; } + if (g === void 0) { g = 0; } + if (b === void 0) { b = 0; } + if (a === void 0) { a = 0; } + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + Color.prototype.set = function (r, g, b, a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + this.clamp(); + return this; + }; + Color.prototype.setFromColor = function (c) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + }; + Color.prototype.setFromString = function (hex) { + hex = hex.charAt(0) == '#' ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255.0; + this.g = parseInt(hex.substr(2, 2), 16) / 255.0; + this.b = parseInt(hex.substr(4, 2), 16) / 255.0; + this.a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0; + return this; + }; + Color.prototype.add = function (r, g, b, a) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + this.clamp(); + return this; + }; + Color.prototype.clamp = function () { + if (this.r < 0) + this.r = 0; + else if (this.r > 1) + this.r = 1; + if (this.g < 0) + this.g = 0; + else if (this.g > 1) + this.g = 1; + if (this.b < 0) + this.b = 0; + else if (this.b > 1) + this.b = 1; + if (this.a < 0) + this.a = 0; + else if (this.a > 1) + this.a = 1; + return this; + }; + Color.rgba8888ToColor = function (color, value) { + color.r = ((value & 0xff000000) >>> 24) / 255; + color.g = ((value & 0x00ff0000) >>> 16) / 255; + color.b = ((value & 0x0000ff00) >>> 8) / 255; + color.a = ((value & 0x000000ff)) / 255; + }; + Color.rgb888ToColor = function (color, value) { + color.r = ((value & 0x00ff0000) >>> 16) / 255; + color.g = ((value & 0x0000ff00) >>> 8) / 255; + color.b = ((value & 0x000000ff)) / 255; + }; + Color.WHITE = new Color(1, 1, 1, 1); + Color.RED = new Color(1, 0, 0, 1); + Color.GREEN = new Color(0, 1, 0, 1); + Color.BLUE = new Color(0, 0, 1, 1); + Color.MAGENTA = new Color(1, 0, 1, 1); + return Color; + }()); + spine.Color = Color; + var MathUtils = (function () { + function MathUtils() { + } + MathUtils.clamp = function (value, min, max) { + if (value < min) + return min; + if (value > max) + return max; + return value; + }; + MathUtils.cosDeg = function (degrees) { + return Math.cos(degrees * MathUtils.degRad); + }; + MathUtils.sinDeg = function (degrees) { + return Math.sin(degrees * MathUtils.degRad); + }; + MathUtils.signum = function (value) { + return value > 0 ? 1 : value < 0 ? -1 : 0; + }; + MathUtils.toInt = function (x) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + }; + MathUtils.cbrt = function (x) { + var y = Math.pow(Math.abs(x), 1 / 3); + return x < 0 ? -y : y; + }; + MathUtils.randomTriangular = function (min, max) { + return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); + }; + MathUtils.randomTriangularWith = function (min, max, mode) { + var u = Math.random(); + var d = max - min; + if (u <= (mode - min) / d) + return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + }; + MathUtils.PI = 3.1415927; + MathUtils.PI2 = MathUtils.PI * 2; + MathUtils.radiansToDegrees = 180 / MathUtils.PI; + MathUtils.radDeg = MathUtils.radiansToDegrees; + MathUtils.degreesToRadians = MathUtils.PI / 180; + MathUtils.degRad = MathUtils.degreesToRadians; + return MathUtils; + }()); + spine.MathUtils = MathUtils; + var Interpolation = (function () { + function Interpolation() { + } + Interpolation.prototype.apply = function (start, end, a) { + return start + (end - start) * this.applyInternal(a); + }; + return Interpolation; + }()); + spine.Interpolation = Interpolation; + var Pow = (function (_super) { + __extends(Pow, _super); + function Pow(power) { + var _this = _super.call(this) || this; + _this.power = 2; + _this.power = power; + return _this; + } + Pow.prototype.applyInternal = function (a) { + if (a <= 0.5) + return Math.pow(a * 2, this.power) / 2; + return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; + }; + return Pow; + }(Interpolation)); + spine.Pow = Pow; + var PowOut = (function (_super) { + __extends(PowOut, _super); + function PowOut(power) { + return _super.call(this, power) || this; + } + PowOut.prototype.applyInternal = function (a) { + return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; + }; + return PowOut; + }(Pow)); + spine.PowOut = PowOut; + var Utils = (function () { + function Utils() { + } + Utils.arrayCopy = function (source, sourceStart, dest, destStart, numElements) { + for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { + dest[j] = source[i]; + } + }; + Utils.setArraySize = function (array, size, value) { + if (value === void 0) { value = 0; } + var oldSize = array.length; + if (oldSize == size) + return array; + array.length = size; + if (oldSize < size) { + for (var i = oldSize; i < size; i++) + array[i] = value; + } + return array; + }; + Utils.ensureArrayCapacity = function (array, size, value) { + if (value === void 0) { value = 0; } + if (array.length >= size) + return array; + return Utils.setArraySize(array, size, value); + }; + Utils.newArray = function (size, defaultValue) { + var array = new Array(size); + for (var i = 0; i < size; i++) + array[i] = defaultValue; + return array; + }; + Utils.newFloatArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Float32Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.newShortArray = function (size) { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Int16Array(size); + } + else { + var array = new Array(size); + for (var i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + }; + Utils.toFloatArray = function (array) { + return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + }; + Utils.toSinglePrecision = function (value) { + return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + }; + Utils.webkit602BugfixHelper = function (alpha, blend) { + }; + Utils.contains = function (array, element, identity) { + if (identity === void 0) { identity = true; } + for (var i = 0; i < array.length; i++) { + if (array[i] == element) + return true; + } + return false; + }; + Utils.SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== "undefined"; + return Utils; + }()); + spine.Utils = Utils; + var DebugUtils = (function () { + function DebugUtils() { + } + DebugUtils.logBones = function (skeleton) { + for (var i = 0; i < skeleton.bones.length; i++) { + var bone = skeleton.bones[i]; + console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); + } + }; + return DebugUtils; + }()); + spine.DebugUtils = DebugUtils; + var Pool = (function () { + function Pool(instantiator) { + this.items = new Array(); + this.instantiator = instantiator; + } + Pool.prototype.obtain = function () { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + }; + Pool.prototype.free = function (item) { + if (item.reset) + item.reset(); + this.items.push(item); + }; + Pool.prototype.freeAll = function (items) { + for (var i = 0; i < items.length; i++) { + this.free(items[i]); + } + }; + Pool.prototype.clear = function () { + this.items.length = 0; + }; + return Pool; + }()); + spine.Pool = Pool; + var Vector2 = (function () { + function Vector2(x, y) { + if (x === void 0) { x = 0; } + if (y === void 0) { y = 0; } + this.x = x; + this.y = y; + } + Vector2.prototype.set = function (x, y) { + this.x = x; + this.y = y; + return this; + }; + Vector2.prototype.length = function () { + var x = this.x; + var y = this.y; + return Math.sqrt(x * x + y * y); + }; + Vector2.prototype.normalize = function () { + var len = this.length(); + if (len != 0) { + this.x /= len; + this.y /= len; + } + return this; + }; + return Vector2; + }()); + spine.Vector2 = Vector2; + var TimeKeeper = (function () { + function TimeKeeper() { + this.maxDelta = 0.064; + this.framesPerSecond = 0; + this.delta = 0; + this.totalTime = 0; + this.lastTime = Date.now() / 1000; + this.frameCount = 0; + this.frameTime = 0; + } + TimeKeeper.prototype.update = function () { + var now = Date.now() / 1000; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + if (this.delta > this.maxDelta) + this.delta = this.maxDelta; + this.lastTime = now; + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + }; + return TimeKeeper; + }()); + spine.TimeKeeper = TimeKeeper; + var WindowedMean = (function () { + function WindowedMean(windowSize) { + if (windowSize === void 0) { windowSize = 32; } + this.addedValues = 0; + this.lastValue = 0; + this.mean = 0; + this.dirty = true; + this.values = new Array(windowSize); + } + WindowedMean.prototype.hasEnoughData = function () { + return this.addedValues >= this.values.length; + }; + WindowedMean.prototype.addValue = function (value) { + if (this.addedValues < this.values.length) + this.addedValues++; + this.values[this.lastValue++] = value; + if (this.lastValue > this.values.length - 1) + this.lastValue = 0; + this.dirty = true; + }; + WindowedMean.prototype.getMean = function () { + if (this.hasEnoughData()) { + if (this.dirty) { + var mean = 0; + for (var i = 0; i < this.values.length; i++) { + mean += this.values[i]; + } + this.mean = mean / this.values.length; + this.dirty = false; + } + return this.mean; + } + else { + return 0; + } + }; + return WindowedMean; + }()); + spine.WindowedMean = WindowedMean; +})(spine || (spine = {})); +(function () { + if (!Math.fround) { + Math.fround = (function (array) { + return function (x) { + return array[0] = x, array[0]; + }; + })(new Float32Array(1)); + } +})(); +var spine; +(function (spine) { + var Attachment = (function () { + function Attachment(name) { + if (name == null) + throw new Error("name cannot be null."); + this.name = name; + } + return Attachment; + }()); + spine.Attachment = Attachment; + var VertexAttachment = (function (_super) { + __extends(VertexAttachment, _super); + function VertexAttachment(name) { + var _this = _super.call(this, name) || this; + _this.id = (VertexAttachment.nextID++ & 65535) << 11; + _this.worldVerticesLength = 0; + _this.deformAttachment = _this; + return _this; + } + VertexAttachment.prototype.computeWorldVertices = function (slot, start, count, worldVertices, offset, stride) { + count = offset + (count >> 1) * stride; + var skeleton = slot.bone.skeleton; + var deformArray = slot.deform; + var vertices = this.vertices; + var bones = this.bones; + if (bones == null) { + if (deformArray.length > 0) + vertices = deformArray; + var bone = slot.bone; + var x = bone.worldX; + var y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) { + var vx = vertices[v_1], vy = vertices[v_1 + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + var v = 0, skip = 0; + for (var i = 0; i < start; i += 2) { + var n = bones[v]; + v += n + 1; + skip += n; + } + var skeletonBones = skeleton.bones; + if (deformArray.length == 0) { + for (var w = offset, b = skip * 3; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + else { + var deform = deformArray; + for (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { + var wx = 0, wy = 0; + var n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + var bone = skeletonBones[bones[v]]; + var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + }; + VertexAttachment.prototype.copyTo = function (attachment) { + if (this.bones != null) { + attachment.bones = new Array(this.bones.length); + spine.Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); + } + else + attachment.bones = null; + if (this.vertices != null) { + attachment.vertices = spine.Utils.newFloatArray(this.vertices.length); + spine.Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); + } + else + attachment.vertices = null; + attachment.worldVerticesLength = this.worldVerticesLength; + attachment.deformAttachment = this.deformAttachment; + }; + VertexAttachment.nextID = 0; + return VertexAttachment; + }(Attachment)); + spine.VertexAttachment = VertexAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var AttachmentType; + (function (AttachmentType) { + AttachmentType[AttachmentType["Region"] = 0] = "Region"; + AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox"; + AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh"; + AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh"; + AttachmentType[AttachmentType["Path"] = 4] = "Path"; + AttachmentType[AttachmentType["Point"] = 5] = "Point"; + AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping"; + })(AttachmentType = spine.AttachmentType || (spine.AttachmentType = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var BoundingBoxAttachment = (function (_super) { + __extends(BoundingBoxAttachment, _super); + function BoundingBoxAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + BoundingBoxAttachment.prototype.copy = function () { + var copy = new BoundingBoxAttachment(this.name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + }; + return BoundingBoxAttachment; + }(spine.VertexAttachment)); + spine.BoundingBoxAttachment = BoundingBoxAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var ClippingAttachment = (function (_super) { + __extends(ClippingAttachment, _super); + function ClippingAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.2275, 0.2275, 0.8078, 1); + return _this; + } + ClippingAttachment.prototype.copy = function () { + var copy = new ClippingAttachment(this.name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.color.setFromColor(this.color); + return copy; + }; + return ClippingAttachment; + }(spine.VertexAttachment)); + spine.ClippingAttachment = ClippingAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var MeshAttachment = (function (_super) { + __extends(MeshAttachment, _super); + function MeshAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(1, 1, 1, 1); + _this.tempColor = new spine.Color(0, 0, 0, 0); + return _this; + } + MeshAttachment.prototype.updateUVs = function () { + var regionUVs = this.regionUVs; + if (this.uvs == null || this.uvs.length != regionUVs.length) + this.uvs = spine.Utils.newFloatArray(regionUVs.length); + var uvs = this.uvs; + var n = this.uvs.length; + var u = this.region.u, v = this.region.v, width = 0, height = 0; + if (this.region instanceof spine.TextureAtlasRegion) { + var region = this.region; + var textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height; + switch (region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (var i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; + } + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } + else if (this.region == null) { + u = v = 0; + width = height = 1; + } + else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + for (var i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + }; + MeshAttachment.prototype.getParentMesh = function () { + return this.parentMesh; + }; + MeshAttachment.prototype.setParentMesh = function (parentMesh) { + this.parentMesh = parentMesh; + if (parentMesh != null) { + this.bones = parentMesh.bones; + this.vertices = parentMesh.vertices; + this.worldVerticesLength = parentMesh.worldVerticesLength; + this.regionUVs = parentMesh.regionUVs; + this.triangles = parentMesh.triangles; + this.hullLength = parentMesh.hullLength; + this.worldVerticesLength = parentMesh.worldVerticesLength; + } + }; + MeshAttachment.prototype.copy = function () { + if (this.parentMesh != null) + return this.newLinkedMesh(); + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + this.copyTo(copy); + copy.regionUVs = new Array(this.regionUVs.length); + spine.Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.uvs = new Array(this.uvs.length); + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); + copy.triangles = new Array(this.triangles.length); + spine.Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + if (this.edges != null) { + copy.edges = new Array(this.edges.length); + spine.Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + return copy; + }; + MeshAttachment.prototype.newLinkedMesh = function () { + var copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + copy.deformAttachment = this.deformAttachment; + copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this); + copy.updateUVs(); + return copy; + }; + return MeshAttachment; + }(spine.VertexAttachment)); + spine.MeshAttachment = MeshAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PathAttachment = (function (_super) { + __extends(PathAttachment, _super); + function PathAttachment(name) { + var _this = _super.call(this, name) || this; + _this.closed = false; + _this.constantSpeed = false; + _this.color = new spine.Color(1, 1, 1, 1); + return _this; + } + PathAttachment.prototype.copy = function () { + var copy = new PathAttachment(this.name); + this.copyTo(copy); + copy.lengths = new Array(this.lengths.length); + spine.Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + }; + return PathAttachment; + }(spine.VertexAttachment)); + spine.PathAttachment = PathAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var PointAttachment = (function (_super) { + __extends(PointAttachment, _super); + function PointAttachment(name) { + var _this = _super.call(this, name) || this; + _this.color = new spine.Color(0.38, 0.94, 0, 1); + return _this; + } + PointAttachment.prototype.computeWorldPosition = function (bone, point) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + }; + PointAttachment.prototype.computeWorldRotation = function (bone) { + var cos = spine.MathUtils.cosDeg(this.rotation), sin = spine.MathUtils.sinDeg(this.rotation); + var x = cos * bone.a + sin * bone.b; + var y = cos * bone.c + sin * bone.d; + return Math.atan2(y, x) * spine.MathUtils.radDeg; + }; + PointAttachment.prototype.copy = function () { + var copy = new PointAttachment(this.name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + }; + return PointAttachment; + }(spine.VertexAttachment)); + spine.PointAttachment = PointAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var RegionAttachment = (function (_super) { + __extends(RegionAttachment, _super); + function RegionAttachment(name) { + var _this = _super.call(this, name) || this; + _this.x = 0; + _this.y = 0; + _this.scaleX = 1; + _this.scaleY = 1; + _this.rotation = 0; + _this.width = 0; + _this.height = 0; + _this.color = new spine.Color(1, 1, 1, 1); + _this.offset = spine.Utils.newFloatArray(8); + _this.uvs = spine.Utils.newFloatArray(8); + _this.tempColor = new spine.Color(1, 1, 1, 1); + return _this; + } + RegionAttachment.prototype.updateOffset = function () { + var regionScaleX = this.width / this.region.originalWidth * this.scaleX; + var regionScaleY = this.height / this.region.originalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY; + var localX2 = localX + this.region.width * regionScaleX; + var localY2 = localY + this.region.height * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[RegionAttachment.OX1] = localXCos - localYSin; + offset[RegionAttachment.OY1] = localYCos + localXSin; + offset[RegionAttachment.OX2] = localXCos - localY2Sin; + offset[RegionAttachment.OY2] = localY2Cos + localXSin; + offset[RegionAttachment.OX3] = localX2Cos - localY2Sin; + offset[RegionAttachment.OY3] = localY2Cos + localX2Sin; + offset[RegionAttachment.OX4] = localX2Cos - localYSin; + offset[RegionAttachment.OY4] = localYCos + localX2Sin; + }; + RegionAttachment.prototype.setRegion = function (region) { + this.region = region; + var uvs = this.uvs; + if (region.rotate) { + uvs[2] = region.u; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v; + uvs[0] = region.u2; + uvs[1] = region.v2; + } + else { + uvs[0] = region.u; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v2; + } + }; + RegionAttachment.prototype.computeWorldVertices = function (bone, worldVertices, offset, stride) { + var vertexOffset = this.offset; + var x = bone.worldX, y = bone.worldY; + var a = bone.a, b = bone.b, c = bone.c, d = bone.d; + var offsetX = 0, offsetY = 0; + offsetX = vertexOffset[RegionAttachment.OX1]; + offsetY = vertexOffset[RegionAttachment.OY1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX2]; + offsetY = vertexOffset[RegionAttachment.OY2]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX3]; + offsetY = vertexOffset[RegionAttachment.OY3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[RegionAttachment.OX4]; + offsetY = vertexOffset[RegionAttachment.OY4]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + }; + RegionAttachment.prototype.copy = function () { + var copy = new RegionAttachment(this.name); + copy.region = this.region; + copy.rendererObject = this.rendererObject; + copy.path = this.path; + copy.x = this.x; + copy.y = this.y; + copy.scaleX = this.scaleX; + copy.scaleY = this.scaleY; + copy.rotation = this.rotation; + copy.width = this.width; + copy.height = this.height; + spine.Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); + spine.Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); + copy.color.setFromColor(this.color); + return copy; + }; + RegionAttachment.OX1 = 0; + RegionAttachment.OY1 = 1; + RegionAttachment.OX2 = 2; + RegionAttachment.OY2 = 3; + RegionAttachment.OX3 = 4; + RegionAttachment.OY3 = 5; + RegionAttachment.OX4 = 6; + RegionAttachment.OY4 = 7; + RegionAttachment.X1 = 0; + RegionAttachment.Y1 = 1; + RegionAttachment.C1R = 2; + RegionAttachment.C1G = 3; + RegionAttachment.C1B = 4; + RegionAttachment.C1A = 5; + RegionAttachment.U1 = 6; + RegionAttachment.V1 = 7; + RegionAttachment.X2 = 8; + RegionAttachment.Y2 = 9; + RegionAttachment.C2R = 10; + RegionAttachment.C2G = 11; + RegionAttachment.C2B = 12; + RegionAttachment.C2A = 13; + RegionAttachment.U2 = 14; + RegionAttachment.V2 = 15; + RegionAttachment.X3 = 16; + RegionAttachment.Y3 = 17; + RegionAttachment.C3R = 18; + RegionAttachment.C3G = 19; + RegionAttachment.C3B = 20; + RegionAttachment.C3A = 21; + RegionAttachment.U3 = 22; + RegionAttachment.V3 = 23; + RegionAttachment.X4 = 24; + RegionAttachment.Y4 = 25; + RegionAttachment.C4R = 26; + RegionAttachment.C4G = 27; + RegionAttachment.C4B = 28; + RegionAttachment.C4A = 29; + RegionAttachment.U4 = 30; + RegionAttachment.V4 = 31; + return RegionAttachment; + }(spine.Attachment)); + spine.RegionAttachment = RegionAttachment; +})(spine || (spine = {})); +var spine; +(function (spine) { + var JitterEffect = (function () { + function JitterEffect(jitterX, jitterY) { + this.jitterX = 0; + this.jitterY = 0; + this.jitterX = jitterX; + this.jitterY = jitterY; + } + JitterEffect.prototype.begin = function (skeleton) { + }; + JitterEffect.prototype.transform = function (position, uv, light, dark) { + position.x += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + position.y += spine.MathUtils.randomTriangular(-this.jitterX, this.jitterY); + }; + JitterEffect.prototype.end = function () { + }; + return JitterEffect; + }()); + spine.JitterEffect = JitterEffect; +})(spine || (spine = {})); +var spine; +(function (spine) { + var SwirlEffect = (function () { + function SwirlEffect(radius) { + this.centerX = 0; + this.centerY = 0; + this.radius = 0; + this.angle = 0; + this.worldX = 0; + this.worldY = 0; + this.radius = radius; + } + SwirlEffect.prototype.begin = function (skeleton) { + this.worldX = skeleton.x + this.centerX; + this.worldY = skeleton.y + this.centerY; + }; + SwirlEffect.prototype.transform = function (position, uv, light, dark) { + var radAngle = this.angle * spine.MathUtils.degreesToRadians; + var x = position.x - this.worldX; + var y = position.y - this.worldY; + var dist = Math.sqrt(x * x + y * y); + if (dist < this.radius) { + var theta = SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius); + var cos = Math.cos(theta); + var sin = Math.sin(theta); + position.x = cos * x - sin * y + this.worldX; + position.y = sin * x + cos * y + this.worldY; + } + }; + SwirlEffect.prototype.end = function () { + }; + SwirlEffect.interpolation = new spine.PowOut(2); + return SwirlEffect; + }()); + spine.SwirlEffect = SwirlEffect; +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var AssetManager = (function (_super) { + __extends(AssetManager, _super); + function AssetManager(context, pathPrefix) { + if (pathPrefix === void 0) { pathPrefix = ""; } + return _super.call(this, function (image) { + return new spine.webgl.GLTexture(context, image); + }, pathPrefix) || this; + } + return AssetManager; + }(spine.AssetManager)); + webgl.AssetManager = AssetManager; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var OrthoCamera = (function () { + function OrthoCamera(viewportWidth, viewportHeight) { + this.position = new webgl.Vector3(0, 0, 0); + this.direction = new webgl.Vector3(0, 0, -1); + this.up = new webgl.Vector3(0, 1, 0); + this.near = 0; + this.far = 100; + this.zoom = 1; + this.viewportWidth = 0; + this.viewportHeight = 0; + this.projectionView = new webgl.Matrix4(); + this.inverseProjectionView = new webgl.Matrix4(); + this.projection = new webgl.Matrix4(); + this.view = new webgl.Matrix4(); + this.tmp = new webgl.Vector3(); + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + this.update(); + } + OrthoCamera.prototype.update = function () { + var projection = this.projection; + var view = this.view; + var projectionView = this.projectionView; + var inverseProjectionView = this.inverseProjectionView; + var zoom = this.zoom, viewportWidth = this.viewportWidth, viewportHeight = this.viewportHeight; + projection.ortho(zoom * (-viewportWidth / 2), zoom * (viewportWidth / 2), zoom * (-viewportHeight / 2), zoom * (viewportHeight / 2), this.near, this.far); + view.lookAt(this.position, this.direction, this.up); + projectionView.set(projection.values); + projectionView.multiply(view); + inverseProjectionView.set(projectionView.values).invert(); + }; + OrthoCamera.prototype.screenToWorld = function (screenCoords, screenWidth, screenHeight) { + var x = screenCoords.x, y = screenHeight - screenCoords.y - 1; + var tmp = this.tmp; + tmp.x = (2 * x) / screenWidth - 1; + tmp.y = (2 * y) / screenHeight - 1; + tmp.z = (2 * screenCoords.z) - 1; + tmp.project(this.inverseProjectionView); + screenCoords.set(tmp.x, tmp.y, tmp.z); + return screenCoords; + }; + OrthoCamera.prototype.setViewport = function (viewportWidth, viewportHeight) { + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + }; + return OrthoCamera; + }()); + webgl.OrthoCamera = OrthoCamera; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var GLTexture = (function (_super) { + __extends(GLTexture, _super); + function GLTexture(context, image, useMipMaps) { + if (useMipMaps === void 0) { useMipMaps = false; } + var _this = _super.call(this, image) || this; + _this.texture = null; + _this.boundUnit = 0; + _this.useMipMaps = false; + _this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + _this.useMipMaps = useMipMaps; + _this.restore(); + _this.context.addRestorable(_this); + return _this; + } + GLTexture.prototype.setFilters = function (minFilter, magFilter) { + var gl = this.context.gl; + this.bind(); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, GLTexture.validateMagFilter(magFilter)); + }; + GLTexture.validateMagFilter = function (magFilter) { + switch (magFilter) { + case spine.TextureFilter.MipMap: + case spine.TextureFilter.MipMapLinearLinear: + case spine.TextureFilter.MipMapLinearNearest: + case spine.TextureFilter.MipMapNearestLinear: + case spine.TextureFilter.MipMapNearestNearest: + return spine.TextureFilter.Linear; + default: + return magFilter; + } + }; + GLTexture.prototype.setWraps = function (uWrap, vWrap) { + var gl = this.context.gl; + this.bind(); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, uWrap); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, vWrap); + }; + GLTexture.prototype.update = function (useMipMaps) { + var gl = this.context.gl; + if (!this.texture) { + this.texture = this.context.gl.createTexture(); + } + this.bind(); + if (GLTexture.DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL) + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, useMipMaps ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + if (useMipMaps) + gl.generateMipmap(gl.TEXTURE_2D); + }; + GLTexture.prototype.restore = function () { + this.texture = null; + this.update(this.useMipMaps); + }; + GLTexture.prototype.bind = function (unit) { + if (unit === void 0) { unit = 0; } + var gl = this.context.gl; + this.boundUnit = unit; + gl.activeTexture(gl.TEXTURE0 + unit); + gl.bindTexture(gl.TEXTURE_2D, this.texture); + }; + GLTexture.prototype.unbind = function () { + var gl = this.context.gl; + gl.activeTexture(gl.TEXTURE0 + this.boundUnit); + gl.bindTexture(gl.TEXTURE_2D, null); + }; + GLTexture.prototype.dispose = function () { + this.context.removeRestorable(this); + var gl = this.context.gl; + gl.deleteTexture(this.texture); + }; + GLTexture.DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL = false; + return GLTexture; + }(spine.Texture)); + webgl.GLTexture = GLTexture; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Input = (function () { + function Input(element) { + this.lastX = 0; + this.lastY = 0; + this.buttonDown = false; + this.currTouch = null; + this.touchesPool = new spine.Pool(function () { + return new spine.webgl.Touch(0, 0, 0); + }); + this.listeners = new Array(); + this.element = element; + this.setupCallbacks(element); + } + Input.prototype.setupCallbacks = function (element) { + var _this = this; + var mouseDown = function (ev) { + if (ev instanceof MouseEvent) { + var rect = element.getBoundingClientRect(); + var x = ev.clientX - rect.left; + var y = ev.clientY - rect.top; + var listeners = _this.listeners; + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].down) + listeners[i].down(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = true; + document.addEventListener("mousemove", mouseMove); + document.addEventListener("mouseup", mouseUp); + } + }; + var mouseMove = function (ev) { + if (ev instanceof MouseEvent) { + var rect = element.getBoundingClientRect(); + var x = ev.clientX - rect.left; + var y = ev.clientY - rect.top; + var listeners = _this.listeners; + for (var i = 0; i < listeners.length; i++) { + if (_this.buttonDown) { + if (listeners[i].dragged) + listeners[i].dragged(x, y); + } + else { + if (listeners[i].moved) + listeners[i].moved(x, y); + } + } + _this.lastX = x; + _this.lastY = y; + } + }; + var mouseUp = function (ev) { + if (ev instanceof MouseEvent) { + var rect = element.getBoundingClientRect(); + var x = ev.clientX - rect.left; + var y = ev.clientY - rect.top; + var listeners = _this.listeners; + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].up) + listeners[i].up(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = false; + document.removeEventListener("mousemove", mouseMove); + document.removeEventListener("mouseup", mouseUp); + } + }; + element.addEventListener("mousedown", mouseDown, true); + element.addEventListener("mousemove", mouseMove, true); + element.addEventListener("mouseup", mouseUp, true); + element.addEventListener("touchstart", function (ev) { + if (_this.currTouch != null) + return; + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + var rect = element.getBoundingClientRect(); + var x = touch.clientX - rect.left; + var y = touch.clientY - rect.top; + _this.currTouch = _this.touchesPool.obtain(); + _this.currTouch.identifier = touch.identifier; + _this.currTouch.x = x; + _this.currTouch.y = y; + break; + } + var listeners = _this.listeners; + for (var i_17 = 0; i_17 < listeners.length; i_17++) { + if (listeners[i_17].down) + listeners[i_17].down(_this.currTouch.x, _this.currTouch.y); + } + _this.lastX = _this.currTouch.x; + _this.lastY = _this.currTouch.y; + _this.buttonDown = true; + ev.preventDefault(); + }, false); + element.addEventListener("touchend", function (ev) { + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (_this.currTouch.identifier === touch.identifier) { + var rect = element.getBoundingClientRect(); + var x = _this.currTouch.x = touch.clientX - rect.left; + var y = _this.currTouch.y = touch.clientY - rect.top; + _this.touchesPool.free(_this.currTouch); + var listeners = _this.listeners; + for (var i_18 = 0; i_18 < listeners.length; i_18++) { + if (listeners[i_18].up) + listeners[i_18].up(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = false; + _this.currTouch = null; + break; + } + } + ev.preventDefault(); + }, false); + element.addEventListener("touchcancel", function (ev) { + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (_this.currTouch.identifier === touch.identifier) { + var rect = element.getBoundingClientRect(); + var x = _this.currTouch.x = touch.clientX - rect.left; + var y = _this.currTouch.y = touch.clientY - rect.top; + _this.touchesPool.free(_this.currTouch); + var listeners = _this.listeners; + for (var i_19 = 0; i_19 < listeners.length; i_19++) { + if (listeners[i_19].up) + listeners[i_19].up(x, y); + } + _this.lastX = x; + _this.lastY = y; + _this.buttonDown = false; + _this.currTouch = null; + break; + } + } + ev.preventDefault(); + }, false); + element.addEventListener("touchmove", function (ev) { + if (_this.currTouch == null) + return; + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (_this.currTouch.identifier === touch.identifier) { + var rect = element.getBoundingClientRect(); + var x = touch.clientX - rect.left; + var y = touch.clientY - rect.top; + var listeners = _this.listeners; + for (var i_20 = 0; i_20 < listeners.length; i_20++) { + if (listeners[i_20].dragged) + listeners[i_20].dragged(x, y); + } + _this.lastX = _this.currTouch.x = x; + _this.lastY = _this.currTouch.y = y; + break; + } + } + ev.preventDefault(); + }, false); + }; + Input.prototype.addListener = function (listener) { + this.listeners.push(listener); + }; + Input.prototype.removeListener = function (listener) { + var idx = this.listeners.indexOf(listener); + if (idx > -1) { + this.listeners.splice(idx, 1); + } + }; + return Input; + }()); + webgl.Input = Input; + var Touch = (function () { + function Touch(identifier, x, y) { + this.identifier = identifier; + this.x = x; + this.y = y; + } + return Touch; + }()); + webgl.Touch = Touch; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var LoadingScreen = (function () { + function LoadingScreen(renderer) { + this.logo = null; + this.spinner = null; + this.angle = 0; + this.fadeOut = 0; + this.timeKeeper = new spine.TimeKeeper(); + this.backgroundColor = new spine.Color(0.135, 0.135, 0.135, 1); + this.tempColor = new spine.Color(); + this.firstDraw = 0; + this.renderer = renderer; + this.timeKeeper.maxDelta = 9; + if (LoadingScreen.logoImg === null) { + var isSafari = navigator.userAgent.indexOf("Safari") > -1; + LoadingScreen.logoImg = new Image(); + LoadingScreen.logoImg.src = LoadingScreen.SPINE_LOGO_DATA; + if (!isSafari) + LoadingScreen.logoImg.crossOrigin = "anonymous"; + LoadingScreen.logoImg.onload = function (ev) { + LoadingScreen.loaded++; + }; + LoadingScreen.spinnerImg = new Image(); + LoadingScreen.spinnerImg.src = LoadingScreen.SPINNER_DATA; + if (!isSafari) + LoadingScreen.spinnerImg.crossOrigin = "anonymous"; + LoadingScreen.spinnerImg.onload = function (ev) { + LoadingScreen.loaded++; + }; + } + } + LoadingScreen.prototype.draw = function (complete) { + if (complete === void 0) { complete = false; } + if (complete && this.fadeOut > LoadingScreen.FADE_SECONDS) + return; + this.timeKeeper.update(); + var a = Math.abs(Math.sin(this.timeKeeper.totalTime + 0.75)); + this.angle -= this.timeKeeper.delta / 1.4 * 360 * (1 + 1.5 * Math.pow(a, 5)); + var renderer = this.renderer; + var canvas = renderer.canvas; + var gl = renderer.context.gl; + renderer.resize(webgl.ResizeMode.Stretch); + var oldX = renderer.camera.position.x, oldY = renderer.camera.position.y; + renderer.camera.position.set(canvas.width / 2, canvas.height / 2, 0); + renderer.camera.viewportWidth = canvas.width; + renderer.camera.viewportHeight = canvas.height; + if (!complete) { + gl.clearColor(this.backgroundColor.r, this.backgroundColor.g, this.backgroundColor.b, this.backgroundColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + this.tempColor.a = 1; + } + else { + this.fadeOut += this.timeKeeper.delta * (this.timeKeeper.totalTime < 1 ? 2 : 1); + if (this.fadeOut > LoadingScreen.FADE_SECONDS) { + renderer.camera.position.set(oldX, oldY, 0); + return; + } + a = 1 - this.fadeOut / LoadingScreen.FADE_SECONDS; + this.tempColor.setFromColor(this.backgroundColor); + this.tempColor.a = 1 - (a - 1) * (a - 1); + renderer.begin(); + renderer.quad(true, 0, 0, canvas.width, 0, canvas.width, canvas.height, 0, canvas.height, this.tempColor, this.tempColor, this.tempColor, this.tempColor); + renderer.end(); + } + this.tempColor.set(1, 1, 1, this.tempColor.a); + if (LoadingScreen.loaded != 2) + return; + if (this.logo === null) { + this.logo = new webgl.GLTexture(renderer.context, LoadingScreen.logoImg); + this.spinner = new webgl.GLTexture(renderer.context, LoadingScreen.spinnerImg); + } + this.logo.update(false); + this.spinner.update(false); + var logoWidth = this.logo.getImage().width; + var logoHeight = this.logo.getImage().height; + var spinnerWidth = this.spinner.getImage().width; + var spinnerHeight = this.spinner.getImage().height; + renderer.batcher.setBlendMode(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + renderer.begin(); + renderer.drawTexture(this.logo, (canvas.width - logoWidth) / 2, (canvas.height - logoHeight) / 2, logoWidth, logoHeight, this.tempColor); + renderer.drawTextureRotated(this.spinner, (canvas.width - spinnerWidth) / 2, (canvas.height - spinnerHeight) / 2, spinnerWidth, spinnerHeight, spinnerWidth / 2, spinnerHeight / 2, this.angle, this.tempColor); + renderer.end(); + renderer.camera.position.set(oldX, oldY, 0); + }; + LoadingScreen.FADE_SECONDS = 1; + LoadingScreen.loaded = 0; + LoadingScreen.spinnerImg = null; + LoadingScreen.logoImg = null; + LoadingScreen.SPINNER_DATA = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACjCAYAAADmbK6AAAAACXBIWXMAAAsTAAALEwEAmpwYAAALB2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTgtMTEtMTVUMTY6NDA6NTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpmZDhlNTljMC02NGJjLTIxNGQtODAyZi1jZDlhODJjM2ZjMGMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpmYmNmZWJlYS03MjY2LWE0NGQtOTI4NS0wOTJmNGNhYzk4ZWEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMjk3IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjQyIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHN0RXZ0OndoZW49IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNThlMTlkNi0xYTRjLTQyNDEtODU0ZC01MDVlZjYxMjRhODQiIHN0RXZ0OndoZW49IjIwMTgtMTEtMTVUMTY6NDA6MjMrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ3YzYzYzIwLWJkYjgtYzM0YS1hYzMyLWQ5MDdjOWEyOTA0MCIgc3RFdnQ6d2hlbj0iMjAxOC0xMS0xNVQxNjo0MDo1OSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZmQ4ZTU5YzAtNjRiYy0yMTRkLTgwMmYtY2Q5YTgyYzNmYzBjIiBzdEV2dDp3aGVuPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0N2M2M2MyMC1iZGI4LWMzNGEtYWMzMi1kOTA3YzlhMjkwNDAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2OWRmZjljYy01YzFiLWE5NDctOTc3OS03ODgxZjM0ODk3MDMiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiLz4gPHBob3Rvc2hvcDpEb2N1bWVudEFu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"; + LoadingScreen.SPINE_LOGO_DATA = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKUAAABsCAYAAAALzHKmAAAACXBIWXMAAAsTAAALEwEAmpwYAAALB2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTgtMTEtMTVUMTY6NDA6NTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowMTdhZGQ3Ni04OTZlLThlNGUtYmM5MS00ZjEyNjI1YjA3MjgiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMTViNGE2ZS1hMDg3LWEzNDktODdhOS1mNDYzYjE2MzQ0Y2MiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMjk3IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjQyIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHN0RXZ0OndoZW49IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNThlMTlkNi0xYTRjLTQyNDEtODU0ZC01MDVlZjYxMjRhODQiIHN0RXZ0OndoZW49IjIwMTgtMTEtMTVUMTY6NDA6MjMrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJlNjJiMWM2LWIxYzQtNDk0MC04MDMxLWU4ZDkyNTBmODJjNSIgc3RFdnQ6d2hlbj0iMjAxOC0xMS0xNVQxNjo0MDo1OSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDE3YWRkNzYtODk2ZS04ZTRlLWJjOTEtNGYxMjYyNWIwNzI4IiBzdEV2dDp3aGVuPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyZTYyYjFjNi1iMWM0LTQ5NDAtODAzMS1lOGQ5MjUwZjgyYzUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2OWRmZjljYy01YzFiLWE5NDctOTc3OS03ODgxZjM0ODk3MDMiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiLz4gPHBob3Rvc2hvcDpEb2N1bWVudEFu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"; + return LoadingScreen; + }()); + webgl.LoadingScreen = LoadingScreen; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + webgl.M00 = 0; + webgl.M01 = 4; + webgl.M02 = 8; + webgl.M03 = 12; + webgl.M10 = 1; + webgl.M11 = 5; + webgl.M12 = 9; + webgl.M13 = 13; + webgl.M20 = 2; + webgl.M21 = 6; + webgl.M22 = 10; + webgl.M23 = 14; + webgl.M30 = 3; + webgl.M31 = 7; + webgl.M32 = 11; + webgl.M33 = 15; + var Matrix4 = (function () { + function Matrix4() { + this.temp = new Float32Array(16); + this.values = new Float32Array(16); + var v = this.values; + v[webgl.M00] = 1; + v[webgl.M11] = 1; + v[webgl.M22] = 1; + v[webgl.M33] = 1; + } + Matrix4.prototype.set = function (values) { + this.values.set(values); + return this; + }; + Matrix4.prototype.transpose = function () { + var t = this.temp; + var v = this.values; + t[webgl.M00] = v[webgl.M00]; + t[webgl.M01] = v[webgl.M10]; + t[webgl.M02] = v[webgl.M20]; + t[webgl.M03] = v[webgl.M30]; + t[webgl.M10] = v[webgl.M01]; + t[webgl.M11] = v[webgl.M11]; + t[webgl.M12] = v[webgl.M21]; + t[webgl.M13] = v[webgl.M31]; + t[webgl.M20] = v[webgl.M02]; + t[webgl.M21] = v[webgl.M12]; + t[webgl.M22] = v[webgl.M22]; + t[webgl.M23] = v[webgl.M32]; + t[webgl.M30] = v[webgl.M03]; + t[webgl.M31] = v[webgl.M13]; + t[webgl.M32] = v[webgl.M23]; + t[webgl.M33] = v[webgl.M33]; + return this.set(t); + }; + Matrix4.prototype.identity = function () { + var v = this.values; + v[webgl.M00] = 1; + v[webgl.M01] = 0; + v[webgl.M02] = 0; + v[webgl.M03] = 0; + v[webgl.M10] = 0; + v[webgl.M11] = 1; + v[webgl.M12] = 0; + v[webgl.M13] = 0; + v[webgl.M20] = 0; + v[webgl.M21] = 0; + v[webgl.M22] = 1; + v[webgl.M23] = 0; + v[webgl.M30] = 0; + v[webgl.M31] = 0; + v[webgl.M32] = 0; + v[webgl.M33] = 1; + return this; + }; + Matrix4.prototype.invert = function () { + var v = this.values; + var t = this.temp; + var l_det = v[webgl.M30] * v[webgl.M21] * v[webgl.M12] * v[webgl.M03] - v[webgl.M20] * v[webgl.M31] * v[webgl.M12] * v[webgl.M03] - v[webgl.M30] * v[webgl.M11] * v[webgl.M22] * v[webgl.M03] + + v[webgl.M10] * v[webgl.M31] * v[webgl.M22] * v[webgl.M03] + v[webgl.M20] * v[webgl.M11] * v[webgl.M32] * v[webgl.M03] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32] * v[webgl.M03] + - v[webgl.M30] * v[webgl.M21] * v[webgl.M02] * v[webgl.M13] + v[webgl.M20] * v[webgl.M31] * v[webgl.M02] * v[webgl.M13] + v[webgl.M30] * v[webgl.M01] * v[webgl.M22] * v[webgl.M13] + - v[webgl.M00] * v[webgl.M31] * v[webgl.M22] * v[webgl.M13] - v[webgl.M20] * v[webgl.M01] * v[webgl.M32] * v[webgl.M13] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32] * v[webgl.M13] + + v[webgl.M30] * v[webgl.M11] * v[webgl.M02] * v[webgl.M23] - v[webgl.M10] * v[webgl.M31] * v[webgl.M02] * v[webgl.M23] - v[webgl.M30] * v[webgl.M01] * v[webgl.M12] * v[webgl.M23] + + v[webgl.M00] * v[webgl.M31] * v[webgl.M12] * v[webgl.M23] + v[webgl.M10] * v[webgl.M01] * v[webgl.M32] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32] * v[webgl.M23] + - v[webgl.M20] * v[webgl.M11] * v[webgl.M02] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M02] * v[webgl.M33] + v[webgl.M20] * v[webgl.M01] * v[webgl.M12] * v[webgl.M33] + - v[webgl.M00] * v[webgl.M21] * v[webgl.M12] * v[webgl.M33] - v[webgl.M10] * v[webgl.M01] * v[webgl.M22] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22] * v[webgl.M33]; + if (l_det == 0) + throw new Error("non-invertible matrix"); + var inv_det = 1.0 / l_det; + t[webgl.M00] = v[webgl.M12] * v[webgl.M23] * v[webgl.M31] - v[webgl.M13] * v[webgl.M22] * v[webgl.M31] + v[webgl.M13] * v[webgl.M21] * v[webgl.M32] + - v[webgl.M11] * v[webgl.M23] * v[webgl.M32] - v[webgl.M12] * v[webgl.M21] * v[webgl.M33] + v[webgl.M11] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M01] = v[webgl.M03] * v[webgl.M22] * v[webgl.M31] - v[webgl.M02] * v[webgl.M23] * v[webgl.M31] - v[webgl.M03] * v[webgl.M21] * v[webgl.M32] + + v[webgl.M01] * v[webgl.M23] * v[webgl.M32] + v[webgl.M02] * v[webgl.M21] * v[webgl.M33] - v[webgl.M01] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M02] = v[webgl.M02] * v[webgl.M13] * v[webgl.M31] - v[webgl.M03] * v[webgl.M12] * v[webgl.M31] + v[webgl.M03] * v[webgl.M11] * v[webgl.M32] + - v[webgl.M01] * v[webgl.M13] * v[webgl.M32] - v[webgl.M02] * v[webgl.M11] * v[webgl.M33] + v[webgl.M01] * v[webgl.M12] * v[webgl.M33]; + t[webgl.M03] = v[webgl.M03] * v[webgl.M12] * v[webgl.M21] - v[webgl.M02] * v[webgl.M13] * v[webgl.M21] - v[webgl.M03] * v[webgl.M11] * v[webgl.M22] + + v[webgl.M01] * v[webgl.M13] * v[webgl.M22] + v[webgl.M02] * v[webgl.M11] * v[webgl.M23] - v[webgl.M01] * v[webgl.M12] * v[webgl.M23]; + t[webgl.M10] = v[webgl.M13] * v[webgl.M22] * v[webgl.M30] - v[webgl.M12] * v[webgl.M23] * v[webgl.M30] - v[webgl.M13] * v[webgl.M20] * v[webgl.M32] + + v[webgl.M10] * v[webgl.M23] * v[webgl.M32] + v[webgl.M12] * v[webgl.M20] * v[webgl.M33] - v[webgl.M10] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M11] = v[webgl.M02] * v[webgl.M23] * v[webgl.M30] - v[webgl.M03] * v[webgl.M22] * v[webgl.M30] + v[webgl.M03] * v[webgl.M20] * v[webgl.M32] + - v[webgl.M00] * v[webgl.M23] * v[webgl.M32] - v[webgl.M02] * v[webgl.M20] * v[webgl.M33] + v[webgl.M00] * v[webgl.M22] * v[webgl.M33]; + t[webgl.M12] = v[webgl.M03] * v[webgl.M12] * v[webgl.M30] - v[webgl.M02] * v[webgl.M13] * v[webgl.M30] - v[webgl.M03] * v[webgl.M10] * v[webgl.M32] + + v[webgl.M00] * v[webgl.M13] * v[webgl.M32] + v[webgl.M02] * v[webgl.M10] * v[webgl.M33] - v[webgl.M00] * v[webgl.M12] * v[webgl.M33]; + t[webgl.M13] = v[webgl.M02] * v[webgl.M13] * v[webgl.M20] - v[webgl.M03] * v[webgl.M12] * v[webgl.M20] + v[webgl.M03] * v[webgl.M10] * v[webgl.M22] + - v[webgl.M00] * v[webgl.M13] * v[webgl.M22] - v[webgl.M02] * v[webgl.M10] * v[webgl.M23] + v[webgl.M00] * v[webgl.M12] * v[webgl.M23]; + t[webgl.M20] = v[webgl.M11] * v[webgl.M23] * v[webgl.M30] - v[webgl.M13] * v[webgl.M21] * v[webgl.M30] + v[webgl.M13] * v[webgl.M20] * v[webgl.M31] + - v[webgl.M10] * v[webgl.M23] * v[webgl.M31] - v[webgl.M11] * v[webgl.M20] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M33]; + t[webgl.M21] = v[webgl.M03] * v[webgl.M21] * v[webgl.M30] - v[webgl.M01] * v[webgl.M23] * v[webgl.M30] - v[webgl.M03] * v[webgl.M20] * v[webgl.M31] + + v[webgl.M00] * v[webgl.M23] * v[webgl.M31] + v[webgl.M01] * v[webgl.M20] * v[webgl.M33] - v[webgl.M00] * v[webgl.M21] * v[webgl.M33]; + t[webgl.M22] = v[webgl.M01] * v[webgl.M13] * v[webgl.M30] - v[webgl.M03] * v[webgl.M11] * v[webgl.M30] + v[webgl.M03] * v[webgl.M10] * v[webgl.M31] + - v[webgl.M00] * v[webgl.M13] * v[webgl.M31] - v[webgl.M01] * v[webgl.M10] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M33]; + t[webgl.M23] = v[webgl.M03] * v[webgl.M11] * v[webgl.M20] - v[webgl.M01] * v[webgl.M13] * v[webgl.M20] - v[webgl.M03] * v[webgl.M10] * v[webgl.M21] + + v[webgl.M00] * v[webgl.M13] * v[webgl.M21] + v[webgl.M01] * v[webgl.M10] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M23]; + t[webgl.M30] = v[webgl.M12] * v[webgl.M21] * v[webgl.M30] - v[webgl.M11] * v[webgl.M22] * v[webgl.M30] - v[webgl.M12] * v[webgl.M20] * v[webgl.M31] + + v[webgl.M10] * v[webgl.M22] * v[webgl.M31] + v[webgl.M11] * v[webgl.M20] * v[webgl.M32] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32]; + t[webgl.M31] = v[webgl.M01] * v[webgl.M22] * v[webgl.M30] - v[webgl.M02] * v[webgl.M21] * v[webgl.M30] + v[webgl.M02] * v[webgl.M20] * v[webgl.M31] + - v[webgl.M00] * v[webgl.M22] * v[webgl.M31] - v[webgl.M01] * v[webgl.M20] * v[webgl.M32] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32]; + t[webgl.M32] = v[webgl.M02] * v[webgl.M11] * v[webgl.M30] - v[webgl.M01] * v[webgl.M12] * v[webgl.M30] - v[webgl.M02] * v[webgl.M10] * v[webgl.M31] + + v[webgl.M00] * v[webgl.M12] * v[webgl.M31] + v[webgl.M01] * v[webgl.M10] * v[webgl.M32] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32]; + t[webgl.M33] = v[webgl.M01] * v[webgl.M12] * v[webgl.M20] - v[webgl.M02] * v[webgl.M11] * v[webgl.M20] + v[webgl.M02] * v[webgl.M10] * v[webgl.M21] + - v[webgl.M00] * v[webgl.M12] * v[webgl.M21] - v[webgl.M01] * v[webgl.M10] * v[webgl.M22] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22]; + v[webgl.M00] = t[webgl.M00] * inv_det; + v[webgl.M01] = t[webgl.M01] * inv_det; + v[webgl.M02] = t[webgl.M02] * inv_det; + v[webgl.M03] = t[webgl.M03] * inv_det; + v[webgl.M10] = t[webgl.M10] * inv_det; + v[webgl.M11] = t[webgl.M11] * inv_det; + v[webgl.M12] = t[webgl.M12] * inv_det; + v[webgl.M13] = t[webgl.M13] * inv_det; + v[webgl.M20] = t[webgl.M20] * inv_det; + v[webgl.M21] = t[webgl.M21] * inv_det; + v[webgl.M22] = t[webgl.M22] * inv_det; + v[webgl.M23] = t[webgl.M23] * inv_det; + v[webgl.M30] = t[webgl.M30] * inv_det; + v[webgl.M31] = t[webgl.M31] * inv_det; + v[webgl.M32] = t[webgl.M32] * inv_det; + v[webgl.M33] = t[webgl.M33] * inv_det; + return this; + }; + Matrix4.prototype.determinant = function () { + var v = this.values; + return v[webgl.M30] * v[webgl.M21] * v[webgl.M12] * v[webgl.M03] - v[webgl.M20] * v[webgl.M31] * v[webgl.M12] * v[webgl.M03] - v[webgl.M30] * v[webgl.M11] * v[webgl.M22] * v[webgl.M03] + + v[webgl.M10] * v[webgl.M31] * v[webgl.M22] * v[webgl.M03] + v[webgl.M20] * v[webgl.M11] * v[webgl.M32] * v[webgl.M03] - v[webgl.M10] * v[webgl.M21] * v[webgl.M32] * v[webgl.M03] + - v[webgl.M30] * v[webgl.M21] * v[webgl.M02] * v[webgl.M13] + v[webgl.M20] * v[webgl.M31] * v[webgl.M02] * v[webgl.M13] + v[webgl.M30] * v[webgl.M01] * v[webgl.M22] * v[webgl.M13] + - v[webgl.M00] * v[webgl.M31] * v[webgl.M22] * v[webgl.M13] - v[webgl.M20] * v[webgl.M01] * v[webgl.M32] * v[webgl.M13] + v[webgl.M00] * v[webgl.M21] * v[webgl.M32] * v[webgl.M13] + + v[webgl.M30] * v[webgl.M11] * v[webgl.M02] * v[webgl.M23] - v[webgl.M10] * v[webgl.M31] * v[webgl.M02] * v[webgl.M23] - v[webgl.M30] * v[webgl.M01] * v[webgl.M12] * v[webgl.M23] + + v[webgl.M00] * v[webgl.M31] * v[webgl.M12] * v[webgl.M23] + v[webgl.M10] * v[webgl.M01] * v[webgl.M32] * v[webgl.M23] - v[webgl.M00] * v[webgl.M11] * v[webgl.M32] * v[webgl.M23] + - v[webgl.M20] * v[webgl.M11] * v[webgl.M02] * v[webgl.M33] + v[webgl.M10] * v[webgl.M21] * v[webgl.M02] * v[webgl.M33] + v[webgl.M20] * v[webgl.M01] * v[webgl.M12] * v[webgl.M33] + - v[webgl.M00] * v[webgl.M21] * v[webgl.M12] * v[webgl.M33] - v[webgl.M10] * v[webgl.M01] * v[webgl.M22] * v[webgl.M33] + v[webgl.M00] * v[webgl.M11] * v[webgl.M22] * v[webgl.M33]; + }; + Matrix4.prototype.translate = function (x, y, z) { + var v = this.values; + v[webgl.M03] += x; + v[webgl.M13] += y; + v[webgl.M23] += z; + return this; + }; + Matrix4.prototype.copy = function () { + return new Matrix4().set(this.values); + }; + Matrix4.prototype.projection = function (near, far, fovy, aspectRatio) { + this.identity(); + var l_fd = (1.0 / Math.tan((fovy * (Math.PI / 180)) / 2.0)); + var l_a1 = (far + near) / (near - far); + var l_a2 = (2 * far * near) / (near - far); + var v = this.values; + v[webgl.M00] = l_fd / aspectRatio; + v[webgl.M10] = 0; + v[webgl.M20] = 0; + v[webgl.M30] = 0; + v[webgl.M01] = 0; + v[webgl.M11] = l_fd; + v[webgl.M21] = 0; + v[webgl.M31] = 0; + v[webgl.M02] = 0; + v[webgl.M12] = 0; + v[webgl.M22] = l_a1; + v[webgl.M32] = -1; + v[webgl.M03] = 0; + v[webgl.M13] = 0; + v[webgl.M23] = l_a2; + v[webgl.M33] = 0; + return this; + }; + Matrix4.prototype.ortho2d = function (x, y, width, height) { + return this.ortho(x, x + width, y, y + height, 0, 1); + }; + Matrix4.prototype.ortho = function (left, right, bottom, top, near, far) { + this.identity(); + var x_orth = 2 / (right - left); + var y_orth = 2 / (top - bottom); + var z_orth = -2 / (far - near); + var tx = -(right + left) / (right - left); + var ty = -(top + bottom) / (top - bottom); + var tz = -(far + near) / (far - near); + var v = this.values; + v[webgl.M00] = x_orth; + v[webgl.M10] = 0; + v[webgl.M20] = 0; + v[webgl.M30] = 0; + v[webgl.M01] = 0; + v[webgl.M11] = y_orth; + v[webgl.M21] = 0; + v[webgl.M31] = 0; + v[webgl.M02] = 0; + v[webgl.M12] = 0; + v[webgl.M22] = z_orth; + v[webgl.M32] = 0; + v[webgl.M03] = tx; + v[webgl.M13] = ty; + v[webgl.M23] = tz; + v[webgl.M33] = 1; + return this; + }; + Matrix4.prototype.multiply = function (matrix) { + var t = this.temp; + var v = this.values; + var m = matrix.values; + t[webgl.M00] = v[webgl.M00] * m[webgl.M00] + v[webgl.M01] * m[webgl.M10] + v[webgl.M02] * m[webgl.M20] + v[webgl.M03] * m[webgl.M30]; + t[webgl.M01] = v[webgl.M00] * m[webgl.M01] + v[webgl.M01] * m[webgl.M11] + v[webgl.M02] * m[webgl.M21] + v[webgl.M03] * m[webgl.M31]; + t[webgl.M02] = v[webgl.M00] * m[webgl.M02] + v[webgl.M01] * m[webgl.M12] + v[webgl.M02] * m[webgl.M22] + v[webgl.M03] * m[webgl.M32]; + t[webgl.M03] = v[webgl.M00] * m[webgl.M03] + v[webgl.M01] * m[webgl.M13] + v[webgl.M02] * m[webgl.M23] + v[webgl.M03] * m[webgl.M33]; + t[webgl.M10] = v[webgl.M10] * m[webgl.M00] + v[webgl.M11] * m[webgl.M10] + v[webgl.M12] * m[webgl.M20] + v[webgl.M13] * m[webgl.M30]; + t[webgl.M11] = v[webgl.M10] * m[webgl.M01] + v[webgl.M11] * m[webgl.M11] + v[webgl.M12] * m[webgl.M21] + v[webgl.M13] * m[webgl.M31]; + t[webgl.M12] = v[webgl.M10] * m[webgl.M02] + v[webgl.M11] * m[webgl.M12] + v[webgl.M12] * m[webgl.M22] + v[webgl.M13] * m[webgl.M32]; + t[webgl.M13] = v[webgl.M10] * m[webgl.M03] + v[webgl.M11] * m[webgl.M13] + v[webgl.M12] * m[webgl.M23] + v[webgl.M13] * m[webgl.M33]; + t[webgl.M20] = v[webgl.M20] * m[webgl.M00] + v[webgl.M21] * m[webgl.M10] + v[webgl.M22] * m[webgl.M20] + v[webgl.M23] * m[webgl.M30]; + t[webgl.M21] = v[webgl.M20] * m[webgl.M01] + v[webgl.M21] * m[webgl.M11] + v[webgl.M22] * m[webgl.M21] + v[webgl.M23] * m[webgl.M31]; + t[webgl.M22] = v[webgl.M20] * m[webgl.M02] + v[webgl.M21] * m[webgl.M12] + v[webgl.M22] * m[webgl.M22] + v[webgl.M23] * m[webgl.M32]; + t[webgl.M23] = v[webgl.M20] * m[webgl.M03] + v[webgl.M21] * m[webgl.M13] + v[webgl.M22] * m[webgl.M23] + v[webgl.M23] * m[webgl.M33]; + t[webgl.M30] = v[webgl.M30] * m[webgl.M00] + v[webgl.M31] * m[webgl.M10] + v[webgl.M32] * m[webgl.M20] + v[webgl.M33] * m[webgl.M30]; + t[webgl.M31] = v[webgl.M30] * m[webgl.M01] + v[webgl.M31] * m[webgl.M11] + v[webgl.M32] * m[webgl.M21] + v[webgl.M33] * m[webgl.M31]; + t[webgl.M32] = v[webgl.M30] * m[webgl.M02] + v[webgl.M31] * m[webgl.M12] + v[webgl.M32] * m[webgl.M22] + v[webgl.M33] * m[webgl.M32]; + t[webgl.M33] = v[webgl.M30] * m[webgl.M03] + v[webgl.M31] * m[webgl.M13] + v[webgl.M32] * m[webgl.M23] + v[webgl.M33] * m[webgl.M33]; + return this.set(this.temp); + }; + Matrix4.prototype.multiplyLeft = function (matrix) { + var t = this.temp; + var v = this.values; + var m = matrix.values; + t[webgl.M00] = m[webgl.M00] * v[webgl.M00] + m[webgl.M01] * v[webgl.M10] + m[webgl.M02] * v[webgl.M20] + m[webgl.M03] * v[webgl.M30]; + t[webgl.M01] = m[webgl.M00] * v[webgl.M01] + m[webgl.M01] * v[webgl.M11] + m[webgl.M02] * v[webgl.M21] + m[webgl.M03] * v[webgl.M31]; + t[webgl.M02] = m[webgl.M00] * v[webgl.M02] + m[webgl.M01] * v[webgl.M12] + m[webgl.M02] * v[webgl.M22] + m[webgl.M03] * v[webgl.M32]; + t[webgl.M03] = m[webgl.M00] * v[webgl.M03] + m[webgl.M01] * v[webgl.M13] + m[webgl.M02] * v[webgl.M23] + m[webgl.M03] * v[webgl.M33]; + t[webgl.M10] = m[webgl.M10] * v[webgl.M00] + m[webgl.M11] * v[webgl.M10] + m[webgl.M12] * v[webgl.M20] + m[webgl.M13] * v[webgl.M30]; + t[webgl.M11] = m[webgl.M10] * v[webgl.M01] + m[webgl.M11] * v[webgl.M11] + m[webgl.M12] * v[webgl.M21] + m[webgl.M13] * v[webgl.M31]; + t[webgl.M12] = m[webgl.M10] * v[webgl.M02] + m[webgl.M11] * v[webgl.M12] + m[webgl.M12] * v[webgl.M22] + m[webgl.M13] * v[webgl.M32]; + t[webgl.M13] = m[webgl.M10] * v[webgl.M03] + m[webgl.M11] * v[webgl.M13] + m[webgl.M12] * v[webgl.M23] + m[webgl.M13] * v[webgl.M33]; + t[webgl.M20] = m[webgl.M20] * v[webgl.M00] + m[webgl.M21] * v[webgl.M10] + m[webgl.M22] * v[webgl.M20] + m[webgl.M23] * v[webgl.M30]; + t[webgl.M21] = m[webgl.M20] * v[webgl.M01] + m[webgl.M21] * v[webgl.M11] + m[webgl.M22] * v[webgl.M21] + m[webgl.M23] * v[webgl.M31]; + t[webgl.M22] = m[webgl.M20] * v[webgl.M02] + m[webgl.M21] * v[webgl.M12] + m[webgl.M22] * v[webgl.M22] + m[webgl.M23] * v[webgl.M32]; + t[webgl.M23] = m[webgl.M20] * v[webgl.M03] + m[webgl.M21] * v[webgl.M13] + m[webgl.M22] * v[webgl.M23] + m[webgl.M23] * v[webgl.M33]; + t[webgl.M30] = m[webgl.M30] * v[webgl.M00] + m[webgl.M31] * v[webgl.M10] + m[webgl.M32] * v[webgl.M20] + m[webgl.M33] * v[webgl.M30]; + t[webgl.M31] = m[webgl.M30] * v[webgl.M01] + m[webgl.M31] * v[webgl.M11] + m[webgl.M32] * v[webgl.M21] + m[webgl.M33] * v[webgl.M31]; + t[webgl.M32] = m[webgl.M30] * v[webgl.M02] + m[webgl.M31] * v[webgl.M12] + m[webgl.M32] * v[webgl.M22] + m[webgl.M33] * v[webgl.M32]; + t[webgl.M33] = m[webgl.M30] * v[webgl.M03] + m[webgl.M31] * v[webgl.M13] + m[webgl.M32] * v[webgl.M23] + m[webgl.M33] * v[webgl.M33]; + return this.set(this.temp); + }; + Matrix4.prototype.lookAt = function (position, direction, up) { + Matrix4.initTemps(); + var xAxis = Matrix4.xAxis, yAxis = Matrix4.yAxis, zAxis = Matrix4.zAxis; + zAxis.setFrom(direction).normalize(); + xAxis.setFrom(direction).normalize(); + xAxis.cross(up).normalize(); + yAxis.setFrom(xAxis).cross(zAxis).normalize(); + this.identity(); + var val = this.values; + val[webgl.M00] = xAxis.x; + val[webgl.M01] = xAxis.y; + val[webgl.M02] = xAxis.z; + val[webgl.M10] = yAxis.x; + val[webgl.M11] = yAxis.y; + val[webgl.M12] = yAxis.z; + val[webgl.M20] = -zAxis.x; + val[webgl.M21] = -zAxis.y; + val[webgl.M22] = -zAxis.z; + Matrix4.tmpMatrix.identity(); + Matrix4.tmpMatrix.values[webgl.M03] = -position.x; + Matrix4.tmpMatrix.values[webgl.M13] = -position.y; + Matrix4.tmpMatrix.values[webgl.M23] = -position.z; + this.multiply(Matrix4.tmpMatrix); + return this; + }; + Matrix4.initTemps = function () { + if (Matrix4.xAxis === null) + Matrix4.xAxis = new webgl.Vector3(); + if (Matrix4.yAxis === null) + Matrix4.yAxis = new webgl.Vector3(); + if (Matrix4.zAxis === null) + Matrix4.zAxis = new webgl.Vector3(); + }; + Matrix4.xAxis = null; + Matrix4.yAxis = null; + Matrix4.zAxis = null; + Matrix4.tmpMatrix = new Matrix4(); + return Matrix4; + }()); + webgl.Matrix4 = Matrix4; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Mesh = (function () { + function Mesh(context, attributes, maxVertices, maxIndices) { + this.attributes = attributes; + this.verticesLength = 0; + this.dirtyVertices = false; + this.indicesLength = 0; + this.dirtyIndices = false; + this.elementsPerVertex = 0; + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.elementsPerVertex = 0; + for (var i = 0; i < attributes.length; i++) { + this.elementsPerVertex += attributes[i].numElements; + } + this.vertices = new Float32Array(maxVertices * this.elementsPerVertex); + this.indices = new Uint16Array(maxIndices); + this.context.addRestorable(this); + } + Mesh.prototype.getAttributes = function () { return this.attributes; }; + Mesh.prototype.maxVertices = function () { return this.vertices.length / this.elementsPerVertex; }; + Mesh.prototype.numVertices = function () { return this.verticesLength / this.elementsPerVertex; }; + Mesh.prototype.setVerticesLength = function (length) { + this.dirtyVertices = true; + this.verticesLength = length; + }; + Mesh.prototype.getVertices = function () { return this.vertices; }; + Mesh.prototype.maxIndices = function () { return this.indices.length; }; + Mesh.prototype.numIndices = function () { return this.indicesLength; }; + Mesh.prototype.setIndicesLength = function (length) { + this.dirtyIndices = true; + this.indicesLength = length; + }; + Mesh.prototype.getIndices = function () { return this.indices; }; + ; + Mesh.prototype.getVertexSizeInFloats = function () { + var size = 0; + for (var i = 0; i < this.attributes.length; i++) { + var attribute = this.attributes[i]; + size += attribute.numElements; + } + return size; + }; + Mesh.prototype.setVertices = function (vertices) { + this.dirtyVertices = true; + if (vertices.length > this.vertices.length) + throw Error("Mesh can't store more than " + this.maxVertices() + " vertices"); + this.vertices.set(vertices, 0); + this.verticesLength = vertices.length; + }; + Mesh.prototype.setIndices = function (indices) { + this.dirtyIndices = true; + if (indices.length > this.indices.length) + throw Error("Mesh can't store more than " + this.maxIndices() + " indices"); + this.indices.set(indices, 0); + this.indicesLength = indices.length; + }; + Mesh.prototype.draw = function (shader, primitiveType) { + this.drawWithOffset(shader, primitiveType, 0, this.indicesLength > 0 ? this.indicesLength : this.verticesLength / this.elementsPerVertex); + }; + Mesh.prototype.drawWithOffset = function (shader, primitiveType, offset, count) { + var gl = this.context.gl; + if (this.dirtyVertices || this.dirtyIndices) + this.update(); + this.bind(shader); + if (this.indicesLength > 0) { + gl.drawElements(primitiveType, count, gl.UNSIGNED_SHORT, offset * 2); + } + else { + gl.drawArrays(primitiveType, offset, count); + } + this.unbind(shader); + }; + Mesh.prototype.bind = function (shader) { + var gl = this.context.gl; + gl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer); + var offset = 0; + for (var i = 0; i < this.attributes.length; i++) { + var attrib = this.attributes[i]; + var location_1 = shader.getAttributeLocation(attrib.name); + gl.enableVertexAttribArray(location_1); + gl.vertexAttribPointer(location_1, attrib.numElements, gl.FLOAT, false, this.elementsPerVertex * 4, offset * 4); + offset += attrib.numElements; + } + if (this.indicesLength > 0) + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer); + }; + Mesh.prototype.unbind = function (shader) { + var gl = this.context.gl; + for (var i = 0; i < this.attributes.length; i++) { + var attrib = this.attributes[i]; + var location_2 = shader.getAttributeLocation(attrib.name); + gl.disableVertexAttribArray(location_2); + } + gl.bindBuffer(gl.ARRAY_BUFFER, null); + if (this.indicesLength > 0) + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null); + }; + Mesh.prototype.update = function () { + var gl = this.context.gl; + if (this.dirtyVertices) { + if (!this.verticesBuffer) { + this.verticesBuffer = gl.createBuffer(); + } + gl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.vertices.subarray(0, this.verticesLength), gl.DYNAMIC_DRAW); + this.dirtyVertices = false; + } + if (this.dirtyIndices) { + if (!this.indicesBuffer) { + this.indicesBuffer = gl.createBuffer(); + } + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices.subarray(0, this.indicesLength), gl.DYNAMIC_DRAW); + this.dirtyIndices = false; + } + }; + Mesh.prototype.restore = function () { + this.verticesBuffer = null; + this.indicesBuffer = null; + this.update(); + }; + Mesh.prototype.dispose = function () { + this.context.removeRestorable(this); + var gl = this.context.gl; + gl.deleteBuffer(this.verticesBuffer); + gl.deleteBuffer(this.indicesBuffer); + }; + return Mesh; + }()); + webgl.Mesh = Mesh; + var VertexAttribute = (function () { + function VertexAttribute(name, type, numElements) { + this.name = name; + this.type = type; + this.numElements = numElements; + } + return VertexAttribute; + }()); + webgl.VertexAttribute = VertexAttribute; + var Position2Attribute = (function (_super) { + __extends(Position2Attribute, _super); + function Position2Attribute() { + return _super.call(this, webgl.Shader.POSITION, VertexAttributeType.Float, 2) || this; + } + return Position2Attribute; + }(VertexAttribute)); + webgl.Position2Attribute = Position2Attribute; + var Position3Attribute = (function (_super) { + __extends(Position3Attribute, _super); + function Position3Attribute() { + return _super.call(this, webgl.Shader.POSITION, VertexAttributeType.Float, 3) || this; + } + return Position3Attribute; + }(VertexAttribute)); + webgl.Position3Attribute = Position3Attribute; + var TexCoordAttribute = (function (_super) { + __extends(TexCoordAttribute, _super); + function TexCoordAttribute(unit) { + if (unit === void 0) { unit = 0; } + return _super.call(this, webgl.Shader.TEXCOORDS + (unit == 0 ? "" : unit), VertexAttributeType.Float, 2) || this; + } + return TexCoordAttribute; + }(VertexAttribute)); + webgl.TexCoordAttribute = TexCoordAttribute; + var ColorAttribute = (function (_super) { + __extends(ColorAttribute, _super); + function ColorAttribute() { + return _super.call(this, webgl.Shader.COLOR, VertexAttributeType.Float, 4) || this; + } + return ColorAttribute; + }(VertexAttribute)); + webgl.ColorAttribute = ColorAttribute; + var Color2Attribute = (function (_super) { + __extends(Color2Attribute, _super); + function Color2Attribute() { + return _super.call(this, webgl.Shader.COLOR2, VertexAttributeType.Float, 4) || this; + } + return Color2Attribute; + }(VertexAttribute)); + webgl.Color2Attribute = Color2Attribute; + var VertexAttributeType; + (function (VertexAttributeType) { + VertexAttributeType[VertexAttributeType["Float"] = 0] = "Float"; + })(VertexAttributeType = webgl.VertexAttributeType || (webgl.VertexAttributeType = {})); + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var PolygonBatcher = (function () { + function PolygonBatcher(context, twoColorTint, maxVertices) { + if (twoColorTint === void 0) { twoColorTint = true; } + if (maxVertices === void 0) { maxVertices = 10920; } + this.isDrawing = false; + this.shader = null; + this.lastTexture = null; + this.verticesLength = 0; + this.indicesLength = 0; + if (maxVertices > 10920) + throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + var attributes = twoColorTint ? + [new webgl.Position2Attribute(), new webgl.ColorAttribute(), new webgl.TexCoordAttribute(), new webgl.Color2Attribute()] : + [new webgl.Position2Attribute(), new webgl.ColorAttribute(), new webgl.TexCoordAttribute()]; + this.mesh = new webgl.Mesh(context, attributes, maxVertices, maxVertices * 3); + this.srcBlend = this.context.gl.SRC_ALPHA; + this.dstBlend = this.context.gl.ONE_MINUS_SRC_ALPHA; + } + PolygonBatcher.prototype.begin = function (shader) { + var gl = this.context.gl; + if (this.isDrawing) + throw new Error("PolygonBatch is already drawing. Call PolygonBatch.end() before calling PolygonBatch.begin()"); + this.drawCalls = 0; + this.shader = shader; + this.lastTexture = null; + this.isDrawing = true; + gl.enable(gl.BLEND); + gl.blendFunc(this.srcBlend, this.dstBlend); + }; + PolygonBatcher.prototype.setBlendMode = function (srcBlend, dstBlend) { + var gl = this.context.gl; + this.srcBlend = srcBlend; + this.dstBlend = dstBlend; + if (this.isDrawing) { + this.flush(); + gl.blendFunc(this.srcBlend, this.dstBlend); + } + }; + PolygonBatcher.prototype.draw = function (texture, vertices, indices) { + if (texture != this.lastTexture) { + this.flush(); + this.lastTexture = texture; + } + else if (this.verticesLength + vertices.length > this.mesh.getVertices().length || + this.indicesLength + indices.length > this.mesh.getIndices().length) { + this.flush(); + } + var indexStart = this.mesh.numVertices(); + this.mesh.getVertices().set(vertices, this.verticesLength); + this.verticesLength += vertices.length; + this.mesh.setVerticesLength(this.verticesLength); + var indicesArray = this.mesh.getIndices(); + for (var i = this.indicesLength, j = 0; j < indices.length; i++, j++) + indicesArray[i] = indices[j] + indexStart; + this.indicesLength += indices.length; + this.mesh.setIndicesLength(this.indicesLength); + }; + PolygonBatcher.prototype.flush = function () { + var gl = this.context.gl; + if (this.verticesLength == 0) + return; + this.lastTexture.bind(); + this.mesh.draw(this.shader, gl.TRIANGLES); + this.verticesLength = 0; + this.indicesLength = 0; + this.mesh.setVerticesLength(0); + this.mesh.setIndicesLength(0); + this.drawCalls++; + }; + PolygonBatcher.prototype.end = function () { + var gl = this.context.gl; + if (!this.isDrawing) + throw new Error("PolygonBatch is not drawing. Call PolygonBatch.begin() before calling PolygonBatch.end()"); + if (this.verticesLength > 0 || this.indicesLength > 0) + this.flush(); + this.shader = null; + this.lastTexture = null; + this.isDrawing = false; + gl.disable(gl.BLEND); + }; + PolygonBatcher.prototype.getDrawCalls = function () { return this.drawCalls; }; + PolygonBatcher.prototype.dispose = function () { + this.mesh.dispose(); + }; + return PolygonBatcher; + }()); + webgl.PolygonBatcher = PolygonBatcher; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var SceneRenderer = (function () { + function SceneRenderer(canvas, context, twoColorTint) { + if (twoColorTint === void 0) { twoColorTint = true; } + this.twoColorTint = false; + this.activeRenderer = null; + this.QUAD = [ + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + ]; + this.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + this.WHITE = new spine.Color(1, 1, 1, 1); + this.canvas = canvas; + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.twoColorTint = twoColorTint; + this.camera = new webgl.OrthoCamera(canvas.width, canvas.height); + this.batcherShader = twoColorTint ? webgl.Shader.newTwoColoredTextured(this.context) : webgl.Shader.newColoredTextured(this.context); + this.batcher = new webgl.PolygonBatcher(this.context, twoColorTint); + this.shapesShader = webgl.Shader.newColored(this.context); + this.shapes = new webgl.ShapeRenderer(this.context); + this.skeletonRenderer = new webgl.SkeletonRenderer(this.context, twoColorTint); + this.skeletonDebugRenderer = new webgl.SkeletonDebugRenderer(this.context); + } + SceneRenderer.prototype.begin = function () { + this.camera.update(); + this.enableRenderer(this.batcher); + }; + SceneRenderer.prototype.drawSkeleton = function (skeleton, premultipliedAlpha, slotRangeStart, slotRangeEnd) { + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + if (slotRangeStart === void 0) { slotRangeStart = -1; } + if (slotRangeEnd === void 0) { slotRangeEnd = -1; } + this.enableRenderer(this.batcher); + this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha; + this.skeletonRenderer.draw(this.batcher, skeleton, slotRangeStart, slotRangeEnd); + }; + SceneRenderer.prototype.drawSkeletonDebug = function (skeleton, premultipliedAlpha, ignoredBones) { + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + if (ignoredBones === void 0) { ignoredBones = null; } + this.enableRenderer(this.shapes); + this.skeletonDebugRenderer.premultipliedAlpha = premultipliedAlpha; + this.skeletonDebugRenderer.draw(this.shapes, skeleton, ignoredBones); + }; + SceneRenderer.prototype.drawTexture = function (texture, x, y, width, height, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.drawTextureUV = function (texture, x, y, width, height, u, v, u2, v2, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u; + quad[i++] = v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u2; + quad[i++] = v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u2; + quad[i++] = v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u; + quad[i++] = v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.drawTextureRotated = function (texture, x, y, width, height, pivotX, pivotY, angle, color, premultipliedAlpha) { + if (color === void 0) { color = null; } + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var worldOriginX = x + pivotX; + var worldOriginY = y + pivotY; + var fx = -pivotX; + var fy = -pivotY; + var fx2 = width - pivotX; + var fy2 = height - pivotY; + var p1x = fx; + var p1y = fy; + var p2x = fx; + var p2y = fy2; + var p3x = fx2; + var p3y = fy2; + var p4x = fx2; + var p4y = fy; + var x1 = 0; + var y1 = 0; + var x2 = 0; + var y2 = 0; + var x3 = 0; + var y3 = 0; + var x4 = 0; + var y4 = 0; + if (angle != 0) { + var cos = spine.MathUtils.cosDeg(angle); + var sin = spine.MathUtils.sinDeg(angle); + x1 = cos * p1x - sin * p1y; + y1 = sin * p1x + cos * p1y; + x4 = cos * p2x - sin * p2y; + y4 = sin * p2x + cos * p2y; + x3 = cos * p3x - sin * p3y; + y3 = sin * p3x + cos * p3y; + x2 = x3 + (x1 - x4); + y2 = y3 + (y1 - y4); + } + else { + x1 = p1x; + y1 = p1y; + x4 = p2x; + y4 = p2y; + x3 = p3x; + y3 = p3y; + x2 = p4x; + y2 = p4y; + } + x1 += worldOriginX; + y1 += worldOriginY; + x2 += worldOriginX; + y2 += worldOriginY; + x3 += worldOriginX; + y3 += worldOriginY; + x4 += worldOriginX; + y4 += worldOriginY; + var i = 0; + quad[i++] = x1; + quad[i++] = y1; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x2; + quad[i++] = y2; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x3; + quad[i++] = y3; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x4; + quad[i++] = y4; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.drawRegion = function (region, x, y, width, height, color, premultipliedAlpha) { + if (color === void 0) { color = null; } + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + this.enableRenderer(this.batcher); + if (color === null) + color = this.WHITE; + var quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u; + quad[i++] = region.v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u2; + quad[i++] = region.v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u2; + quad[i++] = region.v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u; + quad[i++] = region.v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(region.texture, quad, this.QUAD_TRIANGLES); + }; + SceneRenderer.prototype.line = function (x, y, x2, y2, color, color2) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + this.enableRenderer(this.shapes); + this.shapes.line(x, y, x2, y2, color); + }; + SceneRenderer.prototype.triangle = function (filled, x, y, x2, y2, x3, y3, color, color2, color3) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + this.enableRenderer(this.shapes); + this.shapes.triangle(filled, x, y, x2, y2, x3, y3, color, color2, color3); + }; + SceneRenderer.prototype.quad = function (filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + if (color4 === void 0) { color4 = null; } + this.enableRenderer(this.shapes); + this.shapes.quad(filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4); + }; + SceneRenderer.prototype.rect = function (filled, x, y, width, height, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.rect(filled, x, y, width, height, color); + }; + SceneRenderer.prototype.rectLine = function (filled, x1, y1, x2, y2, width, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.rectLine(filled, x1, y1, x2, y2, width, color); + }; + SceneRenderer.prototype.polygon = function (polygonVertices, offset, count, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.polygon(polygonVertices, offset, count, color); + }; + SceneRenderer.prototype.circle = function (filled, x, y, radius, color, segments) { + if (color === void 0) { color = null; } + if (segments === void 0) { segments = 0; } + this.enableRenderer(this.shapes); + this.shapes.circle(filled, x, y, radius, color, segments); + }; + SceneRenderer.prototype.curve = function (x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color) { + if (color === void 0) { color = null; } + this.enableRenderer(this.shapes); + this.shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color); + }; + SceneRenderer.prototype.end = function () { + if (this.activeRenderer === this.batcher) + this.batcher.end(); + else if (this.activeRenderer === this.shapes) + this.shapes.end(); + this.activeRenderer = null; + }; + SceneRenderer.prototype.resize = function (resizeMode) { + var canvas = this.canvas; + var w = canvas.clientWidth; + var h = canvas.clientHeight; + if (canvas.width != w || canvas.height != h) { + canvas.width = w; + canvas.height = h; + } + this.context.gl.viewport(0, 0, canvas.width, canvas.height); + if (resizeMode === ResizeMode.Stretch) { + } + else if (resizeMode === ResizeMode.Expand) { + this.camera.setViewport(w, h); + } + else if (resizeMode === ResizeMode.Fit) { + var sourceWidth = canvas.width, sourceHeight = canvas.height; + var targetWidth = this.camera.viewportWidth, targetHeight = this.camera.viewportHeight; + var targetRatio = targetHeight / targetWidth; + var sourceRatio = sourceHeight / sourceWidth; + var scale = targetRatio < sourceRatio ? targetWidth / sourceWidth : targetHeight / sourceHeight; + this.camera.viewportWidth = sourceWidth * scale; + this.camera.viewportHeight = sourceHeight * scale; + } + this.camera.update(); + }; + SceneRenderer.prototype.enableRenderer = function (renderer) { + if (this.activeRenderer === renderer) + return; + this.end(); + if (renderer instanceof webgl.PolygonBatcher) { + this.batcherShader.bind(); + this.batcherShader.setUniform4x4f(webgl.Shader.MVP_MATRIX, this.camera.projectionView.values); + this.batcherShader.setUniformi("u_texture", 0); + this.batcher.begin(this.batcherShader); + this.activeRenderer = this.batcher; + } + else if (renderer instanceof webgl.ShapeRenderer) { + this.shapesShader.bind(); + this.shapesShader.setUniform4x4f(webgl.Shader.MVP_MATRIX, this.camera.projectionView.values); + this.shapes.begin(this.shapesShader); + this.activeRenderer = this.shapes; + } + else { + this.activeRenderer = this.skeletonDebugRenderer; + } + }; + SceneRenderer.prototype.dispose = function () { + this.batcher.dispose(); + this.batcherShader.dispose(); + this.shapes.dispose(); + this.shapesShader.dispose(); + this.skeletonDebugRenderer.dispose(); + }; + return SceneRenderer; + }()); + webgl.SceneRenderer = SceneRenderer; + var ResizeMode; + (function (ResizeMode) { + ResizeMode[ResizeMode["Stretch"] = 0] = "Stretch"; + ResizeMode[ResizeMode["Expand"] = 1] = "Expand"; + ResizeMode[ResizeMode["Fit"] = 2] = "Fit"; + })(ResizeMode = webgl.ResizeMode || (webgl.ResizeMode = {})); + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Shader = (function () { + function Shader(context, vertexShader, fragmentShader) { + this.vertexShader = vertexShader; + this.fragmentShader = fragmentShader; + this.vs = null; + this.fs = null; + this.program = null; + this.tmp2x2 = new Float32Array(2 * 2); + this.tmp3x3 = new Float32Array(3 * 3); + this.tmp4x4 = new Float32Array(4 * 4); + this.vsSource = vertexShader; + this.fsSource = fragmentShader; + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.context.addRestorable(this); + this.compile(); + } + Shader.prototype.getProgram = function () { return this.program; }; + Shader.prototype.getVertexShader = function () { return this.vertexShader; }; + Shader.prototype.getFragmentShader = function () { return this.fragmentShader; }; + Shader.prototype.getVertexShaderSource = function () { return this.vsSource; }; + Shader.prototype.getFragmentSource = function () { return this.fsSource; }; + Shader.prototype.compile = function () { + var gl = this.context.gl; + try { + this.vs = this.compileShader(gl.VERTEX_SHADER, this.vertexShader); + this.fs = this.compileShader(gl.FRAGMENT_SHADER, this.fragmentShader); + this.program = this.compileProgram(this.vs, this.fs); + } + catch (e) { + this.dispose(); + throw e; + } + }; + Shader.prototype.compileShader = function (type, source) { + var gl = this.context.gl; + var shader = gl.createShader(type); + gl.shaderSource(shader, source); + gl.compileShader(shader); + if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { + var error = "Couldn't compile shader: " + gl.getShaderInfoLog(shader); + gl.deleteShader(shader); + if (!gl.isContextLost()) + throw new Error(error); + } + return shader; + }; + Shader.prototype.compileProgram = function (vs, fs) { + var gl = this.context.gl; + var program = gl.createProgram(); + gl.attachShader(program, vs); + gl.attachShader(program, fs); + gl.linkProgram(program); + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + var error = "Couldn't compile shader program: " + gl.getProgramInfoLog(program); + gl.deleteProgram(program); + if (!gl.isContextLost()) + throw new Error(error); + } + return program; + }; + Shader.prototype.restore = function () { + this.compile(); + }; + Shader.prototype.bind = function () { + this.context.gl.useProgram(this.program); + }; + Shader.prototype.unbind = function () { + this.context.gl.useProgram(null); + }; + Shader.prototype.setUniformi = function (uniform, value) { + this.context.gl.uniform1i(this.getUniformLocation(uniform), value); + }; + Shader.prototype.setUniformf = function (uniform, value) { + this.context.gl.uniform1f(this.getUniformLocation(uniform), value); + }; + Shader.prototype.setUniform2f = function (uniform, value, value2) { + this.context.gl.uniform2f(this.getUniformLocation(uniform), value, value2); + }; + Shader.prototype.setUniform3f = function (uniform, value, value2, value3) { + this.context.gl.uniform3f(this.getUniformLocation(uniform), value, value2, value3); + }; + Shader.prototype.setUniform4f = function (uniform, value, value2, value3, value4) { + this.context.gl.uniform4f(this.getUniformLocation(uniform), value, value2, value3, value4); + }; + Shader.prototype.setUniform2x2f = function (uniform, value) { + var gl = this.context.gl; + this.tmp2x2.set(value); + gl.uniformMatrix2fv(this.getUniformLocation(uniform), false, this.tmp2x2); + }; + Shader.prototype.setUniform3x3f = function (uniform, value) { + var gl = this.context.gl; + this.tmp3x3.set(value); + gl.uniformMatrix3fv(this.getUniformLocation(uniform), false, this.tmp3x3); + }; + Shader.prototype.setUniform4x4f = function (uniform, value) { + var gl = this.context.gl; + this.tmp4x4.set(value); + gl.uniformMatrix4fv(this.getUniformLocation(uniform), false, this.tmp4x4); + }; + Shader.prototype.getUniformLocation = function (uniform) { + var gl = this.context.gl; + var location = gl.getUniformLocation(this.program, uniform); + if (!location && !gl.isContextLost()) + throw new Error("Couldn't find location for uniform " + uniform); + return location; + }; + Shader.prototype.getAttributeLocation = function (attribute) { + var gl = this.context.gl; + var location = gl.getAttribLocation(this.program, attribute); + if (location == -1 && !gl.isContextLost()) + throw new Error("Couldn't find location for attribute " + attribute); + return location; + }; + Shader.prototype.dispose = function () { + this.context.removeRestorable(this); + var gl = this.context.gl; + if (this.vs) { + gl.deleteShader(this.vs); + this.vs = null; + } + if (this.fs) { + gl.deleteShader(this.fs); + this.fs = null; + } + if (this.program) { + gl.deleteProgram(this.program); + this.program = null; + } + }; + Shader.newColoredTextured = function (context) { + var vs = "\n\t\t\t\tattribute vec4 " + Shader.POSITION + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR + ";\n\t\t\t\tattribute vec2 " + Shader.TEXCOORDS + ";\n\t\t\t\tuniform mat4 " + Shader.MVP_MATRIX + ";\n\t\t\t\tvarying vec4 v_color;\n\t\t\t\tvarying vec2 v_texCoords;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_color = " + Shader.COLOR + ";\n\t\t\t\t\tv_texCoords = " + Shader.TEXCOORDS + ";\n\t\t\t\t\tgl_Position = " + Shader.MVP_MATRIX + " * " + Shader.POSITION + ";\n\t\t\t\t}\n\t\t\t"; + var fs = "\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_color;\n\t\t\t\tvarying vec2 v_texCoords;\n\t\t\t\tuniform sampler2D u_texture;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tgl_FragColor = v_color * texture2D(u_texture, v_texCoords);\n\t\t\t\t}\n\t\t\t"; + return new Shader(context, vs, fs); + }; + Shader.newTwoColoredTextured = function (context) { + var vs = "\n\t\t\t\tattribute vec4 " + Shader.POSITION + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR2 + ";\n\t\t\t\tattribute vec2 " + Shader.TEXCOORDS + ";\n\t\t\t\tuniform mat4 " + Shader.MVP_MATRIX + ";\n\t\t\t\tvarying vec4 v_light;\n\t\t\t\tvarying vec4 v_dark;\n\t\t\t\tvarying vec2 v_texCoords;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_light = " + Shader.COLOR + ";\n\t\t\t\t\tv_dark = " + Shader.COLOR2 + ";\n\t\t\t\t\tv_texCoords = " + Shader.TEXCOORDS + ";\n\t\t\t\t\tgl_Position = " + Shader.MVP_MATRIX + " * " + Shader.POSITION + ";\n\t\t\t\t}\n\t\t\t"; + var fs = "\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_light;\n\t\t\t\tvarying LOWP vec4 v_dark;\n\t\t\t\tvarying vec2 v_texCoords;\n\t\t\t\tuniform sampler2D u_texture;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tvec4 texColor = texture2D(u_texture, v_texCoords);\n\t\t\t\t\tgl_FragColor.a = texColor.a * v_light.a;\n\t\t\t\t\tgl_FragColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;\n\t\t\t\t}\n\t\t\t"; + return new Shader(context, vs, fs); + }; + Shader.newColored = function (context) { + var vs = "\n\t\t\t\tattribute vec4 " + Shader.POSITION + ";\n\t\t\t\tattribute vec4 " + Shader.COLOR + ";\n\t\t\t\tuniform mat4 " + Shader.MVP_MATRIX + ";\n\t\t\t\tvarying vec4 v_color;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_color = " + Shader.COLOR + ";\n\t\t\t\t\tgl_Position = " + Shader.MVP_MATRIX + " * " + Shader.POSITION + ";\n\t\t\t\t}\n\t\t\t"; + var fs = "\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_color;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tgl_FragColor = v_color;\n\t\t\t\t}\n\t\t\t"; + return new Shader(context, vs, fs); + }; + Shader.MVP_MATRIX = "u_projTrans"; + Shader.POSITION = "a_position"; + Shader.COLOR = "a_color"; + Shader.COLOR2 = "a_color2"; + Shader.TEXCOORDS = "a_texCoords"; + Shader.SAMPLER = "u_texture"; + return Shader; + }()); + webgl.Shader = Shader; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var ShapeRenderer = (function () { + function ShapeRenderer(context, maxVertices) { + if (maxVertices === void 0) { maxVertices = 10920; } + this.isDrawing = false; + this.shapeType = ShapeType.Filled; + this.color = new spine.Color(1, 1, 1, 1); + this.vertexIndex = 0; + this.tmp = new spine.Vector2(); + if (maxVertices > 10920) + throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + this.mesh = new webgl.Mesh(context, [new webgl.Position2Attribute(), new webgl.ColorAttribute()], maxVertices, 0); + this.srcBlend = this.context.gl.SRC_ALPHA; + this.dstBlend = this.context.gl.ONE_MINUS_SRC_ALPHA; + } + ShapeRenderer.prototype.begin = function (shader) { + if (this.isDrawing) + throw new Error("ShapeRenderer.begin() has already been called"); + this.shader = shader; + this.vertexIndex = 0; + this.isDrawing = true; + var gl = this.context.gl; + gl.enable(gl.BLEND); + gl.blendFunc(this.srcBlend, this.dstBlend); + }; + ShapeRenderer.prototype.setBlendMode = function (srcBlend, dstBlend) { + var gl = this.context.gl; + this.srcBlend = srcBlend; + this.dstBlend = dstBlend; + if (this.isDrawing) { + this.flush(); + gl.blendFunc(this.srcBlend, this.dstBlend); + } + }; + ShapeRenderer.prototype.setColor = function (color) { + this.color.setFromColor(color); + }; + ShapeRenderer.prototype.setColorWith = function (r, g, b, a) { + this.color.set(r, g, b, a); + }; + ShapeRenderer.prototype.point = function (x, y, color) { + if (color === void 0) { color = null; } + this.check(ShapeType.Point, 1); + if (color === null) + color = this.color; + this.vertex(x, y, color); + }; + ShapeRenderer.prototype.line = function (x, y, x2, y2, color) { + if (color === void 0) { color = null; } + this.check(ShapeType.Line, 2); + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + if (color === null) + color = this.color; + this.vertex(x, y, color); + this.vertex(x2, y2, color); + }; + ShapeRenderer.prototype.triangle = function (filled, x, y, x2, y2, x3, y3, color, color2, color3) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + this.check(filled ? ShapeType.Filled : ShapeType.Line, 3); + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + if (color === null) + color = this.color; + if (color2 === null) + color2 = this.color; + if (color3 === null) + color3 = this.color; + if (filled) { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x3, y3, color3); + } + else { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x2, y2, color); + this.vertex(x3, y3, color2); + this.vertex(x3, y3, color); + this.vertex(x, y, color2); + } + }; + ShapeRenderer.prototype.quad = function (filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4) { + if (color === void 0) { color = null; } + if (color2 === void 0) { color2 = null; } + if (color3 === void 0) { color3 = null; } + if (color4 === void 0) { color4 = null; } + this.check(filled ? ShapeType.Filled : ShapeType.Line, 3); + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + if (color === null) + color = this.color; + if (color2 === null) + color2 = this.color; + if (color3 === null) + color3 = this.color; + if (color4 === null) + color4 = this.color; + if (filled) { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x3, y3, color3); + this.vertex(x3, y3, color3); + this.vertex(x4, y4, color4); + this.vertex(x, y, color); + } + else { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x2, y2, color2); + this.vertex(x3, y3, color3); + this.vertex(x3, y3, color3); + this.vertex(x4, y4, color4); + this.vertex(x4, y4, color4); + this.vertex(x, y, color); + } + }; + ShapeRenderer.prototype.rect = function (filled, x, y, width, height, color) { + if (color === void 0) { color = null; } + this.quad(filled, x, y, x + width, y, x + width, y + height, x, y + height, color, color, color, color); + }; + ShapeRenderer.prototype.rectLine = function (filled, x1, y1, x2, y2, width, color) { + if (color === void 0) { color = null; } + this.check(filled ? ShapeType.Filled : ShapeType.Line, 8); + if (color === null) + color = this.color; + var t = this.tmp.set(y2 - y1, x1 - x2); + t.normalize(); + width *= 0.5; + var tx = t.x * width; + var ty = t.y * width; + if (!filled) { + this.vertex(x1 + tx, y1 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x2 - tx, y2 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x1 + tx, y1 + ty, color); + this.vertex(x2 - tx, y2 - ty, color); + this.vertex(x1 - tx, y1 - ty, color); + } + else { + this.vertex(x1 + tx, y1 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x2 - tx, y2 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + } + }; + ShapeRenderer.prototype.x = function (x, y, size) { + this.line(x - size, y - size, x + size, y + size); + this.line(x - size, y + size, x + size, y - size); + }; + ShapeRenderer.prototype.polygon = function (polygonVertices, offset, count, color) { + if (color === void 0) { color = null; } + if (count < 3) + throw new Error("Polygon must contain at least 3 vertices"); + this.check(ShapeType.Line, count * 2); + if (color === null) + color = this.color; + var vertices = this.mesh.getVertices(); + var idx = this.vertexIndex; + offset <<= 1; + count <<= 1; + var firstX = polygonVertices[offset]; + var firstY = polygonVertices[offset + 1]; + var last = offset + count; + for (var i = offset, n = offset + count - 2; i < n; i += 2) { + var x1 = polygonVertices[i]; + var y1 = polygonVertices[i + 1]; + var x2 = 0; + var y2 = 0; + if (i + 2 >= last) { + x2 = firstX; + y2 = firstY; + } + else { + x2 = polygonVertices[i + 2]; + y2 = polygonVertices[i + 3]; + } + this.vertex(x1, y1, color); + this.vertex(x2, y2, color); + } + }; + ShapeRenderer.prototype.circle = function (filled, x, y, radius, color, segments) { + if (color === void 0) { color = null; } + if (segments === void 0) { segments = 0; } + if (segments === 0) + segments = Math.max(1, (6 * spine.MathUtils.cbrt(radius)) | 0); + if (segments <= 0) + throw new Error("segments must be > 0."); + if (color === null) + color = this.color; + var angle = 2 * spine.MathUtils.PI / segments; + var cos = Math.cos(angle); + var sin = Math.sin(angle); + var cx = radius, cy = 0; + if (!filled) { + this.check(ShapeType.Line, segments * 2 + 2); + for (var i = 0; i < segments; i++) { + this.vertex(x + cx, y + cy, color); + var temp_1 = cx; + cx = cos * cx - sin * cy; + cy = sin * temp_1 + cos * cy; + this.vertex(x + cx, y + cy, color); + } + this.vertex(x + cx, y + cy, color); + } + else { + this.check(ShapeType.Filled, segments * 3 + 3); + segments--; + for (var i = 0; i < segments; i++) { + this.vertex(x, y, color); + this.vertex(x + cx, y + cy, color); + var temp_2 = cx; + cx = cos * cx - sin * cy; + cy = sin * temp_2 + cos * cy; + this.vertex(x + cx, y + cy, color); + } + this.vertex(x, y, color); + this.vertex(x + cx, y + cy, color); + } + var temp = cx; + cx = radius; + cy = 0; + this.vertex(x + cx, y + cy, color); + }; + ShapeRenderer.prototype.curve = function (x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color) { + if (color === void 0) { color = null; } + this.check(ShapeType.Line, segments * 2 + 2); + if (color === null) + color = this.color; + var subdiv_step = 1 / segments; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step * subdiv_step * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = x1 - cx1 * 2 + cx2; + var tmp1y = y1 - cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 - x1 + x2; + var tmp2y = (cy1 - cy2) * 3 - y1 + y2; + var fx = x1; + var fy = y1; + var dfx = (cx1 - x1) * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + var dfy = (cy1 - y1) * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + var ddfx = tmp1x * pre4 + tmp2x * pre5; + var ddfy = tmp1y * pre4 + tmp2y * pre5; + var dddfx = tmp2x * pre5; + var dddfy = tmp2y * pre5; + while (segments-- > 0) { + this.vertex(fx, fy, color); + fx += dfx; + fy += dfy; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + this.vertex(fx, fy, color); + } + this.vertex(fx, fy, color); + this.vertex(x2, y2, color); + }; + ShapeRenderer.prototype.vertex = function (x, y, color) { + var idx = this.vertexIndex; + var vertices = this.mesh.getVertices(); + vertices[idx++] = x; + vertices[idx++] = y; + vertices[idx++] = color.r; + vertices[idx++] = color.g; + vertices[idx++] = color.b; + vertices[idx++] = color.a; + this.vertexIndex = idx; + }; + ShapeRenderer.prototype.end = function () { + if (!this.isDrawing) + throw new Error("ShapeRenderer.begin() has not been called"); + this.flush(); + this.context.gl.disable(this.context.gl.BLEND); + this.isDrawing = false; + }; + ShapeRenderer.prototype.flush = function () { + if (this.vertexIndex == 0) + return; + this.mesh.setVerticesLength(this.vertexIndex); + this.mesh.draw(this.shader, this.shapeType); + this.vertexIndex = 0; + }; + ShapeRenderer.prototype.check = function (shapeType, numVertices) { + if (!this.isDrawing) + throw new Error("ShapeRenderer.begin() has not been called"); + if (this.shapeType == shapeType) { + if (this.mesh.maxVertices() - this.mesh.numVertices() < numVertices) + this.flush(); + else + return; + } + else { + this.flush(); + this.shapeType = shapeType; + } + }; + ShapeRenderer.prototype.dispose = function () { + this.mesh.dispose(); + }; + return ShapeRenderer; + }()); + webgl.ShapeRenderer = ShapeRenderer; + var ShapeType; + (function (ShapeType) { + ShapeType[ShapeType["Point"] = 0] = "Point"; + ShapeType[ShapeType["Line"] = 1] = "Line"; + ShapeType[ShapeType["Filled"] = 4] = "Filled"; + })(ShapeType = webgl.ShapeType || (webgl.ShapeType = {})); + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var SkeletonDebugRenderer = (function () { + function SkeletonDebugRenderer(context) { + this.boneLineColor = new spine.Color(1, 0, 0, 1); + this.boneOriginColor = new spine.Color(0, 1, 0, 1); + this.attachmentLineColor = new spine.Color(0, 0, 1, 0.5); + this.triangleLineColor = new spine.Color(1, 0.64, 0, 0.5); + this.pathColor = new spine.Color().setFromString("FF7F00"); + this.clipColor = new spine.Color(0.8, 0, 0, 2); + this.aabbColor = new spine.Color(0, 1, 0, 0.5); + this.drawBones = true; + this.drawRegionAttachments = true; + this.drawBoundingBoxes = true; + this.drawMeshHull = true; + this.drawMeshTriangles = true; + this.drawPaths = true; + this.drawSkeletonXY = false; + this.drawClipping = true; + this.premultipliedAlpha = false; + this.scale = 1; + this.boneWidth = 2; + this.bounds = new spine.SkeletonBounds(); + this.temp = new Array(); + this.vertices = spine.Utils.newFloatArray(2 * 1024); + this.context = context instanceof webgl.ManagedWebGLRenderingContext ? context : new webgl.ManagedWebGLRenderingContext(context); + } + SkeletonDebugRenderer.prototype.draw = function (shapes, skeleton, ignoredBones) { + if (ignoredBones === void 0) { ignoredBones = null; } + var skeletonX = skeleton.x; + var skeletonY = skeleton.y; + var gl = this.context.gl; + var srcFunc = this.premultipliedAlpha ? gl.ONE : gl.SRC_ALPHA; + shapes.setBlendMode(srcFunc, gl.ONE_MINUS_SRC_ALPHA); + var bones = skeleton.bones; + if (this.drawBones) { + shapes.setColor(this.boneLineColor); + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) + continue; + if (bone.parent == null) + continue; + var x = skeletonX + bone.data.length * bone.a + bone.worldX; + var y = skeletonY + bone.data.length * bone.c + bone.worldY; + shapes.rectLine(true, skeletonX + bone.worldX, skeletonY + bone.worldY, x, y, this.boneWidth * this.scale); + } + if (this.drawSkeletonXY) + shapes.x(skeletonX, skeletonY, 4 * this.scale); + } + if (this.drawRegionAttachments) { + shapes.setColor(this.attachmentLineColor); + var slots = skeleton.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + var attachment = slot.getAttachment(); + if (attachment instanceof spine.RegionAttachment) { + var regionAttachment = attachment; + var vertices = this.vertices; + regionAttachment.computeWorldVertices(slot.bone, vertices, 0, 2); + shapes.line(vertices[0], vertices[1], vertices[2], vertices[3]); + shapes.line(vertices[2], vertices[3], vertices[4], vertices[5]); + shapes.line(vertices[4], vertices[5], vertices[6], vertices[7]); + shapes.line(vertices[6], vertices[7], vertices[0], vertices[1]); + } + } + } + if (this.drawMeshHull || this.drawMeshTriangles) { + var slots = skeleton.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (!(attachment instanceof spine.MeshAttachment)) + continue; + var mesh = attachment; + var vertices = this.vertices; + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, 2); + var triangles = mesh.triangles; + var hullLength = mesh.hullLength; + if (this.drawMeshTriangles) { + shapes.setColor(this.triangleLineColor); + for (var ii = 0, nn = triangles.length; ii < nn; ii += 3) { + var v1 = triangles[ii] * 2, v2 = triangles[ii + 1] * 2, v3 = triangles[ii + 2] * 2; + shapes.triangle(false, vertices[v1], vertices[v1 + 1], vertices[v2], vertices[v2 + 1], vertices[v3], vertices[v3 + 1]); + } + } + if (this.drawMeshHull && hullLength > 0) { + shapes.setColor(this.attachmentLineColor); + hullLength = (hullLength >> 1) * 2; + var lastX = vertices[hullLength - 2], lastY = vertices[hullLength - 1]; + for (var ii = 0, nn = hullLength; ii < nn; ii += 2) { + var x = vertices[ii], y = vertices[ii + 1]; + shapes.line(x, y, lastX, lastY); + lastX = x; + lastY = y; + } + } + } + } + if (this.drawBoundingBoxes) { + var bounds = this.bounds; + bounds.update(skeleton, true); + shapes.setColor(this.aabbColor); + shapes.rect(false, bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight()); + var polygons = bounds.polygons; + var boxes = bounds.boundingBoxes; + for (var i = 0, n = polygons.length; i < n; i++) { + var polygon = polygons[i]; + shapes.setColor(boxes[i].color); + shapes.polygon(polygon, 0, polygon.length); + } + } + if (this.drawPaths) { + var slots = skeleton.slots; + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (!(attachment instanceof spine.PathAttachment)) + continue; + var path = attachment; + var nn = path.worldVerticesLength; + var world = this.temp = spine.Utils.setArraySize(this.temp, nn, 0); + path.computeWorldVertices(slot, 0, nn, world, 0, 2); + var color = this.pathColor; + var x1 = world[2], y1 = world[3], x2 = 0, y2 = 0; + if (path.closed) { + shapes.setColor(color); + var cx1 = world[0], cy1 = world[1], cx2 = world[nn - 2], cy2 = world[nn - 1]; + x2 = world[nn - 4]; + y2 = world[nn - 3]; + shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32); + shapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY); + shapes.line(x1, y1, cx1, cy1); + shapes.line(x2, y2, cx2, cy2); + } + nn -= 4; + for (var ii = 4; ii < nn; ii += 6) { + var cx1 = world[ii], cy1 = world[ii + 1], cx2 = world[ii + 2], cy2 = world[ii + 3]; + x2 = world[ii + 4]; + y2 = world[ii + 5]; + shapes.setColor(color); + shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32); + shapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY); + shapes.line(x1, y1, cx1, cy1); + shapes.line(x2, y2, cx2, cy2); + x1 = x2; + y1 = y2; + } + } + } + if (this.drawBones) { + shapes.setColor(this.boneOriginColor); + for (var i = 0, n = bones.length; i < n; i++) { + var bone = bones[i]; + if (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) + continue; + shapes.circle(true, skeletonX + bone.worldX, skeletonY + bone.worldY, 3 * this.scale, SkeletonDebugRenderer.GREEN, 8); + } + } + if (this.drawClipping) { + var slots = skeleton.slots; + shapes.setColor(this.clipColor); + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + if (!slot.bone.active) + continue; + var attachment = slot.getAttachment(); + if (!(attachment instanceof spine.ClippingAttachment)) + continue; + var clip = attachment; + var nn = clip.worldVerticesLength; + var world = this.temp = spine.Utils.setArraySize(this.temp, nn, 0); + clip.computeWorldVertices(slot, 0, nn, world, 0, 2); + for (var i_21 = 0, n_3 = world.length; i_21 < n_3; i_21 += 2) { + var x = world[i_21]; + var y = world[i_21 + 1]; + var x2 = world[(i_21 + 2) % world.length]; + var y2 = world[(i_21 + 3) % world.length]; + shapes.line(x, y, x2, y2); + } + } + } + }; + SkeletonDebugRenderer.prototype.dispose = function () { + }; + SkeletonDebugRenderer.LIGHT_GRAY = new spine.Color(192 / 255, 192 / 255, 192 / 255, 1); + SkeletonDebugRenderer.GREEN = new spine.Color(0, 1, 0, 1); + return SkeletonDebugRenderer; + }()); + webgl.SkeletonDebugRenderer = SkeletonDebugRenderer; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Renderable = (function () { + function Renderable(vertices, numVertices, numFloats) { + this.vertices = vertices; + this.numVertices = numVertices; + this.numFloats = numFloats; + } + return Renderable; + }()); + ; + var SkeletonRenderer = (function () { + function SkeletonRenderer(context, twoColorTint) { + if (twoColorTint === void 0) { twoColorTint = true; } + this.premultipliedAlpha = false; + this.vertexEffect = null; + this.tempColor = new spine.Color(); + this.tempColor2 = new spine.Color(); + this.vertexSize = 2 + 2 + 4; + this.twoColorTint = false; + this.renderable = new Renderable(null, 0, 0); + this.clipper = new spine.SkeletonClipping(); + this.temp = new spine.Vector2(); + this.temp2 = new spine.Vector2(); + this.temp3 = new spine.Color(); + this.temp4 = new spine.Color(); + this.twoColorTint = twoColorTint; + if (twoColorTint) + this.vertexSize += 4; + this.vertices = spine.Utils.newFloatArray(this.vertexSize * 1024); + } + SkeletonRenderer.prototype.draw = function (batcher, skeleton, slotRangeStart, slotRangeEnd) { + if (slotRangeStart === void 0) { slotRangeStart = -1; } + if (slotRangeEnd === void 0) { slotRangeEnd = -1; } + var clipper = this.clipper; + var premultipliedAlpha = this.premultipliedAlpha; + var twoColorTint = this.twoColorTint; + var blendMode = null; + var tempPos = this.temp; + var tempUv = this.temp2; + var tempLight = this.temp3; + var tempDark = this.temp4; + var renderable = this.renderable; + var uvs = null; + var triangles = null; + var drawOrder = skeleton.drawOrder; + var attachmentColor = null; + var skeletonColor = skeleton.color; + var vertexSize = twoColorTint ? 12 : 8; + var inRange = false; + if (slotRangeStart == -1) + inRange = true; + for (var i = 0, n = drawOrder.length; i < n; i++) { + var clippedVertexSize = clipper.isClipping() ? 2 : vertexSize; + var slot = drawOrder[i]; + if (!slot.bone.active) { + clipper.clipEndWithSlot(slot); + continue; + } + if (slotRangeStart >= 0 && slotRangeStart == slot.data.index) { + inRange = true; + } + if (!inRange) { + clipper.clipEndWithSlot(slot); + continue; + } + if (slotRangeEnd >= 0 && slotRangeEnd == slot.data.index) { + inRange = false; + } + var attachment = slot.getAttachment(); + var texture = null; + if (attachment instanceof spine.RegionAttachment) { + var region = attachment; + renderable.vertices = this.vertices; + renderable.numVertices = 4; + renderable.numFloats = clippedVertexSize << 2; + region.computeWorldVertices(slot.bone, renderable.vertices, 0, clippedVertexSize); + triangles = SkeletonRenderer.QUAD_TRIANGLES; + uvs = region.uvs; + texture = region.region.renderObject.texture; + attachmentColor = region.color; + } + else if (attachment instanceof spine.MeshAttachment) { + var mesh = attachment; + renderable.vertices = this.vertices; + renderable.numVertices = (mesh.worldVerticesLength >> 1); + renderable.numFloats = renderable.numVertices * clippedVertexSize; + if (renderable.numFloats > renderable.vertices.length) { + renderable.vertices = this.vertices = spine.Utils.newFloatArray(renderable.numFloats); + } + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, renderable.vertices, 0, clippedVertexSize); + triangles = mesh.triangles; + texture = mesh.region.renderObject.texture; + uvs = mesh.uvs; + attachmentColor = mesh.color; + } + else if (attachment instanceof spine.ClippingAttachment) { + var clip = (attachment); + clipper.clipStart(slot, clip); + continue; + } + else { + clipper.clipEndWithSlot(slot); + continue; + } + if (texture != null) { + var slotColor = slot.color; + var finalColor = this.tempColor; + finalColor.r = skeletonColor.r * slotColor.r * attachmentColor.r; + finalColor.g = skeletonColor.g * slotColor.g * attachmentColor.g; + finalColor.b = skeletonColor.b * slotColor.b * attachmentColor.b; + finalColor.a = skeletonColor.a * slotColor.a * attachmentColor.a; + if (premultipliedAlpha) { + finalColor.r *= finalColor.a; + finalColor.g *= finalColor.a; + finalColor.b *= finalColor.a; + } + var darkColor = this.tempColor2; + if (slot.darkColor == null) + darkColor.set(0, 0, 0, 1.0); + else { + if (premultipliedAlpha) { + darkColor.r = slot.darkColor.r * finalColor.a; + darkColor.g = slot.darkColor.g * finalColor.a; + darkColor.b = slot.darkColor.b * finalColor.a; + } + else { + darkColor.setFromColor(slot.darkColor); + } + darkColor.a = premultipliedAlpha ? 1.0 : 0.0; + } + var slotBlendMode = slot.data.blendMode; + if (slotBlendMode != blendMode) { + blendMode = slotBlendMode; + batcher.setBlendMode(webgl.WebGLBlendModeConverter.getSourceGLBlendMode(blendMode, premultipliedAlpha), webgl.WebGLBlendModeConverter.getDestGLBlendMode(blendMode)); + } + if (clipper.isClipping()) { + clipper.clipTriangles(renderable.vertices, renderable.numFloats, triangles, triangles.length, uvs, finalColor, darkColor, twoColorTint); + var clippedVertices = new Float32Array(clipper.clippedVertices); + var clippedTriangles = clipper.clippedTriangles; + if (this.vertexEffect != null) { + var vertexEffect = this.vertexEffect; + var verts = clippedVertices; + if (!twoColorTint) { + for (var v = 0, n_4 = clippedVertices.length; v < n_4; v += vertexSize) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.set(verts[v + 2], verts[v + 3], verts[v + 4], verts[v + 5]); + tempUv.x = verts[v + 6]; + tempUv.y = verts[v + 7]; + tempDark.set(0, 0, 0, 0); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } + else { + for (var v = 0, n_5 = clippedVertices.length; v < n_5; v += vertexSize) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.set(verts[v + 2], verts[v + 3], verts[v + 4], verts[v + 5]); + tempUv.x = verts[v + 6]; + tempUv.y = verts[v + 7]; + tempDark.set(verts[v + 8], verts[v + 9], verts[v + 10], verts[v + 11]); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + verts[v + 8] = tempDark.r; + verts[v + 9] = tempDark.g; + verts[v + 10] = tempDark.b; + verts[v + 11] = tempDark.a; + } + } + } + batcher.draw(texture, clippedVertices, clippedTriangles); + } + else { + var verts = renderable.vertices; + if (this.vertexEffect != null) { + var vertexEffect = this.vertexEffect; + if (!twoColorTint) { + for (var v = 0, u = 0, n_6 = renderable.numFloats; v < n_6; v += vertexSize, u += 2) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempUv.x = uvs[u]; + tempUv.y = uvs[u + 1]; + tempLight.setFromColor(finalColor); + tempDark.set(0, 0, 0, 0); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } + else { + for (var v = 0, u = 0, n_7 = renderable.numFloats; v < n_7; v += vertexSize, u += 2) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempUv.x = uvs[u]; + tempUv.y = uvs[u + 1]; + tempLight.setFromColor(finalColor); + tempDark.setFromColor(darkColor); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + verts[v + 8] = tempDark.r; + verts[v + 9] = tempDark.g; + verts[v + 10] = tempDark.b; + verts[v + 11] = tempDark.a; + } + } + } + else { + if (!twoColorTint) { + for (var v = 2, u = 0, n_8 = renderable.numFloats; v < n_8; v += vertexSize, u += 2) { + verts[v] = finalColor.r; + verts[v + 1] = finalColor.g; + verts[v + 2] = finalColor.b; + verts[v + 3] = finalColor.a; + verts[v + 4] = uvs[u]; + verts[v + 5] = uvs[u + 1]; + } + } + else { + for (var v = 2, u = 0, n_9 = renderable.numFloats; v < n_9; v += vertexSize, u += 2) { + verts[v] = finalColor.r; + verts[v + 1] = finalColor.g; + verts[v + 2] = finalColor.b; + verts[v + 3] = finalColor.a; + verts[v + 4] = uvs[u]; + verts[v + 5] = uvs[u + 1]; + verts[v + 6] = darkColor.r; + verts[v + 7] = darkColor.g; + verts[v + 8] = darkColor.b; + verts[v + 9] = darkColor.a; + } + } + } + var view = renderable.vertices.subarray(0, renderable.numFloats); + batcher.draw(texture, view, triangles); + } + } + clipper.clipEndWithSlot(slot); + } + clipper.clipEnd(); + }; + SkeletonRenderer.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + return SkeletonRenderer; + }()); + webgl.SkeletonRenderer = SkeletonRenderer; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var Vector3 = (function () { + function Vector3(x, y, z) { + if (x === void 0) { x = 0; } + if (y === void 0) { y = 0; } + if (z === void 0) { z = 0; } + this.x = 0; + this.y = 0; + this.z = 0; + this.x = x; + this.y = y; + this.z = z; + } + Vector3.prototype.setFrom = function (v) { + this.x = v.x; + this.y = v.y; + this.z = v.z; + return this; + }; + Vector3.prototype.set = function (x, y, z) { + this.x = x; + this.y = y; + this.z = z; + return this; + }; + Vector3.prototype.add = function (v) { + this.x += v.x; + this.y += v.y; + this.z += v.z; + return this; + }; + Vector3.prototype.sub = function (v) { + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + return this; + }; + Vector3.prototype.scale = function (s) { + this.x *= s; + this.y *= s; + this.z *= s; + return this; + }; + Vector3.prototype.normalize = function () { + var len = this.length(); + if (len == 0) + return this; + len = 1 / len; + this.x *= len; + this.y *= len; + this.z *= len; + return this; + }; + Vector3.prototype.cross = function (v) { + return this.set(this.y * v.z - this.z * v.y, this.z * v.x - this.x * v.z, this.x * v.y - this.y * v.x); + }; + Vector3.prototype.multiply = function (matrix) { + var l_mat = matrix.values; + return this.set(this.x * l_mat[webgl.M00] + this.y * l_mat[webgl.M01] + this.z * l_mat[webgl.M02] + l_mat[webgl.M03], this.x * l_mat[webgl.M10] + this.y * l_mat[webgl.M11] + this.z * l_mat[webgl.M12] + l_mat[webgl.M13], this.x * l_mat[webgl.M20] + this.y * l_mat[webgl.M21] + this.z * l_mat[webgl.M22] + l_mat[webgl.M23]); + }; + Vector3.prototype.project = function (matrix) { + var l_mat = matrix.values; + var l_w = 1 / (this.x * l_mat[webgl.M30] + this.y * l_mat[webgl.M31] + this.z * l_mat[webgl.M32] + l_mat[webgl.M33]); + return this.set((this.x * l_mat[webgl.M00] + this.y * l_mat[webgl.M01] + this.z * l_mat[webgl.M02] + l_mat[webgl.M03]) * l_w, (this.x * l_mat[webgl.M10] + this.y * l_mat[webgl.M11] + this.z * l_mat[webgl.M12] + l_mat[webgl.M13]) * l_w, (this.x * l_mat[webgl.M20] + this.y * l_mat[webgl.M21] + this.z * l_mat[webgl.M22] + l_mat[webgl.M23]) * l_w); + }; + Vector3.prototype.dot = function (v) { + return this.x * v.x + this.y * v.y + this.z * v.z; + }; + Vector3.prototype.length = function () { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + }; + Vector3.prototype.distance = function (v) { + var a = v.x - this.x; + var b = v.y - this.y; + var c = v.z - this.z; + return Math.sqrt(a * a + b * b + c * c); + }; + return Vector3; + }()); + webgl.Vector3 = Vector3; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +var spine; +(function (spine) { + var webgl; + (function (webgl) { + var ManagedWebGLRenderingContext = (function () { + function ManagedWebGLRenderingContext(canvasOrContext, contextConfig) { + if (contextConfig === void 0) { contextConfig = { alpha: "true" }; } + this.restorables = new Array(); + if (!((canvasOrContext instanceof WebGLRenderingContext) || (canvasOrContext instanceof WebGL2RenderingContext))) { + this.setupCanvas(canvasOrContext, contextConfig); + } + else { + this.gl = canvasOrContext; + this.canvas = this.gl.canvas; + } + } + ManagedWebGLRenderingContext.prototype.setupCanvas = function (canvas, contextConfig) { + var _this = this; + this.gl = (canvas.getContext("webgl2", contextConfig) || canvas.getContext("webgl", contextConfig)); + this.canvas = canvas; + canvas.addEventListener("webglcontextlost", function (e) { + var event = e; + if (e) { + e.preventDefault(); + } + }); + canvas.addEventListener("webglcontextrestored", function (e) { + for (var i = 0, n = _this.restorables.length; i < n; i++) { + _this.restorables[i].restore(); + } + }); + }; + ManagedWebGLRenderingContext.prototype.addRestorable = function (restorable) { + this.restorables.push(restorable); + }; + ManagedWebGLRenderingContext.prototype.removeRestorable = function (restorable) { + var index = this.restorables.indexOf(restorable); + if (index > -1) + this.restorables.splice(index, 1); + }; + return ManagedWebGLRenderingContext; + }()); + webgl.ManagedWebGLRenderingContext = ManagedWebGLRenderingContext; + var WebGLBlendModeConverter = (function () { + function WebGLBlendModeConverter() { + } + WebGLBlendModeConverter.getDestGLBlendMode = function (blendMode) { + switch (blendMode) { + case spine.BlendMode.Normal: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + case spine.BlendMode.Additive: return WebGLBlendModeConverter.ONE; + case spine.BlendMode.Multiply: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + case spine.BlendMode.Screen: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + default: throw new Error("Unknown blend mode: " + blendMode); + } + }; + WebGLBlendModeConverter.getSourceGLBlendMode = function (blendMode, premultipliedAlpha) { + if (premultipliedAlpha === void 0) { premultipliedAlpha = false; } + switch (blendMode) { + case spine.BlendMode.Normal: return premultipliedAlpha ? WebGLBlendModeConverter.ONE : WebGLBlendModeConverter.SRC_ALPHA; + case spine.BlendMode.Additive: return premultipliedAlpha ? WebGLBlendModeConverter.ONE : WebGLBlendModeConverter.SRC_ALPHA; + case spine.BlendMode.Multiply: return WebGLBlendModeConverter.DST_COLOR; + case spine.BlendMode.Screen: return WebGLBlendModeConverter.ONE; + default: throw new Error("Unknown blend mode: " + blendMode); + } + }; + WebGLBlendModeConverter.ZERO = 0; + WebGLBlendModeConverter.ONE = 1; + WebGLBlendModeConverter.SRC_COLOR = 0x0300; + WebGLBlendModeConverter.ONE_MINUS_SRC_COLOR = 0x0301; + WebGLBlendModeConverter.SRC_ALPHA = 0x0302; + WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA = 0x0303; + WebGLBlendModeConverter.DST_ALPHA = 0x0304; + WebGLBlendModeConverter.ONE_MINUS_DST_ALPHA = 0x0305; + WebGLBlendModeConverter.DST_COLOR = 0x0306; + return WebGLBlendModeConverter; + }()); + webgl.WebGLBlendModeConverter = WebGLBlendModeConverter; + })(webgl = spine.webgl || (spine.webgl = {})); +})(spine || (spine = {})); +//# sourceMappingURL=spine-webgl.js.map \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/build/spine-webgl.js.map b/apps/module-ts/src/spine-ts/build/spine-webgl.js.map new file mode 100755 index 0000000..45a6b0e --- /dev/null +++ b/apps/module-ts/src/spine-ts/build/spine-webgl.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spine-webgl.js","sourceRoot":"","sources":["../core/src/Animation.ts","../core/src/AnimationState.ts","../core/src/AnimationStateData.ts","../core/src/AssetManager.ts","../core/src/AtlasAttachmentLoader.ts","../core/src/BlendMode.ts","../core/src/Bone.ts","../core/src/BoneData.ts","../core/src/ConstraintData.ts","../core/src/Event.ts","../core/src/EventData.ts","../core/src/IkConstraint.ts","../core/src/IkConstraintData.ts","../core/src/PathConstraint.ts","../core/src/PathConstraintData.ts","../core/src/SharedAssetManager.ts","../core/src/Skeleton.ts","../core/src/SkeletonBinary.ts","../core/src/SkeletonBounds.ts","../core/src/SkeletonClipping.ts","../core/src/SkeletonData.ts","../core/src/SkeletonJson.ts","../core/src/Skin.ts","../core/src/Slot.ts","../core/src/SlotData.ts","../core/src/Texture.ts","../core/src/TextureAtlas.ts","../core/src/TransformConstraint.ts","../core/src/TransformConstraintData.ts","../core/src/Triangulator.ts","../core/src/Updatable.ts","../core/src/Utils.ts","../core/src/VertexEffect.ts","../core/src/polyfills.ts","../core/src/attachments/Attachment.ts","../core/src/attachments/AttachmentLoader.ts","../core/src/attachments/AttachmentType.ts","../core/src/attachments/BoundingBoxAttachment.ts","../core/src/attachments/ClippingAttachment.ts","../core/src/attachments/MeshAttachment.ts","../core/src/attachments/PathAttachment.ts","../core/src/attachments/PointAttachment.ts","../core/src/attachments/RegionAttachment.ts","../core/src/vertexeffects/JitterEffect.ts","../core/src/vertexeffects/SwirlEffect.ts","../webgl/src/AssetManager.ts","../webgl/src/Camera.ts","../webgl/src/GLTexture.ts","../webgl/src/Input.ts","../webgl/src/LoadingScreen.ts","../webgl/src/Matrix4.ts","../webgl/src/Mesh.ts","../webgl/src/PolygonBatcher.ts","../webgl/src/SceneRenderer.ts","../webgl/src/Shader.ts","../webgl/src/ShapeRenderer.ts","../webgl/src/SkeletonDebugRenderer.ts","../webgl/src/SkeletonRenderer.ts","../webgl/src/Vector3.ts","../webgl/src/WebGL.ts"],"names":[],"mappings":"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,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC7G,IAAI,KAAK,IAAI,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACzD,IAAI,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACpF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAClF,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACb,CAAC;YAED,6BAAW,GAAX;gBACC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBACpB,OAAO,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBAC7G,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC;sBACzG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,C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AG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAED,8BAAY,GAAZ,UAAc,MAAe;gBAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;gBAClB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBACpB,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;gBACtB,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,GAAG,CAAC,CAAC,MAAA,GAAG,CAAC,CAAC;gBAC/E,CAAC,CA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"} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/canvas/example/assets/spineboy-ess.json b/apps/module-ts/src/spine-ts/canvas/example/assets/spineboy-ess.json new file mode 100755 index 0000000..b9995d3 --- /dev/null +++ b/apps/module-ts/src/spine-ts/canvas/example/assets/spineboy-ess.json @@ -0,0 +1,1557 @@ +{ +"skeleton": { + "hash": "H25XqgajdGwsTgSp6dMCLw7Nh1Q", + "spine": "3.8.99", + "x": -221.27, + "y": -8.57, + "width": 470.72, + "height": 731.57, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "y": 247.47 }, + { + "name": "torso", + "parent": "hip", + "length": 127.56, + "rotation": 103.82, + "x": -1.62, + "y": 4.9, + "color": "e0da19ff" + }, + { + "name": "front-upper-arm", + "parent": "torso", + "length": 69.45, + "rotation": 168.38, + "x": 103.76, + "y": 19.33, + "color": "00ff04ff" + }, + { + "name": "front-bracer", + "parent": "front-upper-arm", + "length": 40.57, + "rotation": 18.3, + "x": 68.8, + "y": -0.68, + "color": "00ff04ff" + }, + { + "name": "front-fist", + "parent": "front-bracer", + "length": 65.39, + "rotation": 12.43, + "x": 40.57, + "y": 0.2, + "color": "00ff04ff" + }, + { + "name": "front-thigh", + "parent": "hip", + "length": 74.81, + "rotation": -95.51, + "x": -17.46, + "y": -11.64, + "color": "00ff04ff" + }, + { + "name": "front-shin", + "parent": "front-thigh", + "length": 128.77, + "rotation": -2.21, + "x": 78.69, + "y": 1.6, + "color": "00ff04ff" + }, + { + "name": "front-foot", + "parent": "front-shin", + "length": 91.34, + "rotation": 77.91, + "x": 128.76, + "y": -0.34, + "color": "00ff04ff" + }, + { + "name": "rear-upper-arm", + "parent": "torso", + "length": 51.94, + "rotation": -169.56, + "x": 92.36, + "y": -19.22, + "color": "ff000dff" + }, + { "name": "rear-bracer", "parent": "rear-upper-arm", "length": 34.56, "rotation": 23.15, "x": 51.36, "color": "ff000dff" }, + { + "name": "gun", + "parent": "rear-bracer", + "length": 43.11, + "rotation": 5.35, + "x": 34.42, + "y": -0.45, + "color": "ff000dff" + }, + { "name": "gun-tip", "parent": "gun", "rotation": 6.83, "x": 201.05, "y": 52.14, "color": "ff000dff" }, + { + "name": "neck", + "parent": "torso", + "length": 25.45, + "rotation": -31.54, + "x": 127.5, + "y": -0.31, + "color": "e0da19ff" + }, + { + "name": "head", + "parent": "neck", + "length": 263.58, + "rotation": 23.18, + "x": 27.66, + "y": -0.26, + "color": "e0da19ff" + }, + { + "name": "rear-thigh", + "parent": "hip", + "length": 85.72, + "rotation": -72.54, + "x": 8.91, + "y": -5.63, + "color": "ff000dff" + }, + { + "name": "rear-shin", + "parent": "rear-thigh", + "length": 121.88, + "rotation": -19.83, + "x": 86.1, + "y": -1.33, + "color": "ff000dff" + }, + { + "name": "rear-foot", + "parent": "rear-shin", + "length": 82.57, + "rotation": 69.3, + "x": 121.46, + "y": -0.76, + "color": "ff000dff" + } +], +"slots": [ + { "name": "rear-upper-arm", "bone": "rear-upper-arm", "attachment": "rear-upper-arm" }, + { "name": "rear-bracer", "bone": "rear-bracer", "attachment": "rear-bracer" }, + { "name": "gun", "bone": "gun", "attachment": "gun" }, + { "name": "rear-foot", "bone": "rear-foot", "attachment": "rear-foot" }, + { "name": "rear-thigh", "bone": "rear-thigh", "attachment": "rear-thigh" }, + { "name": "rear-shin", "bone": "rear-shin", "attachment": "rear-shin" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "torso", "bone": "torso", "attachment": "torso" }, + { "name": "front-upper-arm", "bone": "front-upper-arm", "attachment": "front-upper-arm" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "eye", "bone": "head", "attachment": "eye-indifferent" }, + { "name": "front-thigh", "bone": "front-thigh", "attachment": "front-thigh" }, + { "name": "front-foot", "bone": "front-foot", "attachment": "front-foot" }, + { "name": "front-shin", "bone": "front-shin", "attachment": "front-shin" }, + { "name": "mouth", "bone": "head", "attachment": "mouth-smile" }, + { "name": "goggles", "bone": "head", "attachment": "goggles" }, + { "name": "front-bracer", "bone": "front-bracer", "attachment": "front-bracer" }, + { "name": "front-fist", "bone": "front-fist", "attachment": "front-fist-closed" }, + { "name": "muzzle", "bone": "gun-tip", "blend": "additive" }, + { "name": "head-bb", "bone": "head" } +], +"skins": [ + { + "name": "default", + "attachments": { + "eye": { + "eye-indifferent": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 }, + "eye-surprised": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 } + }, + "front-bracer": { + "front-bracer": { "x": 12.03, "y": -1.68, "rotation": 79.6, "width": 58, "height": 80 } + }, + "front-fist": { + "front-fist-closed": { "x": 35.5, "y": 6, "rotation": 67.16, "width": 75, "height": 82 }, + "front-fist-open": { "x": 39.57, "y": 7.76, "rotation": 67.16, "width": 86, "height": 87 } + }, + "front-foot": { + "front-foot": { "x": 29.52, "y": 7.84, "rotation": 18.69, "width": 126, "height": 69 } + }, + "front-shin": { + "front-shin": { "x": 55.12, "y": -3.54, "rotation": 96.59, "width": 82, "height": 184 } + }, + "front-thigh": { + "front-thigh": { "x": 42.48, "y": 4.45, "rotation": 84.87, "width": 45, "height": 112 } + }, + "front-upper-arm": { + "front-upper-arm": { "x": 25.2, "y": 1.17, "rotation": 97.9, "width": 46, "height": 97 } + }, + "goggles": { + "goggles": { "x": 97.08, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 } + }, + "gun": { + "gun": { "x": 77.3, "y": 16.4, "rotation": 60.83, "width": 210, "height": 203 } + }, + "head": { + "head": { "x": 128.96, "y": 0.3, "rotation": -70.63, "width": 271, "height": 298 } + }, + "head-bb": { + "head": { + "type": "boundingbox", + "vertexCount": 6, + "vertices": [ -19.14, -70.3, 40.8, -118.07, 257.77, -115.62, 285.16, 57.18, 120.77, 164.95, -5.07, 76.95 ] + } + }, + "mouth": { + "mouth-grind": { "x": 23.69, "y": -32.24, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth-oooo": { "x": 23.69, "y": -32.24, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth-smile": { "x": 23.69, "y": -32.24, "rotation": -70.63, "width": 93, "height": 59 } + }, + "muzzle": { + "muzzle01": { + "x": 159.26, + "y": 5.83, + "scaleX": 4, + "scaleY": 4, + "rotation": 0.15, + "width": 133, + "height": 79 + }, + "muzzle02": { + "x": 191.23, + "y": 5.91, + "scaleX": 4, + "scaleY": 4, + "rotation": 0.15, + "width": 135, + "height": 84 + }, + "muzzle03": { + "x": 230.67, + "y": 6.02, + "scaleX": 4, + "scaleY": 4, + "rotation": 0.15, + "width": 166, + "height": 106 + }, + "muzzle04": { + "x": 218.54, + "y": 5.99, + "scaleX": 4, + "scaleY": 4, + "rotation": 0.15, + "width": 149, + "height": 90 + } + }, + "neck": { + "neck": { "x": 9.77, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 } + }, + "rear-bracer": { + "rear-bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 } + }, + "rear-foot": { + "rear-foot": { "x": 31.51, "y": 3.58, "rotation": 23.07, "width": 113, "height": 60 } + }, + "rear-shin": { + "rear-shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 } + }, + "rear-thigh": { + "rear-thigh": { "x": 33.11, "y": -4.11, "rotation": 72.54, "width": 55, "height": 94 } + }, + "rear-upper-arm": { + "rear-upper-arm": { "x": 21.13, "y": 4.09, "rotation": 89.33, "width": 40, "height": 87 } + }, + "torso": { + "torso": { "x": 63.61, "y": 7.12, "rotation": -94.54, "width": 98, "height": 180 } + } + } + } +], +"events": { + "footstep": {} +}, +"animations": { + "death": { + "slots": { + "eye": { + "attachment": [ + { "name": "eye-surprised" }, + { "time": 0.4667, "name": "eye-indifferent" }, + { "time": 2.2333, "name": "eye-surprised" }, + { "time": 4.5333, "name": "eye-indifferent" } + ] + }, + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + }, + "mouth": { + "attachment": [ + { "name": "mouth-oooo" }, + { "time": 2.2333, "name": "mouth-grind" }, + { "time": 4.5333, "name": "mouth-oooo" } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { "angle": -2.83 }, + { "time": 0.1333, "angle": -28.74 }, + { "time": 0.2333, "angle": 11.43 }, + { "time": 0.3333, "angle": -50.25 }, + { "time": 0.4, "angle": -72.67, "curve": "stepped" }, + { "time": 0.4333, "angle": -72.67 }, + { "time": 0.5, "angle": -20.25 }, + { "time": 0.5667, "angle": -85.29, "curve": "stepped" }, + { "time": 2.2333, "angle": -85.29 }, + { "time": 2.5, "angle": -51.96, "curve": "stepped" }, + { "time": 4.5333, "angle": -51.96 }, + { "time": 4.6667, "angle": -85.29 } + ] + }, + "neck": { + "rotate": [ + { "angle": -2.83 }, + { "time": 0.1333, "angle": 12.35 }, + { "time": 0.2333, "angle": 29.89 }, + { "time": 0.3, "angle": 70.36 }, + { "time": 0.4, "angle": -10.22, "curve": "stepped" }, + { "time": 0.4333, "angle": -10.22 }, + { "time": 0.5, "angle": 2.93 }, + { "time": 0.5667, "angle": 47.95, "curve": "stepped" }, + { "time": 2.2333, "angle": 47.95 }, + { "time": 2.5, "angle": 18.51, "curve": "stepped" }, + { "time": 4.5333, "angle": 18.51 }, + { "time": 4.6667, "angle": 47.95 } + ] + }, + "torso": { + "rotate": [ + { "angle": -8.62 }, + { "time": 0.1333, "angle": 28.2 }, + { "time": 0.2667, "angle": -280.19 }, + { "time": 0.4, "angle": -237.23, "curve": "stepped" }, + { "time": 0.4333, "angle": -237.23 }, + { "time": 0.5, "angle": 76.03 } + ] + }, + "front-upper-arm": { + "rotate": [ + { "angle": -38.86 }, + { "time": 0.1333, "angle": -299.59 }, + { "time": 0.2667, "angle": -244.75 }, + { "time": 0.4, "angle": -292.36 }, + { "time": 0.4333, "angle": -315.85 }, + { "time": 0.5, "angle": -347.94 }, + { "time": 0.7, "angle": -347.33, "curve": "stepped" }, + { "time": 2.2333, "angle": -347.33 }, + { "time": 2.7, "angle": -290.68 }, + { "time": 2.7667, "angle": -285.11 }, + { "time": 4.6667, "angle": -290.68 }, + { "time": 4.8, "angle": 8.61 }, + { "time": 4.8667, "angle": 10.94 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { "angle": -44.7 }, + { "time": 0.1333, "angle": 112.26 }, + { "time": 0.2667, "angle": 129.08 }, + { "time": 0.4, "angle": 134.94, "curve": "stepped" }, + { "time": 0.4333, "angle": 134.94 }, + { "time": 0.5667, "angle": 172.6 } + ] + }, + "front-bracer": { + "rotate": [ + { "angle": 21.88 }, + { "time": 0.1333, "angle": 11.49 }, + { "time": 0.2667, "angle": -18.82 }, + { "time": 0.4, "angle": -18.93 }, + { "time": 0.4333, "angle": -18.28 }, + { "time": 0.5, "angle": 60.62 }, + { "time": 0.7, "angle": -18.88, "curve": "stepped" }, + { "time": 2.2333, "angle": -18.88 }, + { "time": 2.7, "angle": -1.96, "curve": "stepped" }, + { "time": 4.6667, "angle": -1.96 }, + { "time": 4.8, "angle": 34.55 }, + { "time": 4.9333, "angle": -18.75 } + ] + }, + "front-fist": { + "rotate": [ + { "angle": -2.33 }, + { "time": 0.2667, "angle": 26.35 }, + { "time": 0.7, "angle": -6.08, "curve": "stepped" }, + { "time": 2.2333, "angle": -6.08 }, + { "time": 2.7, "angle": 5.73, "curve": "stepped" }, + { "time": 4.6667, "angle": 5.73 }, + { "time": 4.8667, "angle": -6.52 } + ] + }, + "rear-bracer": { + "rotate": [ + { "angle": 10.36 }, + { "time": 0.1333, "angle": -23.12 }, + { "time": 0.2667, "angle": -23.12 }, + { "time": 0.4, "angle": -23.16, "curve": "stepped" }, + { "time": 0.4333, "angle": -23.16 }, + { "time": 0.5667, "angle": -23.2 } + ] + }, + "gun": { + "rotate": [ + { "angle": -2.79 }, + { "time": 0.1333, "angle": -24.58 } + ] + }, + "front-thigh": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 8.47 }, + { "time": 0.2667, "angle": 115.96 }, + { "time": 0.4, "angle": 180.66, "curve": "stepped" }, + { "time": 0.4333, "angle": 180.66 }, + { "time": 0.5, "angle": 155.22 }, + { "time": 0.6, "angle": 97.74 } + ] + }, + "front-shin": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -27.37 }, + { "time": 0.2667, "angle": -35.1 }, + { "time": 0.4, "angle": -37.73, "curve": "stepped" }, + { "time": 0.4333, "angle": -37.73 }, + { "time": 0.5, "angle": -40.07 }, + { "time": 0.6, "angle": 2.76 } + ] + }, + "rear-thigh": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 70.45 }, + { "time": 0.2667, "angle": 155.35 }, + { "time": 0.4, "angle": 214.31, "curve": "stepped" }, + { "time": 0.4333, "angle": 214.31 }, + { "time": 0.5, "angle": 169.67 }, + { "time": 0.8, "angle": 83.27 } + ] + }, + "rear-shin": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 18.94 }, + { "time": 0.2667, "angle": -21.04 }, + { "time": 0.4, "angle": -29.94, "curve": "stepped" }, + { "time": 0.4333, "angle": -29.94 }, + { "time": 0.5, "angle": -16.79 }, + { "time": 0.8, "angle": 7.78 } + ] + }, + "rear-foot": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -11.63 }, + { "time": 0.4, "angle": -45.6 } + ] + }, + "front-foot": { + "rotate": [ + {}, + { "time": 0.4, "angle": -48.75 } + ] + }, + "hip": { + "translate": [ + {}, + { "time": 0.2, "x": 50.35, "y": 151.73 }, + { "time": 0.4, "x": 5.17, "y": -119.65, "curve": "stepped" }, + { "time": 0.4333, "x": 5.17, "y": -119.65 }, + { "time": 0.5, "x": 50.35, "y": -205.19 } + ] + } + } + }, + "hit": { + "slots": { + "front-fist": { + "attachment": [ + { "time": 0.1667, "name": "front-fist-open" } + ] + }, + "mouth": { + "attachment": [ + { "name": "mouth-grind" }, + { "time": 0.3333, "name": "mouth-smile" } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { "angle": 56.42 }, + { "time": 0.3333, "angle": 8.89 } + ] + }, + "neck": { + "rotate": [ + { "angle": 35.39 }, + { "time": 0.2333, "angle": 24.95 } + ] + }, + "head": { + "rotate": [ + { "angle": 10.22 }, + { "time": 0.3333, "angle": -41.3 } + ] + }, + "front-upper-arm": { + "rotate": [ + { "angle": -310.93, "curve": 0.38, "c2": 0.53, "c3": 0.745 }, + { "time": 0.3333, "angle": -112.6 } + ], + "translate": [ + { "x": 7.23, "y": -13.13 } + ] + }, + "front-bracer": { + "rotate": [ + { "angle": 36.99 }, + { "time": 0.3333, "angle": -28.65 } + ] + }, + "front-fist": { + "rotate": [ + { "angle": 13.59 }, + { "time": 0.3333, "angle": 7.56 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { "angle": 271.02, "curve": 0.343, "c2": 0.36, "c3": 0.68, "c4": 0.71 }, + { "time": 0.3333, "angle": -15.84 } + ], + "translate": [ + { "time": 0.3333, "x": -0.1, "y": -0.46 } + ] + }, + "rear-bracer": { + "rotate": [ + {}, + { "time": 0.3333, "angle": 40.03 } + ] + }, + "gun": { + "rotate": [ + { "angle": 14.98 }, + { "time": 0.3333, "angle": 39.76 } + ] + }, + "front-thigh": { + "rotate": [ + { "angle": 90.94, "curve": 0.227, "c2": 0.27, "c3": 0.433 }, + { "time": 0.3333, "angle": 32.03 } + ], + "translate": [ + { "x": 7.21, "y": -4 } + ] + }, + "rear-thigh": { + "rotate": [ + { "angle": 40.52, "curve": 0.296, "c2": 0.3, "c3": 0.59 }, + { "time": 0.3333, "angle": 90.77 } + ], + "translate": [ + { "x": -1.96, "y": -0.32 } + ] + }, + "front-shin": { + "rotate": [ + { "angle": -96.63 }, + { "time": 0.3333, "angle": -15.13 } + ] + }, + "rear-shin": { + "rotate": [ + { "angle": 8 }, + { "time": 0.3333, "angle": -67.54 } + ] + }, + "front-foot": { + "rotate": [ + { "angle": 5.4 }, + { "time": 0.3333, "angle": -16.27 } + ] + }, + "rear-foot": { + "rotate": [ + { "angle": 2.67 }, + { "time": 0.3333, "angle": -10.31 } + ] + }, + "hip": { + "translate": [ + { "x": -75.55, "y": -78.04 }, + { "time": 0.2333, "x": -36.48, "y": 12.42 }, + { "time": 0.3333, "x": -36.48, "y": -3 } + ] + } + } + }, + "idle": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { "angle": -5.62, "curve": 0.25, "c3": 0.75 }, + { "time": 0.8333, "angle": -9.66, "curve": 0.25, "c3": 0.75 }, + { "time": 1.6667, "angle": -5.62 } + ], + "translate": [ + { "x": -6.5 } + ] + }, + "front-upper-arm": { + "rotate": [ + { "angle": -59.85, "curve": 0.493, "c3": 0.75 }, + { "time": 0.6667, "angle": -54.32, "curve": 0.324, "c2": 0.11, "c3": 0.75 }, + { "time": 1.6667, "angle": -59.85 } + ], + "translate": [ + { "x": -7.12, "y": -8.24 }, + { "time": 0.6667, "x": -6.32, "y": -8.31 }, + { "time": 1.6667, "x": -7.12, "y": -8.24 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { "angle": 62.42, "curve": 0.504, "c2": 0.02, "c3": 0.75 }, + { "time": 0.7333, "angle": 43.83, "curve": 0.25, "c3": 0.75 }, + { "time": 1.6667, "angle": 62.42 } + ], + "translate": [ + { "x": -1.83, "y": -16.79 }, + { "time": 0.6667, "x": 0.35, "y": -15.23 }, + { "time": 1.6667, "x": -1.83, "y": -16.79 } + ] + }, + "neck": { + "rotate": [ + {}, + { "time": 0.6667, "angle": 2.39 }, + { "time": 1.6667 } + ], + "translate": [ + { "x": -1.89, "y": -4.76 } + ] + }, + "front-thigh": { + "rotate": [ + { "angle": 0.65, "curve": 0.236, "c2": 0.01, "c3": 0.559, "c4": 0.99 }, + { "time": 0.6667, "angle": -4.34, "curve": 0.595, "c3": 0.653 }, + { "time": 1.6667, "angle": 0.65 } + ], + "translate": [ + { "x": -13.4, "y": 6.7 } + ], + "scale": [ + { "x": 0.945, "curve": 0.236, "c2": 0.01, "c3": 0.559, "c4": 0.99 }, + { "time": 0.6667, "x": 0.917, "curve": 0.595, "c3": 0.653 }, + { "time": 1.6667, "x": 0.945 } + ] + }, + "front-shin": { + "rotate": [ + { "angle": -19.29 } + ], + "scale": [ + { "curve": 0.236, "c2": 0.01, "c3": 0.559, "c4": 0.99 }, + { "time": 0.6667, "x": 0.994, "curve": 0.595, "c3": 0.653 }, + { "time": 1.6667 } + ] + }, + "rear-thigh": { + "rotate": [ + { "angle": 30.51, "curve": 0.236, "c2": 0.01, "c3": 0.559, "c4": 0.99 }, + { "time": 0.6667, "angle": 40.15, "curve": 0.595, "c3": 0.653 }, + { "time": 1.6667, "angle": 30.51 } + ] + }, + "rear-shin": { + "rotate": [ + { "angle": -23.83, "curve": 0.236, "c2": 0.01, "c3": 0.559, "c4": 0.99 }, + { "time": 0.6667, "angle": -43.77, "curve": 0.595, "c3": 0.653 }, + { "time": 1.6667, "angle": -23.83 } + ] + }, + "front-foot": { + "rotate": [ + { "angle": 5.14, "curve": 0.236, "c2": 0.01, "c3": 0.559, "c4": 0.99 }, + { "time": 0.6667, "angle": 10.05, "curve": 0.595, "c3": 0.653 }, + { "time": 1.6667, "angle": 5.14 } + ], + "scale": [ + { "x": 0.755, "y": 1.31 } + ] + }, + "rear-foot": { + "rotate": [ + { "angle": -7.34, "curve": 0.236, "c2": 0.01, "c3": 0.559, "c4": 0.99 }, + { "time": 0.6667, "angle": 3.85, "curve": 0.595, "c3": 0.653 }, + { "time": 1.6667, "angle": -7.34 } + ] + }, + "rear-bracer": { + "rotate": [ + { "angle": -17.16, "curve": 0.25, "c3": 0.75 }, + { "time": 0.6667, "angle": 12.53, "curve": 0.25, "c3": 0.75 }, + { "time": 1.6667, "angle": -17.16 } + ] + }, + "head": { + "rotate": [ + { "angle": -5.51, "curve": 0.25, "c3": 0.75 }, + { "time": 0.6667, "angle": -3.12, "curve": 0.25, "c3": 0.75 }, + { "time": 1.6667, "angle": -5.51 } + ] + }, + "front-bracer": { + "rotate": [ + { "angle": 45.47, "curve": 0.493, "c3": 0.75 }, + { "time": 0.6667, "angle": 41.34, "curve": 0.321, "c2": 0.11, "c3": 0.736, "c4": 0.92 }, + { "time": 1.6667, "angle": 45.47 } + ] + }, + "gun": { + "rotate": [ + { "curve": 0.25, "c3": 0.75 }, + { "time": 0.6667, "angle": -15.59, "curve": 0.733, "c3": 0.77, "c4": 0.99 }, + { "time": 1.6667 } + ] + }, + "front-fist": { + "rotate": [ + { "angle": -6.85, "curve": 0.493, "c3": 0.75 }, + { "time": 0.6667, "angle": -14.63, "curve": 0.324, "c2": 0.11, "c3": 0.75 }, + { "time": 1.6667, "angle": -6.85 } + ], + "scale": [ + { "curve": 0.25, "c3": 0.75 }, + { "time": 0.6667, "x": 0.689, "y": 1.101, "curve": 0.25, "c3": 0.75 }, + { "time": 1.6667 } + ] + }, + "hip": { + "translate": [ + { "x": -6.64, "y": -23.02, "curve": 0.236, "c2": 0.01, "c3": 0.559, "c4": 0.99 }, + { "time": 0.6667, "x": 6.28, "y": -35.01, "curve": 0.595, "c3": 0.653 }, + { "time": 1.6667, "x": -6.64, "y": -23.02 } + ] + } + } + }, + "jump": { + "slots": { + "front-fist": { + "attachment": [ + { "name": "front-fist-open" }, + { "time": 0.2, "name": "front-fist-closed" }, + { "time": 0.6667, "name": "front-fist-open" } + ] + }, + "mouth": { + "attachment": [ + { "name": "mouth-grind" } + ] + } + }, + "bones": { + "front-thigh": { + "rotate": [ + { "angle": 91.53, "curve": 0.278, "c2": 0.46, "c3": 0.764 }, + { "time": 0.2, "angle": -35.84, "curve": 0.761, "c3": 0.75 }, + { "time": 0.4333, "angle": 127.74 }, + { "time": 0.7333, "angle": 48.18, "curve": 0.227, "c2": 0.27, "c3": 0.433 }, + { "time": 0.8333, "angle": 25.35 }, + { "time": 0.9333, "angle": 45.38 }, + { "time": 1.0333, "angle": 38.12 }, + { "time": 1.1333, "angle": 25.35 }, + { "time": 1.3333, "angle": 91.53 } + ], + "translate": [ + { "x": -2.57, "y": 5.78 }, + { "time": 0.4333, "x": 8.3, "y": 7.99 }, + { "time": 0.7333, "x": 7.21, "y": -4 }, + { "time": 1.3333, "x": -2.57, "y": 5.78 } + ] + }, + "torso": { + "rotate": [ + { "angle": -42.64 }, + { "time": 0.2, "angle": -5.74 }, + { "time": 0.4333, "angle": -50.76 }, + { "time": 0.7333, "angle": 1.9 }, + { "time": 0.8333, "angle": 11.59 }, + { "time": 0.9667, "angle": -1.9 }, + { "time": 1.1333, "angle": 11.59 }, + { "time": 1.3333, "angle": -42.64 } + ] + }, + "rear-thigh": { + "rotate": [ + { "angle": -26.32 }, + { "time": 0.2, "angle": 121.44 }, + { "time": 0.4333, "angle": 70.55 }, + { "time": 0.7333, "angle": 79.9, "curve": 0.296, "c2": 0.3, "c3": 0.59 }, + { "time": 0.8333, "angle": 99.12 }, + { "time": 0.9333, "angle": 74.06 }, + { "time": 1.0333, "angle": 98.05 }, + { "time": 1.1333, "angle": 99.12 }, + { "time": 1.3333, "angle": -26.32 } + ], + "translate": [ + { "x": -0.56, "y": -0.32 }, + { "time": 0.4333, "x": -8.5, "y": 10.58 }, + { "time": 0.7333, "x": -1.96, "y": -0.32 }, + { "time": 1.3333, "x": -0.56, "y": -0.32 } + ] + }, + "rear-shin": { + "rotate": [ + { "angle": -78.69 }, + { "time": 0.4333, "angle": -55.56 }, + { "time": 0.7333, "angle": -62.84 }, + { "time": 0.8333, "angle": -80.75 }, + { "time": 0.9333, "angle": -41.13 }, + { "time": 1.0333, "angle": -77.4 }, + { "time": 1.1333, "angle": -80.75 }, + { "time": 1.3333, "angle": -78.69 } + ] + }, + "front-upper-arm": { + "rotate": [ + { "angle": -22.62 }, + { "time": 0.2, "angle": -246.69 }, + { "time": 0.6, "angle": 11.28, "curve": 0.246, "c3": 0.633, "c4": 0.54 }, + { "time": 0.7333, "angle": -57.46, "curve": 0.38, "c2": 0.53, "c3": 0.745 }, + { "time": 0.8667, "angle": -112.6 }, + { "time": 0.9333, "angle": -102.17 }, + { "time": 1.0333, "angle": -108.61 }, + { "time": 1.1333, "angle": -112.6 }, + { "time": 1.3333, "angle": -22.62 } + ], + "translate": [ + { "x": 6.08, "y": 7.15 }, + { "time": 0.2, "x": 7.23, "y": -13.13, "curve": "stepped" }, + { "time": 0.7333, "x": 7.23, "y": -13.13 }, + { "time": 1.3333, "x": 6.08, "y": 7.15 } + ] + }, + "front-bracer": { + "rotate": [ + { "angle": 66.47 }, + { "time": 0.2, "angle": 42.4 }, + { "time": 0.4333, "angle": 26.06 }, + { "time": 0.7333, "angle": 13.28 }, + { "time": 0.8667, "angle": -28.65 }, + { "time": 0.9333, "angle": -22.31 }, + { "time": 1.0333, "angle": -35.39 }, + { "time": 1.1333, "angle": -28.65 }, + { "time": 1.3333, "angle": 66.47 } + ] + }, + "front-fist": { + "rotate": [ + { "angle": -28.43 }, + { "time": 0.4333, "angle": -45.61 }, + { "time": 0.7333, "angle": -53.66 }, + { "time": 0.8667, "angle": 7.56 }, + { "time": 0.9333, "angle": 31.16 }, + { "time": 1.0333, "angle": -32.59 }, + { "time": 1.1333, "angle": 7.56 }, + { "time": 1.3333, "angle": -28.43 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { "angle": 39.69 }, + { "time": 0.2, "angle": 276.58 }, + { "time": 0.3, "angle": 17.74 }, + { "time": 0.4333, "angle": 83.38 }, + { "time": 0.6, "angle": -4.72, "curve": 0.246, "c3": 0.633, "c4": 0.54 }, + { "time": 0.7333, "angle": -69.63, "curve": 0.343, "c2": 0.36, "c3": 0.68, "c4": 0.71 }, + { "time": 0.7667, "angle": 321.47, "curve": 0.334, "c2": 0.33, "c3": 0.667, "c4": 0.67 }, + { "time": 0.8, "angle": 33.71, "curve": 0.359, "c2": 0.64, "c3": 0.694 }, + { "time": 0.8667, "angle": 34.56 }, + { "time": 1.0333, "angle": 71.97 }, + { "time": 1.1333, "angle": 34.56 }, + { "time": 1.3333, "angle": 39.69 } + ], + "translate": [ + { "x": -3.1, "y": -4.87 }, + { "time": 0.2, "x": 23.33, "y": 49.07 }, + { "time": 0.4333, "x": 20.78, "y": 40.21 }, + { "time": 1.3333, "x": -3.1, "y": -4.87 } + ] + }, + "rear-bracer": { + "rotate": [ + { "angle": 29.67 }, + { "time": 0.2, "angle": 45.07 }, + { "time": 0.4333, "angle": -4.35 }, + { "time": 0.7667, "angle": 61.69 }, + { "time": 0.8, "angle": 82.6 }, + { "time": 0.8667, "angle": 80.06 }, + { "time": 1.0333, "angle": 57.56 }, + { "time": 1.1333, "angle": 80.06 }, + { "time": 1.3333, "angle": 29.67 } + ] + }, + "neck": { + "rotate": [ + { "angle": 24.91 }, + { "time": 0.2, "angle": 16.32 }, + { "time": 0.4333, "angle": 7.45 }, + { "time": 0.7333, "angle": -20.35 }, + { "time": 0.8333, "angle": -0.69, "curve": "stepped" }, + { "time": 1.1333, "angle": -0.69 }, + { "time": 1.3333, "angle": 24.91 } + ] + }, + "head": { + "rotate": [ + { "angle": 24.92 }, + { "time": 0.2, "angle": 10.36 }, + { "time": 0.4333, "angle": 28.65 }, + { "time": 0.7333, "angle": -2.66 }, + { "time": 0.8333, "angle": -28.94, "curve": "stepped" }, + { "time": 1.1333, "angle": -28.94 }, + { "time": 1.3333, "angle": 24.92 } + ] + }, + "front-shin": { + "rotate": [ + { "angle": -90.63, "curve": 0.416, "c2": 0.55, "c3": 0.743 }, + { "time": 0.2, "angle": -10.52, "curve": 0.644, "c2": 0.01, "c3": 0.75 }, + { "time": 0.4333, "angle": -127.72 }, + { "time": 0.7333, "angle": -19.92 }, + { "time": 0.8333, "angle": -5.17 }, + { "time": 0.9333, "angle": -35.06 }, + { "time": 1.0333, "angle": -43.97 }, + { "time": 1.1333, "angle": -5.17 }, + { "time": 1.3333, "angle": -90.63 } + ] + }, + "front-foot": { + "rotate": [ + { "angle": -0.8 }, + { "time": 0.0333, "angle": 16.28 }, + { "time": 0.0667, "angle": 23.52 }, + { "time": 0.1, "angle": 21.02 }, + { "time": 0.1333, "angle": 10.93 }, + { "time": 0.2, "angle": -38.46 }, + { "time": 0.4333, "angle": 6.62 }, + { "time": 0.7333, "angle": -11.52 }, + { "time": 1.0333, "angle": -22.92 }, + { "time": 1.3333, "angle": -0.8 } + ] + }, + "rear-foot": { + "rotate": [ + { "angle": -12.78 }, + { "time": 0.2, "angle": 17.06 }, + { "time": 0.4333, "angle": 19.45 }, + { "time": 0.7333, "angle": 2.67 }, + { "time": 1.0333, "angle": -28.5 }, + { "time": 1.3333, "angle": -12.78 } + ] + }, + "gun": { + "rotate": [ + { "angle": 6.18 }, + { "time": 0.2, "angle": 30.81 }, + { "time": 0.4333, "angle": 13.26 }, + { "time": 0.7333, "angle": 14.98 }, + { "time": 0.7667, "angle": 25.65 }, + { "time": 0.8, "angle": 20.62 }, + { "time": 0.8667, "angle": 64.53 }, + { "time": 1.0333, "angle": 8.6 }, + { "time": 1.1333, "angle": 64.53 }, + { "time": 1.3333, "angle": 6.18 } + ] + }, + "hip": { + "translate": [ + { "x": -34.52, "y": -78.63, "curve": 0.233, "c2": 1.01, "c3": 0.75 }, + { + "time": 0.2, + "x": -34.52, + "y": 182.51, + "curve": 0.232, + "c2": 0.48, + "c3": 0.599, + "c4": 0.79 + }, + { + "time": 0.7667, + "x": -34.52, + "y": 596.22, + "curve": 0.33, + "c2": 0.17, + "c3": 0.661, + "c4": 0.22 + }, + { "time": 1.1333, "x": -34.52, "y": 2.5 }, + { "time": 1.3333, "x": -34.52, "y": -78.63 } + ] + } + } + }, + "run": { + "slots": { + "mouth": { + "attachment": [ + { "name": "mouth-grind" } + ] + } + }, + "bones": { + "front-thigh": { + "rotate": [ + { "angle": 42.05, "curve": 0.196, "c2": 0.86, "c3": 0.75 }, + { "time": 0.0667, "angle": 46.08 }, + { "time": 0.1333, "angle": -20.29 }, + { "time": 0.2, "angle": -27.24 }, + { "time": 0.2667, "angle": -47.17 }, + { "time": 0.3333, "angle": -39.79 }, + { "time": 0.4, "angle": -25.86 }, + { "time": 0.4667, "angle": 14.35 }, + { "time": 0.5333, "angle": 55.63 }, + { "time": 0.6, "angle": 69.65 }, + { "time": 0.6667, "angle": 86.41 }, + { "time": 0.7333, "angle": 65.88 }, + { "time": 0.8, "angle": 42.05 } + ], + "translate": [ + {}, + { "time": 0.0333, "x": -5.8, "y": 11.16 }, + { "time": 0.0667, "x": -5.13, "y": 11.55 }, + { "time": 0.1333, "x": -7.7, "y": 8.99 }, + { "time": 0.5333, "x": -1.26, "y": 3.83 }, + { "time": 0.8 } + ] + }, + "torso": { + "rotate": [ + { "angle": -39.71 }, + { "time": 0.2, "angle": -57.29 }, + { "time": 0.4, "angle": -39.71 }, + { "time": 0.6, "angle": -57.29 }, + { "time": 0.8, "angle": -39.71 } + ] + }, + "rear-thigh": { + "rotate": [ + { "angle": -56.59 }, + { "time": 0.0667, "angle": -21.57 }, + { "time": 0.1333, "angle": 27.95 }, + { "time": 0.2, "angle": 42.43 }, + { "time": 0.2667, "angle": 62.37 }, + { "time": 0.3333, "angle": 45.43 }, + { "time": 0.4, "angle": 15.67 }, + { "time": 0.4667, "angle": 28.22 }, + { "time": 0.5333, "angle": -38.62 }, + { "time": 0.6, "angle": -53.27 }, + { "time": 0.6667, "angle": -79.31 }, + { "time": 0.7333, "angle": -86.47 }, + { "time": 0.8, "angle": -56.59 } + ], + "translate": [ + {}, + { "time": 0.4, "x": -6.76, "y": -3.86 }, + { "time": 0.4333, "x": -15.85, "y": 7.28 }, + { "time": 0.4667, "x": -13.05, "y": 4.05 }, + { "time": 0.5, "x": -10.25, "y": 7.11 }, + { "time": 0.5333, "x": -9.02, "y": -5.15 }, + { "time": 0.6667, "x": -23.18, "y": -2.58 }, + { "time": 0.8 } + ] + }, + "rear-shin": { + "rotate": [ + { "angle": -74 }, + { "time": 0.0667, "angle": -83.38 }, + { "time": 0.1333, "angle": -106.7 }, + { "time": 0.2, "angle": -66.01 }, + { "time": 0.2667, "angle": -55.22 }, + { "time": 0.3333, "angle": -24.8 }, + { "time": 0.4, "angle": 18.44, "curve": 0.25, "c3": 0.75 }, + { "time": 0.4667, "angle": -56.65 }, + { "time": 0.5333, "angle": -11.95, "curve": 0.25, "c3": 0.75 }, + { "time": 0.6667, "angle": -41.27 }, + { "time": 0.7333, "angle": -43.61 }, + { "time": 0.8, "angle": -74 } + ] + }, + "front-upper-arm": { + "rotate": [ + { "angle": -89.37 }, + { "time": 0.0667, "angle": -95.67 }, + { "time": 0.1333, "angle": -22.01 }, + { "time": 0.2, "angle": -316.04 }, + { "time": 0.2667, "angle": -274.94 }, + { "time": 0.3333, "angle": -273.74 }, + { "time": 0.4, "angle": -272.09 }, + { "time": 0.4667, "angle": -264.9 }, + { "time": 0.5333, "angle": -320.1 }, + { "time": 0.6, "angle": -50.84 }, + { "time": 0.6667, "angle": -81.73 }, + { "time": 0.7333, "angle": -83.92 }, + { "time": 0.8, "angle": -89.37 } + ], + "translate": [ + { "x": 6.25, "y": 10.05 }, + { "time": 0.2667, "x": 4.96, "y": -13.13 }, + { "time": 0.6, "x": -2.43, "y": 1.95 }, + { "time": 0.8, "x": 6.25, "y": 10.05 } + ] + }, + "front-bracer": { + "rotate": [ + { "angle": 33.44 }, + { "time": 0.0667, "angle": 20.54 }, + { "time": 0.1333, "angle": 15.26 }, + { "time": 0.2, "angle": 19.29 }, + { "time": 0.2667, "angle": 22.62 }, + { "time": 0.3333, "angle": 37.29 }, + { "time": 0.4, "angle": 41.53 }, + { "time": 0.4667, "angle": 31.74 }, + { "time": 0.5333, "angle": 67.45 }, + { "time": 0.6667, "angle": 39.77 }, + { "time": 0.7333, "angle": 30.95 }, + { "time": 0.8, "angle": 33.44 } + ] + }, + "front-fist": { + "rotate": [ + { "angle": -19.76 }, + { "time": 0.0667, "angle": -37.11 }, + { "time": 0.1333, "angle": -50.8 }, + { "time": 0.2667, "angle": -12.69 }, + { "time": 0.3333, "angle": 3.01 }, + { "time": 0.4333, "angle": 12.06 }, + { "time": 0.5333, "angle": 13.26 }, + { "time": 0.8, "angle": -19.76 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { "angle": 68.68 }, + { "time": 0.0667, "angle": 73.89 }, + { "time": 0.1333, "angle": -9.64 }, + { "time": 0.2, "angle": 284.28 }, + { "time": 0.2667, "angle": 283.29 }, + { "time": 0.3333, "angle": 278.29 }, + { "time": 0.4, "angle": 271.03 }, + { "time": 0.4667, "angle": 263.2 }, + { "time": 0.5333, "angle": 314.26 }, + { "time": 0.6, "angle": 16.83 }, + { "time": 0.6667, "angle": 70.35 }, + { "time": 0.7333, "angle": 73.54 }, + { "time": 0.8, "angle": 68.68 } + ], + "translate": [ + { "x": -2.57, "y": -8.89 }, + { "time": 0.1333, "x": -4.68, "y": 7.21 }, + { "time": 0.2, "x": 21.73, "y": 51.18 }, + { "time": 0.6, "x": 4.33, "y": 2.06 }, + { "time": 0.8, "x": -2.57, "y": -8.89 } + ] + }, + "rear-bracer": { + "rotate": [ + { "angle": 31.05 }, + { "time": 0.0667, "angle": 28.28 }, + { "time": 0.1333, "angle": 49.36 }, + { "time": 0.2, "angle": 59.37 }, + { "time": 0.2667, "angle": 8.56 }, + { "time": 0.3333, "angle": 9.39 }, + { "time": 0.4, "angle": 11.51 }, + { "time": 0.4667, "angle": 7.22 }, + { "time": 0.5333, "angle": -18.44 }, + { "time": 0.6, "angle": 11.45 }, + { "time": 0.6667, "angle": 9.99 }, + { "time": 0.7333, "angle": 8.29 }, + { "time": 0.8, "angle": 31.05 } + ] + }, + "neck": { + "rotate": [ + { "angle": 11.03 }, + { "time": 0.2, "angle": 13.59 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.6, "angle": 13.59 }, + { "time": 0.8, "angle": 11.03 } + ] + }, + "head": { + "rotate": [ + { "angle": 11.03 }, + { "time": 0.1, "angle": 12.35 }, + { "time": 0.2, "angle": 25.55 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.5, "angle": 12.35 }, + { "time": 0.6, "angle": 25.55 }, + { "time": 0.8, "angle": 11.03 } + ] + }, + "front-shin": { + "rotate": [ + { "curve": 0.481, "c2": 0.01, "c3": 0.75 }, + { "time": 0.0667, "angle": -64.42 }, + { "time": 0.1333, "angle": -20.6, "curve": 0.25, "c3": 0.75 }, + { "time": 0.2667, "angle": -62.52 }, + { "time": 0.3333, "angle": -79.75 }, + { "time": 0.4, "angle": -78.28 }, + { "time": 0.4667, "angle": -118.96, "curve": 0.93, "c2": 0.01, "c3": 0.953, "c4": 0.95 }, + { "time": 0.6, "angle": -88.96 }, + { "time": 0.6667, "angle": -79.1 }, + { "time": 0.7333, "angle": -47.78 }, + { "time": 0.8 } + ] + }, + "front-foot": { + "rotate": [ + {}, + { "time": 0.0333, "angle": -21.13, "curve": 0.121, "c2": 0.24, "c3": 0.75 }, + { "time": 0.0667, "angle": 17.64 }, + { "time": 0.1, "angle": 29.93 }, + { "time": 0.1333, "angle": 16.45 }, + { "time": 0.2, "angle": -29.23 }, + { "time": 0.2667, "angle": -1.62 }, + { "time": 0.3333, "angle": -10.23 }, + { "time": 0.4667, "angle": -15.99 }, + { "time": 0.6, "angle": 9.03 }, + { "time": 0.7333, "angle": 17.33 }, + { "time": 0.8 } + ] + }, + "rear-foot": { + "rotate": [ + {}, + { "time": 0.0667, "angle": -12.04 }, + { "time": 0.1333, "angle": -0.87 }, + { "time": 0.2, "angle": 25.81 }, + { "time": 0.2667, "angle": 4.71 }, + { "time": 0.4, "angle": 18.09, "curve": 0.281, "c2": 0.74, "c3": 0.75 }, + { "time": 0.4333, "angle": -1.71 }, + { "time": 0.4667, "angle": 27.13 }, + { "time": 0.5, "angle": 38.84 }, + { "time": 0.5333, "angle": 30.77 }, + { "time": 0.5667, "angle": -20.49 }, + { "time": 0.6, "angle": -30.81 }, + { "time": 0.6667, "angle": -1.32 }, + { "time": 0.8 } + ] + }, + "gun": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 24.73 }, + { "time": 0.5, "angle": -11.88 }, + { "time": 0.8 } + ] + }, + "hip": { + "translate": [ + { "x": -62.48, "y": -23.11 }, + { "time": 0.0667, "x": -62.48, "y": -38.51, "curve": 0.244, "c2": 0.04, "c3": 0.75 }, + { "time": 0.2667, "x": -62.48, "y": 22.29, "curve": 0.17, "c2": 0.53, "c3": 0.75 }, + { "time": 0.4, "x": -62.48, "y": -23.11 }, + { "time": 0.4333, "x": -62.48, "y": -24.59 }, + { "time": 0.4667, "x": -62.48, "y": -43.29, "curve": 0.25, "c3": 0.75 }, + { "time": 0.6667, "x": -62.48, "y": 22.29 }, + { "time": 0.8, "x": -62.48, "y": -23.11 } + ] + } + }, + "events": [ + { "name": "footstep" }, + { "time": 0.4333, "name": "footstep", "int": 1 } + ] + }, + "shoot": { + "slots": { + "muzzle": { + "color": [ + { "time": 0.3667, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0.1333, "name": "muzzle01" }, + { "time": 0.2, "name": "muzzle02" }, + { "time": 0.2667, "name": "muzzle03" }, + { "time": 0.3333, "name": "muzzle04" }, + { "time": 0.3667, "name": null } + ] + } + }, + "bones": { + "gun-tip": { + "translate": [ + { "time": 0.1333 }, + { "time": 0.2333, "x": 32.31, "y": 2.94 } + ] + }, + "gun": { + "rotate": [ + { "angle": 1.91 } + ], + "translate": [ + { "x": 7.95, "y": 5.85, "curve": 0, "c2": 0.3, "c3": 0.679 }, + { "time": 0.3, "x": -9.3, "y": -1.41 }, + { "time": 0.4 } + ] + }, + "rear-bracer": { + "rotate": [ + { "angle": -30.47 } + ], + "translate": [ + { "curve": 0, "c2": 0.3, "c3": 0.679 }, + { "time": 0.3, "x": -6, "y": -3.72 }, + { "time": 0.4 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { "angle": 62.31 } + ], + "translate": [ + { "curve": 0, "c2": 0.3, "c3": 0.679 }, + { "time": 0.3, "x": 2.81, "y": 11.42 }, + { "time": 0.4 } + ] + } + } + }, + "walk": { + "bones": { + "front-thigh": { + "rotate": [ + { "angle": 15.79 }, + { "time": 0.1, "angle": 27.4 }, + { "time": 0.2, "angle": -7.95 }, + { "time": 0.3, "angle": -16.95 }, + { "time": 0.4, "angle": -28.62 }, + { "time": 0.5, "angle": -19.31 }, + { "time": 0.6, "angle": -3.09 }, + { "time": 0.7, "angle": 29.52 }, + { "time": 0.8, "angle": 15.79 } + ], + "translate": [ + {}, + { "time": 0.4, "x": -1.19, "y": 0.55 }, + { "time": 0.5, "x": 0.12, "y": 0.41 }, + { "time": 0.6, "x": 9.49, "y": 0.27 }, + { "time": 0.8 } + ] + }, + "front-shin": { + "rotate": [ + { "angle": 5.13 }, + { "time": 0.1, "angle": -20.88 }, + { "time": 0.2, "angle": 13.37 }, + { "time": 0.3, "angle": 15.99 }, + { "time": 0.4, "angle": 5.95 }, + { "time": 0.5, "angle": -26.77 }, + { "time": 0.7, "angle": -55.44 }, + { "time": 0.8, "angle": 5.13 } + ] + }, + "rear-thigh": { + "rotate": [ + { "angle": -34.38 }, + { "time": 0.1, "angle": -30.33 }, + { "time": 0.2, "angle": -37.22 }, + { "time": 0.3, "angle": 20.73 }, + { "time": 0.4, "angle": 8.69 }, + { "time": 0.5, "angle": 12.16 }, + { "time": 0.6, "angle": -24.62 }, + { "time": 0.7, "angle": -27.27 }, + { "time": 0.8, "angle": -34.38 } + ], + "translate": [ + {}, + { "time": 0.4, "x": 4.09, "y": -9.53 }, + { "time": 0.5 }, + { "time": 0.7, "x": -21.14, "y": -9.61 }, + { "time": 0.8 } + ] + }, + "rear-shin": { + "rotate": [ + { "angle": 14.26 }, + { "time": 0.1, "angle": -17.3 }, + { "time": 0.2, "angle": -12.68 }, + { "time": 0.3, "angle": -58.9 }, + { "time": 0.4, "angle": 15.95 }, + { "time": 0.5, "angle": -9.01 }, + { "time": 0.6, "angle": 26.07 }, + { "time": 0.7, "angle": 21.86 }, + { "time": 0.8, "angle": 14.26 } + ], + "scale": [ + {}, + { "time": 0.1, "x": 0.952 }, + { "time": 0.5, "x": 0.976 }, + { "time": 0.8 } + ] + }, + "rear-foot": { + "rotate": [ + { "angle": 10.13 }, + { "time": 0.1, "angle": 12.28 }, + { "time": 0.2, "angle": -2.95 }, + { "time": 0.3, "angle": 6.29 }, + { "time": 0.4, "angle": 13.46 }, + { "time": 0.5, "angle": -3.57 }, + { "time": 0.6, "angle": -0.97 }, + { "time": 0.7, "angle": 2.98 }, + { "time": 0.8, "angle": 10.13 } + ] + }, + "front-upper-arm": { + "rotate": [ + { "angle": -23.74 }, + { "time": 0.4, "angle": -320.57 }, + { "time": 0.8, "angle": -23.74 } + ] + }, + "rear-upper-arm": { + "rotate": [ + { "angle": 11.63 }, + { "time": 0.1, "angle": 19.37 }, + { "time": 0.4, "angle": 345.27 }, + { "time": 0.5, "angle": 343.44 }, + { "time": 0.8, "angle": 11.63 } + ] + }, + "torso": { + "rotate": [ + { "angle": -12.11 }, + { "time": 0.1667, "angle": -17.16 }, + { "time": 0.4, "angle": -12.11 }, + { "time": 0.5667, "angle": -15.81 }, + { "time": 0.8, "angle": -12.11 } + ] + }, + "neck": { + "rotate": [ + { "angle": 1.41 }, + { "time": 0.2333, "angle": -3.04 }, + { "time": 0.4, "angle": 1.41 }, + { "time": 0.6333, "angle": -3.04 }, + { "time": 0.8, "angle": 1.41 } + ] + }, + "head": { + "rotate": [ + { "angle": 6.98 }, + { "time": 0.1667, "angle": 8.02 }, + { "time": 0.2667, "angle": 12.65 }, + { "time": 0.4, "angle": 6.98 }, + { "time": 0.5667, "angle": 8.02 }, + { "time": 0.6667, "angle": 12.65 }, + { "time": 0.8, "angle": 6.98 } + ] + }, + "front-bracer": { + "rotate": [ + {}, + { "time": 0.4, "angle": 20.6 }, + { "time": 0.8 } + ] + }, + "front-foot": { + "rotate": [ + { "angle": 12.49 }, + { "time": 0.1, "angle": -6.36 }, + { "time": 0.2, "angle": -6.18 }, + { "time": 0.3, "angle": -0.76 }, + { "time": 0.3333, "angle": 3.89 }, + { "time": 0.4, "angle": 10.22 }, + { "time": 0.5, "angle": 11.44 }, + { "time": 0.6, "angle": -0.34 }, + { "time": 0.7, "angle": 0.15 }, + { "time": 0.8, "angle": 12.49 } + ] + }, + "rear-bracer": { + "rotate": [ + { "angle": 3.59 }, + { "time": 0.1, "angle": 5.51 }, + { "time": 0.4, "angle": -22.78 }, + { "time": 0.5, "angle": -9.65 }, + { "time": 0.8, "angle": 3.59 } + ] + }, + "front-fist": { + "rotate": [ + { "angle": -15.22 }, + { "time": 0.1, "angle": -51.4 }, + { "time": 0.4, "angle": -39.4 }, + { "time": 0.5, "angle": 19.26 }, + { "time": 0.8, "angle": -15.22 } + ] + }, + "gun": { + "rotate": [ + { "angle": -24.07, "curve": 0.25, "c3": 0.75 }, + { "time": 0.1, "angle": -10.95, "curve": 0.381, "c2": 0.55, "c3": 0.742 }, + { "time": 0.4, "angle": 25.34, "curve": 0.25, "c3": 0.75 }, + { "time": 0.6667, "angle": -27.48, "curve": 0.25, "c3": 0.75 }, + { "time": 0.8, "angle": -24.07 } + ] + }, + "hip": { + "translate": [ + { "x": -23.93, "y": 3.22, "curve": 0.519, "c2": 0.04, "c3": 0.807, "c4": 0.61 }, + { "time": 0.1, "x": -23.93, "y": -3.36 }, + { "time": 0.1333, "x": -23.93, "y": 1.44 }, + { "time": 0.1667, "x": -23.93, "y": 2.88 }, + { "time": 0.2, "x": -23.93, "y": 0.99 }, + { "time": 0.3, "x": -23.93, "y": -3.5, "curve": 0.25, "c3": 0.75 }, + { "time": 0.4, "x": -23.93, "y": -2.5, "curve": 0.693, "c2": 0.02, "c3": 0.75 }, + { "time": 0.5, "x": -23.93, "y": -10.32, "curve": 0.236, "c2": 0.78, "c3": 0.75 }, + { + "time": 0.6, + "x": -23.93, + "y": 4.36, + "curve": 0.287, + "c2": 0.38, + "c3": 0.719, + "c4": 0.77 + }, + { "time": 0.7, "x": -23.93, "y": 10.35, "curve": 0.616, "c3": 0.75 }, + { "time": 0.8, "x": -23.93, "y": 3.22 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/canvas/example/assets/spineboy.atlas b/apps/module-ts/src/spine-ts/canvas/example/assets/spineboy.atlas new file mode 100755 index 0000000..169e870 --- /dev/null +++ b/apps/module-ts/src/spine-ts/canvas/example/assets/spineboy.atlas @@ -0,0 +1,286 @@ + +spineboy.png +size: 1024,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +crosshair + rotate: false + xy: 813, 160 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +eye-indifferent + rotate: false + xy: 569, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +eye-surprised + rotate: true + xy: 643, 7 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +front-bracer + rotate: false + xy: 811, 51 + size: 29, 40 + orig: 29, 40 + offset: 0, 0 + index: -1 +front-fist-closed + rotate: false + xy: 807, 93 + size: 38, 41 + orig: 38, 41 + offset: 0, 0 + index: -1 +front-fist-open + rotate: false + xy: 815, 210 + size: 43, 44 + orig: 43, 44 + offset: 0, 0 + index: -1 +front-foot + rotate: true + xy: 706, 64 + size: 63, 35 + orig: 63, 35 + offset: 0, 0 + index: -1 +front-shin + rotate: false + xy: 80, 11 + size: 41, 92 + orig: 41, 92 + offset: 0, 0 + index: -1 +front-thigh + rotate: false + xy: 754, 12 + size: 23, 56 + orig: 23, 56 + offset: 0, 0 + index: -1 +front-upper-arm + rotate: false + xy: 618, 5 + size: 23, 49 + orig: 23, 49 + offset: 0, 0 + index: -1 +goggles + rotate: false + xy: 214, 20 + size: 131, 83 + orig: 131, 83 + offset: 0, 0 + index: -1 +gun + rotate: true + xy: 347, 14 + size: 105, 102 + orig: 105, 102 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 80, 105 + size: 136, 149 + orig: 136, 149 + offset: 0, 0 + index: -1 +hoverboard-board + rotate: true + xy: 2, 8 + size: 246, 76 + orig: 246, 76 + offset: 0, 0 + index: -1 +hoverboard-thruster + rotate: false + xy: 478, 2 + size: 30, 32 + orig: 30, 32 + offset: 0, 0 + index: -1 +hoverglow-small + rotate: true + xy: 218, 117 + size: 137, 38 + orig: 137, 38 + offset: 0, 0 + index: -1 +mouth-grind + rotate: true + xy: 775, 80 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth-oooo + rotate: true + xy: 779, 31 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth-smile + rotate: true + xy: 783, 207 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +muzzle-glow + rotate: false + xy: 779, 4 + size: 25, 25 + orig: 25, 25 + offset: 0, 0 + index: -1 +muzzle-ring + rotate: false + xy: 451, 14 + size: 25, 105 + orig: 25, 105 + offset: 0, 0 + index: -1 +muzzle01 + rotate: true + xy: 664, 60 + size: 67, 40 + orig: 67, 40 + offset: 0, 0 + index: -1 +muzzle02 + rotate: true + xy: 580, 56 + size: 68, 42 + orig: 68, 42 + offset: 0, 0 + index: -1 +muzzle03 + rotate: true + xy: 478, 36 + size: 83, 53 + orig: 83, 53 + offset: 0, 0 + index: -1 +muzzle04 + rotate: true + xy: 533, 49 + size: 75, 45 + orig: 75, 45 + offset: 0, 0 + index: -1 +muzzle05 + rotate: true + xy: 624, 56 + size: 68, 38 + orig: 68, 38 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 806, 8 + size: 18, 21 + orig: 18, 21 + offset: 0, 0 + index: -1 +portal-bg + rotate: false + xy: 258, 121 + size: 133, 133 + orig: 133, 133 + offset: 0, 0 + index: -1 +portal-flare1 + rotate: true + xy: 690, 2 + size: 56, 30 + orig: 56, 30 + offset: 0, 0 + index: -1 +portal-flare2 + rotate: false + xy: 510, 3 + size: 57, 31 + orig: 57, 31 + offset: 0, 0 + index: -1 +portal-flare3 + rotate: true + xy: 722, 4 + size: 58, 30 + orig: 58, 30 + offset: 0, 0 + index: -1 +portal-shade + rotate: false + xy: 393, 121 + size: 133, 133 + orig: 133, 133 + offset: 0, 0 + index: -1 +portal-streaks1 + rotate: false + xy: 528, 126 + size: 126, 128 + orig: 126, 128 + offset: 0, 0 + index: -1 +portal-streaks2 + rotate: false + xy: 656, 129 + size: 125, 125 + orig: 125, 125 + offset: 0, 0 + index: -1 +rear-bracer + rotate: false + xy: 826, 13 + size: 28, 36 + orig: 28, 36 + offset: 0, 0 + index: -1 +rear-foot + rotate: true + xy: 743, 70 + size: 57, 30 + orig: 57, 30 + offset: 0, 0 + index: -1 +rear-shin + rotate: false + xy: 174, 14 + size: 38, 89 + orig: 38, 89 + offset: 0, 0 + index: -1 +rear-thigh + rotate: false + xy: 783, 158 + size: 28, 47 + orig: 28, 47 + offset: 0, 0 + index: -1 +rear-upper-arm + rotate: true + xy: 783, 136 + size: 20, 44 + orig: 20, 44 + offset: 0, 0 + index: -1 +torso + rotate: false + xy: 123, 13 + size: 49, 90 + orig: 49, 90 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/canvas/example/assets/spineboy.png b/apps/module-ts/src/spine-ts/canvas/example/assets/spineboy.png new file mode 100755 index 0000000..4dbbfb9 Binary files /dev/null and b/apps/module-ts/src/spine-ts/canvas/example/assets/spineboy.png differ diff --git a/apps/module-ts/src/spine-ts/canvas/example/index.html b/apps/module-ts/src/spine-ts/canvas/example/index.html new file mode 100755 index 0000000..992a274 --- /dev/null +++ b/apps/module-ts/src/spine-ts/canvas/example/index.html @@ -0,0 +1,168 @@ + + + + + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/canvas/src/AssetManager.ts b/apps/module-ts/src/spine-ts/canvas/src/AssetManager.ts new file mode 100755 index 0000000..61d227f --- /dev/null +++ b/apps/module-ts/src/spine-ts/canvas/src/AssetManager.ts @@ -0,0 +1,38 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +/// + +module spine.canvas { + export class AssetManager extends spine.AssetManager { + constructor (pathPrefix: string = "") { + super((image: HTMLImageElement) => { return new spine.canvas.CanvasTexture(image); }, pathPrefix); + } + } +} diff --git a/apps/module-ts/src/spine-ts/canvas/src/CanvasTexture.ts b/apps/module-ts/src/spine-ts/canvas/src/CanvasTexture.ts new file mode 100755 index 0000000..b8794e7 --- /dev/null +++ b/apps/module-ts/src/spine-ts/canvas/src/CanvasTexture.ts @@ -0,0 +1,42 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +/// + +module spine.canvas { + export class CanvasTexture extends Texture { + constructor (image: HTMLImageElement) { + super(image); + } + + setFilters (minFilter: TextureFilter, magFilter: TextureFilter) { } + setWraps (uWrap: TextureWrap, vWrap: TextureWrap) { } + dispose () { } + } +} diff --git a/apps/module-ts/src/spine-ts/canvas/src/SkeletonRenderer.ts b/apps/module-ts/src/spine-ts/canvas/src/SkeletonRenderer.ts new file mode 100755 index 0000000..ffa0a59 --- /dev/null +++ b/apps/module-ts/src/spine-ts/canvas/src/SkeletonRenderer.ts @@ -0,0 +1,323 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.canvas { + export class SkeletonRenderer { + static QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + static VERTEX_SIZE = 2 + 2 + 4; + + private ctx: CanvasRenderingContext2D; + + public triangleRendering = false; + public debugRendering = false; + private vertices = Utils.newFloatArray(8 * 1024); + private tempColor = new Color(); + + constructor (context: CanvasRenderingContext2D) { + this.ctx = context; + } + + draw (skeleton: Skeleton) { + if (this.triangleRendering) this.drawTriangles(skeleton); + else this.drawImages(skeleton); + } + + private drawImages (skeleton: Skeleton) { + let ctx = this.ctx; + let drawOrder = skeleton.drawOrder; + + if (this.debugRendering) ctx.strokeStyle = "green"; + + ctx.save(); + for (let i = 0, n = drawOrder.length; i < n; i++) { + let slot = drawOrder[i]; + if (!slot.bone.active) continue; + let attachment = slot.getAttachment(); + let regionAttachment: RegionAttachment = null; + let region: TextureAtlasRegion = null; + let image: HTMLImageElement = null; + + if (attachment instanceof RegionAttachment) { + regionAttachment = attachment; + region = regionAttachment.region; + image = (region.texture).getImage() as HTMLImageElement; + } else continue; + + let skeleton = slot.bone.skeleton; + let skeletonColor = skeleton.color; + let slotColor = slot.color; + let regionColor = regionAttachment.color; + let alpha = skeletonColor.a * slotColor.a * regionColor.a; + let color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * regionColor.r, + skeletonColor.g * slotColor.g * regionColor.g, + skeletonColor.b * slotColor.b * regionColor.b, + alpha); + + let att = attachment; + let bone = slot.bone; + let w = region.width; + let h = region.height; + ctx.save(); + ctx.transform(bone.a, bone.c, bone.b, bone.d, bone.worldX, bone.worldY); + ctx.translate(attachment.offset[0], attachment.offset[1]); + ctx.rotate(attachment.rotation * Math.PI / 180); + let atlasScale = att.width / w; + ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY); + ctx.translate(w / 2, h / 2); + if (attachment.region.rotate) { + let t = w; + w = h; + h = t; + ctx.rotate(-Math.PI / 2); + } + ctx.scale(1, -1); + ctx.translate(-w / 2, -h / 2); + ctx.globalAlpha = color.a; + // experimental tinting via compositing, doesn't work + // ctx.globalCompositeOperation = "source-atop"; + // ctx.fillStyle = "rgba(" + (color.r * 255 | 0) + ", " + (color.g * 255 | 0) + ", " + (color.b * 255 | 0) + ", " + color.a + ")"; + // ctx.fillRect(0, 0, w, h); + ctx.drawImage(image, region.x, region.y, w, h, 0, 0, w, h); + if (this.debugRendering) ctx.strokeRect(0, 0, w, h); + ctx.restore(); + } + + ctx.restore(); + } + + private drawTriangles (skeleton: Skeleton) { + let blendMode: BlendMode = null; + + let vertices: ArrayLike = this.vertices; + let triangles: Array = null; + let drawOrder = skeleton.drawOrder; + + for (let i = 0, n = drawOrder.length; i < n; i++) { + let slot = drawOrder[i]; + let attachment = slot.getAttachment(); + let texture: HTMLImageElement = null; + let region: TextureAtlasRegion = null; + if (attachment instanceof RegionAttachment) { + let regionAttachment = attachment; + vertices = this.computeRegionVertices(slot, regionAttachment, false); + triangles = SkeletonRenderer.QUAD_TRIANGLES; + region = regionAttachment.region; + texture = (region.texture).getImage() as HTMLImageElement; + + } else if (attachment instanceof MeshAttachment) { + let mesh = attachment; + vertices = this.computeMeshVertices(slot, mesh, false); + triangles = mesh.triangles; + texture = (mesh.region.renderObject).texture.getImage() as HTMLImageElement; + } else continue; + + if (texture != null) { + let slotBlendMode = slot.data.blendMode; + if (slotBlendMode != blendMode) { + blendMode = slotBlendMode; + } + + let skeleton = slot.bone.skeleton; + let skeletonColor = skeleton.color; + let slotColor = slot.color; + let attachmentColor = attachment.color; + let alpha = skeletonColor.a * slotColor.a * attachmentColor.a; + let color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * attachmentColor.r, + skeletonColor.g * slotColor.g * attachmentColor.g, + skeletonColor.b * slotColor.b * attachmentColor.b, + alpha); + + let ctx = this.ctx; + + ctx.globalAlpha = color.a; + // experimental tinting via compositing, doesn't work + // ctx.globalCompositeOperation = "source-atop"; + // ctx.fillStyle = "rgba(" + (color.r * 255 | 0) + ", " + (color.g * 255 | 0) + ", " + (color.b * 255 | 0) + ", " + color.a + ")"; + // ctx.fillRect(0, 0, w, h); + + for (var j = 0; j < triangles.length; j+=3) { + let t1 = triangles[j] * 8, t2 = triangles[j+1] * 8, t3 = triangles[j+2] * 8; + + let x0 = vertices[t1], y0 = vertices[t1 + 1], u0 = vertices[t1 + 6], v0 = vertices[t1 + 7]; + let x1 = vertices[t2], y1 = vertices[t2 + 1], u1 = vertices[t2 + 6], v1 = vertices[t2 + 7]; + let x2 = vertices[t3], y2 = vertices[t3 + 1], u2 = vertices[t3 + 6], v2 = vertices[t3 + 7]; + + this.drawTriangle(texture, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2); + + if (this.debugRendering) { + ctx.strokeStyle = "green"; + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x0, y0); + ctx.stroke(); + } + } + } + } + + this.ctx.globalAlpha = 1; + } + + // Adapted from http://extremelysatisfactorytotalitarianism.com/blog/?p=2120 + // Apache 2 licensed + private drawTriangle(img: HTMLImageElement, x0: number, y0: number, u0: number, v0: number, + x1: number, y1: number, u1: number, v1: number, + x2: number, y2: number, u2: number, v2: number) { + let ctx = this.ctx; + + u0 *= img.width; + v0 *= img.height; + u1 *= img.width; + v1 *= img.height; + u2 *= img.width; + v2 *= img.height; + + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.closePath(); + + x1 -= x0; + y1 -= y0; + x2 -= x0; + y2 -= y0; + + u1 -= u0; + v1 -= v0; + u2 -= u0; + v2 -= v0; + + var det = 1 / (u1*v2 - u2*v1), + + // linear transformation + a = (v2*x1 - v1*x2) * det, + b = (v2*y1 - v1*y2) * det, + c = (u1*x2 - u2*x1) * det, + d = (u1*y2 - u2*y1) * det, + + // translation + e = x0 - a*u0 - c*v0, + f = y0 - b*u0 - d*v0; + + ctx.save(); + ctx.transform(a, b, c, d, e, f); + ctx.clip(); + ctx.drawImage(img, 0, 0); + ctx.restore(); + } + + private computeRegionVertices(slot: Slot, region: RegionAttachment, pma: boolean) { + let skeleton = slot.bone.skeleton; + let skeletonColor = skeleton.color; + let slotColor = slot.color; + let regionColor = region.color; + let alpha = skeletonColor.a * slotColor.a * regionColor.a; + let multiplier = pma ? alpha : 1; + let color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, + skeletonColor.g * slotColor.g * regionColor.g * multiplier, + skeletonColor.b * slotColor.b * regionColor.b * multiplier, + alpha); + + region.computeWorldVertices(slot.bone, this.vertices, 0, SkeletonRenderer.VERTEX_SIZE); + + let vertices = this.vertices; + let uvs = region.uvs; + + vertices[RegionAttachment.C1R] = color.r; + vertices[RegionAttachment.C1G] = color.g; + vertices[RegionAttachment.C1B] = color.b; + vertices[RegionAttachment.C1A] = color.a; + vertices[RegionAttachment.U1] = uvs[0]; + vertices[RegionAttachment.V1] = uvs[1]; + + vertices[RegionAttachment.C2R] = color.r; + vertices[RegionAttachment.C2G] = color.g; + vertices[RegionAttachment.C2B] = color.b; + vertices[RegionAttachment.C2A] = color.a; + vertices[RegionAttachment.U2] = uvs[2]; + vertices[RegionAttachment.V2] = uvs[3]; + + vertices[RegionAttachment.C3R] = color.r; + vertices[RegionAttachment.C3G] = color.g; + vertices[RegionAttachment.C3B] = color.b; + vertices[RegionAttachment.C3A] = color.a; + vertices[RegionAttachment.U3] = uvs[4]; + vertices[RegionAttachment.V3] = uvs[5]; + + vertices[RegionAttachment.C4R] = color.r; + vertices[RegionAttachment.C4G] = color.g; + vertices[RegionAttachment.C4B] = color.b; + vertices[RegionAttachment.C4A] = color.a; + vertices[RegionAttachment.U4] = uvs[6]; + vertices[RegionAttachment.V4] = uvs[7]; + + return vertices; + } + + private computeMeshVertices(slot: Slot, mesh: MeshAttachment, pma: boolean) { + let skeleton = slot.bone.skeleton; + let skeletonColor = skeleton.color; + let slotColor = slot.color; + let regionColor = mesh.color; + let alpha = skeletonColor.a * slotColor.a * regionColor.a; + let multiplier = pma ? alpha : 1; + let color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, + skeletonColor.g * slotColor.g * regionColor.g * multiplier, + skeletonColor.b * slotColor.b * regionColor.b * multiplier, + alpha); + + let numVertices = mesh.worldVerticesLength / 2; + if (this.vertices.length < mesh.worldVerticesLength) { + this.vertices = Utils.newFloatArray(mesh.worldVerticesLength); + } + let vertices = this.vertices; + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, SkeletonRenderer.VERTEX_SIZE); + + let uvs = mesh.uvs; + for (let i = 0, n = numVertices, u = 0, v = 2; i < n; i++) { + vertices[v++] = color.r; + vertices[v++] = color.g; + vertices[v++] = color.b; + vertices[v++] = color.a; + vertices[v++] = uvs[u++]; + vertices[v++] = uvs[u++]; + v += 2; + } + + return vertices; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/Animation.ts b/apps/module-ts/src/spine-ts/core/src/Animation.ts new file mode 100755 index 0000000..03f1098 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/Animation.ts @@ -0,0 +1,1556 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** A simple container for a list of timelines and a name. */ + export class Animation { + /** The animation's name, which is unique across all animations in the skeleton. */ + name: string; + timelines: Array; + timelineIds: Array; + + /** The duration of the animation in seconds, which is the highest time of all keys in the timeline. */ + duration: number; + + constructor (name: string, timelines: Array, duration: number) { + if (name == null) throw new Error("name cannot be null."); + if (timelines == null) throw new Error("timelines cannot be null."); + this.name = name; + this.timelines = timelines; + this.timelineIds = []; + for (var i = 0; i < timelines.length; i++) + this.timelineIds[timelines[i].getPropertyId()] = true; + this.duration = duration; + } + + hasTimeline (id: number) { + return this.timelineIds[id] == true; + } + + /** Applies all the animation's timelines to the specified skeleton. + * + * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}. + * @param loop If true, the animation repeats after {@link #getDuration()}. + * @param events May be null to ignore fired events. */ + apply (skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + if (skeleton == null) throw new Error("skeleton cannot be null."); + + if (loop && this.duration != 0) { + time %= this.duration; + if (lastTime > 0) lastTime %= this.duration; + } + + let timelines = this.timelines; + for (let i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction); + } + + /** @param target After the first and before the last value. + * @returns index of first value greater than the target. */ + static binarySearch (values: ArrayLike, target: number, step: number = 1) { + let low = 0; + let high = values.length / step - 2; + if (high == 0) return step; + let current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } + } + + static linearSearch (values: ArrayLike, target: number, step: number) { + for (let i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; + } + } + + /** The interface for all timelines. */ + export interface Timeline { + /** Applies this timeline to the skeleton. + * @param skeleton The skeleton the timeline is being applied to. This provides access to the bones, slots, and other + * skeleton components the timeline may change. + * @param lastTime The time this timeline was last applied. Timelines such as {@link EventTimeline}} trigger only at specific + * times rather than every frame. In that case, the timeline triggers everything between `lastTime` + * (exclusive) and `time` (inclusive). + * @param time The time within the animation. Most timelines find the key before and the key after this time so they can + * interpolate between the keys. + * @param events If any events are fired, they are added to this list. Can be null to ignore fired events or if the timeline + * does not fire events. + * @param alpha 0 applies the current or setup value (depending on `blend`). 1 applies the timeline value. + * Between 0 and 1 applies a value between the current or setup value and the timeline value. By adjusting + * `alpha` over time, an animation can be mixed in or out. `alpha` can also be useful to + * apply animations on top of each other (layering). + * @param blend Controls how mixing is applied when `alpha` < 1. + * @param direction Indicates whether the timeline is mixing in or out. Used by timelines which perform instant transitions, + * such as {@link DrawOrderTimeline} or {@link AttachmentTimeline}. */ + apply (skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + + /** Uniquely encodes both the type of this timeline and the skeleton property that it affects. */ + getPropertyId (): number; + } + + /** Controls how a timeline value is mixed with the setup pose value or current pose value when a timeline's `alpha` + * < 1. + * + * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}. */ + export enum MixBlend { + /** Transitions from the setup value to the timeline value (the current value is not used). Before the first key, the setup + * value is set. */ + setup, + /** Transitions from the current value to the timeline value. Before the first key, transitions from the current value to + * the setup value. Timelines which perform instant transitions, such as {@link DrawOrderTimeline} or + * {@link AttachmentTimeline}, use the setup value before the first key. + * + * `first` is intended for the first animations applied, not for animations layered on top of those. */ + first, + /** Transitions from the current value to the timeline value. No change is made before the first key (the current value is + * kept until the first key). + * + * `replace` is intended for animations layered on top of others, not for the first animations applied. */ + replace, + /** Transitions from the current value to the current value plus the timeline value. No change is made before the first key + * (the current value is kept until the first key). + * + * `add` is intended for animations layered on top of others, not for the first animations applied. Properties + * keyed by additive animations must be set manually or by another animation before applying the additive animations, else + * the property values will increase continually. */ + add + } + + /** Indicates whether a timeline's `alpha` is mixing out over time toward 0 (the setup or current pose value) or + * mixing in toward 1 (the timeline's value). + * + * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}. */ + export enum MixDirection { + mixIn, mixOut + } + + export enum TimelineType { + rotate, translate, scale, shear, + attachment, color, deform, + event, drawOrder, + ikConstraint, transformConstraint, + pathConstraintPosition, pathConstraintSpacing, pathConstraintMix, + twoColor + } + + /** The base class for timelines that use interpolation between key frame values. */ + export abstract class CurveTimeline implements Timeline { + static LINEAR = 0; static STEPPED = 1; static BEZIER = 2; + static BEZIER_SIZE = 10 * 2 - 1; + + private curves: ArrayLike; // type, x, y, ... + + abstract getPropertyId(): number; + + constructor (frameCount: number) { + if (frameCount <= 0) throw new Error("frameCount must be > 0: " + frameCount); + this.curves = Utils.newFloatArray((frameCount - 1) * CurveTimeline.BEZIER_SIZE); + } + + /** The number of key frames for this timeline. */ + getFrameCount () { + return this.curves.length / CurveTimeline.BEZIER_SIZE + 1; + } + + /** Sets the specified key frame to linear interpolation. */ + setLinear (frameIndex: number) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.LINEAR; + } + + /** Sets the specified key frame to stepped interpolation. */ + setStepped (frameIndex: number) { + this.curves[frameIndex * CurveTimeline.BEZIER_SIZE] = CurveTimeline.STEPPED; + } + + /** Returns the interpolation type for the specified key frame. + * @returns Linear is 0, stepped is 1, Bezier is 2. */ + getCurveType (frameIndex: number): number { + let index = frameIndex * CurveTimeline.BEZIER_SIZE; + if (index == this.curves.length) return CurveTimeline.LINEAR; + let type = this.curves[index]; + if (type == CurveTimeline.LINEAR) return CurveTimeline.LINEAR; + if (type == CurveTimeline.STEPPED) return CurveTimeline.STEPPED; + return CurveTimeline.BEZIER; + } + + /** Sets the specified key frame to Bezier interpolation. `cx1` and `cx2` are from 0 to 1, + * representing the percent of time between the two key frames. `cy1` and `cy2` are the percent of the + * difference between the key frame's values. */ + setCurve (frameIndex: number, cx1: number, cy1: number, cx2: number, cy2: number) { + let tmpx = (-cx1 * 2 + cx2) * 0.03, tmpy = (-cy1 * 2 + cy2) * 0.03; + let dddfx = ((cx1 - cx2) * 3 + 1) * 0.006, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006; + let ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy; + let dfx = cx1 * 0.3 + tmpx + dddfx * 0.16666667, dfy = cy1 * 0.3 + tmpy + dddfy * 0.16666667; + + let i = frameIndex * CurveTimeline.BEZIER_SIZE; + let curves = this.curves; + curves[i++] = CurveTimeline.BEZIER; + + let x = dfx, y = dfy; + for (let n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + } + + /** Returns the interpolated percentage for the specified key frame and linear percentage. */ + getCurvePercent (frameIndex: number, percent: number) { + percent = MathUtils.clamp(percent, 0, 1); + let curves = this.curves; + let i = frameIndex * CurveTimeline.BEZIER_SIZE; + let type = curves[i]; + if (type == CurveTimeline.LINEAR) return percent; + if (type == CurveTimeline.STEPPED) return 0; + i++; + let x = 0; + for (let start = i, n = i + CurveTimeline.BEZIER_SIZE - 1; i < n; i += 2) { + x = curves[i]; + if (x >= percent) { + let prevX: number, prevY: number; + if (i == start) { + prevX = 0; + prevY = 0; + } else { + prevX = curves[i - 2]; + prevY = curves[i - 1]; + } + return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX); + } + } + let y = curves[i - 1]; + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } + + abstract apply (skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection): void; + } + + /** Changes a bone's local {@link Bone#rotation}. */ + export class RotateTimeline extends CurveTimeline { + static ENTRIES = 2; + static PREV_TIME = -2; static PREV_ROTATION = -1; + static ROTATION = 1; + + /** The index of the bone in {@link Skeleton#bones} that will be changed. */ + boneIndex: number; + + /** The time in seconds and rotation in degrees for each key frame. */ + frames: ArrayLike; // time, degrees, ... + + constructor (frameCount: number) { + super(frameCount); + this.frames = Utils.newFloatArray(frameCount << 1); + } + + getPropertyId () { + return (TimelineType.rotate << 24) + this.boneIndex; + } + + /** Sets the time and angle of the specified keyframe. */ + setFrame (frameIndex: number, time: number, degrees: number) { + frameIndex <<= 1; + this.frames[frameIndex] = time; + this.frames[frameIndex + RotateTimeline.ROTATION] = degrees; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let frames = this.frames; + + let bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + return; + case MixBlend.first: + let r = bone.data.rotation - bone.rotation; + bone.rotation += (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + } + return; + } + + if (time >= frames[frames.length - RotateTimeline.ENTRIES]) { // Time is after last frame. + let r = frames[frames.length + RotateTimeline.PREV_ROTATION]; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + r * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r += bone.data.rotation - bone.rotation; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; // Wrap within -180 and 180. + case MixBlend.add: + bone.rotation += r * alpha; + } + return; + } + + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES); + let prevRotation = frames[frame + RotateTimeline.PREV_ROTATION]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent((frame >> 1) - 1, + 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime)); + + let r = frames[frame + RotateTimeline.ROTATION] - prevRotation; + r = prevRotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * percent; + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation + (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + r += bone.data.rotation - bone.rotation; + case MixBlend.add: + bone.rotation += (r - (16384 - ((16384.499999999996 - r / 360) | 0)) * 360) * alpha; + } + } + } + + /** Changes a bone's local {@link Bone#x} and {@link Bone#y}. */ + export class TranslateTimeline extends CurveTimeline { + static ENTRIES = 3; + static PREV_TIME = -3; static PREV_X = -2; static PREV_Y = -1; + static X = 1; static Y = 2; + + /** The index of the bone in {@link Skeleton#bones} that will be changed. */ + boneIndex: number; + + /** The time in seconds, x, and y values for each key frame. */ + frames: ArrayLike; // time, x, y, ... + + constructor (frameCount: number) { + super(frameCount); + this.frames = Utils.newFloatArray(frameCount * TranslateTimeline.ENTRIES); + } + + getPropertyId () { + return (TimelineType.translate << 24) + this.boneIndex; + } + + /** Sets the time in seconds, x, and y values for the specified key frame. */ + setFrame (frameIndex: number, time: number, x: number, y: number) { + frameIndex *= TranslateTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TranslateTimeline.X] = x; + this.frames[frameIndex + TranslateTimeline.Y] = y; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let frames = this.frames; + + let bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x; + bone.y = bone.data.y; + return; + case MixBlend.first: + bone.x += (bone.data.x - bone.x) * alpha; + bone.y += (bone.data.y - bone.y) * alpha; + } + return; + } + + let x = 0, y = 0; + if (time >= frames[frames.length - TranslateTimeline.ENTRIES]) { // Time is after last frame. + x = frames[frames.length + TranslateTimeline.PREV_X]; + y = frames[frames.length + TranslateTimeline.PREV_Y]; + } else { + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, TranslateTimeline.ENTRIES); + x = frames[frame + TranslateTimeline.PREV_X]; + y = frames[frame + TranslateTimeline.PREV_Y]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent(frame / TranslateTimeline.ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + TranslateTimeline.PREV_TIME] - frameTime)); + + x += (frames[frame + TranslateTimeline.X] - x) * percent; + y += (frames[frame + TranslateTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.x = bone.data.x + x * alpha; + bone.y = bone.data.y + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.x += (bone.data.x + x - bone.x) * alpha; + bone.y += (bone.data.y + y - bone.y) * alpha; + break; + case MixBlend.add: + bone.x += x * alpha; + bone.y += y * alpha; + } + } + } + + /** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */ + export class ScaleTimeline extends TranslateTimeline { + constructor (frameCount: number) { + super(frameCount); + } + + getPropertyId () { + return (TimelineType.scale << 24) + this.boneIndex; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let frames = this.frames; + + let bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.scaleX = bone.data.scaleX; + bone.scaleY = bone.data.scaleY; + return; + case MixBlend.first: + bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha; + } + return; + } + + let x = 0, y = 0; + if (time >= frames[frames.length - ScaleTimeline.ENTRIES]) { // Time is after last frame. + x = frames[frames.length + ScaleTimeline.PREV_X] * bone.data.scaleX; + y = frames[frames.length + ScaleTimeline.PREV_Y] * bone.data.scaleY; + } else { + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, ScaleTimeline.ENTRIES); + x = frames[frame + ScaleTimeline.PREV_X]; + y = frames[frame + ScaleTimeline.PREV_Y]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent(frame / ScaleTimeline.ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + ScaleTimeline.PREV_TIME] - frameTime)); + + x = (x + (frames[frame + ScaleTimeline.X] - x) * percent) * bone.data.scaleX; + y = (y + (frames[frame + ScaleTimeline.Y] - y) * percent) * bone.data.scaleY; + } + if (alpha == 1) { + if (blend == MixBlend.add) { + bone.scaleX += x - bone.data.scaleX; + bone.scaleY += y - bone.data.scaleY; + } else { + bone.scaleX = x; + bone.scaleY = y; + } + } else { + let bx = 0, by = 0; + if (direction == MixDirection.mixOut) { + switch (blend) { + case MixBlend.setup: + bx = bone.data.scaleX; + by = bone.data.scaleY; + bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha; + bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha; + break; + case MixBlend.add: + bx = bone.scaleX; + by = bone.scaleY; + bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bone.data.scaleX) * alpha; + bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - bone.data.scaleY) * alpha; + } + } else { + switch (blend) { + case MixBlend.setup: + bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x); + by = Math.abs(bone.data.scaleY) * MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bx = Math.abs(bone.scaleX) * MathUtils.signum(x); + by = Math.abs(bone.scaleY) * MathUtils.signum(y); + bone.scaleX = bx + (x - bx) * alpha; + bone.scaleY = by + (y - by) * alpha; + break; + case MixBlend.add: + bx = MathUtils.signum(x); + by = MathUtils.signum(y); + bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha; + bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha; + } + } + } + } + } + + /** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */ + export class ShearTimeline extends TranslateTimeline { + constructor (frameCount: number) { + super(frameCount); + } + + getPropertyId () { + return (TimelineType.shear << 24) + this.boneIndex; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let frames = this.frames; + + let bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX; + bone.shearY = bone.data.shearY; + return; + case MixBlend.first: + bone.shearX += (bone.data.shearX - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY - bone.shearY) * alpha; + } + return; + } + + let x = 0, y = 0; + if (time >= frames[frames.length - ShearTimeline.ENTRIES]) { // Time is after last frame. + x = frames[frames.length + ShearTimeline.PREV_X]; + y = frames[frames.length + ShearTimeline.PREV_Y]; + } else { + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, ShearTimeline.ENTRIES); + x = frames[frame + ShearTimeline.PREV_X]; + y = frames[frame + ShearTimeline.PREV_Y]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent(frame / ShearTimeline.ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + ShearTimeline.PREV_TIME] - frameTime)); + + x = x + (frames[frame + ShearTimeline.X] - x) * percent; + y = y + (frames[frame + ShearTimeline.Y] - y) * percent; + } + switch (blend) { + case MixBlend.setup: + bone.shearX = bone.data.shearX + x * alpha; + bone.shearY = bone.data.shearY + y * alpha; + break; + case MixBlend.first: + case MixBlend.replace: + bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha; + break; + case MixBlend.add: + bone.shearX += x * alpha; + bone.shearY += y * alpha; + } + } + } + + /** Changes a slot's {@link Slot#color}. */ + export class ColorTimeline extends CurveTimeline { + static ENTRIES = 5; + static PREV_TIME = -5; static PREV_R = -4; static PREV_G = -3; static PREV_B = -2; static PREV_A = -1; + static R = 1; static G = 2; static B = 3; static A = 4; + + /** The index of the slot in {@link Skeleton#slots} that will be changed. */ + slotIndex: number; + + /** The time in seconds, red, green, blue, and alpha values for each key frame. */ + frames: ArrayLike; // time, r, g, b, a, ... + + constructor (frameCount: number) { + super(frameCount); + this.frames = Utils.newFloatArray(frameCount * ColorTimeline.ENTRIES); + } + + getPropertyId () { + return (TimelineType.color << 24) + this.slotIndex; + } + + /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */ + setFrame (frameIndex: number, time: number, r: number, g: number, b: number, a: number) { + frameIndex *= ColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + ColorTimeline.R] = r; + this.frames[frameIndex + ColorTimeline.G] = g; + this.frames[frameIndex + ColorTimeline.B] = b; + this.frames[frameIndex + ColorTimeline.A] = a; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + let frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + return; + case MixBlend.first: + let color = slot.color, setup = slot.data.color; + color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, + (setup.a - color.a) * alpha); + } + return; + } + + let r = 0, g = 0, b = 0, a = 0; + if (time >= frames[frames.length - ColorTimeline.ENTRIES]) { // Time is after last frame. + let i = frames.length; + r = frames[i + ColorTimeline.PREV_R]; + g = frames[i + ColorTimeline.PREV_G]; + b = frames[i + ColorTimeline.PREV_B]; + a = frames[i + ColorTimeline.PREV_A]; + } else { + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, ColorTimeline.ENTRIES); + r = frames[frame + ColorTimeline.PREV_R]; + g = frames[frame + ColorTimeline.PREV_G]; + b = frames[frame + ColorTimeline.PREV_B]; + a = frames[frame + ColorTimeline.PREV_A]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent(frame / ColorTimeline.ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + ColorTimeline.PREV_TIME] - frameTime)); + + r += (frames[frame + ColorTimeline.R] - r) * percent; + g += (frames[frame + ColorTimeline.G] - g) * percent; + b += (frames[frame + ColorTimeline.B] - b) * percent; + a += (frames[frame + ColorTimeline.A] - a) * percent; + } + if (alpha == 1) + slot.color.set(r, g, b, a); + else { + let color = slot.color; + if (blend == MixBlend.setup) color.setFromColor(slot.data.color); + color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha); + } + } + } + + /** Changes a slot's {@link Slot#color} and {@link Slot#darkColor} for two color tinting. */ + export class TwoColorTimeline extends CurveTimeline { + static ENTRIES = 8; + static PREV_TIME = -8; static PREV_R = -7; static PREV_G = -6; static PREV_B = -5; static PREV_A = -4; + static PREV_R2 = -3; static PREV_G2 = -2; static PREV_B2 = -1; + static R = 1; static G = 2; static B = 3; static A = 4; static R2 = 5; static G2 = 6; static B2 = 7; + + /** The index of the slot in {@link Skeleton#slots()} that will be changed. The {@link Slot#darkColor()} must not be + * null. */ + slotIndex: number; + + /** The time in seconds, red, green, blue, and alpha values of the color, red, green, blue of the dark color, for each key frame. */ + frames: ArrayLike; // time, r, g, b, a, r2, g2, b2, ... + + constructor (frameCount: number) { + super(frameCount); + this.frames = Utils.newFloatArray(frameCount * TwoColorTimeline.ENTRIES); + } + + getPropertyId () { + return (TimelineType.twoColor << 24) + this.slotIndex; + } + + /** Sets the time in seconds, light, and dark colors for the specified key frame. */ + setFrame (frameIndex: number, time: number, r: number, g: number, b: number, a: number, r2: number, g2: number, b2: number) { + frameIndex *= TwoColorTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TwoColorTimeline.R] = r; + this.frames[frameIndex + TwoColorTimeline.G] = g; + this.frames[frameIndex + TwoColorTimeline.B] = b; + this.frames[frameIndex + TwoColorTimeline.A] = a; + this.frames[frameIndex + TwoColorTimeline.R2] = r2; + this.frames[frameIndex + TwoColorTimeline.G2] = g2; + this.frames[frameIndex + TwoColorTimeline.B2] = b2; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + let frames = this.frames; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + slot.color.setFromColor(slot.data.color); + slot.darkColor.setFromColor(slot.data.darkColor); + return; + case MixBlend.first: + let light = slot.color, dark = slot.darkColor, setupLight = slot.data.color, setupDark = slot.data.darkColor; + light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, + (setupLight.a - light.a) * alpha); + dark.add((setupDark.r - dark.r) * alpha, (setupDark.g - dark.g) * alpha, (setupDark.b - dark.b) * alpha, 0); + } + return; + } + + let r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; + if (time >= frames[frames.length - TwoColorTimeline.ENTRIES]) { // Time is after last frame. + let i = frames.length; + r = frames[i + TwoColorTimeline.PREV_R]; + g = frames[i + TwoColorTimeline.PREV_G]; + b = frames[i + TwoColorTimeline.PREV_B]; + a = frames[i + TwoColorTimeline.PREV_A]; + r2 = frames[i + TwoColorTimeline.PREV_R2]; + g2 = frames[i + TwoColorTimeline.PREV_G2]; + b2 = frames[i + TwoColorTimeline.PREV_B2]; + } else { + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, TwoColorTimeline.ENTRIES); + r = frames[frame + TwoColorTimeline.PREV_R]; + g = frames[frame + TwoColorTimeline.PREV_G]; + b = frames[frame + TwoColorTimeline.PREV_B]; + a = frames[frame + TwoColorTimeline.PREV_A]; + r2 = frames[frame + TwoColorTimeline.PREV_R2]; + g2 = frames[frame + TwoColorTimeline.PREV_G2]; + b2 = frames[frame + TwoColorTimeline.PREV_B2]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent(frame / TwoColorTimeline.ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + TwoColorTimeline.PREV_TIME] - frameTime)); + + r += (frames[frame + TwoColorTimeline.R] - r) * percent; + g += (frames[frame + TwoColorTimeline.G] - g) * percent; + b += (frames[frame + TwoColorTimeline.B] - b) * percent; + a += (frames[frame + TwoColorTimeline.A] - a) * percent; + r2 += (frames[frame + TwoColorTimeline.R2] - r2) * percent; + g2 += (frames[frame + TwoColorTimeline.G2] - g2) * percent; + b2 += (frames[frame + TwoColorTimeline.B2] - b2) * percent; + } + if (alpha == 1) { + slot.color.set(r, g, b, a); + slot.darkColor.set(r2, g2, b2, 1); + } else { + let light = slot.color, dark = slot.darkColor; + if (blend == MixBlend.setup) { + light.setFromColor(slot.data.color); + dark.setFromColor(slot.data.darkColor); + } + light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha); + dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0); + } + } + } + + /** Changes a slot's {@link Slot#attachment}. */ + export class AttachmentTimeline implements Timeline { + /** The index of the slot in {@link Skeleton#slots} that will be changed. */ + slotIndex: number; + + /** The time in seconds for each key frame. */ + frames: ArrayLike // time, ... + + /** The attachment name for each key frame. May contain null values to clear the attachment. */ + attachmentNames: Array; + + constructor (frameCount: number) { + this.frames = Utils.newFloatArray(frameCount); + this.attachmentNames = new Array(frameCount); + } + + getPropertyId () { + return (TimelineType.attachment << 24) + this.slotIndex; + } + + /** The number of key frames for this timeline. */ + getFrameCount () { + return this.frames.length; + } + + /** Sets the time in seconds and the attachment name for the specified key frame. */ + setFrame (frameIndex: number, time: number, attachmentName: string) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, events: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) + this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + + let frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) this.setAttachment(skeleton, slot, slot.data.attachmentName); + return; + } + + let frameIndex = 0; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = Animation.binarySearch(frames, time, 1) - 1; + + let attachmentName = this.attachmentNames[frameIndex]; + skeleton.slots[this.slotIndex] + .setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + } + + setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + } + } + + let zeros : ArrayLike = null; + + /** Changes a slot's {@link Slot#deform} to deform a {@link VertexAttachment}. */ + export class DeformTimeline extends CurveTimeline { + /** The index of the slot in {@link Skeleton#getSlots()} that will be changed. */ + slotIndex: number; + + /** The attachment that will be deformed. */ + attachment: VertexAttachment; + + /** The time in seconds for each key frame. */ + frames: ArrayLike; // time, ... + + /** The vertices for each key frame. */ + frameVertices: Array>; + + constructor (frameCount: number) { + super(frameCount); + this.frames = Utils.newFloatArray(frameCount); + this.frameVertices = new Array>(frameCount); + if (zeros == null) zeros = Utils.newFloatArray(64); + } + + getPropertyId () { + return (TimelineType.deform << 27) + + this.attachment.id + this.slotIndex; + } + + /** Sets the time in seconds and the vertices for the specified key frame. + * @param vertices Vertex positions for an unweighted VertexAttachment, or deform offsets if it has weights. */ + setFrame (frameIndex: number, time: number, vertices: ArrayLike) { + this.frames[frameIndex] = time; + this.frameVertices[frameIndex] = vertices; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let slot: Slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + let slotAttachment: Attachment = slot.getAttachment(); + if (!(slotAttachment instanceof VertexAttachment) || !((slotAttachment).deformAttachment == this.attachment)) return; + + let deformArray: Array = slot.deform; + if (deformArray.length == 0) blend = MixBlend.setup; + + let frameVertices = this.frameVertices; + let vertexCount = frameVertices[0].length; + + let frames = this.frames; + if (time < frames[0]) { + let vertexAttachment = slotAttachment; + switch (blend) { + case MixBlend.setup: + deformArray.length = 0; + return; + case MixBlend.first: + if (alpha == 1) { + deformArray.length = 0; + break; + } + let deform: Array = Utils.setArraySize(deformArray, vertexCount); + if (vertexAttachment.bones == null) { + // Unweighted vertex positions. + let setupVertices = vertexAttachment.vertices; + for (var i = 0; i < vertexCount; i++) + deform[i] += (setupVertices[i] - deform[i]) * alpha; + } else { + // Weighted deform offsets. + alpha = 1 - alpha; + for (var i = 0; i < vertexCount; i++) + deform[i] *= alpha; + } + } + return; + } + + let deform: Array = Utils.setArraySize(deformArray, vertexCount); + if (time >= frames[frames.length - 1]) { // Time is after last frame. + let lastVertices = frameVertices[frames.length - 1]; + if (alpha == 1) { + if (blend == MixBlend.add) { + let vertexAttachment = slotAttachment as VertexAttachment; + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + let setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) { + deform[i] += lastVertices[i] - setupVertices[i]; + } + } else { + // Weighted deform offsets, with alpha. + for (let i = 0; i < vertexCount; i++) + deform[i] += lastVertices[i]; + } + } else { + Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount); + } + } else { + switch (blend) { + case MixBlend.setup: { + let vertexAttachment = slotAttachment as VertexAttachment; + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + let setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) { + let setup = setupVertices[i]; + deform[i] = setup + (lastVertices[i] - setup) * alpha; + } + } else { + // Weighted deform offsets, with alpha. + for (let i = 0; i < vertexCount; i++) + deform[i] = lastVertices[i] * alpha; + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (let i = 0; i < vertexCount; i++) + deform[i] += (lastVertices[i] - deform[i]) * alpha; + break; + case MixBlend.add: + let vertexAttachment = slotAttachment as VertexAttachment; + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + let setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) { + deform[i] += (lastVertices[i] - setupVertices[i]) * alpha; + } + } else { + // Weighted deform offsets, with alpha. + for (let i = 0; i < vertexCount; i++) + deform[i] += lastVertices[i] * alpha; + } + } + } + return; + } + + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time); + let prevVertices = frameVertices[frame - 1]; + let nextVertices = frameVertices[frame]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime)); + + if (alpha == 1) { + if (blend == MixBlend.add) { + let vertexAttachment = slotAttachment as VertexAttachment; + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + let setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) { + let prev = prevVertices[i]; + deform[i] += prev + (nextVertices[i] - prev) * percent - setupVertices[i]; + } + } else { + // Weighted deform offsets, with alpha. + for (let i = 0; i < vertexCount; i++) { + let prev = prevVertices[i]; + deform[i] += prev + (nextVertices[i] - prev) * percent; + } + } + } else { + for (let i = 0; i < vertexCount; i++) { + let prev = prevVertices[i]; + deform[i] = prev + (nextVertices[i] - prev) * percent; + } + } + } else { + switch (blend) { + case MixBlend.setup: { + let vertexAttachment = slotAttachment as VertexAttachment; + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + let setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) { + let prev = prevVertices[i], setup = setupVertices[i]; + deform[i] = setup + (prev + (nextVertices[i] - prev) * percent - setup) * alpha; + } + } else { + // Weighted deform offsets, with alpha. + for (let i = 0; i < vertexCount; i++) { + let prev = prevVertices[i]; + deform[i] = (prev + (nextVertices[i] - prev) * percent) * alpha; + } + } + break; + } + case MixBlend.first: + case MixBlend.replace: + for (let i = 0; i < vertexCount; i++) { + let prev = prevVertices[i]; + deform[i] += (prev + (nextVertices[i] - prev) * percent - deform[i]) * alpha; + } + break; + case MixBlend.add: + let vertexAttachment = slotAttachment as VertexAttachment; + if (vertexAttachment.bones == null) { + // Unweighted vertex positions, with alpha. + let setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) { + let prev = prevVertices[i]; + deform[i] += (prev + (nextVertices[i] - prev) * percent - setupVertices[i]) * alpha; + } + } else { + // Weighted deform offsets, with alpha. + for (let i = 0; i < vertexCount; i++) { + let prev = prevVertices[i]; + deform[i] += (prev + (nextVertices[i] - prev) * percent) * alpha; + } + } + } + } + } + } + + /** Fires an {@link Event} when specific animation times are reached. */ + export class EventTimeline implements Timeline { + /** The time in seconds for each key frame. */ + frames: ArrayLike; // time, ... + + /** The event for each key frame. */ + events: Array; + + constructor (frameCount: number) { + this.frames = Utils.newFloatArray(frameCount); + this.events = new Array(frameCount); + } + + getPropertyId () { + return TimelineType.event << 24; + } + + /** The number of key frames for this timeline. */ + getFrameCount () { + return this.frames.length; + } + + /** Sets the time in seconds and the event for the specified key frame. */ + setFrame (frameIndex: number, event: Event) { + this.frames[frameIndex] = event.time; + this.events[frameIndex] = event; + } + + /** Fires events for frames > `lastTime` and <= `time`. */ + apply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + if (firedEvents == null) return; + let frames = this.frames; + let frameCount = this.frames.length; + + if (lastTime > time) { // Fire events after last time for looped animations. + this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction); + lastTime = -1; + } else if (lastTime >= frames[frameCount - 1]) // Last time is after last frame. + return; + if (time < frames[0]) return; // Time is before first frame. + + let frame = 0; + if (lastTime < frames[0]) + frame = 0; + else { + frame = Animation.binarySearch(frames, lastTime); + let frameTime = frames[frame]; + while (frame > 0) { // Fire multiple events with the same frame. + if (frames[frame - 1] != frameTime) break; + frame--; + } + } + for (; frame < frameCount && time >= frames[frame]; frame++) + firedEvents.push(this.events[frame]); + } + } + + /** Changes a skeleton's {@link Skeleton#drawOrder}. */ + export class DrawOrderTimeline implements Timeline { + /** The time in seconds for each key frame. */ + frames: ArrayLike; // time, ... + + /** The draw order for each key frame. See {@link #setFrame(int, float, int[])}. */ + drawOrders: Array>; + + constructor (frameCount: number) { + this.frames = Utils.newFloatArray(frameCount); + this.drawOrders = new Array>(frameCount); + } + + getPropertyId () { + return TimelineType.drawOrder << 24; + } + + /** The number of key frames for this timeline. */ + getFrameCount () { + return this.frames.length; + } + + /** Sets the time in seconds and the draw order for the specified key frame. + * @param drawOrder For each slot in {@link Skeleton#slots}, the index of the new draw order. May be null to use setup pose + * draw order. */ + setFrame (frameIndex: number, time: number, drawOrder: Array) { + this.frames[frameIndex] = time; + this.drawOrders[frameIndex] = drawOrder; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let drawOrder: Array = skeleton.drawOrder; + let slots: Array = skeleton.slots; + if (direction == MixDirection.mixOut) { + if (blend == MixBlend.setup) Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + + let frames = this.frames; + if (time < frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); + return; + } + + let frame = 0; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frame = frames.length - 1; + else + frame = Animation.binarySearch(frames, time) - 1; + + let drawOrderToSetupIndex = this.drawOrders[frame]; + if (drawOrderToSetupIndex == null) + Utils.arrayCopy(slots, 0, drawOrder, 0, slots.length); + else { + for (let i = 0, n = drawOrderToSetupIndex.length; i < n; i++) + drawOrder[i] = slots[drawOrderToSetupIndex[i]]; + } + } + } + + /** Changes an IK constraint's {@link IkConstraint#mix}, {@link IkConstraint#softness}, + * {@link IkConstraint#bendDirection}, {@link IkConstraint#stretch}, and {@link IkConstraint#compress}. */ + export class IkConstraintTimeline extends CurveTimeline { + static ENTRIES = 6; + static PREV_TIME = -6; static PREV_MIX = -5; static PREV_SOFTNESS = -4; static PREV_BEND_DIRECTION = -3; static PREV_COMPRESS = -2; static PREV_STRETCH = -1; + static MIX = 1; static SOFTNESS = 2; static BEND_DIRECTION = 3; static COMPRESS = 4; static STRETCH = 5; + + /** The index of the IK constraint slot in {@link Skeleton#ikConstraints} that will be changed. */ + ikConstraintIndex: number; + + /** The time in seconds, mix, softness, bend direction, compress, and stretch for each key frame. */ + frames: ArrayLike; // time, mix, softness, bendDirection, compress, stretch, ... + + constructor (frameCount: number) { + super(frameCount); + this.frames = Utils.newFloatArray(frameCount * IkConstraintTimeline.ENTRIES); + } + + getPropertyId () { + return (TimelineType.ikConstraint << 24) + this.ikConstraintIndex; + } + + /** Sets the time in seconds, mix, softness, bend direction, compress, and stretch for the specified key frame. */ + setFrame (frameIndex: number, time: number, mix: number, softness: number, bendDirection: number, compress: boolean, stretch: boolean) { + frameIndex *= IkConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + IkConstraintTimeline.MIX] = mix; + this.frames[frameIndex + IkConstraintTimeline.SOFTNESS] = softness; + this.frames[frameIndex + IkConstraintTimeline.BEND_DIRECTION] = bendDirection; + this.frames[frameIndex + IkConstraintTimeline.COMPRESS] = compress ? 1 : 0; + this.frames[frameIndex + IkConstraintTimeline.STRETCH] = stretch ? 1 : 0; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let frames = this.frames; + let constraint: IkConstraint = skeleton.ikConstraints[this.ikConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + return; + case MixBlend.first: + constraint.mix += (constraint.data.mix - constraint.mix) * alpha; + constraint.softness += (constraint.data.softness - constraint.softness) * alpha; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + return; + } + + if (time >= frames[frames.length - IkConstraintTimeline.ENTRIES]) { // Time is after last frame. + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } else { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION] + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } else { + constraint.mix += (frames[frames.length + IkConstraintTimeline.PREV_MIX] - constraint.mix) * alpha; + constraint.softness += (frames[frames.length + IkConstraintTimeline.PREV_SOFTNESS] - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frames.length + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frames.length + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + return; + } + + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, IkConstraintTimeline.ENTRIES); + let mix = frames[frame + IkConstraintTimeline.PREV_MIX]; + let softness = frames[frame + IkConstraintTimeline.PREV_SOFTNESS]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent(frame / IkConstraintTimeline.ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + IkConstraintTimeline.PREV_TIME] - frameTime)); + + if (blend == MixBlend.setup) { + constraint.mix = constraint.data.mix + (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.data.mix) * alpha; + constraint.softness = constraint.data.softness + + (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.data.softness) * alpha; + if (direction == MixDirection.mixOut) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } else { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } else { + constraint.mix += (mix + (frames[frame + IkConstraintTimeline.MIX] - mix) * percent - constraint.mix) * alpha; + constraint.softness += (softness + (frames[frame + IkConstraintTimeline.SOFTNESS] - softness) * percent - constraint.softness) * alpha; + if (direction == MixDirection.mixIn) { + constraint.bendDirection = frames[frame + IkConstraintTimeline.PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + IkConstraintTimeline.PREV_COMPRESS] != 0; + constraint.stretch = frames[frame + IkConstraintTimeline.PREV_STRETCH] != 0; + } + } + } + } + + /** Changes a transform constraint's {@link TransformConstraint#rotateMix}, {@link TransformConstraint#translateMix}, + * {@link TransformConstraint#scaleMix}, and {@link TransformConstraint#shearMix}. */ + export class TransformConstraintTimeline extends CurveTimeline { + static ENTRIES = 5; + static PREV_TIME = -5; static PREV_ROTATE = -4; static PREV_TRANSLATE = -3; static PREV_SCALE = -2; static PREV_SHEAR = -1; + static ROTATE = 1; static TRANSLATE = 2; static SCALE = 3; static SHEAR = 4; + + /** The index of the transform constraint slot in {@link Skeleton#transformConstraints} that will be changed. */ + transformConstraintIndex: number; + + /** The time in seconds, rotate mix, translate mix, scale mix, and shear mix for each key frame. */ + frames: ArrayLike; // time, rotate mix, translate mix, scale mix, shear mix, ... + + constructor (frameCount: number) { + super(frameCount); + this.frames = Utils.newFloatArray(frameCount * TransformConstraintTimeline.ENTRIES); + } + + getPropertyId () { + return (TimelineType.transformConstraint << 24) + this.transformConstraintIndex; + } + + /** The time in seconds, rotate mix, translate mix, scale mix, and shear mix for the specified key frame. */ + setFrame (frameIndex: number, time: number, rotateMix: number, translateMix: number, scaleMix: number, shearMix: number) { + frameIndex *= TransformConstraintTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + TransformConstraintTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + TransformConstraintTimeline.TRANSLATE] = translateMix; + this.frames[frameIndex + TransformConstraintTimeline.SCALE] = scaleMix; + this.frames[frameIndex + TransformConstraintTimeline.SHEAR] = shearMix; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let frames = this.frames; + + let constraint: TransformConstraint = skeleton.transformConstraints[this.transformConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + let data = constraint.data; + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + return; + case MixBlend.first: + constraint.rotateMix += (data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (data.translateMix - constraint.translateMix) * alpha; + constraint.scaleMix += (data.scaleMix - constraint.scaleMix) * alpha; + constraint.shearMix += (data.shearMix - constraint.shearMix) * alpha; + } + return; + } + + let rotate = 0, translate = 0, scale = 0, shear = 0; + if (time >= frames[frames.length - TransformConstraintTimeline.ENTRIES]) { // Time is after last frame. + let i = frames.length; + rotate = frames[i + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[i + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[i + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[i + TransformConstraintTimeline.PREV_SHEAR]; + } else { + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, TransformConstraintTimeline.ENTRIES); + rotate = frames[frame + TransformConstraintTimeline.PREV_ROTATE]; + translate = frames[frame + TransformConstraintTimeline.PREV_TRANSLATE]; + scale = frames[frame + TransformConstraintTimeline.PREV_SCALE]; + shear = frames[frame + TransformConstraintTimeline.PREV_SHEAR]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent(frame / TransformConstraintTimeline.ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + TransformConstraintTimeline.PREV_TIME] - frameTime)); + + rotate += (frames[frame + TransformConstraintTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + TransformConstraintTimeline.TRANSLATE] - translate) * percent; + scale += (frames[frame + TransformConstraintTimeline.SCALE] - scale) * percent; + shear += (frames[frame + TransformConstraintTimeline.SHEAR] - shear) * percent; + } + if (blend == MixBlend.setup) { + let data = constraint.data; + constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha; + constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha; + constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha; + constraint.shearMix = data.shearMix + (shear - data.shearMix) * alpha; + } else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + constraint.scaleMix += (scale - constraint.scaleMix) * alpha; + constraint.shearMix += (shear - constraint.shearMix) * alpha; + } + } + } + + /** Changes a path constraint's {@link PathConstraint#position}. */ + export class PathConstraintPositionTimeline extends CurveTimeline { + static ENTRIES = 2; + static PREV_TIME = -2; static PREV_VALUE = -1; + static VALUE = 1; + + /** The index of the path constraint slot in {@link Skeleton#pathConstraints} that will be changed. */ + pathConstraintIndex: number; + + /** The time in seconds and path constraint position for each key frame. */ + frames: ArrayLike; // time, position, ... + + constructor (frameCount: number) { + super(frameCount); + this.frames = Utils.newFloatArray(frameCount * PathConstraintPositionTimeline.ENTRIES); + } + + getPropertyId () { + return (TimelineType.pathConstraintPosition << 24) + this.pathConstraintIndex; + } + + /** Sets the time in seconds and path constraint position for the specified key frame. */ + setFrame (frameIndex: number, time: number, value: number) { + frameIndex *= PathConstraintPositionTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintPositionTimeline.VALUE] = value; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let frames = this.frames; + let constraint: PathConstraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.position = constraint.data.position; + return; + case MixBlend.first: + constraint.position += (constraint.data.position - constraint.position) * alpha; + } + return; + } + + let position = 0; + if (time >= frames[frames.length - PathConstraintPositionTimeline.ENTRIES]) // Time is after last frame. + position = frames[frames.length + PathConstraintPositionTimeline.PREV_VALUE]; + else { + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, PathConstraintPositionTimeline.ENTRIES); + position = frames[frame + PathConstraintPositionTimeline.PREV_VALUE]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent(frame / PathConstraintPositionTimeline.ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + PathConstraintPositionTimeline.PREV_TIME] - frameTime)); + + position += (frames[frame + PathConstraintPositionTimeline.VALUE] - position) * percent; + } + if (blend == MixBlend.setup) + constraint.position = constraint.data.position + (position - constraint.data.position) * alpha; + else + constraint.position += (position - constraint.position) * alpha; + } + } + + /** Changes a path constraint's {@link PathConstraint#spacing}. */ + export class PathConstraintSpacingTimeline extends PathConstraintPositionTimeline { + constructor (frameCount: number) { + super(frameCount); + } + + getPropertyId () { + return (TimelineType.pathConstraintSpacing << 24) + this.pathConstraintIndex; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let frames = this.frames; + let constraint: PathConstraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.spacing = constraint.data.spacing; + return; + case MixBlend.first: + constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha; + } + return; + } + + let spacing = 0; + if (time >= frames[frames.length - PathConstraintSpacingTimeline.ENTRIES]) // Time is after last frame. + spacing = frames[frames.length + PathConstraintSpacingTimeline.PREV_VALUE]; + else { + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, PathConstraintSpacingTimeline.ENTRIES); + spacing = frames[frame + PathConstraintSpacingTimeline.PREV_VALUE]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent(frame / PathConstraintSpacingTimeline.ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + PathConstraintSpacingTimeline.PREV_TIME] - frameTime)); + + spacing += (frames[frame + PathConstraintSpacingTimeline.VALUE] - spacing) * percent; + } + + if (blend == MixBlend.setup) + constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha; + else + constraint.spacing += (spacing - constraint.spacing) * alpha; + } + } + + /** Changes a transform constraint's {@link PathConstraint#rotateMix} and + * {@link TransformConstraint#translateMix}. */ + export class PathConstraintMixTimeline extends CurveTimeline { + static ENTRIES = 3; + static PREV_TIME = -3; static PREV_ROTATE = -2; static PREV_TRANSLATE = -1; + static ROTATE = 1; static TRANSLATE = 2; + + /** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */ + pathConstraintIndex: number; + + /** The time in seconds, rotate mix, and translate mix for each key frame. */ + frames: ArrayLike; // time, rotate mix, translate mix, ... + + constructor (frameCount: number) { + super(frameCount); + this.frames = Utils.newFloatArray(frameCount * PathConstraintMixTimeline.ENTRIES); + } + + getPropertyId () { + return (TimelineType.pathConstraintMix << 24) + this.pathConstraintIndex; + } + + /** The time in seconds, rotate mix, and translate mix for the specified key frame. */ + setFrame (frameIndex: number, time: number, rotateMix: number, translateMix: number) { + frameIndex *= PathConstraintMixTimeline.ENTRIES; + this.frames[frameIndex] = time; + this.frames[frameIndex + PathConstraintMixTimeline.ROTATE] = rotateMix; + this.frames[frameIndex + PathConstraintMixTimeline.TRANSLATE] = translateMix; + } + + apply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection) { + let frames = this.frames; + let constraint: PathConstraint = skeleton.pathConstraints[this.pathConstraintIndex]; + if (!constraint.active) return; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + constraint.rotateMix = constraint.data.rotateMix; + constraint.translateMix = constraint.data.translateMix; + return; + case MixBlend.first: + constraint.rotateMix += (constraint.data.rotateMix - constraint.rotateMix) * alpha; + constraint.translateMix += (constraint.data.translateMix - constraint.translateMix) * alpha; + } + return; + } + + let rotate = 0, translate = 0; + if (time >= frames[frames.length - PathConstraintMixTimeline.ENTRIES]) { // Time is after last frame. + rotate = frames[frames.length + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frames.length + PathConstraintMixTimeline.PREV_TRANSLATE]; + } else { + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, PathConstraintMixTimeline.ENTRIES); + rotate = frames[frame + PathConstraintMixTimeline.PREV_ROTATE]; + translate = frames[frame + PathConstraintMixTimeline.PREV_TRANSLATE]; + let frameTime = frames[frame]; + let percent = this.getCurvePercent(frame / PathConstraintMixTimeline.ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + PathConstraintMixTimeline.PREV_TIME] - frameTime)); + + rotate += (frames[frame + PathConstraintMixTimeline.ROTATE] - rotate) * percent; + translate += (frames[frame + PathConstraintMixTimeline.TRANSLATE] - translate) * percent; + } + + if (blend == MixBlend.setup) { + constraint.rotateMix = constraint.data.rotateMix + (rotate - constraint.data.rotateMix) * alpha; + constraint.translateMix = constraint.data.translateMix + (translate - constraint.data.translateMix) * alpha; + } else { + constraint.rotateMix += (rotate - constraint.rotateMix) * alpha; + constraint.translateMix += (translate - constraint.translateMix) * alpha; + } + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/AnimationState.ts b/apps/module-ts/src/spine-ts/core/src/AnimationState.ts new file mode 100755 index 0000000..b0d599c --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/AnimationState.ts @@ -0,0 +1,1178 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Applies animations over time, queues animations for later playback, mixes (crossfading) between animations, and applies + * multiple animations on top of each other (layering). + * + * See [Applying Animations](http://esotericsoftware.com/spine-applying-animations/) in the Spine Runtimes Guide. */ + export class AnimationState { + static emptyAnimation = new Animation("", [], 0); + + /** 1. A previously applied timeline has set this property. + * + * Result: Mix from the current pose to the timeline pose. */ + static SUBSEQUENT = 0; + /** 1. This is the first timeline to set this property. + * 2. The next track entry applied after this one does not have a timeline to set this property. + * + * Result: Mix from the setup pose to the timeline pose. */ + static FIRST = 1; + /** 1) A previously applied timeline has set this property.
              + * 2) The next track entry to be applied does have a timeline to set this property.
              + * 3) The next track entry after that one does not have a timeline to set this property.
              + * Result: Mix from the current pose to the timeline pose, but do not mix out. This avoids "dipping" when crossfading + * animations that key the same property. A subsequent timeline will set this property using a mix. */ + static HOLD_SUBSEQUENT = 2; + /** 1) This is the first timeline to set this property.
              + * 2) The next track entry to be applied does have a timeline to set this property.
              + * 3) The next track entry after that one does not have a timeline to set this property.
              + * Result: Mix from the setup pose to the timeline pose, but do not mix out. This avoids "dipping" when crossfading animations + * that key the same property. A subsequent timeline will set this property using a mix. */ + static HOLD_FIRST = 3; + /** 1. This is the first timeline to set this property. + * 2. The next track entry to be applied does have a timeline to set this property. + * 3. The next track entry after that one does have a timeline to set this property. + * 4. timelineHoldMix stores the first subsequent track entry that does not have a timeline to set this property. + * + * Result: The same as HOLD except the mix percentage from the timelineHoldMix track entry is used. This handles when more than + * 2 track entries in a row have a timeline that sets the same property. + * + * Eg, A -> B -> C -> D where A, B, and C have a timeline setting same property, but D does not. When A is applied, to avoid + * "dipping" A is not mixed out, however D (the first entry that doesn't set the property) mixing in is used to mix out A + * (which affects B and C). Without using D to mix out, A would be applied fully until mixing completes, then snap into + * place. */ + static HOLD_MIX = 4; + + static SETUP = 1; + static CURRENT = 2; + + /** The AnimationStateData to look up mix durations. */ + data: AnimationStateData; + + /** The list of tracks that currently have animations, which may contain null entries. */ + tracks = new Array(); + + /** Multiplier for the delta time when the animation state is updated, causing time for all animations and mixes to play slower + * or faster. Defaults to 1. + * + * See TrackEntry {@link TrackEntry#timeScale} for affecting a single animation. */ + timeScale = 1; + unkeyedState = 0; + + events = new Array(); + listeners = new Array(); + queue = new EventQueue(this); + propertyIDs = new IntSet(); + animationsChanged = false; + + trackEntryPool = new Pool(() => new TrackEntry()); + + constructor (data: AnimationStateData) { + this.data = data; + } + + /** Increments each track entry {@link TrackEntry#trackTime()}, setting queued animations as current if needed. */ + update (delta: number) { + delta *= this.timeScale; + let tracks = this.tracks; + for (let i = 0, n = tracks.length; i < n; i++) { + let current = tracks[i]; + if (current == null) continue; + + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + + let currentDelta = delta * current.timeScale; + + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) continue; + currentDelta = -current.delay; + current.delay = 0; + } + + let next = current.next; + if (next != null) { + // When the next entry's delay is passed, change to the next entry, preserving leftover time. + let nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setCurrent(i, next, true); + while (next.mixingFrom != null) { + next.mixTime += delta; + next = next.mixingFrom; + } + continue; + } + } else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) { + tracks[i] = null; + this.queue.end(current); + this.disposeNext(current); + continue; + } + if (current.mixingFrom != null && this.updateMixingFrom(current, delta)) { + // End mixing from entries once all have completed. + let from = current.mixingFrom; + current.mixingFrom = null; + if (from != null) from.mixingTo = null; + while (from != null) { + this.queue.end(from); + from = from.mixingFrom; + } + } + + current.trackTime += currentDelta; + } + + this.queue.drain(); + } + + /** Returns true when all mixing from entries are complete. */ + updateMixingFrom (to: TrackEntry, delta: number): boolean { + let from = to.mixingFrom; + if (from == null) return true; + + let finished = this.updateMixingFrom(from, delta); + + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + + // Require mixTime > 0 to ensure the mixing from entry was applied at least once. + if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { + // Require totalAlpha == 0 to ensure mixing is complete, unless mixDuration == 0 (the transition is a single frame). + if (from.totalAlpha == 0 || to.mixDuration == 0) { + to.mixingFrom = from.mixingFrom; + if (from.mixingFrom != null) from.mixingFrom.mixingTo = to; + to.interruptAlpha = from.interruptAlpha; + this.queue.end(from); + } + return finished; + } + + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + } + + /** Poses the skeleton using the track entry animations. There are no side effects other than invoking listeners, so the + * animation state can be applied to multiple skeletons to pose them identically. + * @returns True if any animations were applied. */ + apply (skeleton: Skeleton) : boolean { + if (skeleton == null) throw new Error("skeleton cannot be null."); + if (this.animationsChanged) this._animationsChanged(); + + let events = this.events; + let tracks = this.tracks; + let applied = false; + + for (let i = 0, n = tracks.length; i < n; i++) { + let current = tracks[i]; + if (current == null || current.delay > 0) continue; + applied = true; + let blend: MixBlend = i == 0 ? MixBlend.first : current.mixBlend; + + // Apply mixing from entries first. + let mix = current.alpha; + if (current.mixingFrom != null) + mix *= this.applyMixingFrom(current, skeleton, blend); + else if (current.trackTime >= current.trackEnd && current.next == null) + mix = 0; + + // Apply current entry. + let animationLast = current.animationLast, animationTime = current.getAnimationTime(); + let timelineCount = current.animation.timelines.length; + let timelines = current.animation.timelines; + if ((i == 0 && mix == 1) || blend == MixBlend.add) { + for (let ii = 0; ii < timelineCount; ii++) { + // Fixes issue #302 on IOS9 where mix, blend sometimes became undefined and caused assets + // to sometimes stop rendering when using color correction, as their RGBA values become NaN. + // (https://github.com/pixijs/pixi-spine/issues/302) + Utils.webkit602BugfixHelper(mix, blend); + var timeline = timelines[ii]; + if (timeline instanceof AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, blend, true); + else + timeline.apply(skeleton, animationLast, animationTime, events, mix, blend, MixDirection.mixIn); + } + } else { + let timelineMode = current.timelineMode; + + let firstFrame = current.timelinesRotation.length == 0; + if (firstFrame) Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null); + let timelinesRotation = current.timelinesRotation; + + for (let ii = 0; ii < timelineCount; ii++) { + let timeline = timelines[ii]; + let timelineBlend = timelineMode[ii] == AnimationState.SUBSEQUENT ? blend : MixBlend.setup; + if (timeline instanceof RotateTimeline) { + this.applyRotateTimeline(timeline, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); + } else if (timeline instanceof AttachmentTimeline) { + this.applyAttachmentTimeline(timeline, skeleton, animationTime, blend, true); + } else { + // This fixes the WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109 + Utils.webkit602BugfixHelper(mix, blend); + timeline.apply(skeleton, animationLast, animationTime, events, mix, timelineBlend, MixDirection.mixIn); + } + } + } + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + + // Set slots attachments to the setup pose, if needed. This occurs if an animation that is mixing out sets attachments so + // subsequent timelines see any deform, but the subsequent timelines don't set an attachment (eg they are also mixing out or + // the time is before the first key). + var setupState = this.unkeyedState + AnimationState.SETUP; + var slots = skeleton.slots; + for (var i = 0, n = skeleton.slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.attachmentState == setupState) { + var attachmentName = slot.data.attachmentName; + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + } + } + this.unkeyedState += 2; // Increasing after each use avoids the need to reset attachmentState for every slot. + + this.queue.drain(); + return applied; + } + + applyMixingFrom (to: TrackEntry, skeleton: Skeleton, blend: MixBlend) { + let from = to.mixingFrom; + if (from.mixingFrom != null) this.applyMixingFrom(from, skeleton, blend); + + let mix = 0; + if (to.mixDuration == 0) { // Single frame mix to undo mixingFrom changes. + mix = 1; + if (blend == MixBlend.first) blend = MixBlend.setup; + } else { + mix = to.mixTime / to.mixDuration; + if (mix > 1) mix = 1; + if (blend != MixBlend.first) blend = from.mixBlend; + } + + let events = mix < from.eventThreshold ? this.events : null; + let attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold; + let animationLast = from.animationLast, animationTime = from.getAnimationTime(); + let timelineCount = from.animation.timelines.length; + let timelines = from.animation.timelines; + let alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); + if (blend == MixBlend.add) { + for (let i = 0; i < timelineCount; i++) + timelines[i].apply(skeleton, animationLast, animationTime, events, alphaMix, blend, MixDirection.mixOut); + } else { + let timelineMode = from.timelineMode; + let timelineHoldMix = from.timelineHoldMix; + + let firstFrame = from.timelinesRotation.length == 0; + if (firstFrame) Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null); + let timelinesRotation = from.timelinesRotation; + + from.totalAlpha = 0; + for (let i = 0; i < timelineCount; i++) { + let timeline = timelines[i]; + let direction = MixDirection.mixOut; + let timelineBlend: MixBlend; + let alpha = 0; + switch (timelineMode[i]) { + case AnimationState.SUBSEQUENT: + if (!drawOrder && timeline instanceof DrawOrderTimeline) continue; + timelineBlend = blend; + alpha = alphaMix; + break; + case AnimationState.FIRST: + timelineBlend = MixBlend.setup; + alpha = alphaMix; + break; + case AnimationState.HOLD_SUBSEQUENT: + timelineBlend = blend; + alpha = alphaHold; + break; + case AnimationState.HOLD_FIRST: + timelineBlend = MixBlend.setup; + alpha = alphaHold; + break; + default: + timelineBlend = MixBlend.setup; + let holdMix = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + break; + } + from.totalAlpha += alpha; + + if (timeline instanceof RotateTimeline) + this.applyRotateTimeline(timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); + else if (timeline instanceof AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, animationTime, timelineBlend, attachments); + else { + // This fixes the WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109 + Utils.webkit602BugfixHelper(alpha, blend); + if (drawOrder && timeline instanceof DrawOrderTimeline && timelineBlend == MixBlend.setup) + direction = MixDirection.mixIn; + timeline.apply(skeleton, animationLast, animationTime, events, alpha, timelineBlend, direction); + } + } + } + + if (to.mixDuration > 0) this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + + return mix; + } + + applyAttachmentTimeline (timeline: AttachmentTimeline, skeleton: Skeleton, time: number, blend: MixBlend, attachments: boolean) { + + var slot = skeleton.slots[timeline.slotIndex]; + if (!slot.bone.active) return; + + var frames = timeline.frames; + if (time < frames[0]) { // Time is before first frame. + if (blend == MixBlend.setup || blend == MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments); + } + else { + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = Animation.binarySearch(frames, time) - 1; + this.setAttachment(skeleton, slot, timeline.attachmentNames[frameIndex], attachments); + } + + // If an attachment wasn't set (ie before the first frame or attachments is false), set the setup attachment later. + if (slot.attachmentState <= this.unkeyedState) slot.attachmentState = this.unkeyedState + AnimationState.SETUP; + } + + setAttachment (skeleton: Skeleton, slot: Slot, attachmentName: string, attachments: boolean) { + slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + if (attachments) slot.attachmentState = this.unkeyedState + AnimationState.CURRENT; + } + + + applyRotateTimeline (timeline: Timeline, skeleton: Skeleton, time: number, alpha: number, blend: MixBlend, + timelinesRotation: Array, i: number, firstFrame: boolean) { + + if (firstFrame) timelinesRotation[i] = 0; + + if (alpha == 1) { + timeline.apply(skeleton, 0, time, null, 1, blend, MixDirection.mixIn); + return; + } + + let rotateTimeline = timeline as RotateTimeline; + let frames = rotateTimeline.frames; + let bone = skeleton.bones[rotateTimeline.boneIndex]; + if (!bone.active) return; + let r1 = 0, r2 = 0; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + default: + return; + case MixBlend.first: + r1 = bone.rotation; + r2 = bone.data.rotation; + } + } else { + r1 = blend == MixBlend.setup ? bone.data.rotation : bone.rotation; + if (time >= frames[frames.length - RotateTimeline.ENTRIES]) // Time is after last frame. + r2 = bone.data.rotation + frames[frames.length + RotateTimeline.PREV_ROTATION]; + else { + // Interpolate between the previous frame and the current frame. + let frame = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES); + let prevRotation = frames[frame + RotateTimeline.PREV_ROTATION]; + let frameTime = frames[frame]; + let percent = rotateTimeline.getCurvePercent((frame >> 1) - 1, + 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime)); + + r2 = frames[frame + RotateTimeline.ROTATION] - prevRotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + r2 = prevRotation + r2 * percent + bone.data.rotation; + r2 -= (16384 - ((16384.499999999996 - r2 / 360) | 0)) * 360; + } + } + + // Mix between rotations using the direction of the shortest route on the first frame while detecting crosses. + let total = 0, diff = r2 - r1; + diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360; + if (diff == 0) { + total = timelinesRotation[i]; + } else { + let lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } else { + lastTotal = timelinesRotation[i]; // Angle and direction of mix, including loops. + lastDiff = timelinesRotation[i + 1]; // Difference between bones. + } + let current = diff > 0, dir = lastTotal >= 0; + // Detect cross at 0 (not 180). + if (MathUtils.signum(lastDiff) != MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) { + // A cross after a 360 rotation is a loop. + if (Math.abs(lastTotal) > 180) lastTotal += 360 * MathUtils.signum(lastTotal); + dir = current; + } + total = diff + lastTotal - lastTotal % 360; // Store loops as part of lastTotal. + if (dir != current) total += 360 * MathUtils.signum(lastTotal); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + r1 += total * alpha; + bone.rotation = r1 - (16384 - ((16384.499999999996 - r1 / 360) | 0)) * 360; + } + + queueEvents (entry: TrackEntry, animationTime: number) { + let animationStart = entry.animationStart, animationEnd = entry.animationEnd; + let duration = animationEnd - animationStart; + let trackLastWrapped = entry.trackLast % duration; + + // Queue events before complete. + let events = this.events; + let i = 0, n = events.length; + for (; i < n; i++) { + let event = events[i]; + if (event.time < trackLastWrapped) break; + if (event.time > animationEnd) continue; // Discard events outside animation start/end. + this.queue.event(entry, event); + } + + // Queue complete if completed a loop iteration or the animation. + let complete = false; + if (entry.loop) + complete = duration == 0 || trackLastWrapped > entry.trackTime % duration; + else + complete = animationTime >= animationEnd && entry.animationLast < animationEnd; + if (complete) this.queue.complete(entry); + + // Queue events after complete. + for (; i < n; i++) { + let event = events[i]; + if (event.time < animationStart) continue; // Discard events outside animation start/end. + this.queue.event(entry, events[i]); + } + } + + /** Removes all animations from all tracks, leaving skeletons in their current pose. + * + * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose, + * rather than leaving them in their current pose. */ + clearTracks () { + let oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (let i = 0, n = this.tracks.length; i < n; i++) + this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + } + + /** Removes all animations from the track, leaving skeletons in their current pose. + * + * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose, + * rather than leaving them in their current pose. */ + clearTrack (trackIndex: number) { + if (trackIndex >= this.tracks.length) return; + let current = this.tracks[trackIndex]; + if (current == null) return; + + this.queue.end(current); + + this.disposeNext(current); + + let entry = current; + while (true) { + let from = entry.mixingFrom; + if (from == null) break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + + this.tracks[current.trackIndex] = null; + + this.queue.drain(); + } + + setCurrent (index: number, current: TrackEntry, interrupt: boolean) { + let from = this.expandToIndex(index); + this.tracks[index] = current; + + if (from != null) { + if (interrupt) this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + + // Store the interrupted mix percentage. + if (from.mixingFrom != null && from.mixDuration > 0) + current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration); + + from.timelinesRotation.length = 0; // Reset rotation for mixing out, in case entry was mixed in. + } + + this.queue.start(current); + } + + /** Sets an animation by name. + * + * {@link #setAnimationWith(}. */ + setAnimation (trackIndex: number, animationName: string, loop: boolean) { + let animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) throw new Error("Animation not found: " + animationName); + return this.setAnimationWith(trackIndex, animation, loop); + } + + /** Sets the current animation for a track, discarding any queued animations. If the formerly current track entry was never + * applied to a skeleton, it is replaced (not mixed from). + * @param loop If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its + * duration. In either case {@link TrackEntry#trackEnd} determines when the track is cleared. + * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept + * after the {@link AnimationStateListener#dispose()} event occurs. */ + setAnimationWith (trackIndex: number, animation: Animation, loop: boolean) { + if (animation == null) throw new Error("animation cannot be null."); + let interrupt = true; + let current = this.expandToIndex(trackIndex); + if (current != null) { + if (current.nextTrackLast == -1) { + // Don't mix from an entry that was never applied. + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.disposeNext(current); + current = current.mixingFrom; + interrupt = false; + } else + this.disposeNext(current); + } + let entry = this.trackEntry(trackIndex, animation, loop, current); + this.setCurrent(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + } + + /** Queues an animation by name. + * + * See {@link #addAnimationWith()}. */ + addAnimation (trackIndex: number, animationName: string, loop: boolean, delay: number) { + let animation = this.data.skeletonData.findAnimation(animationName); + if (animation == null) throw new Error("Animation not found: " + animationName); + return this.addAnimationWith(trackIndex, animation, loop, delay); + } + + /** Adds an animation to be played after the current or last queued animation for a track. If the track is empty, it is + * equivalent to calling {@link #setAnimationWith()}. + * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry + * minus any mix duration (from the {@link AnimationStateData}) plus the specified `delay` (ie the mix + * ends at (`delay` = 0) or before (`delay` < 0) the previous track entry duration). If the + * previous entry is looping, its next loop completion is used instead of its duration. + * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept + * after the {@link AnimationStateListener#dispose()} event occurs. */ + addAnimationWith (trackIndex: number, animation: Animation, loop: boolean, delay: number) { + if (animation == null) throw new Error("animation cannot be null."); + + let last = this.expandToIndex(trackIndex); + if (last != null) { + while (last.next != null) + last = last.next; + } + + let entry = this.trackEntry(trackIndex, animation, loop, last); + + if (last == null) { + this.setCurrent(trackIndex, entry, true); + this.queue.drain(); + } else { + last.next = entry; + if (delay <= 0) { + let duration = last.animationEnd - last.animationStart; + if (duration != 0) { + if (last.loop) + delay += duration * (1 + ((last.trackTime / duration) | 0)); + else + delay += Math.max(duration, last.trackTime); + delay -= this.data.getMix(last.animation, animation); + } else + delay = last.trackTime; + } + } + + entry.delay = delay; + return entry; + } + + /** Sets an empty animation for a track, discarding any queued animations, and sets the track entry's + * {@link TrackEntry#mixduration}. An empty animation has no timelines and serves as a placeholder for mixing in or out. + * + * Mixing out is done by setting an empty animation with a mix duration using either {@link #setEmptyAnimation()}, + * {@link #setEmptyAnimations()}, or {@link #addEmptyAnimation()}. Mixing to an empty animation causes + * the previous animation to be applied less and less over the mix duration. Properties keyed in the previous animation + * transition to the value from lower tracks or to the setup pose value if no lower tracks key the property. A mix duration of + * 0 still mixes out over one frame. + * + * Mixing in is done by first setting an empty animation, then adding an animation using + * {@link #addAnimation()} and on the returned track entry, set the + * {@link TrackEntry#setMixDuration()}. Mixing from an empty animation causes the new animation to be applied more and + * more over the mix duration. Properties keyed in the new animation transition from the value from lower tracks or from the + * setup pose value if no lower tracks key the property to the value keyed in the new animation. */ + setEmptyAnimation (trackIndex: number, mixDuration: number) { + let entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation, false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + } + + /** Adds an empty animation to be played after the current or last queued animation for a track, and sets the track entry's + * {@link TrackEntry#mixDuration}. If the track is empty, it is equivalent to calling + * {@link #setEmptyAnimation()}. + * + * See {@link #setEmptyAnimation()}. + * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry + * minus any mix duration plus the specified `delay` (ie the mix ends at (`delay` = 0) or + * before (`delay` < 0) the previous track entry duration). If the previous entry is looping, its next + * loop completion is used instead of its duration. + * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept + * after the {@link AnimationStateListener#dispose()} event occurs. */ + addEmptyAnimation (trackIndex: number, mixDuration: number, delay: number) { + if (delay <= 0) delay -= mixDuration; + let entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation, false, delay); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + } + + /** Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix + * duration. */ + setEmptyAnimations (mixDuration: number) { + let oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (let i = 0, n = this.tracks.length; i < n; i++) { + let current = this.tracks[i]; + if (current != null) this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + } + + expandToIndex (index: number) { + if (index < this.tracks.length) return this.tracks[index]; + Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + } + + /** @param last May be null. */ + trackEntry (trackIndex: number, animation: Animation, loop: boolean, last: TrackEntry) { + let entry = this.trackEntryPool.obtain(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + + entry.eventThreshold = 0; + entry.attachmentThreshold = 0; + entry.drawOrderThreshold = 0; + + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + + entry.alpha = 1; + entry.interruptAlpha = 1; + entry.mixTime = 0; + entry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation); + entry.mixBlend = MixBlend.replace; + return entry; + } + + disposeNext (entry: TrackEntry) { + let next = entry.next; + while (next != null) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + } + + _animationsChanged () { + this.animationsChanged = false; + + this.propertyIDs.clear(); + + for (let i = 0, n = this.tracks.length; i < n; i++) { + let entry = this.tracks[i]; + if (entry == null) continue; + while (entry.mixingFrom != null) + entry = entry.mixingFrom; + + do { + if (entry.mixingFrom == null || entry.mixBlend != MixBlend.add) this.computeHold(entry); + entry = entry.mixingTo; + } while (entry != null) + } + } + + computeHold (entry: TrackEntry) { + let to = entry.mixingTo; + let timelines = entry.animation.timelines; + let timelinesCount = entry.animation.timelines.length; + let timelineMode = Utils.setArraySize(entry.timelineMode, timelinesCount); + entry.timelineHoldMix.length = 0; + let timelineDipMix = Utils.setArraySize(entry.timelineHoldMix, timelinesCount); + let propertyIDs = this.propertyIDs; + + if (to != null && to.holdPrevious) { + for (let i = 0; i < timelinesCount; i++) { + timelineMode[i] = propertyIDs.add(timelines[i].getPropertyId()) ? AnimationState.HOLD_FIRST : AnimationState.HOLD_SUBSEQUENT; + } + return; + } + + outer: + for (let i = 0; i < timelinesCount; i++) { + let timeline = timelines[i]; + let id = timeline.getPropertyId(); + if (!propertyIDs.add(id)) + timelineMode[i] = AnimationState.SUBSEQUENT; + else if (to == null || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline + || timeline instanceof EventTimeline || !to.animation.hasTimeline(id)) { + timelineMode[i] = AnimationState.FIRST; + } else { + for (let next = to.mixingTo; next != null; next = next.mixingTo) { + if (next.animation.hasTimeline(id)) continue; + if (entry.mixDuration > 0) { + timelineMode[i] = AnimationState.HOLD_MIX; + timelineDipMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = AnimationState.HOLD_FIRST; + } + } + } + + /** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */ + getCurrent (trackIndex: number) { + if (trackIndex >= this.tracks.length) return null; + return this.tracks[trackIndex]; + } + + /** Adds a listener to receive events for all track entries. */ + addListener (listener: AnimationStateListener) { + if (listener == null) throw new Error("listener cannot be null."); + this.listeners.push(listener); + } + + /** Removes the listener added with {@link #addListener()}. */ + removeListener (listener: AnimationStateListener) { + let index = this.listeners.indexOf(listener); + if (index >= 0) this.listeners.splice(index, 1); + } + + /** Removes all listeners added with {@link #addListener()}. */ + clearListeners () { + this.listeners.length = 0; + } + + /** Discards all listener notifications that have not yet been delivered. This can be useful to call from an + * {@link AnimationStateListener} when it is known that further notifications that may have been already queued for delivery + * are not wanted because new animations are being set. */ + clearListenerNotifications () { + this.queue.clear(); + } + } + + /** Stores settings and other state for the playback of an animation on an {@link AnimationState} track. + * + * References to a track entry must not be kept after the {@link AnimationStateListener#dispose()} event occurs. */ + export class TrackEntry { + /** The animation to apply for this track entry. */ + animation: Animation; + + /** The animation queued to start after this animation, or null. `next` makes up a linked list. */ + next: TrackEntry; + + /** The track entry for the previous animation when mixing from the previous animation to this animation, or null if no + * mixing is currently occuring. When mixing from multiple animations, `mixingFrom` makes up a linked list. */ + mixingFrom: TrackEntry; + + /** The track entry for the next animation when mixing from this animation to the next animation, or null if no mixing is + * currently occuring. When mixing to multiple animations, `mixingTo` makes up a linked list. */ + mixingTo: TrackEntry; + + /** The listener for events generated by this track entry, or null. + * + * A track entry returned from {@link AnimationState#setAnimation()} is already the current animation + * for the track, so the track entry listener {@link AnimationStateListener#start()} will not be called. */ + listener: AnimationStateListener; + + /** The index of the track where this track entry is either current or queued. + * + * See {@link AnimationState#getCurrent()}. */ + trackIndex: number; + + /** If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its + * duration. */ + loop: boolean; + + /** If true, when mixing from the previous animation to this animation, the previous animation is applied as normal instead + * of being mixed out. + * + * When mixing between animations that key the same property, if a lower track also keys that property then the value will + * briefly dip toward the lower track value during the mix. This happens because the first animation mixes from 100% to 0% + * while the second animation mixes from 0% to 100%. Setting `holdPrevious` to true applies the first animation + * at 100% during the mix so the lower track value is overwritten. Such dipping does not occur on the lowest track which + * keys the property, only when a higher track also keys the property. + * + * Snapping will occur if `holdPrevious` is true and this animation does not key all the same properties as the + * previous animation. */ + holdPrevious: boolean; + + /** When the mix percentage ({@link #mixTime} / {@link #mixDuration}) is less than the + * `eventThreshold`, event timelines are applied while this animation is being mixed out. Defaults to 0, so event + * timelines are not applied while this animation is being mixed out. */ + eventThreshold: number; + + /** When the mix percentage ({@link #mixtime} / {@link #mixDuration}) is less than the + * `attachmentThreshold`, attachment timelines are applied while this animation is being mixed out. Defaults to + * 0, so attachment timelines are not applied while this animation is being mixed out. */ + attachmentThreshold: number; + + /** When the mix percentage ({@link #mixTime} / {@link #mixDuration}) is less than the + * `drawOrderThreshold`, draw order timelines are applied while this animation is being mixed out. Defaults to 0, + * so draw order timelines are not applied while this animation is being mixed out. */ + drawOrderThreshold: number; + + /** Seconds when this animation starts, both initially and after looping. Defaults to 0. + * + * When changing the `animationStart` time, it often makes sense to set {@link #animationLast} to the same + * value to prevent timeline keys before the start time from triggering. */ + animationStart: number; + + /** Seconds for the last frame of this animation. Non-looping animations won't play past this time. Looping animations will + * loop back to {@link #animationStart} at this time. Defaults to the animation {@link Animation#duration}. */ + animationEnd: number; + + + /** The time in seconds this animation was last applied. Some timelines use this for one-time triggers. Eg, when this + * animation is applied, event timelines will fire all events between the `animationLast` time (exclusive) and + * `animationTime` (inclusive). Defaults to -1 to ensure triggers on frame 0 happen the first time this animation + * is applied. */ + animationLast: number; + + nextAnimationLast: number; + + /** Seconds to postpone playing the animation. When this track entry is the current track entry, `delay` + * postpones incrementing the {@link #trackTime}. When this track entry is queued, `delay` is the time from + * the start of the previous animation to when this track entry will become the current track entry (ie when the previous + * track entry {@link TrackEntry#trackTime} >= this track entry's `delay`). + * + * {@link #timeScale} affects the delay. */ + delay: number; + + /** Current time in seconds this track entry has been the current track entry. The track time determines + * {@link #animationTime}. The track time can be set to start the animation at a time other than 0, without affecting + * looping. */ + trackTime: number; + + trackLast: number; nextTrackLast: number; + + /** The track time in seconds when this animation will be removed from the track. Defaults to the highest possible float + * value, meaning the animation will be applied until a new animation is set or the track is cleared. If the track end time + * is reached, no other animations are queued for playback, and mixing from any previous animations is complete, then the + * properties keyed by the animation are set to the setup pose and the track is cleared. + * + * It may be desired to use {@link AnimationState#addEmptyAnimation()} rather than have the animation + * abruptly cease being applied. */ + trackEnd: number; + + /** Multiplier for the delta time when this track entry is updated, causing time for this animation to pass slower or + * faster. Defaults to 1. + * + * {@link #mixTime} is not affected by track entry time scale, so {@link #mixDuration} may need to be adjusted to + * match the animation speed. + * + * When using {@link AnimationState#addAnimation()} with a `delay` <= 0, note the + * {@link #delay} is set using the mix duration from the {@link AnimationStateData}, assuming time scale to be 1. If + * the time scale is not 1, the delay may need to be adjusted. + * + * See AnimationState {@link AnimationState#timeScale} for affecting all animations. */ + timeScale: number; + + /** Values < 1 mix this animation with the skeleton's current pose (usually the pose resulting from lower tracks). Defaults + * to 1, which overwrites the skeleton's current pose with this animation. + * + * Typically track 0 is used to completely pose the skeleton, then alpha is used on higher tracks. It doesn't make sense to + * use alpha on track 0 if the skeleton pose is from the last frame render. */ + alpha: number; + + /** Seconds from 0 to the {@link #getMixDuration()} when mixing from the previous animation to this animation. May be + * slightly more than `mixDuration` when the mix is complete. */ + mixTime: number; + + /** Seconds for mixing from the previous animation to this animation. Defaults to the value provided by AnimationStateData + * {@link AnimationStateData#getMix()} based on the animation before this animation (if any). + * + * A mix duration of 0 still mixes out over one frame to provide the track entry being mixed out a chance to revert the + * properties it was animating. + * + * The `mixDuration` can be set manually rather than use the value from + * {@link AnimationStateData#getMix()}. In that case, the `mixDuration` can be set for a new + * track entry only before {@link AnimationState#update(float)} is first called. + * + * When using {@link AnimationState#addAnimation()} with a `delay` <= 0, note the + * {@link #delay} is set using the mix duration from the {@link AnimationStateData}, not a mix duration set + * afterward. */ + mixDuration: number; interruptAlpha: number; totalAlpha: number; + + /** Controls how properties keyed in the animation are mixed with lower tracks. Defaults to {@link MixBlend#replace}, which + * replaces the values from the lower tracks with the animation values. {@link MixBlend#add} adds the animation values to + * the values from the lower tracks. + * + * The `mixBlend` can be set for a new track entry only before {@link AnimationState#apply()} is first + * called. */ + mixBlend = MixBlend.replace; + timelineMode = new Array(); + timelineHoldMix = new Array(); + timelinesRotation = new Array(); + + reset () { + this.next = null; + this.mixingFrom = null; + this.mixingTo = null; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + } + + /** Uses {@link #trackTime} to compute the `animationTime`, which is between {@link #animationStart} + * and {@link #animationEnd}. When the `trackTime` is 0, the `animationTime` is equal to the + * `animationStart` time. */ + getAnimationTime () { + if (this.loop) { + let duration = this.animationEnd - this.animationStart; + if (duration == 0) return this.animationStart; + return (this.trackTime % duration) + this.animationStart; + } + return Math.min(this.trackTime + this.animationStart, this.animationEnd); + } + + setAnimationLast(animationLast: number) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + } + + /** Returns true if at least one loop has been completed. + * + * See {@link AnimationStateListener#complete()}. */ + isComplete () { + return this.trackTime >= this.animationEnd - this.animationStart; + } + + /** Resets the rotation directions for mixing this entry's rotate timelines. This can be useful to avoid bones rotating the + * long way around when using {@link #alpha} and starting animations on other tracks. + * + * Mixing with {@link MixBlend#replace} involves finding a rotation between two others, which has two possible solutions: + * the short way or the long way around. The two rotations likely change over time, so which direction is the short or long + * way also changes. If the short way was always chosen, bones would flip to the other side when that direction became the + * long way. TrackEntry chooses the short way the first time it is applied and remembers that direction. */ + resetRotationDirections () { + this.timelinesRotation.length = 0; + } + } + + export class EventQueue { + objects: Array = []; + drainDisabled = false; + animState: AnimationState; + + constructor(animState: AnimationState) { + this.animState = animState; + } + + start (entry: TrackEntry) { + this.objects.push(EventType.start); + this.objects.push(entry); + this.animState.animationsChanged = true; + } + + interrupt (entry: TrackEntry) { + this.objects.push(EventType.interrupt); + this.objects.push(entry); + } + + end (entry: TrackEntry) { + this.objects.push(EventType.end); + this.objects.push(entry); + this.animState.animationsChanged = true; + } + + dispose (entry: TrackEntry) { + this.objects.push(EventType.dispose); + this.objects.push(entry); + } + + complete (entry: TrackEntry) { + this.objects.push(EventType.complete); + this.objects.push(entry); + } + + event (entry: TrackEntry, event: Event) { + this.objects.push(EventType.event); + this.objects.push(entry); + this.objects.push(event); + } + + drain () { + if (this.drainDisabled) return; + this.drainDisabled = true; + + let objects = this.objects; + let listeners = this.animState.listeners; + + for (let i = 0; i < objects.length; i += 2) { + let type = objects[i] as EventType; + let entry = objects[i + 1] as TrackEntry; + switch (type) { + case EventType.start: + if (entry.listener != null && entry.listener.start) entry.listener.start(entry); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].start) listeners[ii].start(entry); + break; + case EventType.interrupt: + if (entry.listener != null && entry.listener.interrupt) entry.listener.interrupt(entry); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].interrupt) listeners[ii].interrupt(entry); + break; + case EventType.end: + if (entry.listener != null && entry.listener.end) entry.listener.end(entry); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].end) listeners[ii].end(entry); + // Fall through. + case EventType.dispose: + if (entry.listener != null && entry.listener.dispose) entry.listener.dispose(entry); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].dispose) listeners[ii].dispose(entry); + this.animState.trackEntryPool.free(entry); + break; + case EventType.complete: + if (entry.listener != null && entry.listener.complete) entry.listener.complete(entry); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].complete) listeners[ii].complete(entry); + break; + case EventType.event: + let event = objects[i++ + 2] as Event; + if (entry.listener != null && entry.listener.event) entry.listener.event(entry, event); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].event) listeners[ii].event(entry, event); + break; + } + } + this.clear(); + + this.drainDisabled = false; + } + + clear () { + this.objects.length = 0; + } + } + + export enum EventType { + start, interrupt, end, dispose, complete, event + } + + /** The interface to implement for receiving TrackEntry events. It is always safe to call AnimationState methods when receiving + * events. + * + * See TrackEntry {@link TrackEntry#listener} and AnimationState + * {@link AnimationState#addListener()}. */ + export interface AnimationStateListener { + /** Invoked when this entry has been set as the current entry. */ + start (entry: TrackEntry): void; + + /** Invoked when another entry has replaced this entry as the current entry. This entry may continue being applied for + * mixing. */ + interrupt (entry: TrackEntry): void; + + /** Invoked when this entry is no longer the current entry and will never be applied again. */ + end (entry: TrackEntry): void; + + /** Invoked when this entry will be disposed. This may occur without the entry ever being set as the current entry. + * References to the entry should not be kept after dispose is called, as it may be destroyed or reused. */ + dispose (entry: TrackEntry): void; + + /** Invoked every time this entry's animation completes a loop. */ + complete (entry: TrackEntry): void; + + /** Invoked when this entry's animation triggers an event. */ + event (entry: TrackEntry, event: Event): void; + } + + export abstract class AnimationStateAdapter implements AnimationStateListener { + start (entry: TrackEntry) { + } + + interrupt (entry: TrackEntry) { + } + + end (entry: TrackEntry) { + } + + dispose (entry: TrackEntry) { + } + + complete (entry: TrackEntry) { + } + + event (entry: TrackEntry, event: Event) { + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/AnimationStateData.ts b/apps/module-ts/src/spine-ts/core/src/AnimationStateData.ts new file mode 100755 index 0000000..793962c --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/AnimationStateData.ts @@ -0,0 +1,76 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores mix (crossfade) durations to be applied when {@link AnimationState} animations are changed. */ + export class AnimationStateData { + /** The SkeletonData to look up animations when they are specified by name. */ + skeletonData: SkeletonData; + + animationToMixTime: Map = { }; + + /** The mix duration to use when no mix duration has been defined between two animations. */ + defaultMix = 0; + + constructor (skeletonData: SkeletonData) { + if (skeletonData == null) throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + + /** Sets a mix duration by animation name. + * + * See {@link #setMixWith()}. */ + setMix (fromName: string, toName: string, duration: number) { + let from = this.skeletonData.findAnimation(fromName); + if (from == null) throw new Error("Animation not found: " + fromName); + let to = this.skeletonData.findAnimation(toName); + if (to == null) throw new Error("Animation not found: " + toName); + this.setMixWith(from, to, duration); + } + + /** Sets the mix duration when changing from the specified animation to the other. + * + * See {@link TrackEntry#mixDuration}. */ + setMixWith (from: Animation, to: Animation, duration: number) { + if (from == null) throw new Error("from cannot be null."); + if (to == null) throw new Error("to cannot be null."); + let key = from.name + "." + to.name; + this.animationToMixTime[key] = duration; + } + + /** Returns the mix duration to use when changing from the specified animation to the other, or the {@link #defaultMix} if + * no mix duration has been set. */ + getMix (from: Animation, to: Animation) { + let key = from.name + "." + to.name; + let value = this.animationToMixTime[key]; + return value === undefined ? this.defaultMix : value; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/AssetManager.ts b/apps/module-ts/src/spine-ts/core/src/AssetManager.ts new file mode 100755 index 0000000..674374f --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/AssetManager.ts @@ -0,0 +1,269 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + export class AssetManager implements Disposable { + private pathPrefix: string; + private textureLoader: (image: HTMLImageElement) => any; + private assets: Map = {}; + private errors: Map = {}; + private toLoad = 0; + private loaded = 0; + private rawDataUris: Map = {}; + + constructor (textureLoader: (image: HTMLImageElement) => any, pathPrefix: string = "") { + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + } + + private downloadText (url: string, success: (data: string) => void, error: (status: number, responseText: string) => void) { + let request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + if (this.rawDataUris[url]) url = this.rawDataUris[url]; + request.open("GET", url, true); + request.onload = () => { + if (request.status == 200) { + success(request.responseText); + } else { + error(request.status, request.responseText); + } + } + request.onerror = () => { + error(request.status, request.responseText); + } + request.send(); + } + + private downloadBinary (url: string, success: (data: Uint8Array) => void, error: (status: number, responseText: string) => void) { + let request = new XMLHttpRequest(); + if (this.rawDataUris[url]) url = this.rawDataUris[url]; + request.open("GET", url, true); + request.responseType = "arraybuffer"; + request.onload = () => { + if (request.status == 200) { + success(new Uint8Array(request.response as ArrayBuffer)); + } else { + error(request.status, request.responseText); + } + } + request.onerror = () => { + error(request.status, request.responseText); + } + request.send(); + } + + setRawDataURI(path: string, data: string) { + this.rawDataUris[this.pathPrefix + path] = data; + } + + loadBinary(path: string, + success: (path: string, binary: Uint8Array) => void = null, + error: (path: string, error: string) => void = null) { + path = this.pathPrefix + path; + this.toLoad++; + + this.downloadBinary(path, (data: Uint8Array): void => { + this.assets[path] = data; + if (success) success(path, data); + this.toLoad--; + this.loaded++; + }, (state: number, responseText: string): void => { + this.errors[path] = `Couldn't load binary ${path}: status ${status}, ${responseText}`; + if (error) error(path, `Couldn't load binary ${path}: status ${status}, ${responseText}`); + this.toLoad--; + this.loaded++; + }); + } + + loadText(path: string, + success: (path: string, text: string) => void = null, + error: (path: string, error: string) => void = null) { + path = this.pathPrefix + path; + this.toLoad++; + + this.downloadText(path, (data: string): void => { + this.assets[path] = data; + if (success) success(path, data); + this.toLoad--; + this.loaded++; + }, (state: number, responseText: string): void => { + this.errors[path] = `Couldn't load text ${path}: status ${status}, ${responseText}`; + if (error) error(path, `Couldn't load text ${path}: status ${status}, ${responseText}`); + this.toLoad--; + this.loaded++; + }); + } + + loadTexture (path: string, + success: (path: string, image: HTMLImageElement) => void = null, + error: (path: string, error: string) => void = null) { + path = this.pathPrefix + path; + let storagePath = path; + this.toLoad++; + let img = new Image(); + img.crossOrigin = "anonymous"; + img.onload = (ev) => { + let texture = this.textureLoader(img); + this.assets[storagePath] = texture; + this.toLoad--; + this.loaded++; + if (success) success(path, img); + } + img.onerror = (ev) => { + this.errors[path] = `Couldn't load image ${path}`; + this.toLoad--; + this.loaded++; + if (error) error(path, `Couldn't load image ${path}`); + } + if (this.rawDataUris[path]) path = this.rawDataUris[path]; + img.src = path; + } + + loadTextureAtlas (path: string, + success: (path: string, atlas: TextureAtlas) => void = null, + error: (path: string, error: string) => void = null + ) { + let parent = path.lastIndexOf("/") >= 0 ? path.substring(0, path.lastIndexOf("/")) : ""; + path = this.pathPrefix + path; + this.toLoad++; + + this.downloadText(path, (atlasData: string): void => { + let pagesLoaded: any = { count: 0 }; + let atlasPages = new Array(); + try { + let atlas = new TextureAtlas(atlasData, (path: string) => { + atlasPages.push(parent == "" ? path : parent + "/" + path); + let image = document.createElement("img") as HTMLImageElement; + image.width = 16; + image.height = 16; + return new FakeTexture(image); + }); + } catch (e) { + let ex = e as Error; + this.errors[path] = `Couldn't load texture atlas ${path}: ${ex.message}`; + if (error) error(path, `Couldn't load texture atlas ${path}: ${ex.message}`); + this.toLoad--; + this.loaded++; + return; + } + + for (let atlasPage of atlasPages) { + let pageLoadError = false; + this.loadTexture(atlasPage, (imagePath: string, image: HTMLImageElement) => { + pagesLoaded.count++; + + if (pagesLoaded.count == atlasPages.length) { + if (!pageLoadError) { + try { + let atlas = new TextureAtlas(atlasData, (path: string) => { + return this.get(parent == "" ? path : parent + "/" + path); + }); + this.assets[path] = atlas; + if (success) success(path, atlas); + this.toLoad--; + this.loaded++; + } catch (e) { + let ex = e as Error; + this.errors[path] = `Couldn't load texture atlas ${path}: ${ex.message}`; + if (error) error(path, `Couldn't load texture atlas ${path}: ${ex.message}`); + this.toLoad--; + this.loaded++; + } + } else { + this.errors[path] = `Couldn't load texture atlas page ${imagePath}} of atlas ${path}`; + if (error) error(path, `Couldn't load texture atlas page ${imagePath} of atlas ${path}`); + this.toLoad--; + this.loaded++; + } + } + }, (imagePath: string, errorMessage: string) => { + pageLoadError = true; + pagesLoaded.count++; + + if (pagesLoaded.count == atlasPages.length) { + this.errors[path] = `Couldn't load texture atlas page ${imagePath}} of atlas ${path}`; + if (error) error(path, `Couldn't load texture atlas page ${imagePath} of atlas ${path}`); + this.toLoad--; + this.loaded++; + } + }); + } + }, (state: number, responseText: string): void => { + this.errors[path] = `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`; + if (error) error(path, `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`); + this.toLoad--; + this.loaded++; + }); + } + + get (path: string) { + path = this.pathPrefix + path; + return this.assets[path]; + } + + remove (path: string) { + path = this.pathPrefix + path; + let asset = this.assets[path]; + if ((asset).dispose) (asset).dispose(); + this.assets[path] = null; + } + + removeAll () { + for (let key in this.assets) { + let asset = this.assets[key]; + if ((asset).dispose) (asset).dispose(); + } + this.assets = {}; + } + + isLoadingComplete (): boolean { + return this.toLoad == 0; + } + + getToLoad (): number { + return this.toLoad; + } + + getLoaded (): number { + return this.loaded; + } + + dispose () { + this.removeAll(); + } + + hasErrors() { + return Object.keys(this.errors).length > 0; + } + + getErrors() { + return this.errors; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/AtlasAttachmentLoader.ts b/apps/module-ts/src/spine-ts/core/src/AtlasAttachmentLoader.ts new file mode 100755 index 0000000..5aa0f5f --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/AtlasAttachmentLoader.ts @@ -0,0 +1,76 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + /** An {@link AttachmentLoader} that configures attachments using texture regions from an {@link TextureAtlas}. + * + * See [Loading skeleton data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the + * Spine Runtimes Guide. */ + export class AtlasAttachmentLoader implements AttachmentLoader { + atlas: TextureAtlas; + + constructor (atlas: TextureAtlas) { + this.atlas = atlas; + } + + newRegionAttachment (skin: Skin, name: string, path: string): RegionAttachment { + let region = this.atlas.findRegion(path); + if (region == null) throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); + region.renderObject = region; + let attachment = new RegionAttachment(name); + attachment.setRegion(region); + return attachment; + } + + newMeshAttachment (skin: Skin, name: string, path: string) : MeshAttachment { + let region = this.atlas.findRegion(path); + if (region == null) throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); + region.renderObject = region; + let attachment = new MeshAttachment(name); + attachment.region = region; + return attachment; + } + + newBoundingBoxAttachment (skin: Skin, name: string) : BoundingBoxAttachment { + return new BoundingBoxAttachment(name); + } + + newPathAttachment (skin: Skin, name: string): PathAttachment { + return new PathAttachment(name); + } + + newPointAttachment(skin: Skin, name: string): PointAttachment { + return new PointAttachment(name); + } + + newClippingAttachment(skin: Skin, name: string): ClippingAttachment { + return new ClippingAttachment(name); + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/BlendMode.ts b/apps/module-ts/src/spine-ts/core/src/BlendMode.ts new file mode 100755 index 0000000..c20d27d --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/BlendMode.ts @@ -0,0 +1,39 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Determines how images are blended with existing pixels when drawn. */ + export enum BlendMode { + Normal, + Additive, + Multiply, + Screen + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/Bone.ts b/apps/module-ts/src/spine-ts/core/src/Bone.ts new file mode 100755 index 0000000..819521f --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/Bone.ts @@ -0,0 +1,383 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores a bone's current pose. + * + * A bone has a local transform which is used to compute its world transform. A bone also has an applied transform, which is a + * local transform that can be applied to compute the world transform. The local transform and applied transform may differ if a + * constraint or application code modifies the world transform after it was computed from the local transform. */ + export class Bone implements Updatable { + /** The bone's setup pose data. */ + data: BoneData; + + /** The skeleton this bone belongs to. */ + skeleton: Skeleton; + + /** The parent bone, or null if this is the root bone. */ + parent: Bone; + + /** The immediate children of this bone. */ + children = new Array(); + + /** The local x translation. */ + x = 0; + + /** The local y translation. */ + y = 0; + + /** The local rotation in degrees, counter clockwise. */ + rotation = 0; + + /** The local scaleX. */ + scaleX = 0; + + /** The local scaleY. */ + scaleY = 0; + + /** The local shearX. */ + shearX = 0; + + /** The local shearY. */ + shearY = 0; + + /** The applied local x translation. */ + ax = 0; + + /** The applied local y translation. */ + ay = 0; + + /** The applied local rotation in degrees, counter clockwise. */ + arotation = 0; + + /** The applied local scaleX. */ + ascaleX = 0; + + /** The applied local scaleY. */ + ascaleY = 0; + + /** The applied local shearX. */ + ashearX = 0; + + /** The applied local shearY. */ + ashearY = 0; + + /** If true, the applied transform matches the world transform. If false, the world transform has been modified since it was + * computed and {@link #updateAppliedTransform()} must be called before accessing the applied transform. */ + appliedValid = false; + + /** Part of the world transform matrix for the X axis. If changed, {@link #appliedValid} should be set to false. */ + a = 0; + + /** Part of the world transform matrix for the Y axis. If changed, {@link #appliedValid} should be set to false. */ + b = 0; + + /** Part of the world transform matrix for the X axis. If changed, {@link #appliedValid} should be set to false. */ + c = 0; + + /** Part of the world transform matrix for the Y axis. If changed, {@link #appliedValid} should be set to false. */ + d = 0; + + /** The world X position. If changed, {@link #appliedValid} should be set to false. */ + worldY = 0; + + /** The world Y position. If changed, {@link #appliedValid} should be set to false. */ + worldX = 0; + + sorted = false; + active = false; + + /** @param parent May be null. */ + constructor (data: BoneData, skeleton: Skeleton, parent: Bone) { + if (data == null) throw new Error("data cannot be null."); + if (skeleton == null) throw new Error("skeleton cannot be null."); + this.data = data; + this.skeleton = skeleton; + this.parent = parent; + this.setToSetupPose(); + } + + /** Returns false when the bone has not been computed because {@link BoneData#skinRequired} is true and the + * {@link Skeleton#skin active skin} does not {@link Skin#bones contain} this bone. */ + isActive () { + return this.active; + } + + /** Same as {@link #updateWorldTransform()}. This method exists for Bone to implement {@link Updatable}. */ + update () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + } + + /** Computes the world transform using the parent bone and this bone's local transform. + * + * See {@link #updateWorldTransformWith()}. */ + updateWorldTransform () { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + } + + /** Computes the world transform using the parent bone and the specified local transform. Child bones are not updated. + * + * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine + * Runtimes Guide. */ + updateWorldTransformWith (x: number, y: number, rotation: number, scaleX: number, scaleY: number, shearX: number, shearY: number) { + this.ax = x; + this.ay = y; + this.arotation = rotation; + this.ascaleX = scaleX; + this.ascaleY = scaleY; + this.ashearX = shearX; + this.ashearY = shearY; + this.appliedValid = true; + + let parent = this.parent; + if (parent == null) { // Root bone. + let skeleton = this.skeleton; + let rotationY = rotation + 90 + shearY; + let sx = skeleton.scaleX; + let sy = skeleton.scaleY; + this.a = MathUtils.cosDeg(rotation + shearX) * scaleX * sx; + this.b = MathUtils.cosDeg(rotationY) * scaleY * sx; + this.c = MathUtils.sinDeg(rotation + shearX) * scaleX * sy; + this.d = MathUtils.sinDeg(rotationY) * scaleY * sy; + this.worldX = x * sx + skeleton.x; + this.worldY = y * sy + skeleton.y; + return; + } + + let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + this.worldX = pa * x + pb * y + parent.worldX; + this.worldY = pc * x + pd * y + parent.worldY; + + switch (this.data.transformMode) { + case TransformMode.Normal: { + let rotationY = rotation + 90 + shearY; + let la = MathUtils.cosDeg(rotation + shearX) * scaleX; + let lb = MathUtils.cosDeg(rotationY) * scaleY; + let lc = MathUtils.sinDeg(rotation + shearX) * scaleX; + let ld = MathUtils.sinDeg(rotationY) * scaleY; + this.a = pa * la + pb * lc; + this.b = pa * lb + pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + return; + } + case TransformMode.OnlyTranslation: { + let rotationY = rotation + 90 + shearY; + this.a = MathUtils.cosDeg(rotation + shearX) * scaleX; + this.b = MathUtils.cosDeg(rotationY) * scaleY; + this.c = MathUtils.sinDeg(rotation + shearX) * scaleX; + this.d = MathUtils.sinDeg(rotationY) * scaleY; + break; + } + case TransformMode.NoRotationOrReflection: { + let s = pa * pa + pc * pc; + let prx = 0; + if (s > 0.0001) { + s = Math.abs(pa * pd - pb * pc) / s; + pa /= this.skeleton.scaleX; + pc /= this.skeleton.scaleY; + pb = pc * s; + pd = pa * s; + prx = Math.atan2(pc, pa) * MathUtils.radDeg; + } else { + pa = 0; + pc = 0; + prx = 90 - Math.atan2(pd, pb) * MathUtils.radDeg; + } + let rx = rotation + shearX - prx; + let ry = rotation + shearY - prx + 90; + let la = MathUtils.cosDeg(rx) * scaleX; + let lb = MathUtils.cosDeg(ry) * scaleY; + let lc = MathUtils.sinDeg(rx) * scaleX; + let ld = MathUtils.sinDeg(ry) * scaleY; + this.a = pa * la - pb * lc; + this.b = pa * lb - pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + break; + } + case TransformMode.NoScale: + case TransformMode.NoScaleOrReflection: { + let cos = MathUtils.cosDeg(rotation); + let sin = MathUtils.sinDeg(rotation); + let za = (pa * cos + pb * sin) / this.skeleton.scaleX; + let zc = (pc * cos + pd * sin) / this.skeleton.scaleY; + let s = Math.sqrt(za * za + zc * zc); + if (s > 0.00001) s = 1 / s; + za *= s; + zc *= s; + s = Math.sqrt(za * za + zc * zc); + if (this.data.transformMode == TransformMode.NoScale + && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) s = -s; + let r = Math.PI / 2 + Math.atan2(zc, za); + let zb = Math.cos(r) * s; + let zd = Math.sin(r) * s; + let la = MathUtils.cosDeg(shearX) * scaleX; + let lb = MathUtils.cosDeg(90 + shearY) * scaleY; + let lc = MathUtils.sinDeg(shearX) * scaleX; + let ld = MathUtils.sinDeg(90 + shearY) * scaleY; + this.a = za * la + zb * lc; + this.b = za * lb + zb * ld; + this.c = zc * la + zd * lc; + this.d = zc * lb + zd * ld; + break; + } + } + this.a *= this.skeleton.scaleX; + this.b *= this.skeleton.scaleX; + this.c *= this.skeleton.scaleY; + this.d *= this.skeleton.scaleY; + } + + /** Sets this bone's local transform to the setup pose. */ + setToSetupPose () { + let data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + this.shearX = data.shearX; + this.shearY = data.shearY; + } + + /** The world rotation for the X axis, calculated using {@link #a} and {@link #c}. */ + getWorldRotationX () { + return Math.atan2(this.c, this.a) * MathUtils.radDeg; + } + + /** The world rotation for the Y axis, calculated using {@link #b} and {@link #d}. */ + getWorldRotationY () { + return Math.atan2(this.d, this.b) * MathUtils.radDeg; + } + + /** The magnitude (always positive) of the world scale X, calculated using {@link #a} and {@link #c}. */ + getWorldScaleX () { + return Math.sqrt(this.a * this.a + this.c * this.c); + } + + /** The magnitude (always positive) of the world scale Y, calculated using {@link #b} and {@link #d}. */ + getWorldScaleY () { + return Math.sqrt(this.b * this.b + this.d * this.d); + } + + /** Computes the applied transform values from the world transform. This allows the applied transform to be accessed after the + * world transform has been modified (by a constraint, {@link #rotateWorld()}, etc). + * + * If {@link #updateWorldTransform()} has been called for a bone and {@link #appliedValid} is false, then + * {@link #updateAppliedTransform()} must be called before accessing the applied transform. + * + * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The applied transform after + * calling this method is equivalent to the local tranform used to compute the world transform, but may not be identical. */ + updateAppliedTransform () { + this.appliedValid = true; + let parent = this.parent; + if (parent == null) { + this.ax = this.worldX; + this.ay = this.worldY; + this.arotation = Math.atan2(this.c, this.a) * MathUtils.radDeg; + this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c); + this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d); + this.ashearX = 0; + this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * MathUtils.radDeg; + return; + } + let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + let pid = 1 / (pa * pd - pb * pc); + let dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY; + this.ax = (dx * pd * pid - dy * pb * pid); + this.ay = (dy * pa * pid - dx * pc * pid); + let ia = pid * pd; + let id = pid * pa; + let ib = pid * pb; + let ic = pid * pc; + let ra = ia * this.a - ib * this.c; + let rb = ia * this.b - ib * this.d; + let rc = id * this.c - ic * this.a; + let rd = id * this.d - ic * this.b; + this.ashearX = 0; + this.ascaleX = Math.sqrt(ra * ra + rc * rc); + if (this.ascaleX > 0.0001) { + let det = ra * rd - rb * rc; + this.ascaleY = det / this.ascaleX; + this.ashearY = Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg; + this.arotation = Math.atan2(rc, ra) * MathUtils.radDeg; + } else { + this.ascaleX = 0; + this.ascaleY = Math.sqrt(rb * rb + rd * rd); + this.ashearY = 0; + this.arotation = 90 - Math.atan2(rd, rb) * MathUtils.radDeg; + } + } + + /** Transforms a point from world coordinates to the bone's local coordinates. */ + worldToLocal (world: Vector2) { + let a = this.a, b = this.b, c = this.c, d = this.d; + let invDet = 1 / (a * d - b * c); + let x = world.x - this.worldX, y = world.y - this.worldY; + world.x = (x * d * invDet - y * b * invDet); + world.y = (y * a * invDet - x * c * invDet); + return world; + } + + /** Transforms a point from the bone's local coordinates to world coordinates. */ + localToWorld (local: Vector2) { + let x = local.x, y = local.y; + local.x = x * this.a + y * this.b + this.worldX; + local.y = x * this.c + y * this.d + this.worldY; + return local; + } + + /** Transforms a world rotation to a local rotation. */ + worldToLocalRotation (worldRotation: number) { + let sin = MathUtils.sinDeg(worldRotation), cos = MathUtils.cosDeg(worldRotation); + return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * MathUtils.radDeg + this.rotation - this.shearX; + } + + /** Transforms a local rotation to a world rotation. */ + localToWorldRotation (localRotation: number) { + localRotation -= this.rotation - this.shearX; + let sin = MathUtils.sinDeg(localRotation), cos = MathUtils.cosDeg(localRotation); + return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * MathUtils.radDeg; + } + + /** Rotates the world transform the specified amount and sets {@link #appliedValid} to false. + * {@link #updateWorldTransform()} will need to be called on any child bones, recursively, and any constraints reapplied. */ + rotateWorld (degrees: number) { + let a = this.a, b = this.b, c = this.c, d = this.d; + let cos = MathUtils.cosDeg(degrees), sin = MathUtils.sinDeg(degrees); + this.a = cos * a - sin * c; + this.b = cos * b - sin * d; + this.c = sin * a + cos * c; + this.d = sin * b + cos * d; + this.appliedValid = false; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/BoneData.ts b/apps/module-ts/src/spine-ts/core/src/BoneData.ts new file mode 100755 index 0000000..b75601e --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/BoneData.ts @@ -0,0 +1,92 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores the setup pose for a {@link Bone}. */ + export class BoneData { + /** The index of the bone in {@link Skeleton#getBones()}. */ + index: number; + + /** The name of the bone, which is unique across all bones in the skeleton. */ + name: string; + + /** @returns May be null. */ + parent: BoneData; + + /** The bone's length. */ + length: number; + + /** The local x translation. */ + x = 0; + + /** The local y translation. */ + y = 0; + + /** The local rotation. */ + rotation = 0; + + /** The local scaleX. */ + scaleX = 1; + + /** The local scaleY. */ + scaleY = 1; + + /** The local shearX. */ + shearX = 0; + + /** The local shearX. */ + shearY = 0; + + /** The transform mode for how parent world transforms affect this bone. */ + transformMode = TransformMode.Normal; + + /** When true, {@link Skeleton#updateWorldTransform()} only updates this bone if the {@link Skeleton#skin} contains this + * bone. + * @see Skin#bones */ + skinRequired = false; + + /** The color of the bone as it was in Spine. Available only when nonessential data was exported. Bones are not usually + * rendered at runtime. */ + color = new Color(); + + constructor (index: number, name: string, parent: BoneData) { + if (index < 0) throw new Error("index must be >= 0."); + if (name == null) throw new Error("name cannot be null."); + this.index = index; + this.name = name; + this.parent = parent; + } + } + + /** Determines how a bone inherits world transforms from parent bones. */ + export enum TransformMode { + Normal, OnlyTranslation, NoRotationOrReflection, NoScale, NoScaleOrReflection + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/ConstraintData.ts b/apps/module-ts/src/spine-ts/core/src/ConstraintData.ts new file mode 100755 index 0000000..e1c6c5d --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/ConstraintData.ts @@ -0,0 +1,35 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + /** The base class for all constraint datas. */ + export abstract class ConstraintData { + constructor(public name: string, public order: number, public skinRequired: boolean) { } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/Event.ts b/apps/module-ts/src/spine-ts/core/src/Event.ts new file mode 100755 index 0000000..fcc5da3 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/Event.ts @@ -0,0 +1,52 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores the current pose values for an {@link Event}. + * + * See Timeline {@link Timeline#apply()}, + * AnimationStateListener {@link AnimationStateListener#event()}, and + * [Events](http://esotericsoftware.com/spine-events) in the Spine User Guide. */ + export class Event { + data: EventData; + intValue: number; + floatValue: number; + stringValue: string; + time: number; + volume: number; + balance: number; + + constructor (time: number, data: EventData) { + if (data == null) throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/EventData.ts b/apps/module-ts/src/spine-ts/core/src/EventData.ts new file mode 100755 index 0000000..7413779 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/EventData.ts @@ -0,0 +1,47 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + /** Stores the setup pose values for an {@link Event}. + * + * See [Events](http://esotericsoftware.com/spine-events) in the Spine User Guide. */ + export class EventData { + name: string; + intValue: number; + floatValue: number; + stringValue: string; + audioPath: string; + volume: number; + balance: number; + + constructor (name: string) { + this.name = name; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/IkConstraint.ts b/apps/module-ts/src/spine-ts/core/src/IkConstraint.ts new file mode 100755 index 0000000..c8fbf76 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/IkConstraint.ts @@ -0,0 +1,297 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores the current pose for an IK constraint. An IK constraint adjusts the rotation of 1 or 2 constrained bones so the tip of + * the last bone is as close to the target bone as possible. + * + * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */ + export class IkConstraint implements Updatable { + /** The IK constraint's setup pose data. */ + data: IkConstraintData; + + /** The bones that will be modified by this IK constraint. */ + bones: Array; + + /** The bone that is the IK target. */ + target: Bone; + + /** Controls the bend direction of the IK bones, either 1 or -1. */ + bendDirection = 0; + + /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */ + compress = false; + + /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained + * and the parent bone has local nonuniform scale, stretch is not applied. */ + stretch = false; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ + mix = 1; + + /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */ + softness = 0; + active = false; + + constructor (data: IkConstraintData, skeleton: Skeleton) { + if (data == null) throw new Error("data cannot be null."); + if (skeleton == null) throw new Error("skeleton cannot be null."); + this.data = data; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + + this.bones = new Array(); + for (let i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + + isActive () { + return this.active; + } + + /** Applies the constraint to the constrained bones. */ + apply () { + this.update(); + } + + update () { + let target = this.target; + let bones = this.bones; + switch (bones.length) { + case 1: + this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); + break; + case 2: + this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.softness, this.mix); + break; + } + } + + /** Applies 1 bone IK. The target is specified in the world coordinate system. */ + apply1 (bone: Bone, targetX: number, targetY: number, compress: boolean, stretch: boolean, uniform: boolean, alpha: number) { + if (!bone.appliedValid) bone.updateAppliedTransform(); + let p = bone.parent; + + let pa = p.a, pb = p.b, pc = p.c, pd = p.d; + let rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0; + + switch(bone.data.transformMode) { + case TransformMode.OnlyTranslation: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + break; + case TransformMode.NoRotationOrReflection: + let s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + let sa = pa / bone.skeleton.scaleX; + let sc = pc / bone.skeleton.scaleY; + pb = -sc * s * bone.skeleton.scaleX; + pd = sa * s * bone.skeleton.scaleY; + rotationIK += Math.atan2(sc, sa) * MathUtils.radDeg; + // Fall through + default: + let x = targetX - p.worldX, y = targetY - p.worldY; + let d = pa * pd - pb * pc; + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + } + rotationIK += Math.atan2(ty, tx) * MathUtils.radDeg; + if (bone.ascaleX < 0) rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; + else if (rotationIK < -180) rotationIK += 360; + let sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { + switch (bone.data.transformMode) { + case TransformMode.NoScale: + case TransformMode.NoScaleOrReflection: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + } + let b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty); + if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) { + let s = (dd / b - 1) * alpha + 1; + sx *= s; + if (uniform) sy *= s; + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, + bone.ashearY); + } + + /** Applies 2 bone IK. The target is specified in the world coordinate system. + * @param child A direct descendant of the parent bone. */ + apply2 (parent: Bone, child: Bone, targetX: number, targetY: number, bendDir: number, stretch: boolean, softness: number, alpha: number) { + if (alpha == 0) { + child.updateWorldTransform(); + return; + } + if (!parent.appliedValid) parent.updateAppliedTransform(); + if (!child.appliedValid) child.updateAppliedTransform(); + let px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX; + let os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } else + os2 = 0; + let cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + let u = Math.abs(psx - psy) <= 0.0001; + if (!u) { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } else { + cy = child.ay; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } + let pp = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + let id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + let dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + let l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; + if (l1 < 0.0001) { + this.apply1(parent, targetX, targetY, false, stretch, false, alpha); + child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + let tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + let dd = tx * tx + ty * ty; + if (softness != 0) { + softness *= psx * (csx + 1) / 2; + let td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + let p = Math.min(1, sd / (softness * 2)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: + if (u) { + l2 *= psx; + let cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) + cos = -1; + else if (cos > 1) { + cos = 1; + if (stretch) sx *= (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + } + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } else { + a = psx * l2; + b = psy * l2; + let aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + let c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + let q = Math.sqrt(d); + if (c1 < 0) q = -q; + q = -(c1 + q) / 2; + let r0 = q / c2, r1 = c / q; + let r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + if (r * r <= dd) { + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; + } + } + let minAngle = MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + let maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; + } + } + if (dd <= (minDist + maxDist) / 2) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + let os = Math.atan2(cy, cx) * s2; + let rotation = parent.arotation; + a1 = (a1 - os) * MathUtils.radDeg + os1 - rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) a1 += 360; + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0); + rotation = child.arotation; + a2 = ((a2 + os) * MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) a2 += 360; + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/IkConstraintData.ts b/apps/module-ts/src/spine-ts/core/src/IkConstraintData.ts new file mode 100755 index 0000000..d2dd212 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/IkConstraintData.ts @@ -0,0 +1,66 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores the setup pose for an {@link IkConstraint}. + *

              + * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */ + export class IkConstraintData extends ConstraintData { + /** The bones that are constrained by this IK constraint. */ + bones = new Array(); + + /** The bone that is the IK target. */ + target: BoneData; + + /** Controls the bend direction of the IK bones, either 1 or -1. */ + bendDirection = 1; + + /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */ + compress = false; + + /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained + * and the parent bone has local nonuniform scale, stretch is not applied. */ + stretch = false; + + /** When true, only a single bone is being constrained, and {@link #getCompress()} or {@link #getStretch()} is used, the bone + * is scaled on both the X and Y axes. */ + uniform = false; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ + mix = 1; + + /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */ + softness = 0; + + constructor (name: string) { + super(name, 0, false); + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/PathConstraint.ts b/apps/module-ts/src/spine-ts/core/src/PathConstraint.ts new file mode 100755 index 0000000..229ec4e --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/PathConstraint.ts @@ -0,0 +1,449 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores the current pose for a path constraint. A path constraint adjusts the rotation, translation, and scale of the + * constrained bones so they follow a {@link PathAttachment}. + * + * See [Path constraints](http://esotericsoftware.com/spine-path-constraints) in the Spine User Guide. */ + export class PathConstraint implements Updatable { + static NONE = -1; static BEFORE = -2; static AFTER = -3; + static epsilon = 0.00001; + + /** The path constraint's setup pose data. */ + data: PathConstraintData; + + /** The bones that will be modified by this path constraint. */ + bones: Array; + + /** The slot whose path attachment will be used to constrained the bones. */ + target: Slot; + + /** The position along the path. */ + position = 0; + + /** The spacing between bones. */ + spacing = 0; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ + rotateMix = 0; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained translations. */ + translateMix = 0; + + spaces = new Array(); positions = new Array(); + world = new Array(); curves = new Array(); lengths = new Array(); + segments = new Array(); + + active = false; + + constructor (data: PathConstraintData, skeleton: Skeleton) { + if (data == null) throw new Error("data cannot be null."); + if (skeleton == null) throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (let i = 0, n = data.bones.length; i < n; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findSlot(data.target.name); + this.position = data.position; + this.spacing = data.spacing; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + } + + isActive () { + return this.active; + } + + /** Applies the constraint to the constrained bones. */ + apply () { + this.update(); + } + + update () { + let attachment = this.target.getAttachment(); + if (!(attachment instanceof PathAttachment)) return; + + let rotateMix = this.rotateMix, translateMix = this.translateMix; + let translate = translateMix > 0, rotate = rotateMix > 0; + if (!translate && !rotate) return; + + let data = this.data; + let percentSpacing = data.spacingMode == SpacingMode.Percent; + let rotateMode = data.rotateMode; + let tangents = rotateMode == RotateMode.Tangent, scale = rotateMode == RotateMode.ChainScale; + let boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + let bones = this.bones; + let spaces = Utils.setArraySize(this.spaces, spacesCount), lengths: Array = null; + let spacing = this.spacing; + if (scale || !percentSpacing) { + if (scale) lengths = Utils.setArraySize(this.lengths, boneCount); + let lengthSpacing = data.spacingMode == SpacingMode.Length; + for (let i = 0, n = spacesCount - 1; i < n;) { + let bone = bones[i]; + let setupLength = bone.data.length; + if (setupLength < PathConstraint.epsilon) { + if (scale) lengths[i] = 0; + spaces[++i] = 0; + } else if (percentSpacing) { + if (scale) { + let x = setupLength * bone.a, y = setupLength * bone.c; + let length = Math.sqrt(x * x + y * y); + lengths[i] = length; + } + spaces[++i] = spacing; + } else { + let x = setupLength * bone.a, y = setupLength * bone.c; + let length = Math.sqrt(x * x + y * y); + if (scale) lengths[i] = length; + spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength; + } + } + } else { + for (let i = 1; i < spacesCount; i++) + spaces[i] = spacing; + } + + let positions = this.computeWorldPositions(attachment, spacesCount, tangents, + data.positionMode == PositionMode.Percent, percentSpacing); + let boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + let tip = false; + if (offsetRotation == 0) + tip = rotateMode == RotateMode.Chain; + else { + tip = false; + let p = this.target.bone; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? MathUtils.degRad : -MathUtils.degRad; + } + for (let i = 0, p = 3; i < boneCount; i++, p += 3) { + let bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * translateMix; + bone.worldY += (boneY - bone.worldY) * translateMix; + let x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + let length = lengths[i]; + if (length != 0) { + let s = (Math.sqrt(dx * dx + dy * dy) / length - 1) * rotateMix + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + let a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + if (tangents) + r = positions[p - 1]; + else if (spaces[i + 1] == 0) + r = positions[p + 2]; + else + r = Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + let length = bone.data.length; + boneX += (length * (cos * a - sin * c) - dx) * rotateMix; + boneY += (length * (sin * a + cos * c) - dy) * rotateMix; + } else { + r += offsetRotation; + } + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) // + r += MathUtils.PI2; + r *= rotateMix; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.appliedValid = false; + } + } + + computeWorldPositions (path: PathAttachment, spacesCount: number, tangents: boolean, percentPosition: boolean, + percentSpacing: boolean) { + let target = this.target; + let position = this.position; + let spaces = this.spaces, out = Utils.setArraySize(this.positions, spacesCount * 3 + 2), world: Array = null; + let closed = path.closed; + let verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE; + + if (!path.constantSpeed) { + let lengths = path.lengths; + curveCount -= closed ? 1 : 2; + let pathLength = lengths[curveCount]; + if (percentPosition) position *= pathLength; + if (percentSpacing) { + for (let i = 1; i < spacesCount; i++) + spaces[i] *= pathLength; + } + world = Utils.setArraySize(this.world, 8); + for (let i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + let space = spaces[i]; + position += space; + let p = position; + + if (closed) { + p %= pathLength; + if (p < 0) p += pathLength; + curve = 0; + } else if (p < 0) { + if (prevCurve != PathConstraint.BEFORE) { + prevCurve = PathConstraint.BEFORE; + path.computeWorldVertices(target, 2, 4, world, 0, 2); + } + this.addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength) { + if (prevCurve != PathConstraint.AFTER) { + prevCurve = PathConstraint.AFTER; + path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength, world, 0, out, o); + continue; + } + + // Determine curve containing position. + for (;; curve++) { + let length = lengths[curve]; + if (p > length) continue; + if (curve == 0) + p /= length; + else { + let prev = lengths[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); + path.computeWorldVertices(target, 0, 4, world, 4, 2); + } else + path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2); + } + this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, + tangents || (i > 0 && space == 0)); + } + return out; + } + + // World vertices. + if (closed) { + verticesLength += 2; + world = Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); + path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } else { + curveCount--; + verticesLength -= 4; + world = Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + + // Curve lengths. + let curves = Utils.setArraySize(this.curves, curveCount); + let pathLength = 0; + let x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + let tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (let i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (percentPosition) + position *= pathLength; + else + position *= pathLength / path.lengths[curveCount - 1]; + if (percentSpacing) { + for (let i = 1; i < spacesCount; i++) + spaces[i] *= pathLength; + } + + let segments = this.segments; + let curveLength = 0; + for (let i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + let space = spaces[i]; + position += space; + let p = position; + + if (closed) { + p %= pathLength; + if (p < 0) p += pathLength; + curve = 0; + } else if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + + // Determine curve containing position. + for (;; curve++) { + let length = curves[curve]; + if (p > length) continue; + if (curve == 0) + p /= length; + else { + let prev = curves[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + + // Curve segment lengths. + if (curve != prevCurve) { + prevCurve = curve; + let ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + + // Weight by segment length. + p *= curveLength; + for (;; segment++) { + let length = segments[segment]; + if (p > length) continue; + if (segment == 0) + p /= length; + else { + let prev = segments[segment - 1]; + p = segment + (p - prev) / (length - prev); + } + break; + } + this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); + } + return out; + } + + addBeforePosition (p: number, temp: Array, i: number, out: Array, o: number) { + let x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + + addAfterPosition (p: number, temp: Array, i: number, out: Array, o: number) { + let x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + + addCurvePosition (p: number, x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, + out: Array, o: number, tangents: boolean) { + if (p == 0 || isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + let tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + let ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + let x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) { + if (p < 0.001) + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + else + out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/PathConstraintData.ts b/apps/module-ts/src/spine-ts/core/src/PathConstraintData.ts new file mode 100755 index 0000000..1d9415d --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/PathConstraintData.ts @@ -0,0 +1,92 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores the setup pose for a {@link PathConstraint}. + * + * See [Path constraints](http://esotericsoftware.com/spine-path-constraints) in the Spine User Guide. */ + export class PathConstraintData extends ConstraintData { + + /** The bones that will be modified by this path constraint. */ + bones = new Array(); + + /** The slot whose path attachment will be used to constrained the bones. */ + target: SlotData; + + /** The mode for positioning the first bone on the path. */ + positionMode: PositionMode; + + /** The mode for positioning the bones after the first bone on the path. */ + spacingMode: SpacingMode; + + /** The mode for adjusting the rotation of the bones. */ + rotateMode: RotateMode; + + /** An offset added to the constrained bone rotation. */ + offsetRotation: number; + + /** The position along the path. */ + position: number; + + /** The spacing between bones. */ + spacing: number; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ + rotateMix: number; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained translations. */ + translateMix: number; + + constructor (name: string) { + super(name, 0, false); + } + } + + /** Controls how the first bone is positioned along the path. + * + * See [Position mode](http://esotericsoftware.com/spine-path-constraints#Position-mode) in the Spine User Guide. */ + export enum PositionMode { + Fixed, Percent + } + + /** Controls how bones after the first bone are positioned along the path. + * + * [Spacing mode](http://esotericsoftware.com/spine-path-constraints#Spacing-mode) in the Spine User Guide. */ + export enum SpacingMode { + Length, Fixed, Percent + } + + /** Controls how bones are rotated, translated, and scaled to match the path. + * + * [Rotate mode](http://esotericsoftware.com/spine-path-constraints#Rotate-mod) in the Spine User Guide. */ + export enum RotateMode { + Tangent, Chain, ChainScale + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/SharedAssetManager.ts b/apps/module-ts/src/spine-ts/core/src/SharedAssetManager.ts new file mode 100755 index 0000000..cce01bc --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/SharedAssetManager.ts @@ -0,0 +1,221 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + class Assets { + clientId: string; + toLoad = new Array(); + assets: Map = {}; + textureLoader: (image: HTMLImageElement | ImageBitmap) => any; + + constructor(clientId: string) { + this.clientId = clientId; + } + + loaded() { + let i = 0; + for (let v in this.assets) i++; + return i; + } + } + + export class SharedAssetManager implements Disposable { + private pathPrefix: string; + private clientAssets: Map = {}; + private queuedAssets: Map = {}; + private rawAssets: Map = {} + private errors: Map = {}; + + constructor (pathPrefix: string = "") { + this.pathPrefix = pathPrefix; + } + + private queueAsset(clientId: string, textureLoader: (image: HTMLImageElement | ImageBitmap) => any, path: string): boolean { + let clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) { + clientAssets = new Assets(clientId); + this.clientAssets[clientId] = clientAssets; + } + if (textureLoader !== null) clientAssets.textureLoader = textureLoader; + clientAssets.toLoad.push(path); + + // check if already queued, in which case we can skip actual + // loading + if (this.queuedAssets[path] === path) { + return false; + } else { + this.queuedAssets[path] = path; + return true; + } + } + + loadText(clientId: string, path: string) { + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) return; + let request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = () => { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + this.rawAssets[path] = request.responseText; + } else { + this.errors[path] = `Couldn't load text ${path}: status ${request.status}, ${request.responseText}`; + } + } + }; + request.open("GET", path, true); + request.send(); + } + + loadJson(clientId: string, path: string) { + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, null, path)) return; + let request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.onreadystatechange = () => { + if (request.readyState == XMLHttpRequest.DONE) { + if (request.status >= 200 && request.status < 300) { + this.rawAssets[path] = JSON.parse(request.responseText); + } else { + this.errors[path] = `Couldn't load text ${path}: status ${request.status}, ${request.responseText}`; + } + } + }; + request.open("GET", path, true); + request.send(); + } + + loadTexture (clientId: string, textureLoader: (image: HTMLImageElement | ImageBitmap) => any, path: string) { + path = this.pathPrefix + path; + if (!this.queueAsset(clientId, textureLoader, path)) return; + + let isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + let isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + + if (isWebWorker) { + // For webworker use fetch instead of Image() + const options = {mode: "cors"}; + fetch(path, options).then( (response) => { + if (!response.ok) { + this.errors[path] = "Couldn't load image " + path; + } + return response.blob(); + }).then( (blob) => { + return createImageBitmap(blob, { + premultiplyAlpha: 'none', + colorSpaceConversion: 'none', + }); + }).then( (bitmap) => { + this.rawAssets[path] = bitmap; + }); + } else { + let img = new Image(); + img.crossOrigin = "anonymous"; + img.onload = (ev) => { + this.rawAssets[path] = img; + } + img.onerror = (ev) => { + this.errors[path] = `Couldn't load image ${path}`; + } + img.src = path; + } + } + + get (clientId: string, path: string) { + path = this.pathPrefix + path; + let clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) return true; + return clientAssets.assets[path]; + } + + private updateClientAssets(clientAssets: Assets): void { + let isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); + let isWebWorker = !isBrowser && typeof importScripts !== 'undefined'; + + for (let i = 0; i < clientAssets.toLoad.length; i++) { + let path = clientAssets.toLoad[i]; + let asset = clientAssets.assets[path]; + if (asset === null || asset === undefined) { + let rawAsset = this.rawAssets[path]; + if (rawAsset === null || rawAsset === undefined) continue; + + if (isWebWorker) + { + if (rawAsset instanceof ImageBitmap) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } else { + clientAssets.assets[path] = rawAsset; + } + } else { + if (rawAsset instanceof HTMLImageElement) { + clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); + } else { + clientAssets.assets[path] = rawAsset; + } + } + } + } + } + + isLoadingComplete (clientId: string): boolean { + let clientAssets = this.clientAssets[clientId]; + if (clientAssets === null || clientAssets === undefined) return true; + this.updateClientAssets(clientAssets); + return clientAssets.toLoad.length == clientAssets.loaded(); + + } + + /*remove (clientId: string, path: string) { + path = this.pathPrefix + path; + let asset = this.assets[path]; + if ((asset).dispose) (asset).dispose(); + this.assets[path] = null; + } + + removeAll () { + for (let key in this.assets) { + let asset = this.assets[key]; + if ((asset).dispose) (asset).dispose(); + } + this.assets = {}; + }*/ + + dispose () { + // this.removeAll(); + } + + hasErrors() { + return Object.keys(this.errors).length > 0; + } + + getErrors() { + return this.errors; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/Skeleton.ts b/apps/module-ts/src/spine-ts/core/src/Skeleton.ts new file mode 100755 index 0000000..af2b68c --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/Skeleton.ts @@ -0,0 +1,612 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores the current pose for a skeleton. + * + * See [Instance objects](http://esotericsoftware.com/spine-runtime-architecture#Instance-objects) in the Spine Runtimes Guide. */ + export class Skeleton { + /** The skeleton's setup pose data. */ + data: SkeletonData; + + /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */ + bones: Array; + + /** The skeleton's slots. */ + slots: Array; + + /** The skeleton's slots in the order they should be drawn. The returned array may be modified to change the draw order. */ + drawOrder: Array; + + /** The skeleton's IK constraints. */ + ikConstraints: Array; + + /** The skeleton's transform constraints. */ + transformConstraints: Array; + + /** The skeleton's path constraints. */ + pathConstraints: Array; + + /** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link #updateCache()}. */ + _updateCache = new Array(); + updateCacheReset = new Array(); + + /** The skeleton's current skin. May be null. */ + skin: Skin; + + /** The color to tint all the skeleton's attachments. */ + color: Color; + + /** Returns the skeleton's time. This can be used for tracking, such as with Slot {@link Slot#attachmentTime}. + *

              + * See {@link #update()}. */ + time = 0; + + /** Scales the entire skeleton on the X axis. This affects all bones, even if the bone's transform mode disallows scale + * inheritance. */ + scaleX = 1; + + /** Scales the entire skeleton on the Y axis. This affects all bones, even if the bone's transform mode disallows scale + * inheritance. */ + scaleY = 1; + + /** Sets the skeleton X position, which is added to the root bone worldX position. */ + x = 0; + + /** Sets the skeleton Y position, which is added to the root bone worldY position. */ + y = 0; + + constructor (data: SkeletonData) { + if (data == null) throw new Error("data cannot be null."); + this.data = data; + + this.bones = new Array(); + for (let i = 0; i < data.bones.length; i++) { + let boneData = data.bones[i]; + let bone: Bone; + if (boneData.parent == null) + bone = new Bone(boneData, this, null); + else { + let parent = this.bones[boneData.parent.index]; + bone = new Bone(boneData, this, parent); + parent.children.push(bone); + } + this.bones.push(bone); + } + + this.slots = new Array(); + this.drawOrder = new Array(); + for (let i = 0; i < data.slots.length; i++) { + let slotData = data.slots[i]; + let bone = this.bones[slotData.boneData.index]; + let slot = new Slot(slotData, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } + + this.ikConstraints = new Array(); + for (let i = 0; i < data.ikConstraints.length; i++) { + let ikConstraintData = data.ikConstraints[i]; + this.ikConstraints.push(new IkConstraint(ikConstraintData, this)); + } + + this.transformConstraints = new Array(); + for (let i = 0; i < data.transformConstraints.length; i++) { + let transformConstraintData = data.transformConstraints[i]; + this.transformConstraints.push(new TransformConstraint(transformConstraintData, this)); + } + + this.pathConstraints = new Array(); + for (let i = 0; i < data.pathConstraints.length; i++) { + let pathConstraintData = data.pathConstraints[i]; + this.pathConstraints.push(new PathConstraint(pathConstraintData, this)); + } + + this.color = new Color(1, 1, 1, 1); + this.updateCache(); + } + + /** Caches information about bones and constraints. Must be called if the {@link #getSkin()} is modified or if bones, + * constraints, or weighted path attachments are added or removed. */ + updateCache () { + let updateCache = this._updateCache; + updateCache.length = 0; + this.updateCacheReset.length = 0; + + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + } + + if (this.skin != null) { + let skinBones = this.skin.bones; + for (let i = 0, n = this.skin.bones.length; i < n; i++) { + let bone = this.bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (bone != null); + } + } + + // IK first, lowest hierarchy depth first. + let ikConstraints = this.ikConstraints; + let transformConstraints = this.transformConstraints; + let pathConstraints = this.pathConstraints; + let ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length; + let constraintCount = ikCount + transformCount + pathCount; + + outer: + for (let i = 0; i < constraintCount; i++) { + for (let ii = 0; ii < ikCount; ii++) { + let constraint = ikConstraints[ii]; + if (constraint.data.order == i) { + this.sortIkConstraint(constraint); + continue outer; + } + } + for (let ii = 0; ii < transformCount; ii++) { + let constraint = transformConstraints[ii]; + if (constraint.data.order == i) { + this.sortTransformConstraint(constraint); + continue outer; + } + } + for (let ii = 0; ii < pathCount; ii++) { + let constraint = pathConstraints[ii]; + if (constraint.data.order == i) { + this.sortPathConstraint(constraint); + continue outer; + } + } + } + + for (let i = 0, n = bones.length; i < n; i++) + this.sortBone(bones[i]); + } + + sortIkConstraint (constraint: IkConstraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) return; + + let target = constraint.target; + this.sortBone(target); + + let constrained = constraint.bones; + let parent = constrained[0]; + this.sortBone(parent); + + if (constrained.length > 1) { + let child = constrained[constrained.length - 1]; + if (!(this._updateCache.indexOf(child) > -1)) this.updateCacheReset.push(child); + } + + this._updateCache.push(constraint); + + this.sortReset(parent.children); + constrained[constrained.length - 1].sorted = true; + } + + sortPathConstraint (constraint: PathConstraint) { + constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) return; + + let slot = constraint.target; + let slotIndex = slot.data.index; + let slotBone = slot.bone; + if (this.skin != null) this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); + if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin) + this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); + for (let i = 0, n = this.data.skins.length; i < n; i++) + this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); + + let attachment = slot.getAttachment(); + if (attachment instanceof PathAttachment) this.sortPathConstraintAttachmentWith(attachment, slotBone); + + let constrained = constraint.bones; + let boneCount = constrained.length; + for (let i = 0; i < boneCount; i++) + this.sortBone(constrained[i]); + + this._updateCache.push(constraint); + + for (let i = 0; i < boneCount; i++) + this.sortReset(constrained[i].children); + for (let i = 0; i < boneCount; i++) + constrained[i].sorted = true; + } + + sortTransformConstraint (constraint: TransformConstraint) { + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true))); + if (!constraint.active) return; + + this.sortBone(constraint.target); + + let constrained = constraint.bones; + let boneCount = constrained.length; + if (constraint.data.local) { + for (let i = 0; i < boneCount; i++) { + let child = constrained[i]; + this.sortBone(child.parent); + if (!(this._updateCache.indexOf(child) > -1)) this.updateCacheReset.push(child); + } + } else { + for (let i = 0; i < boneCount; i++) { + this.sortBone(constrained[i]); + } + } + + this._updateCache.push(constraint); + + for (let ii = 0; ii < boneCount; ii++) + this.sortReset(constrained[ii].children); + for (let ii = 0; ii < boneCount; ii++) + constrained[ii].sorted = true; + } + + sortPathConstraintAttachment (skin: Skin, slotIndex: number, slotBone: Bone) { + let attachments = skin.attachments[slotIndex]; + if (!attachments) return; + for (let key in attachments) { + this.sortPathConstraintAttachmentWith(attachments[key], slotBone); + } + } + + sortPathConstraintAttachmentWith (attachment: Attachment, slotBone: Bone) { + if (!(attachment instanceof PathAttachment)) return; + let pathBones = (attachment).bones; + if (pathBones == null) + this.sortBone(slotBone); + else { + let bones = this.bones; + let i = 0; + while (i < pathBones.length) { + let boneCount = pathBones[i++]; + for (let n = i + boneCount; i < n; i++) { + let boneIndex = pathBones[i]; + this.sortBone(bones[boneIndex]); + } + } + } + } + + sortBone (bone: Bone) { + if (bone.sorted) return; + let parent = bone.parent; + if (parent != null) this.sortBone(parent); + bone.sorted = true; + this._updateCache.push(bone); + } + + sortReset (bones: Array) { + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (!bone.active) continue; + if (bone.sorted) this.sortReset(bone.children); + bone.sorted = false; + } + } + + /** Updates the world transform for each bone and applies all constraints. + * + * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine + * Runtimes Guide. */ + updateWorldTransform () { + let updateCacheReset = this.updateCacheReset; + for (let i = 0, n = updateCacheReset.length; i < n; i++) { + let bone = updateCacheReset[i] as Bone; + bone.ax = bone.x; + bone.ay = bone.y; + bone.arotation = bone.rotation; + bone.ascaleX = bone.scaleX; + bone.ascaleY = bone.scaleY; + bone.ashearX = bone.shearX; + bone.ashearY = bone.shearY; + bone.appliedValid = true; + } + let updateCache = this._updateCache; + for (let i = 0, n = updateCache.length; i < n; i++) + updateCache[i].update(); + } + + /** Sets the bones, constraints, and slots to their setup pose values. */ + setToSetupPose () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + } + + /** Sets the bones and constraints to their setup pose values. */ + setBonesToSetupPose () { + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + + let ikConstraints = this.ikConstraints; + for (let i = 0, n = ikConstraints.length; i < n; i++) { + let constraint = ikConstraints[i]; + constraint.mix = constraint.data.mix; + constraint.softness = constraint.data.softness; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; + } + + let transformConstraints = this.transformConstraints; + for (let i = 0, n = transformConstraints.length; i < n; i++) { + let constraint = transformConstraints[i]; + let data = constraint.data; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; + } + + let pathConstraints = this.pathConstraints; + for (let i = 0, n = pathConstraints.length; i < n; i++) { + let constraint = pathConstraints[i]; + let data = constraint.data; + constraint.position = data.position; + constraint.spacing = data.spacing; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + } + } + + /** Sets the slots and draw order to their setup pose values. */ + setSlotsToSetupPose () { + let slots = this.slots; + Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length); + for (let i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(); + } + + /** @returns May return null. */ + getRootBone () { + if (this.bones.length == 0) return null; + return this.bones[0]; + } + + /** @returns May be null. */ + findBone (boneName: string) { + if (boneName == null) throw new Error("boneName cannot be null."); + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (bone.data.name == boneName) return bone; + } + return null; + } + + /** @returns -1 if the bone was not found. */ + findBoneIndex (boneName: string) { + if (boneName == null) throw new Error("boneName cannot be null."); + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + } + + /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it + * repeatedly. + * @returns May be null. */ + findSlot (slotName: string) { + if (slotName == null) throw new Error("slotName cannot be null."); + let slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + if (slot.data.name == slotName) return slot; + } + return null; + } + + /** @returns -1 if the bone was not found. */ + findSlotIndex (slotName: string) { + if (slotName == null) throw new Error("slotName cannot be null."); + let slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + } + + /** Sets a skin by name. + * + * See {@link #setSkin()}. */ + setSkinByName (skinName: string) { + let skin = this.data.findSkin(skinName); + if (skin == null) throw new Error("Skin not found: " + skinName); + this.setSkin(skin); + } + + /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#defaultSkin default skin}. If the + * skin is changed, {@link #updateCache()} is called. + * + * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no + * old skin, each slot's setup mode attachment is attached from the new skin. + * + * After changing the skin, the visible attachments can be reset to those attached in the setup pose by calling + * {@link #setSlotsToSetupPose()}. Also, often {@link AnimationState#apply()} is called before the next time the + * skeleton is rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin. + * @param newSkin May be null. */ + setSkin (newSkin: Skin) { + if (newSkin == this.skin) return; + if (newSkin != null) { + if (this.skin != null) + newSkin.attachAll(this, this.skin); + else { + let slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + let name = slot.data.attachmentName; + if (name != null) { + let attachment: Attachment = newSkin.getAttachment(i, name); + if (attachment != null) slot.setAttachment(attachment); + } + } + } + } + this.skin = newSkin; + this.updateCache(); + } + + + /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot name and attachment + * name. + * + * See {@link #getAttachment()}. + * @returns May be null. */ + getAttachmentByName (slotName: string, attachmentName: string): Attachment { + return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName); + } + + /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot index and + * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked. + * + * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. + * @returns May be null. */ + getAttachment (slotIndex: number, attachmentName: string): Attachment { + if (attachmentName == null) throw new Error("attachmentName cannot be null."); + if (this.skin != null) { + let attachment: Attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment != null) return attachment; + } + if (this.data.defaultSkin != null) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + } + + /** A convenience method to set an attachment by finding the slot with {@link #findSlot()}, finding the attachment with + * {@link #getAttachment()}, then setting the slot's {@link Slot#attachment}. + * @param attachmentName May be null to clear the slot's attachment. */ + setAttachment (slotName: string, attachmentName: string) { + if (slotName == null) throw new Error("slotName cannot be null."); + let slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + if (slot.data.name == slotName) { + let attachment: Attachment = null; + if (attachmentName != null) { + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) + throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); + } + slot.setAttachment(attachment); + return; + } + } + throw new Error("Slot not found: " + slotName); + } + + + /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method + * than to call it repeatedly. + * @return May be null. */ + findIkConstraint (constraintName: string) { + if (constraintName == null) throw new Error("constraintName cannot be null."); + let ikConstraints = this.ikConstraints; + for (let i = 0, n = ikConstraints.length; i < n; i++) { + let ikConstraint = ikConstraints[i]; + if (ikConstraint.data.name == constraintName) return ikConstraint; + } + return null; + } + + /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of + * this method than to call it repeatedly. + * @return May be null. */ + findTransformConstraint (constraintName: string) { + if (constraintName == null) throw new Error("constraintName cannot be null."); + let transformConstraints = this.transformConstraints; + for (let i = 0, n = transformConstraints.length; i < n; i++) { + let constraint = transformConstraints[i]; + if (constraint.data.name == constraintName) return constraint; + } + return null; + } + + /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method + * than to call it repeatedly. + * @return May be null. */ + findPathConstraint (constraintName: string) { + if (constraintName == null) throw new Error("constraintName cannot be null."); + let pathConstraints = this.pathConstraints; + for (let i = 0, n = pathConstraints.length; i < n; i++) { + let constraint = pathConstraints[i]; + if (constraint.data.name == constraintName) return constraint; + } + return null; + } + + /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose. + * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB. + * @param size An output value, the width and height of the AABB. + * @param temp Working memory to temporarily store attachments' computed world vertices. */ + getBounds (offset: Vector2, size: Vector2, temp: Array = new Array(2)) { + if (offset == null) throw new Error("offset cannot be null."); + if (size == null) throw new Error("size cannot be null."); + let drawOrder = this.drawOrder; + let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + for (let i = 0, n = drawOrder.length; i < n; i++) { + let slot = drawOrder[i]; + if (!slot.bone.active) continue; + let verticesLength = 0; + let vertices: ArrayLike = null; + let attachment = slot.getAttachment(); + if (attachment instanceof RegionAttachment) { + verticesLength = 8; + vertices = Utils.setArraySize(temp, verticesLength, 0); + (attachment).computeWorldVertices(slot.bone, vertices, 0, 2); + } else if (attachment instanceof MeshAttachment) { + let mesh = (attachment); + verticesLength = mesh.worldVerticesLength; + vertices = Utils.setArraySize(temp, verticesLength, 0); + mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); + } + if (vertices != null) { + for (let ii = 0, nn = vertices.length; ii < nn; ii += 2) { + let x = vertices[ii], y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + } + offset.set(minX, minY); + size.set(maxX - minX, maxY - minY); + } + + /** Increments the skeleton's {@link #time}. */ + update (delta: number) { + this.time += delta; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/SkeletonBinary.ts b/apps/module-ts/src/spine-ts/core/src/SkeletonBinary.ts new file mode 100755 index 0000000..1308ac7 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/SkeletonBinary.ts @@ -0,0 +1,902 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + /** Loads skeleton data in the Spine binary format. + * + * See [Spine binary format](http://esotericsoftware.com/spine-binary-format) and + * [JSON and binary data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the Spine + * Runtimes Guide. */ + export class SkeletonBinary { + static AttachmentTypeValues = [ 0 /*AttachmentType.Region*/, 1/*AttachmentType.BoundingBox*/, 2/*AttachmentType.Mesh*/, 3/*AttachmentType.LinkedMesh*/, 4/*AttachmentType.Path*/, 5/*AttachmentType.Point*/, 6/*AttachmentType.Clipping*/ ]; + static TransformModeValues = [TransformMode.Normal, TransformMode.OnlyTranslation, TransformMode.NoRotationOrReflection, TransformMode.NoScale, TransformMode.NoScaleOrReflection]; + static PositionModeValues = [ PositionMode.Fixed, PositionMode.Percent ]; + static SpacingModeValues = [ SpacingMode.Length, SpacingMode.Fixed, SpacingMode.Percent]; + static RotateModeValues = [ RotateMode.Tangent, RotateMode.Chain, RotateMode.ChainScale ]; + static BlendModeValues = [ BlendMode.Normal, BlendMode.Additive, BlendMode.Multiply, BlendMode.Screen]; + + static BONE_ROTATE = 0; + static BONE_TRANSLATE = 1; + static BONE_SCALE = 2; + static BONE_SHEAR = 3; + + static SLOT_ATTACHMENT = 0; + static SLOT_COLOR = 1; + static SLOT_TWO_COLOR = 2; + + static PATH_POSITION = 0; + static PATH_SPACING = 1; + static PATH_MIX = 2; + + static CURVE_LINEAR = 0; + static CURVE_STEPPED = 1; + static CURVE_BEZIER = 2; + + /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at + * runtime than were used in Spine. + * + * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */ + scale = 1; + + attachmentLoader: AttachmentLoader; + private linkedMeshes = new Array(); + + constructor (attachmentLoader: AttachmentLoader) { + this.attachmentLoader = attachmentLoader; + } + + readSkeletonData (binary: Uint8Array): SkeletonData { + let scale = this.scale; + + let skeletonData = new SkeletonData(); + skeletonData.name = ""; // BOZO + + let input = new BinaryInput(binary); + + skeletonData.hash = input.readString(); + skeletonData.version = input.readString(); + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + + let nonessential = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + + let n = 0; + // Strings. + n = input.readInt(true) + for (let i = 0; i < n; i++) + input.strings.push(input.readString()); + + // Bones. + n = input.readInt(true) + for (let i = 0; i < n; i++) { + let name = input.readString(); + let parent = i == 0 ? null : skeletonData.bones[input.readInt(true)]; + let data = new BoneData(i, name, parent); + data.rotation = input.readFloat(); + data.x = input.readFloat() * scale; + data.y = input.readFloat() * scale; + data.scaleX = input.readFloat(); + data.scaleY = input.readFloat(); + data.shearX = input.readFloat(); + data.shearY = input.readFloat(); + data.length = input.readFloat() * scale; + data.transformMode = SkeletonBinary.TransformModeValues[input.readInt(true)]; + data.skinRequired = input.readBoolean(); + if (nonessential) Color.rgba8888ToColor(data.color, input.readInt32()); + skeletonData.bones.push(data); + } + + // Slots. + n = input.readInt(true); + for (let i = 0; i < n; i++) { + let slotName = input.readString(); + let boneData = skeletonData.bones[input.readInt(true)]; + let data = new SlotData(i, slotName, boneData); + Color.rgba8888ToColor(data.color, input.readInt32()); + + let darkColor = input.readInt32(); + if (darkColor != -1) Color.rgb888ToColor(data.darkColor = new Color(), darkColor); + + data.attachmentName = input.readStringRef(); + data.blendMode = SkeletonBinary.BlendModeValues[input.readInt(true)]; + skeletonData.slots.push(data); + } + + // IK constraints. + n = input.readInt(true); + for (let i = 0, nn; i < n; i++) { + let data = new IkConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (let ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.mix = input.readFloat(); + data.softness = input.readFloat() * scale; + data.bendDirection = input.readByte(); + data.compress = input.readBoolean(); + data.stretch = input.readBoolean(); + data.uniform = input.readBoolean(); + skeletonData.ikConstraints.push(data); + } + + // Transform constraints. + n = input.readInt(true); + for (let i = 0, nn; i < n; i++) { + let data = new TransformConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (let ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.bones[input.readInt(true)]; + data.local = input.readBoolean(); + data.relative = input.readBoolean(); + data.offsetRotation = input.readFloat(); + data.offsetX = input.readFloat() * scale; + data.offsetY = input.readFloat() * scale; + data.offsetScaleX = input.readFloat(); + data.offsetScaleY = input.readFloat(); + data.offsetShearY = input.readFloat(); + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + data.scaleMix = input.readFloat(); + data.shearMix = input.readFloat(); + skeletonData.transformConstraints.push(data); + } + + // Path constraints. + n = input.readInt(true); + for (let i = 0, nn; i < n; i++) { + let data = new PathConstraintData(input.readString()); + data.order = input.readInt(true); + data.skinRequired = input.readBoolean(); + nn = input.readInt(true); + for (let ii = 0; ii < nn; ii++) + data.bones.push(skeletonData.bones[input.readInt(true)]); + data.target = skeletonData.slots[input.readInt(true)]; + data.positionMode = SkeletonBinary.PositionModeValues[input.readInt(true)]; + data.spacingMode = SkeletonBinary.SpacingModeValues[input.readInt(true)]; + data.rotateMode = SkeletonBinary.RotateModeValues[input.readInt(true)]; + data.offsetRotation = input.readFloat(); + data.position = input.readFloat(); + if (data.positionMode == PositionMode.Fixed) data.position *= scale; + data.spacing = input.readFloat(); + if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) data.spacing *= scale; + data.rotateMix = input.readFloat(); + data.translateMix = input.readFloat(); + skeletonData.pathConstraints.push(data); + } + + // Default skin. + let defaultSkin = this.readSkin(input, skeletonData, true, nonessential); + if (defaultSkin != null) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + + // Skins. + { + let i = skeletonData.skins.length; + Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true)); + for (; i < n; i++) + skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential); + } + + // Linked meshes. + n = this.linkedMeshes.length; + for (let i = 0; i < n; i++) { + let linkedMesh = this.linkedMeshes[i]; + let skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) throw new Error("Skin not found: " + linkedMesh.skin); + let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent == null) throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent as VertexAttachment : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh(parent as MeshAttachment); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + + // Events. + n = input.readInt(true); + for (let i = 0; i < n; i++) { + let data = new EventData(input.readStringRef()); + data.intValue = input.readInt(false); + data.floatValue = input.readFloat(); + data.stringValue = input.readString(); + data.audioPath = input.readString(); + if (data.audioPath != null) { + data.volume = input.readFloat(); + data.balance = input.readFloat(); + } + skeletonData.events.push(data); + } + + // Animations. + n = input.readInt(true); + for (let i = 0; i < n; i++) + skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData)); + return skeletonData; + } + + private readSkin (input: BinaryInput, skeletonData: SkeletonData, defaultSkin: boolean, nonessential: boolean): Skin { + let skin = null; + let slotCount = 0; + + if (defaultSkin) { + slotCount = input.readInt(true) + if (slotCount == 0) return null; + skin = new Skin("default"); + } else { + skin = new Skin(input.readStringRef()); + skin.bones.length = input.readInt(true); + for (let i = 0, n = skin.bones.length; i < n; i++) + skin.bones[i] = skeletonData.bones[input.readInt(true)]; + + for (let i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]); + for (let i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]); + for (let i = 0, n = input.readInt(true); i < n; i++) + skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]); + + slotCount = input.readInt(true); + } + + for (let i = 0; i < slotCount; i++) { + let slotIndex = input.readInt(true); + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + let name = input.readStringRef(); + let attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name, nonessential); + if (attachment != null) skin.setAttachment(slotIndex, name, attachment); + } + } + return skin; + } + + private readAttachment(input: BinaryInput, skeletonData: SkeletonData, skin: Skin, slotIndex: number, attachmentName: string, nonessential: boolean): Attachment { + let scale = this.scale; + + let name = input.readStringRef(); + if (name == null) name = attachmentName; + + let typeIndex = input.readByte(); + let type = SkeletonBinary.AttachmentTypeValues[typeIndex]; + switch (type) { + case AttachmentType.Region: { + let path = input.readStringRef(); + let rotation = input.readFloat(); + let x = input.readFloat(); + let y = input.readFloat(); + let scaleX = input.readFloat(); + let scaleY = input.readFloat(); + let width = input.readFloat(); + let height = input.readFloat(); + let color = input.readInt32(); + + if (path == null) path = name; + let region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) return null; + region.path = path; + region.x = x * scale; + region.y = y * scale; + region.scaleX = scaleX; + region.scaleY = scaleY; + region.rotation = rotation; + region.width = width * scale; + region.height = height * scale; + Color.rgba8888ToColor(region.color, color); + region.updateOffset(); + return region; + } + case AttachmentType.BoundingBox: { + let vertexCount = input.readInt(true); + let vertices = this.readVertices(input, vertexCount); + let color = nonessential ? input.readInt32() : 0; + + let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) return null; + box.worldVerticesLength = vertexCount << 1; + box.vertices = vertices.vertices; + box.bones = vertices.bones; + if (nonessential) Color.rgba8888ToColor(box.color, color); + return box; + } + case AttachmentType.Mesh: { + let path = input.readStringRef(); + let color = input.readInt32(); + let vertexCount = input.readInt(true); + let uvs = this.readFloatArray(input, vertexCount << 1, 1); + let triangles = this.readShortArray(input); + let vertices = this.readVertices(input, vertexCount); + let hullLength = input.readInt(true); + let edges = null; + let width = 0, height = 0; + if (nonessential) { + edges = this.readShortArray(input); + width = input.readFloat(); + height = input.readFloat(); + } + + if (path == null) path = name; + let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) return null; + mesh.path = path; + Color.rgba8888ToColor(mesh.color, color); + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertexCount << 1; + mesh.triangles = triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + mesh.hullLength = hullLength << 1; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + return mesh; + } + case AttachmentType.LinkedMesh: { + let path = input.readStringRef(); + let color = input.readInt32(); + let skinName = input.readStringRef(); + let parent = input.readStringRef(); + let inheritDeform = input.readBoolean(); + let width = 0, height = 0; + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + + if (path == null) path = name; + let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) return null; + mesh.path = path; + Color.rgba8888ToColor(mesh.color, color); + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent, inheritDeform)); + return mesh; + } + case AttachmentType.Path: { + let closed = input.readBoolean(); + let constantSpeed = input.readBoolean(); + let vertexCount = input.readInt(true); + let vertices = this.readVertices(input, vertexCount); + let lengths = Utils.newArray(vertexCount / 3, 0); + for (let i = 0, n = lengths.length; i < n; i++) + lengths[i] = input.readFloat() * scale; + let color = nonessential ? input.readInt32() : 0; + + let path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) return null; + path.closed = closed; + path.constantSpeed = constantSpeed; + path.worldVerticesLength = vertexCount << 1; + path.vertices = vertices.vertices; + path.bones = vertices.bones; + path.lengths = lengths; + if (nonessential) Color.rgba8888ToColor(path.color, color); + return path; + } + case AttachmentType.Point: { + let rotation = input.readFloat(); + let x = input.readFloat(); + let y = input.readFloat(); + let color = nonessential ? input.readInt32() : 0; + + let point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + if (nonessential) Color.rgba8888ToColor(point.color, color); + return point; + } + case AttachmentType.Clipping: { + let endSlotIndex = input.readInt(true); + let vertexCount = input.readInt(true); + let vertices = this.readVertices(input, vertexCount); + let color = nonessential ? input.readInt32() : 0; + + let clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.worldVerticesLength = vertexCount << 1; + clip.vertices = vertices.vertices; + clip.bones = vertices.bones; + if (nonessential) Color.rgba8888ToColor(clip.color, color); + return clip; + } + } + return null; + } + + private readVertices (input: BinaryInput, vertexCount: number): Vertices { + let verticesLength = vertexCount << 1; + let vertices = new Vertices(); + let scale = this.scale; + if (!input.readBoolean()) { + vertices.vertices = this.readFloatArray(input, verticesLength, scale); + return vertices; + } + let weights = new Array(); + let bonesArray = new Array(); + for (let i = 0; i < vertexCount; i++) { + let boneCount = input.readInt(true); + bonesArray.push(boneCount); + for (let ii = 0; ii < boneCount; ii++) { + bonesArray.push(input.readInt(true)); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat() * scale); + weights.push(input.readFloat()); + } + } + vertices.vertices = Utils.toFloatArray(weights); + vertices.bones = bonesArray; + return vertices; + } + + private readFloatArray (input: BinaryInput, n: number, scale: number): number[] { + let array = new Array(n); + if (scale == 1) { + for (let i = 0; i < n; i++) + array[i] = input.readFloat(); + } else { + for (let i = 0; i < n; i++) + array[i] = input.readFloat() * scale; + } + return array; + } + + private readShortArray (input: BinaryInput): number[] { + let n = input.readInt(true); + let array = new Array(n); + for (let i = 0; i < n; i++) + array[i] = input.readShort(); + return array; + } + + private readAnimation (input: BinaryInput, name: string, skeletonData: SkeletonData): Animation { + let timelines = new Array(); + let scale = this.scale; + let duration = 0; + let tempColor1 = new Color(); + let tempColor2 = new Color(); + + // Slot timelines. + for (let i = 0, n = input.readInt(true); i < n; i++) { + let slotIndex = input.readInt(true); + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + let timelineType = input.readByte(); + let frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.SLOT_ATTACHMENT: { + let timeline = new AttachmentTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) + timeline.setFrame(frameIndex, input.readFloat(), input.readStringRef()); + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + break; + } + case SkeletonBinary.SLOT_COLOR: { + let timeline = new ColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) { + let time = input.readFloat(); + Color.rgba8888ToColor(tempColor1, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a); + if (frameIndex < frameCount - 1) this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * ColorTimeline.ENTRIES]); + break; + } + case SkeletonBinary.SLOT_TWO_COLOR: { + let timeline = new TwoColorTimeline(frameCount); + timeline.slotIndex = slotIndex; + for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) { + let time = input.readFloat(); + Color.rgba8888ToColor(tempColor1, input.readInt32()); + Color.rgb888ToColor(tempColor2, input.readInt32()); + timeline.setFrame(frameIndex, time, tempColor1.r, tempColor1.g, tempColor1.b, tempColor1.a, tempColor2.r, + tempColor2.g, tempColor2.b); + if (frameIndex < frameCount - 1) this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * TwoColorTimeline.ENTRIES]); + break; + } + } + } + } + + // Bone timelines. + for (let i = 0, n = input.readInt(true); i < n; i++) { + let boneIndex = input.readInt(true); + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + let timelineType = input.readByte(); + let frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.BONE_ROTATE: { + let timeline = new RotateTimeline(frameCount); + timeline.boneIndex = boneIndex; + for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * RotateTimeline.ENTRIES]); + break; + } + case SkeletonBinary.BONE_TRANSLATE: + case SkeletonBinary.BONE_SCALE: + case SkeletonBinary.BONE_SHEAR: { + let timeline; + let timelineScale = 1; + if (timelineType == SkeletonBinary.BONE_SCALE) + timeline = new ScaleTimeline(frameCount); + else if (timelineType == SkeletonBinary.BONE_SHEAR) + timeline = new ShearTimeline(frameCount); + else { + timeline = new TranslateTimeline(frameCount); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, + input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * TranslateTimeline.ENTRIES]); + break; + } + } + } + } + + // IK constraint timelines. + for (let i = 0, n = input.readInt(true); i < n; i++) { + let index = input.readInt(true); + let frameCount = input.readInt(true); + let timeline = new IkConstraintTimeline(frameCount); + timeline.ikConstraintIndex = index; + for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat() * scale, input.readByte(), input.readBoolean(), + input.readBoolean()); + if (frameIndex < frameCount - 1) this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * IkConstraintTimeline.ENTRIES]); + } + + // Transform constraint timelines. + for (let i = 0, n = input.readInt(true); i < n; i++) { + let index = input.readInt(true); + let frameCount = input.readInt(true); + let timeline = new TransformConstraintTimeline(frameCount); + timeline.transformConstraintIndex = index; + for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat(), + input.readFloat()); + if (frameIndex < frameCount - 1) this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * TransformConstraintTimeline.ENTRIES]); + } + + // Path constraint timelines. + for (let i = 0, n = input.readInt(true); i < n; i++) { + let index = input.readInt(true); + let data = skeletonData.pathConstraints[index]; + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + let timelineType = input.readByte(); + let frameCount = input.readInt(true); + switch (timelineType) { + case SkeletonBinary.PATH_POSITION: + case SkeletonBinary.PATH_SPACING: { + let timeline; + let timelineScale = 1; + if (timelineType == SkeletonBinary.PATH_SPACING) { + timeline = new PathConstraintSpacingTimeline(frameCount); + if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) timelineScale = scale; + } else { + timeline = new PathConstraintPositionTimeline(frameCount); + if (data.positionMode == PositionMode.Fixed) timelineScale = scale; + } + timeline.pathConstraintIndex = index; + for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale); + if (frameIndex < frameCount - 1) this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * PathConstraintPositionTimeline.ENTRIES]); + break; + } + case SkeletonBinary.PATH_MIX: { + let timeline = new PathConstraintMixTimeline(frameCount); + timeline.pathConstraintIndex = index; + for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readFloat()); + if (frameIndex < frameCount - 1) this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(frameCount - 1) * PathConstraintMixTimeline.ENTRIES]); + break; + } + } + } + } + + // Deform timelines. + for (let i = 0, n = input.readInt(true); i < n; i++) { + let skin = skeletonData.skins[input.readInt(true)]; + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + let slotIndex = input.readInt(true); + for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { + let attachment = skin.getAttachment(slotIndex, input.readStringRef()) as VertexAttachment; + let weighted = attachment.bones != null; + let vertices = attachment.vertices; + let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + + let frameCount = input.readInt(true); + let timeline = new DeformTimeline(frameCount); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + + for (let frameIndex = 0; frameIndex < frameCount; frameIndex++) { + let time = input.readFloat(); + let deform; + let end = input.readInt(true); + if (end == 0) + deform = weighted ? Utils.newFloatArray(deformLength) : vertices; + else { + deform = Utils.newFloatArray(deformLength); + let start = input.readInt(true); + end += start; + if (scale == 1) { + for (let v = start; v < end; v++) + deform[v] = input.readFloat(); + } else { + for (let v = start; v < end; v++) + deform[v] = input.readFloat() * scale; + } + if (!weighted) { + for (let v = 0, vn = deform.length; v < vn; v++) + deform[v] += vertices[v]; + } + } + + timeline.setFrame(frameIndex, time, deform); + if (frameIndex < frameCount - 1) this.readCurve(input, frameIndex, timeline); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[frameCount - 1]); + } + } + } + + // Draw order timeline. + let drawOrderCount = input.readInt(true); + if (drawOrderCount > 0) { + let timeline = new DrawOrderTimeline(drawOrderCount); + let slotCount = skeletonData.slots.length; + for (let i = 0; i < drawOrderCount; i++) { + let time = input.readFloat(); + let offsetCount = input.readInt(true); + let drawOrder = Utils.newArray(slotCount, 0); + for (let ii = slotCount - 1; ii >= 0; ii--) + drawOrder[ii] = -1; + let unchanged = Utils.newArray(slotCount - offsetCount, 0); + let originalIndex = 0, unchangedIndex = 0; + for (let ii = 0; ii < offsetCount; ii++) { + let slotIndex = input.readInt(true); + // Collect unchanged items. + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + // Set changed items. + drawOrder[originalIndex + input.readInt(true)] = originalIndex++; + } + // Collect remaining unchanged items. + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + // Fill in unchanged items. + for (let ii = slotCount - 1; ii >= 0; ii--) + if (drawOrder[ii] == -1) drawOrder[ii] = unchanged[--unchangedIndex]; + timeline.setFrame(i, time, drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[drawOrderCount - 1]); + } + + // Event timeline. + let eventCount = input.readInt(true); + if (eventCount > 0) { + let timeline = new EventTimeline(eventCount); + for (let i = 0; i < eventCount; i++) { + let time = input.readFloat(); + let eventData = skeletonData.events[input.readInt(true)]; + let event = new Event(time, eventData); + event.intValue = input.readInt(false); + event.floatValue = input.readFloat(); + event.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue; + if (event.data.audioPath != null) { + event.volume = input.readFloat(); + event.balance = input.readFloat(); + } + timeline.setFrame(i, event); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[eventCount - 1]); + } + + return new Animation(name, timelines, duration); + } + + private readCurve (input: BinaryInput, frameIndex: number, timeline: CurveTimeline) { + switch (input.readByte()) { + case SkeletonBinary.CURVE_STEPPED: + timeline.setStepped(frameIndex); + break; + case SkeletonBinary.CURVE_BEZIER: + this.setCurve(timeline, frameIndex, input.readFloat(), input.readFloat(), input.readFloat(), input.readFloat()); + break; + } + } + + setCurve (timeline: CurveTimeline, frameIndex: number, cx1: number, cy1: number, cx2: number, cy2: number) { + timeline.setCurve(frameIndex, cx1, cy1, cx2, cy2); + } + } + + class BinaryInput { + constructor(data: Uint8Array, public strings = new Array(), private index: number = 0, private buffer = new DataView(data.buffer)) {  + + } + + readByte(): number { + return this.buffer.getInt8(this.index++); + } + + readShort(): number { + let value = this.buffer.getInt16(this.index); + this.index += 2; + return value; + } + + readInt32(): number { + let value = this.buffer.getInt32(this.index) + this.index += 4; + return value; + } + + readInt(optimizePositive: boolean) { + let b = this.readByte(); + let result = b & 0x7F; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 7; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 14; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 21; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 28; + } + } + } + } + return optimizePositive ? result : ((result >>> 1) ^ -(result & 1)); + } + + readStringRef (): string { + let index = this.readInt(true); + return index == 0 ? null : this.strings[index - 1]; + } + + readString (): string { + let byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + case 1: + return ""; + } + byteCount--; + let chars = ""; + let charCount = 0; + for (let i = 0; i < byteCount;) { + let b = this.readByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F)); + i += 2; + break; + case 14: + chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F)); + i += 3; + break; + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + } + + readFloat (): number { + let value = this.buffer.getFloat32(this.index); + this.index += 4; + return value; + } + + readBoolean (): boolean { + return this.readByte() != 0; + } + } + + class LinkedMesh { + parent: string; skin: string; + slotIndex: number; + mesh: MeshAttachment; + inheritDeform: boolean; + + constructor (mesh: MeshAttachment, skin: string, slotIndex: number, parent: string, inheritDeform: boolean) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + } + + class Vertices { + constructor(public bones: Array = null, public vertices: Array | Float32Array = null) { } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/SkeletonBounds.ts b/apps/module-ts/src/spine-ts/core/src/SkeletonBounds.ts new file mode 100755 index 0000000..aed8ace --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/SkeletonBounds.ts @@ -0,0 +1,231 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + /** Collects each visible {@link BoundingBoxAttachment} and computes the world vertices for its polygon. The polygon vertices are + * provided along with convenience methods for doing hit detection. */ + export class SkeletonBounds { + + /** The left edge of the axis aligned bounding box. */ + minX = 0; + + /** The bottom edge of the axis aligned bounding box. */ + minY = 0; + + /** The right edge of the axis aligned bounding box. */ + maxX = 0; + + /** The top edge of the axis aligned bounding box. */ + maxY = 0; + + /** The visible bounding boxes. */ + boundingBoxes = new Array(); + + /** The world vertices for the bounding box polygons. */ + polygons = new Array>(); + + private polygonPool = new Pool>(() => { + return Utils.newFloatArray(16); + }); + + /** Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding + * box's polygon. + * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the + * SkeletonBounds AABB methods will always return true. */ + update (skeleton: Skeleton, updateAabb: boolean) { + if (skeleton == null) throw new Error("skeleton cannot be null."); + let boundingBoxes = this.boundingBoxes; + let polygons = this.polygons; + let polygonPool = this.polygonPool; + let slots = skeleton.slots; + let slotCount = slots.length; + + boundingBoxes.length = 0; + polygonPool.freeAll(polygons); + polygons.length = 0; + + for (let i = 0; i < slotCount; i++) { + let slot = slots[i]; + if (!slot.bone.active) continue; + let attachment = slot.getAttachment(); + if (attachment instanceof BoundingBoxAttachment) { + let boundingBox = attachment as BoundingBoxAttachment; + boundingBoxes.push(boundingBox); + + let polygon = polygonPool.obtain(); + if (polygon.length != boundingBox.worldVerticesLength) { + polygon = Utils.newFloatArray(boundingBox.worldVerticesLength); + } + polygons.push(polygon); + boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2); + } + } + + if (updateAabb) { + this.aabbCompute(); + } else { + this.minX = Number.POSITIVE_INFINITY; + this.minY = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.maxY = Number.NEGATIVE_INFINITY; + } + } + + aabbCompute () { + let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + let polygons = this.polygons; + for (let i = 0, n = polygons.length; i < n; i++) { + let polygon = polygons[i]; + let vertices = polygon; + for (let ii = 0, nn = polygon.length; ii < nn; ii += 2) { + let x = vertices[ii]; + let y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + } + + /** Returns true if the axis aligned bounding box contains the point. */ + aabbContainsPoint (x: number, y: number) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + } + + /** Returns true if the axis aligned bounding box intersects the line segment. */ + aabbIntersectsSegment (x1: number, y1: number, x2: number, y2: number) { + let minX = this.minX; + let minY = this.minY; + let maxX = this.maxX; + let maxY = this.maxY; + if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY)) + return false; + let m = (y2 - y1) / (x2 - x1); + let y = m * (minX - x1) + y1; + if (y > minY && y < maxY) return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) return true; + let x = (minY - y1) / m + x1; + if (x > minX && x < maxX) return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) return true; + return false; + } + + /** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */ + aabbIntersectsSkeleton (bounds: SkeletonBounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + } + + /** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more + * efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true. */ + containsPoint (x: number, y: number): BoundingBoxAttachment { + let polygons = this.polygons; + for (let i = 0, n = polygons.length; i < n; i++) + if (this.containsPointPolygon(polygons[i], x, y)) return this.boundingBoxes[i]; + return null; + } + + /** Returns true if the polygon contains the point. */ + containsPointPolygon (polygon: ArrayLike, x: number, y: number) { + let vertices = polygon; + let nn = polygon.length; + + let prevIndex = nn - 2; + let inside = false; + for (let ii = 0; ii < nn; ii += 2) { + let vertexY = vertices[ii + 1]; + let prevY = vertices[prevIndex + 1]; + if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) { + let vertexX = vertices[ii]; + if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) inside = !inside; + } + prevIndex = ii; + } + return inside; + } + + /** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it + * is usually more efficient to only call this method if {@link #aabbIntersectsSegment()} returns + * true. */ + intersectsSegment (x1: number, y1: number, x2: number, y2: number) { + let polygons = this.polygons; + for (let i = 0, n = polygons.length; i < n; i++) + if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) return this.boundingBoxes[i]; + return null; + } + + /** Returns true if the polygon contains any part of the line segment. */ + intersectsSegmentPolygon (polygon: ArrayLike, x1: number, y1: number, x2: number, y2: number) { + let vertices = polygon; + let nn = polygon.length; + + let width12 = x1 - x2, height12 = y1 - y2; + let det1 = x1 * y2 - y1 * x2; + let x3 = vertices[nn - 2], y3 = vertices[nn - 1]; + for (let ii = 0; ii < nn; ii += 2) { + let x4 = vertices[ii], y4 = vertices[ii + 1]; + let det2 = x3 * y4 - y3 * x4; + let width34 = x3 - x4, height34 = y3 - y4; + let det3 = width12 * height34 - height12 * width34; + let x = (det1 * width34 - width12 * det2) / det3; + if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) { + let y = (det1 * height34 - height12 * det2) / det3; + if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1))) return true; + } + x3 = x4; + y3 = y4; + } + return false; + } + + /** Returns the polygon for the specified bounding box, or null. */ + getPolygon (boundingBox: BoundingBoxAttachment) { + if (boundingBox == null) throw new Error("boundingBox cannot be null."); + let index = this.boundingBoxes.indexOf(boundingBox); + return index == -1 ? null : this.polygons[index]; + } + + /** The width of the axis aligned bounding box. */ + getWidth () { + return this.maxX - this.minX; + } + + /** The height of the axis aligned bounding box. */ + getHeight () { + return this.maxY - this.minY; + } + } + +} diff --git a/apps/module-ts/src/spine-ts/core/src/SkeletonClipping.ts b/apps/module-ts/src/spine-ts/core/src/SkeletonClipping.ts new file mode 100755 index 0000000..b1b5347 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/SkeletonClipping.ts @@ -0,0 +1,347 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + export class SkeletonClipping { + private triangulator = new Triangulator(); + private clippingPolygon = new Array(); + private clipOutput = new Array(); + clippedVertices = new Array(); + clippedTriangles = new Array(); + private scratch = new Array(); + + private clipAttachment: ClippingAttachment; + private clippingPolygons: Array>; + + clipStart (slot: Slot, clip: ClippingAttachment): number { + if (this.clipAttachment != null) return 0; + this.clipAttachment = clip; + + let n = clip.worldVerticesLength; + let vertices = Utils.setArraySize(this.clippingPolygon, n); + clip.computeWorldVertices(slot, 0, n, vertices, 0, 2); + let clippingPolygon = this.clippingPolygon; + SkeletonClipping.makeClockwise(clippingPolygon); + let clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)); + for (let i = 0, n = clippingPolygons.length; i < n; i++) { + let polygon = clippingPolygons[i]; + SkeletonClipping.makeClockwise(polygon); + polygon.push(polygon[0]); + polygon.push(polygon[1]); + } + + return clippingPolygons.length; + } + + clipEndWithSlot (slot: Slot) { + if (this.clipAttachment != null && this.clipAttachment.endSlot == slot.data) this.clipEnd(); + } + + clipEnd () { + if (this.clipAttachment == null) return; + this.clipAttachment = null; + this.clippingPolygons = null; + this.clippedVertices.length = 0; + this.clippedTriangles.length = 0; + this.clippingPolygon.length = 0; + } + + isClipping (): boolean { + return this.clipAttachment != null; + } + + clipTriangles (vertices: ArrayLike, verticesLength: number, triangles: ArrayLike, trianglesLength: number, uvs: ArrayLike, + light: Color, dark: Color, twoColor: boolean) { + + let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; + let clippedTriangles = this.clippedTriangles; + let polygons = this.clippingPolygons; + let polygonsCount = this.clippingPolygons.length; + let vertexSize = twoColor ? 12 : 8; + + let index = 0; + clippedVertices.length = 0; + clippedTriangles.length = 0; + outer: + for (let i = 0; i < trianglesLength; i += 3) { + let vertexOffset = triangles[i] << 1; + let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; + let u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1]; + + vertexOffset = triangles[i + 1] << 1; + let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1]; + let u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1]; + + vertexOffset = triangles[i + 2] << 1; + let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1]; + let u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1]; + + for (let p = 0; p < polygonsCount; p++) { + let s = clippedVertices.length; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { + let clipOutputLength = clipOutput.length; + if (clipOutputLength == 0) continue; + let d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1; + let d = 1 / (d0 * d2 + d1 * (y1 - y3)); + + let clipOutputCount = clipOutputLength >> 1; + let clipOutputItems = this.clipOutput; + let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); + for (let ii = 0; ii < clipOutputLength; ii += 2) { + let x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + clippedVerticesItems[s] = x; + clippedVerticesItems[s + 1] = y; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + let c0 = x - x3, c1 = y - y3; + let a = (d0 * c0 + d1 * c1) * d; + let b = (d4 * c0 + d2 * c1) * d; + let c = 1 - a - b; + clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c; + clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + } + s += vertexSize; + } + + s = clippedTriangles.length; + let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (let ii = 1; ii < clipOutputCount; ii++) { + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + ii); + clippedTrianglesItems[s + 2] = (index + ii + 1); + s += 3; + } + index += clipOutputCount + 1; + + } else { + let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + clippedVerticesItems[s] = x1; + clippedVerticesItems[s + 1] = y1; + clippedVerticesItems[s + 2] = light.r; + clippedVerticesItems[s + 3] = light.g; + clippedVerticesItems[s + 4] = light.b; + clippedVerticesItems[s + 5] = light.a; + if (!twoColor) { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + + clippedVerticesItems[s + 8] = x2; + clippedVerticesItems[s + 9] = y2; + clippedVerticesItems[s + 10] = light.r; + clippedVerticesItems[s + 11] = light.g; + clippedVerticesItems[s + 12] = light.b; + clippedVerticesItems[s + 13] = light.a; + clippedVerticesItems[s + 14] = u2; + clippedVerticesItems[s + 15] = v2; + + clippedVerticesItems[s + 16] = x3; + clippedVerticesItems[s + 17] = y3; + clippedVerticesItems[s + 18] = light.r; + clippedVerticesItems[s + 19] = light.g; + clippedVerticesItems[s + 20] = light.b; + clippedVerticesItems[s + 21] = light.a; + clippedVerticesItems[s + 22] = u3; + clippedVerticesItems[s + 23] = v3; + } else { + clippedVerticesItems[s + 6] = u1; + clippedVerticesItems[s + 7] = v1; + clippedVerticesItems[s + 8] = dark.r; + clippedVerticesItems[s + 9] = dark.g; + clippedVerticesItems[s + 10] = dark.b; + clippedVerticesItems[s + 11] = dark.a; + + clippedVerticesItems[s + 12] = x2; + clippedVerticesItems[s + 13] = y2; + clippedVerticesItems[s + 14] = light.r; + clippedVerticesItems[s + 15] = light.g; + clippedVerticesItems[s + 16] = light.b; + clippedVerticesItems[s + 17] = light.a; + clippedVerticesItems[s + 18] = u2; + clippedVerticesItems[s + 19] = v2; + clippedVerticesItems[s + 20] = dark.r; + clippedVerticesItems[s + 21] = dark.g; + clippedVerticesItems[s + 22] = dark.b; + clippedVerticesItems[s + 23] = dark.a; + + clippedVerticesItems[s + 24] = x3; + clippedVerticesItems[s + 25] = y3; + clippedVerticesItems[s + 26] = light.r; + clippedVerticesItems[s + 27] = light.g; + clippedVerticesItems[s + 28] = light.b; + clippedVerticesItems[s + 29] = light.a; + clippedVerticesItems[s + 30] = u3; + clippedVerticesItems[s + 31] = v3; + clippedVerticesItems[s + 32] = dark.r; + clippedVerticesItems[s + 33] = dark.g; + clippedVerticesItems[s + 34] = dark.b; + clippedVerticesItems[s + 35] = dark.a; + } + + s = clippedTriangles.length; + let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3); + clippedTrianglesItems[s] = index; + clippedTrianglesItems[s + 1] = (index + 1); + clippedTrianglesItems[s + 2] = (index + 2); + index += 3; + continue outer; + } + } + } + } + + /** Clips the input triangle against the convex, clockwise clipping area. If the triangle lies entirely within the clipping + * area, false is returned. The clipping area must duplicate the first vertex at the end of the vertices list. */ + clip (x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, clippingArea: Array, output: Array) { + let originalOutput = output; + let clipped = false; + + // Avoid copy at the end. + let input: Array = null; + if (clippingArea.length % 4 >= 2) { + input = output; + output = this.scratch; + } else + input = this.scratch; + + input.length = 0; + input.push(x1); + input.push(y1); + input.push(x2); + input.push(y2); + input.push(x3); + input.push(y3); + input.push(x1); + input.push(y1); + output.length = 0; + + let clippingVertices = clippingArea; + let clippingVerticesLast = clippingArea.length - 4; + for (let i = 0;; i += 2) { + let edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1]; + let edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3]; + let deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2; + + let inputVertices = input; + let inputVerticesLength = input.length - 2, outputStart = output.length; + for (let ii = 0; ii < inputVerticesLength; ii += 2) { + let inputX = inputVertices[ii], inputY = inputVertices[ii + 1]; + let inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3]; + let side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0; + if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) { + if (side2) { // v1 inside, v2 inside + output.push(inputX2); + output.push(inputY2); + continue; + } + // v1 inside, v2 outside + let c0 = inputY2 - inputY, c2 = inputX2 - inputX; + let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } else { + output.push(edgeX); + output.push(edgeY); + } + } else if (side2) { // v1 outside, v2 inside + let c0 = inputY2 - inputY, c2 = inputX2 - inputX; + let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY); + if (Math.abs(s) > 0.000001) { + let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s; + output.push(edgeX + (edgeX2 - edgeX) * ua); + output.push(edgeY + (edgeY2 - edgeY) * ua); + } else { + output.push(edgeX); + output.push(edgeY); + } + output.push(inputX2); + output.push(inputY2); + } + clipped = true; + } + + if (outputStart == output.length) { // All edges outside. + originalOutput.length = 0; + return true; + } + + output.push(output[0]); + output.push(output[1]); + + if (i == clippingVerticesLast) break; + let temp = output; + output = input; + output.length = 0; + input = temp; + } + + if (originalOutput != output) { + originalOutput.length = 0; + for (let i = 0, n = output.length - 2; i < n; i++) + originalOutput[i] = output[i]; + } else + originalOutput.length = originalOutput.length - 2; + + return clipped; + } + + public static makeClockwise (polygon: ArrayLike) { + let vertices = polygon; + let verticeslength = polygon.length; + + let area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0; + for (let i = 0, n = verticeslength - 3; i < n; i += 2) { + p1x = vertices[i]; + p1y = vertices[i + 1]; + p2x = vertices[i + 2]; + p2y = vertices[i + 3]; + area += p1x * p2y - p2x * p1y; + } + if (area < 0) return; + + for (let i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) { + let x = vertices[i], y = vertices[i + 1]; + let other = lastX - i; + vertices[i] = vertices[other]; + vertices[i + 1] = vertices[other + 1]; + vertices[other] = x; + vertices[other + 1] = y; + } + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/SkeletonData.ts b/apps/module-ts/src/spine-ts/core/src/SkeletonData.ts new file mode 100755 index 0000000..32282f6 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/SkeletonData.ts @@ -0,0 +1,224 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + /** Stores the setup pose and all of the stateless data for a skeleton. + * + * See [Data objects](http://esotericsoftware.com/spine-runtime-architecture#Data-objects) in the Spine Runtimes + * Guide. */ + export class SkeletonData { + + /** The skeleton's name, which by default is the name of the skeleton data file, if possible. May be null. */ + name: string; + + /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */ + bones = new Array(); // Ordered parents first. + + /** The skeleton's slots. */ + slots = new Array(); // Setup pose draw order. + skins = new Array(); + + /** The skeleton's default skin. By default this skin contains all attachments that were not in a skin in Spine. + * + * See {@link Skeleton#getAttachmentByName()}. + * May be null. */ + defaultSkin: Skin; + + /** The skeleton's events. */ + events = new Array(); + + /** The skeleton's animations. */ + animations = new Array(); + + /** The skeleton's IK constraints. */ + ikConstraints = new Array(); + + /** The skeleton's transform constraints. */ + transformConstraints = new Array(); + + /** The skeleton's path constraints. */ + pathConstraints = new Array(); + + /** The X coordinate of the skeleton's axis aligned bounding box in the setup pose. */ + x: number; + + /** The Y coordinate of the skeleton's axis aligned bounding box in the setup pose. */ + y: number; + + /** The width of the skeleton's axis aligned bounding box in the setup pose. */ + width: number; + + /** The height of the skeleton's axis aligned bounding box in the setup pose. */ + height: number; + + /** The Spine version used to export the skeleton data, or null. */ + version: string; + + /** The skeleton data hash. This value will change if any of the skeleton data has changed. May be null. */ + hash: string; + + // Nonessential + /** The dopesheet FPS in Spine. Available only when nonessential data was exported. */ + fps = 0; + + /** The path to the images directory as defined in Spine. Available only when nonessential data was exported. May be null. */ + imagesPath: string; + + /** The path to the audio directory as defined in Spine. Available only when nonessential data was exported. May be null. */ + audioPath: string; + + /** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findBone (boneName: string) { + if (boneName == null) throw new Error("boneName cannot be null."); + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (bone.name == boneName) return bone; + } + return null; + } + + findBoneIndex (boneName: string) { + if (boneName == null) throw new Error("boneName cannot be null."); + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + } + + /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findSlot (slotName: string) { + if (slotName == null) throw new Error("slotName cannot be null."); + let slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + if (slot.name == slotName) return slot; + } + return null; + } + + findSlotIndex (slotName: string) { + if (slotName == null) throw new Error("slotName cannot be null."); + let slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + } + + /** Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findSkin (skinName: string) { + if (skinName == null) throw new Error("skinName cannot be null."); + let skins = this.skins; + for (let i = 0, n = skins.length; i < n; i++) { + let skin = skins[i]; + if (skin.name == skinName) return skin; + } + return null; + } + + /** Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findEvent (eventDataName: string) { + if (eventDataName == null) throw new Error("eventDataName cannot be null."); + let events = this.events; + for (let i = 0, n = events.length; i < n; i++) { + let event = events[i]; + if (event.name == eventDataName) return event; + } + return null; + } + + /** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to + * call it multiple times. + * @returns May be null. */ + findAnimation (animationName: string) { + if (animationName == null) throw new Error("animationName cannot be null."); + let animations = this.animations; + for (let i = 0, n = animations.length; i < n; i++) { + let animation = animations[i]; + if (animation.name == animationName) return animation; + } + return null; + } + + /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method + * than to call it multiple times. + * @return May be null. */ + findIkConstraint (constraintName: string) { + if (constraintName == null) throw new Error("constraintName cannot be null."); + let ikConstraints = this.ikConstraints; + for (let i = 0, n = ikConstraints.length; i < n; i++) { + let constraint = ikConstraints[i]; + if (constraint.name == constraintName) return constraint; + } + return null; + } + + /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of + * this method than to call it multiple times. + * @return May be null. */ + findTransformConstraint (constraintName: string) { + if (constraintName == null) throw new Error("constraintName cannot be null."); + let transformConstraints = this.transformConstraints; + for (let i = 0, n = transformConstraints.length; i < n; i++) { + let constraint = transformConstraints[i]; + if (constraint.name == constraintName) return constraint; + } + return null; + } + + /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method + * than to call it multiple times. + * @return May be null. */ + findPathConstraint (constraintName: string) { + if (constraintName == null) throw new Error("constraintName cannot be null."); + let pathConstraints = this.pathConstraints; + for (let i = 0, n = pathConstraints.length; i < n; i++) { + let constraint = pathConstraints[i]; + if (constraint.name == constraintName) return constraint; + } + return null; + } + + findPathConstraintIndex (pathConstraintName: string) { + if (pathConstraintName == null) throw new Error("pathConstraintName cannot be null."); + let pathConstraints = this.pathConstraints; + for (let i = 0, n = pathConstraints.length; i < n; i++) + if (pathConstraints[i].name == pathConstraintName) return i; + return -1; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/SkeletonJson.ts b/apps/module-ts/src/spine-ts/core/src/SkeletonJson.ts new file mode 100755 index 0000000..1b0a09c --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/SkeletonJson.ts @@ -0,0 +1,859 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Loads skeleton data in the Spine JSON format. + * + * See [Spine JSON format](http://esotericsoftware.com/spine-json-format) and + * [JSON and binary data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the Spine + * Runtimes Guide. */ + export class SkeletonJson { + attachmentLoader: AttachmentLoader; + + /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at + * runtime than were used in Spine. + * + * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */ + scale = 1; + private linkedMeshes = new Array(); + + constructor (attachmentLoader: AttachmentLoader) { + this.attachmentLoader = attachmentLoader; + } + + readSkeletonData (json: string | any): SkeletonData { + let scale = this.scale; + let skeletonData = new SkeletonData(); + let root = typeof(json) === "string" ? JSON.parse(json) : json; + + // Skeleton + let skeletonMap = root.skeleton; + if (skeletonMap != null) { + skeletonData.hash = skeletonMap.hash; + skeletonData.version = skeletonMap.spine; + if ("3.8.75" == skeletonData.version) + throw new Error("Unsupported skeleton data, please export with a newer version of Spine."); + skeletonData.x = skeletonMap.x; + skeletonData.y = skeletonMap.y; + skeletonData.width = skeletonMap.width; + skeletonData.height = skeletonMap.height; + skeletonData.fps = skeletonMap.fps; + skeletonData.imagesPath = skeletonMap.images; + } + + // Bones + if (root.bones) { + for (let i = 0; i < root.bones.length; i++) { + let boneMap = root.bones[i]; + + let parent: BoneData = null; + let parentName: string = this.getValue(boneMap, "parent", null); + if (parentName != null) { + parent = skeletonData.findBone(parentName); + if (parent == null) throw new Error("Parent bone not found: " + parentName); + } + let data = new BoneData(skeletonData.bones.length, boneMap.name, parent); + data.length = this.getValue(boneMap, "length", 0) * scale; + data.x = this.getValue(boneMap, "x", 0) * scale; + data.y = this.getValue(boneMap, "y", 0) * scale; + data.rotation = this.getValue(boneMap, "rotation", 0); + data.scaleX = this.getValue(boneMap, "scaleX", 1); + data.scaleY = this.getValue(boneMap, "scaleY", 1); + data.shearX = this.getValue(boneMap, "shearX", 0); + data.shearY = this.getValue(boneMap, "shearY", 0); + data.transformMode = SkeletonJson.transformModeFromString(this.getValue(boneMap, "transform", "normal")); + data.skinRequired = this.getValue(boneMap, "skin", false); + + skeletonData.bones.push(data); + } + } + + // Slots. + if (root.slots) { + for (let i = 0; i < root.slots.length; i++) { + let slotMap = root.slots[i]; + let slotName: string = slotMap.name; + let boneName: string = slotMap.bone; + let boneData = skeletonData.findBone(boneName); + if (boneData == null) throw new Error("Slot bone not found: " + boneName); + let data = new SlotData(skeletonData.slots.length, slotName, boneData); + + let color: string = this.getValue(slotMap, "color", null); + if (color != null) data.color.setFromString(color); + + let dark: string = this.getValue(slotMap, "dark", null); + if (dark != null) { + data.darkColor = new Color(1, 1, 1, 1); + data.darkColor.setFromString(dark); + } + + data.attachmentName = this.getValue(slotMap, "attachment", null); + data.blendMode = SkeletonJson.blendModeFromString(this.getValue(slotMap, "blend", "normal")); + skeletonData.slots.push(data); + } + } + + // IK constraints + if (root.ik) { + for (let i = 0; i < root.ik.length; i++) { + let constraintMap = root.ik[i]; + let data = new IkConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + + for (let j = 0; j < constraintMap.bones.length; j++) { + let boneName = constraintMap.bones[j]; + let bone = skeletonData.findBone(boneName); + if (bone == null) throw new Error("IK bone not found: " + boneName); + data.bones.push(bone); + } + + let targetName: string = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) throw new Error("IK target bone not found: " + targetName); + + data.mix = this.getValue(constraintMap, "mix", 1); + data.softness = this.getValue(constraintMap, "softness", 0) * scale; + data.bendDirection = this.getValue(constraintMap, "bendPositive", true) ? 1 : -1; + data.compress = this.getValue(constraintMap, "compress", false); + data.stretch = this.getValue(constraintMap, "stretch", false); + data.uniform = this.getValue(constraintMap, "uniform", false); + + skeletonData.ikConstraints.push(data); + } + } + + // Transform constraints. + if (root.transform) { + for (let i = 0; i < root.transform.length; i++) { + let constraintMap = root.transform[i]; + let data = new TransformConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + + for (let j = 0; j < constraintMap.bones.length; j++) { + let boneName = constraintMap.bones[j]; + let bone = skeletonData.findBone(boneName); + if (bone == null) throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + + let targetName: string = constraintMap.target; + data.target = skeletonData.findBone(targetName); + if (data.target == null) throw new Error("Transform constraint target bone not found: " + targetName); + + data.local = this.getValue(constraintMap, "local", false); + data.relative = this.getValue(constraintMap, "relative", false); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.offsetX = this.getValue(constraintMap, "x", 0) * scale; + data.offsetY = this.getValue(constraintMap, "y", 0) * scale; + data.offsetScaleX = this.getValue(constraintMap, "scaleX", 0); + data.offsetScaleY = this.getValue(constraintMap, "scaleY", 0); + data.offsetShearY = this.getValue(constraintMap, "shearY", 0); + + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + data.scaleMix = this.getValue(constraintMap, "scaleMix", 1); + data.shearMix = this.getValue(constraintMap, "shearMix", 1); + + skeletonData.transformConstraints.push(data); + } + } + + // Path constraints. + if (root.path) { + for (let i = 0; i < root.path.length; i++) { + let constraintMap = root.path[i]; + let data = new PathConstraintData(constraintMap.name); + data.order = this.getValue(constraintMap, "order", 0); + data.skinRequired = this.getValue(constraintMap, "skin", false); + + for (let j = 0; j < constraintMap.bones.length; j++) { + let boneName = constraintMap.bones[j]; + let bone = skeletonData.findBone(boneName); + if (bone == null) throw new Error("Transform constraint bone not found: " + boneName); + data.bones.push(bone); + } + + let targetName: string = constraintMap.target; + data.target = skeletonData.findSlot(targetName); + if (data.target == null) throw new Error("Path target slot not found: " + targetName); + + data.positionMode = SkeletonJson.positionModeFromString(this.getValue(constraintMap, "positionMode", "percent")); + data.spacingMode = SkeletonJson.spacingModeFromString(this.getValue(constraintMap, "spacingMode", "length")); + data.rotateMode = SkeletonJson.rotateModeFromString(this.getValue(constraintMap, "rotateMode", "tangent")); + data.offsetRotation = this.getValue(constraintMap, "rotation", 0); + data.position = this.getValue(constraintMap, "position", 0); + if (data.positionMode == PositionMode.Fixed) data.position *= scale; + data.spacing = this.getValue(constraintMap, "spacing", 0); + if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) data.spacing *= scale; + data.rotateMix = this.getValue(constraintMap, "rotateMix", 1); + data.translateMix = this.getValue(constraintMap, "translateMix", 1); + + skeletonData.pathConstraints.push(data); + } + } + + // Skins. + if (root.skins) { + for (let i = 0; i < root.skins.length; i++) { + let skinMap = root.skins[i] + let skin = new Skin(skinMap.name); + + if (skinMap.bones) { + for (let ii = 0; ii < skinMap.bones.length; ii++) { + let bone = skeletonData.findBone(skinMap.bones[ii]); + if (bone == null) throw new Error("Skin bone not found: " + skinMap.bones[i]); + skin.bones.push(bone); + } + } + + if (skinMap.ik) { + for (let ii = 0; ii < skinMap.ik.length; ii++) { + let constraint = skeletonData.findIkConstraint(skinMap.ik[ii]); + if (constraint == null) throw new Error("Skin IK constraint not found: " + skinMap.ik[i]); + skin.constraints.push(constraint); + } + } + + if (skinMap.transform) { + for (let ii = 0; ii < skinMap.transform.length; ii++) { + let constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]); + if (constraint == null) throw new Error("Skin transform constraint not found: " + skinMap.transform[i]); + skin.constraints.push(constraint); + } + } + + if (skinMap.path) { + for (let ii = 0; ii < skinMap.path.length; ii++) { + let constraint = skeletonData.findPathConstraint(skinMap.path[ii]); + if (constraint == null) throw new Error("Skin path constraint not found: " + skinMap.path[i]); + skin.constraints.push(constraint); + } + } + + for (let slotName in skinMap.attachments) { + let slot = skeletonData.findSlot(slotName); + if (slot == null) throw new Error("Slot not found: " + slotName); + let slotMap = skinMap.attachments[slotName]; + for (let entryName in slotMap) { + let attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); + if (attachment != null) skin.setAttachment(slot.index, entryName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + } + + // Linked meshes. + for (let i = 0, n = this.linkedMeshes.length; i < n; i++) { + let linkedMesh = this.linkedMeshes[i]; + let skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (skin == null) throw new Error("Skin not found: " + linkedMesh.skin); + let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); + if (parent == null) throw new Error("Parent mesh not found: " + linkedMesh.parent); + linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent : linkedMesh.mesh; + linkedMesh.mesh.setParentMesh( parent); + linkedMesh.mesh.updateUVs(); + } + this.linkedMeshes.length = 0; + + // Events. + if (root.events) { + for (let eventName in root.events) { + let eventMap = root.events[eventName]; + let data = new EventData(eventName); + data.intValue = this.getValue(eventMap, "int", 0); + data.floatValue = this.getValue(eventMap, "float", 0); + data.stringValue = this.getValue(eventMap, "string", ""); + data.audioPath = this.getValue(eventMap, "audio", null); + if (data.audioPath != null) { + data.volume = this.getValue(eventMap, "volume", 1); + data.balance = this.getValue(eventMap, "balance", 0); + } + skeletonData.events.push(data); + } + } + + // Animations. + if (root.animations) { + for (let animationName in root.animations) { + let animationMap = root.animations[animationName]; + this.readAnimation(animationMap, animationName, skeletonData); + } + } + + return skeletonData; + } + + readAttachment (map: any, skin: Skin, slotIndex: number, name: string, skeletonData: SkeletonData): Attachment { + let scale = this.scale; + name = this.getValue(map, "name", name); + + let type = this.getValue(map, "type", "region"); + + switch (type) { + case "region": { + let path = this.getValue(map, "path", name); + let region = this.attachmentLoader.newRegionAttachment(skin, name, path); + if (region == null) return null; + region.path = path; + region.x = this.getValue(map, "x", 0) * scale; + region.y = this.getValue(map, "y", 0) * scale; + region.scaleX = this.getValue(map, "scaleX", 1); + region.scaleY = this.getValue(map, "scaleY", 1); + region.rotation = this.getValue(map, "rotation", 0); + region.width = map.width * scale; + region.height = map.height * scale; + + let color: string = this.getValue(map, "color", null); + if (color != null) region.color.setFromString(color); + + region.updateOffset(); + return region; + } + case "boundingbox": { + let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); + if (box == null) return null; + this.readVertices(map, box, map.vertexCount << 1); + let color: string = this.getValue(map, "color", null); + if (color != null) box.color.setFromString(color); + return box; + } + case "mesh": + case "linkedmesh": { + let path = this.getValue(map, "path", name); + let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); + if (mesh == null) return null; + mesh.path = path; + + let color = this.getValue(map, "color", null); + if (color != null) mesh.color.setFromString(color); + + mesh.width = this.getValue(map, "width", 0) * scale; + mesh.height = this.getValue(map, "height", 0) * scale; + + let parent: string = this.getValue(map, "parent", null); + if (parent != null) { + this.linkedMeshes.push(new LinkedMesh(mesh, this.getValue(map, "skin", null), slotIndex, parent, this.getValue(map, "deform", true))); + return mesh; + } + + let uvs: Array = map.uvs; + this.readVertices(map, mesh, uvs.length); + mesh.triangles = map.triangles; + mesh.regionUVs = uvs; + mesh.updateUVs(); + + mesh.edges = this.getValue(map, "edges", null); + mesh.hullLength = this.getValue(map, "hull", 0) * 2; + return mesh; + } + case "path": { + let path = this.attachmentLoader.newPathAttachment(skin, name); + if (path == null) return null; + path.closed = this.getValue(map, "closed", false); + path.constantSpeed = this.getValue(map, "constantSpeed", true); + + let vertexCount = map.vertexCount; + this.readVertices(map, path, vertexCount << 1); + + let lengths: Array = Utils.newArray(vertexCount / 3, 0); + for (let i = 0; i < map.lengths.length; i++) + lengths[i] = map.lengths[i] * scale; + path.lengths = lengths; + + let color: string = this.getValue(map, "color", null); + if (color != null) path.color.setFromString(color); + return path; + } + case "point": { + let point = this.attachmentLoader.newPointAttachment(skin, name); + if (point == null) return null; + point.x = this.getValue(map, "x", 0) * scale; + point.y = this.getValue(map, "y", 0) * scale; + point.rotation = this.getValue(map, "rotation", 0); + + let color = this.getValue(map, "color", null); + if (color != null) point.color.setFromString(color); + return point; + } + case "clipping": { + let clip = this.attachmentLoader.newClippingAttachment(skin, name); + if (clip == null) return null; + + let end = this.getValue(map, "end", null); + if (end != null) { + let slot = skeletonData.findSlot(end); + if (slot == null) throw new Error("Clipping end slot not found: " + end); + clip.endSlot = slot; + } + + let vertexCount = map.vertexCount; + this.readVertices(map, clip, vertexCount << 1); + + let color: string = this.getValue(map, "color", null); + if (color != null) clip.color.setFromString(color); + return clip; + } + } + return null; + } + + readVertices (map: any, attachment: VertexAttachment, verticesLength: number) { + let scale = this.scale; + attachment.worldVerticesLength = verticesLength; + let vertices: Array = map.vertices; + if (verticesLength == vertices.length) { + let scaledVertices = Utils.toFloatArray(vertices); + if (scale != 1) { + for (let i = 0, n = vertices.length; i < n; i++) + scaledVertices[i] *= scale; + } + attachment.vertices = scaledVertices; + return; + } + let weights = new Array(); + let bones = new Array(); + for (let i = 0, n = vertices.length; i < n;) { + let boneCount = vertices[i++]; + bones.push(boneCount); + for (let nn = i + boneCount * 4; i < nn; i += 4) { + bones.push(vertices[i]); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = Utils.toFloatArray(weights); + } + + readAnimation (map: any, name: string, skeletonData: SkeletonData) { + let scale = this.scale; + let timelines = new Array(); + let duration = 0; + + // Slot timelines. + if (map.slots) { + for (let slotName in map.slots) { + let slotMap = map.slots[slotName]; + let slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) throw new Error("Slot not found: " + slotName); + for (let timelineName in slotMap) { + let timelineMap = slotMap[timelineName]; + if (timelineName == "attachment") { + let timeline = new AttachmentTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + + let frameIndex = 0; + for (let i = 0; i < timelineMap.length; i++) { + let valueMap = timelineMap[i]; + timeline.setFrame(frameIndex++, this.getValue(valueMap, "time", 0), valueMap.name); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } else if (timelineName == "color") { + let timeline = new ColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + + let frameIndex = 0; + for (let i = 0; i < timelineMap.length; i++) { + let valueMap = timelineMap[i]; + let color = new Color(); + color.setFromString(valueMap.color); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), color.r, color.g, color.b, color.a); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * ColorTimeline.ENTRIES]); + + } else if (timelineName == "twoColor") { + let timeline = new TwoColorTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + + let frameIndex = 0; + for (let i = 0; i < timelineMap.length; i++) { + let valueMap = timelineMap[i]; + let light = new Color(); + let dark = new Color(); + light.setFromString(valueMap.light); + dark.setFromString(valueMap.dark); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * TwoColorTimeline.ENTRIES]); + + } else + throw new Error("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"); + } + } + } + + // Bone timelines. + if (map.bones) { + for (let boneName in map.bones) { + let boneMap = map.bones[boneName]; + let boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw new Error("Bone not found: " + boneName); + for (let timelineName in boneMap) { + let timelineMap = boneMap[timelineName]; + if (timelineName === "rotate") { + let timeline = new RotateTimeline(timelineMap.length); + timeline.boneIndex = boneIndex; + + let frameIndex = 0; + for (let i = 0; i < timelineMap.length; i++) { + let valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "angle", 0)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * RotateTimeline.ENTRIES]); + + } else if (timelineName === "translate" || timelineName === "scale" || timelineName === "shear") { + let timeline: TranslateTimeline = null; + let timelineScale = 1, defaultValue = 0; + if (timelineName === "scale") { + timeline = new ScaleTimeline(timelineMap.length); + defaultValue = 1; + } else if (timelineName === "shear") + timeline = new ShearTimeline(timelineMap.length); + else { + timeline = new TranslateTimeline(timelineMap.length); + timelineScale = scale; + } + timeline.boneIndex = boneIndex; + + let frameIndex = 0; + for (let i = 0; i < timelineMap.length; i++) { + let valueMap = timelineMap[i]; + let x = this.getValue(valueMap, "x", defaultValue), y = this.getValue(valueMap, "y", defaultValue); + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), x * timelineScale, y * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * TranslateTimeline.ENTRIES]); + + } else + throw new Error("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); + } + } + } + + // IK constraint timelines. + if (map.ik) { + for (let constraintName in map.ik) { + let constraintMap = map.ik[constraintName]; + let constraint = skeletonData.findIkConstraint(constraintName); + let timeline = new IkConstraintTimeline(constraintMap.length); + timeline.ikConstraintIndex = skeletonData.ikConstraints.indexOf(constraint); + let frameIndex = 0; + for (let i = 0; i < constraintMap.length; i++) { + let valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "mix", 1), this.getValue(valueMap, "softness", 0) * scale, + this.getValue(valueMap, "bendPositive", true) ? 1 : -1, this.getValue(valueMap, "compress", false), this.getValue(valueMap, "stretch", false)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[(timeline.getFrameCount() - 1) * IkConstraintTimeline.ENTRIES]); + } + } + + // Transform constraint timelines. + if (map.transform) { + for (let constraintName in map.transform) { + let constraintMap = map.transform[constraintName]; + let constraint = skeletonData.findTransformConstraint(constraintName); + let timeline = new TransformConstraintTimeline(constraintMap.length); + timeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(constraint); + let frameIndex = 0; + for (let i = 0; i < constraintMap.length; i++) { + let valueMap = constraintMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), + this.getValue(valueMap, "translateMix", 1), this.getValue(valueMap, "scaleMix", 1), this.getValue(valueMap, "shearMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, + timeline.frames[(timeline.getFrameCount() - 1) * TransformConstraintTimeline.ENTRIES]); + } + } + + // Path constraint timelines. + if (map.path) { + for (let constraintName in map.path) { + let constraintMap = map.path[constraintName]; + let index = skeletonData.findPathConstraintIndex(constraintName); + if (index == -1) throw new Error("Path constraint not found: " + constraintName); + let data = skeletonData.pathConstraints[index]; + for (let timelineName in constraintMap) { + let timelineMap = constraintMap[timelineName]; + if (timelineName === "position" || timelineName === "spacing") { + let timeline: PathConstraintPositionTimeline = null; + let timelineScale = 1; + if (timelineName === "spacing") { + timeline = new PathConstraintSpacingTimeline(timelineMap.length); + if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) timelineScale = scale; + } else { + timeline = new PathConstraintPositionTimeline(timelineMap.length); + if (data.positionMode == PositionMode.Fixed) timelineScale = scale; + } + timeline.pathConstraintIndex = index; + let frameIndex = 0; + for (let i = 0; i < timelineMap.length; i++) { + let valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, timelineName, 0) * timelineScale); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, + timeline.frames[(timeline.getFrameCount() - 1) * PathConstraintPositionTimeline.ENTRIES]); + } else if (timelineName === "mix") { + let timeline = new PathConstraintMixTimeline(timelineMap.length); + timeline.pathConstraintIndex = index; + let frameIndex = 0; + for (let i = 0; i < timelineMap.length; i++) { + let valueMap = timelineMap[i]; + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), this.getValue(valueMap, "rotateMix", 1), + this.getValue(valueMap, "translateMix", 1)); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, + timeline.frames[(timeline.getFrameCount() - 1) * PathConstraintMixTimeline.ENTRIES]); + } + } + } + } + + // Deform timelines. + if (map.deform) { + for (let deformName in map.deform) { + let deformMap = map.deform[deformName]; + let skin = skeletonData.findSkin(deformName); + if (skin == null) throw new Error("Skin not found: " + deformName); + for (let slotName in deformMap) { + let slotMap = deformMap[slotName]; + let slotIndex = skeletonData.findSlotIndex(slotName); + if (slotIndex == -1) throw new Error("Slot not found: " + slotMap.name); + for (let timelineName in slotMap) { + let timelineMap = slotMap[timelineName]; + let attachment = skin.getAttachment(slotIndex, timelineName); + if (attachment == null) throw new Error("Deform attachment not found: " + timelineMap.name); + let weighted = attachment.bones != null; + let vertices = attachment.vertices; + let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + + let timeline = new DeformTimeline(timelineMap.length); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + + let frameIndex = 0; + for (let j = 0; j < timelineMap.length; j++) { + let valueMap = timelineMap[j]; + let deform: ArrayLike; + let verticesValue: Array = this.getValue(valueMap, "vertices", null); + if (verticesValue == null) + deform = weighted ? Utils.newFloatArray(deformLength) : vertices; + else { + deform = Utils.newFloatArray(deformLength); + let start = this.getValue(valueMap, "offset", 0); + Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length); + if (scale != 1) { + for (let i = start, n = i + verticesValue.length; i < n; i++) + deform[i] *= scale; + } + if (!weighted) { + for (let i = 0; i < deformLength; i++) + deform[i] += vertices[i]; + } + } + + timeline.setFrame(frameIndex, this.getValue(valueMap, "time", 0), deform); + this.readCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + } + } + } + + // Draw order timeline. + let drawOrderNode = map.drawOrder; + if (drawOrderNode == null) drawOrderNode = map.draworder; + if (drawOrderNode != null) { + let timeline = new DrawOrderTimeline(drawOrderNode.length); + let slotCount = skeletonData.slots.length; + let frameIndex = 0; + for (let j = 0; j < drawOrderNode.length; j++) { + let drawOrderMap = drawOrderNode[j]; + let drawOrder: Array = null; + let offsets = this.getValue(drawOrderMap, "offsets", null); + if (offsets != null) { + drawOrder = Utils.newArray(slotCount, -1); + let unchanged = Utils.newArray(slotCount - offsets.length, 0); + let originalIndex = 0, unchangedIndex = 0; + for (let i = 0; i < offsets.length; i++) { + let offsetMap = offsets[i]; + let slotIndex = skeletonData.findSlotIndex(offsetMap.slot); + if (slotIndex == -1) throw new Error("Slot not found: " + offsetMap.slot); + // Collect unchanged items. + while (originalIndex != slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + // Set changed items. + drawOrder[originalIndex + offsetMap.offset] = originalIndex++; + } + // Collect remaining unchanged items. + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + // Fill in unchanged items. + for (let i = slotCount - 1; i >= 0; i--) + if (drawOrder[i] == -1) drawOrder[i] = unchanged[--unchangedIndex]; + } + timeline.setFrame(frameIndex++, this.getValue(drawOrderMap, "time", 0), drawOrder); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + + // Event timeline. + if (map.events) { + let timeline = new EventTimeline(map.events.length); + let frameIndex = 0; + for (let i = 0; i < map.events.length; i++) { + let eventMap = map.events[i]; + let eventData = skeletonData.findEvent(eventMap.name); + if (eventData == null) throw new Error("Event not found: " + eventMap.name); + let event = new Event(Utils.toSinglePrecision(this.getValue(eventMap, "time", 0)), eventData); + event.intValue = this.getValue(eventMap, "int", eventData.intValue); + event.floatValue = this.getValue(eventMap, "float", eventData.floatValue); + event.stringValue = this.getValue(eventMap, "string", eventData.stringValue); + if (event.data.audioPath != null) { + event.volume = this.getValue(eventMap, "volume", 1); + event.balance = this.getValue(eventMap, "balance", 0); + } + timeline.setFrame(frameIndex++, event); + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() - 1]); + } + + if (isNaN(duration)) { + throw new Error("Error while parsing animation, duration is NaN"); + } + + skeletonData.animations.push(new Animation(name, timelines, duration)); + } + + readCurve (map: any, timeline: CurveTimeline, frameIndex: number) { + if (!map.hasOwnProperty("curve")) return; + if (map.curve == "stepped") + timeline.setStepped(frameIndex); + else { + let curve: number = map.curve; + timeline.setCurve(frameIndex, curve, this.getValue(map, "c2", 0), this.getValue(map, "c3", 1), this.getValue(map, "c4", 1)); + } + } + + getValue (map: any, prop: string, defaultValue: any) { + return map[prop] !== undefined ? map[prop] : defaultValue; + } + + static blendModeFromString (str: string) { + str = str.toLowerCase(); + if (str == "normal") return BlendMode.Normal; + if (str == "additive") return BlendMode.Additive; + if (str == "multiply") return BlendMode.Multiply; + if (str == "screen") return BlendMode.Screen; + throw new Error(`Unknown blend mode: ${str}`); + } + + static positionModeFromString (str: string) { + str = str.toLowerCase(); + if (str == "fixed") return PositionMode.Fixed; + if (str == "percent") return PositionMode.Percent; + throw new Error(`Unknown position mode: ${str}`); + } + + static spacingModeFromString (str: string) { + str = str.toLowerCase(); + if (str == "length") return SpacingMode.Length; + if (str == "fixed") return SpacingMode.Fixed; + if (str == "percent") return SpacingMode.Percent; + throw new Error(`Unknown position mode: ${str}`); + } + + static rotateModeFromString (str: string) { + str = str.toLowerCase(); + if (str == "tangent") return RotateMode.Tangent; + if (str == "chain") return RotateMode.Chain; + if (str == "chainscale") return RotateMode.ChainScale; + throw new Error(`Unknown rotate mode: ${str}`); + } + + static transformModeFromString(str: string) { + str = str.toLowerCase(); + if (str == "normal") return TransformMode.Normal; + if (str == "onlytranslation") return TransformMode.OnlyTranslation; + if (str == "norotationorreflection") return TransformMode.NoRotationOrReflection; + if (str == "noscale") return TransformMode.NoScale; + if (str == "noscaleorreflection") return TransformMode.NoScaleOrReflection; + throw new Error(`Unknown transform mode: ${str}`); + } + } + + class LinkedMesh { + parent: string; skin: string; + slotIndex: number; + mesh: MeshAttachment; + inheritDeform: boolean; + + constructor (mesh: MeshAttachment, skin: string, slotIndex: number, parent: string, inheritDeform: boolean) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.parent = parent; + this.inheritDeform = inheritDeform; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/Skin.ts b/apps/module-ts/src/spine-ts/core/src/Skin.ts new file mode 100755 index 0000000..7f3e33c --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/Skin.ts @@ -0,0 +1,202 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + /** Stores an entry in the skin consisting of the slot index, name, and attachment **/ + export class SkinEntry { + constructor(public slotIndex: number, public name: string, public attachment: Attachment) { } + } + + /** Stores attachments by slot index and attachment name. + * + * See SkeletonData {@link SkeletonData#defaultSkin}, Skeleton {@link Skeleton#skin}, and + * [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. */ + export class Skin { + /** The skin's name, which is unique across all skins in the skeleton. */ + name: string; + + attachments = new Array>(); + bones = Array(); + constraints = new Array(); + + constructor (name: string) { + if (name == null) throw new Error("name cannot be null."); + this.name = name; + } + + /** Adds an attachment to the skin for the specified slot index and name. */ + setAttachment (slotIndex: number, name: string, attachment: Attachment) { + if (attachment == null) throw new Error("attachment cannot be null."); + let attachments = this.attachments; + if (slotIndex >= attachments.length) attachments.length = slotIndex + 1; + if (!attachments[slotIndex]) attachments[slotIndex] = { }; + attachments[slotIndex][name] = attachment; + } + + /** Adds all attachments, bones, and constraints from the specified skin to this skin. */ + addSkin (skin: Skin) { + for(let i = 0; i < skin.bones.length; i++) { + let bone = skin.bones[i]; + let contained = false; + for (let j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) this.bones.push(bone); + } + + for(let i = 0; i < skin.constraints.length; i++) { + let constraint = skin.constraints[i]; + let contained = false; + for (let j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) this.constraints.push(constraint); + } + + let attachments = skin.getAttachments(); + for (let i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + + /** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not + * copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */ + copySkin (skin: Skin) { + for(let i = 0; i < skin.bones.length; i++) { + let bone = skin.bones[i]; + let contained = false; + for (let j = 0; j < this.bones.length; j++) { + if (this.bones[j] == bone) { + contained = true; + break; + } + } + if (!contained) this.bones.push(bone); + } + + for(let i = 0; i < skin.constraints.length; i++) { + let constraint = skin.constraints[i]; + let contained = false; + for (let j = 0; j < this.constraints.length; j++) { + if (this.constraints[j] == constraint) { + contained = true; + break; + } + } + if (!contained) this.constraints.push(constraint); + } + + let attachments = skin.getAttachments(); + for (let i = 0; i < attachments.length; i++) { + var attachment = attachments[i]; + if (attachment.attachment == null) continue; + if (attachment.attachment instanceof MeshAttachment) { + attachment.attachment = attachment.attachment.newLinkedMesh(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } else { + attachment.attachment = attachment.attachment.copy(); + this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); + } + } + } + + /** Returns the attachment for the specified slot index and name, or null. */ + getAttachment (slotIndex: number, name: string): Attachment { + let dictionary = this.attachments[slotIndex]; + return dictionary ? dictionary[name] : null; + } + + /** Removes the attachment in the skin for the specified slot index and name, if any. */ + removeAttachment (slotIndex: number, name: string) { + let dictionary = this.attachments[slotIndex]; + if (dictionary) dictionary[name] = null; + } + + /** Returns all attachments in this skin. */ + getAttachments (): Array { + let entries = new Array(); + for (var i = 0; i < this.attachments.length; i++) { + let slotAttachments = this.attachments[i]; + if (slotAttachments) { + for (let name in slotAttachments) { + let attachment = slotAttachments[name]; + if (attachment) entries.push(new SkinEntry(i, name, attachment)); + } + } + } + return entries; + } + + /** Returns all attachments in this skin for the specified slot index. */ + getAttachmentsForSlot (slotIndex: number, attachments: Array) { + let slotAttachments = this.attachments[slotIndex]; + if (slotAttachments) { + for (let name in slotAttachments) { + let attachment = slotAttachments[name]; + if (attachment) attachments.push(new SkinEntry(slotIndex, name, attachment)); + } + } + } + + /** Clears all attachments, bones, and constraints. */ + clear () { + this.attachments.length = 0; + this.bones.length = 0; + this.constraints.length = 0; + } + + /** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */ + attachAll (skeleton: Skeleton, oldSkin: Skin) { + let slotIndex = 0; + for (let i = 0; i < skeleton.slots.length; i++) { + let slot = skeleton.slots[i]; + let slotAttachment = slot.getAttachment(); + if (slotAttachment && slotIndex < oldSkin.attachments.length) { + let dictionary = oldSkin.attachments[slotIndex]; + for (let key in dictionary) { + let skinAttachment:Attachment = dictionary[key]; + if (slotAttachment == skinAttachment) { + let attachment = this.getAttachment(slotIndex, key); + if (attachment != null) slot.setAttachment(attachment); + break; + } + } + } + slotIndex++; + } + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/Slot.ts b/apps/module-ts/src/spine-ts/core/src/Slot.ts new file mode 100755 index 0000000..a349eab --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/Slot.ts @@ -0,0 +1,113 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores a slot's current pose. Slots organize attachments for {@link Skeleton#drawOrder} purposes and provide a place to store + * state for an attachment. State cannot be stored in an attachment itself because attachments are stateless and may be shared + * across multiple skeletons. */ + export class Slot { + /** The slot's setup pose data. */ + data: SlotData; + + /** The bone this slot belongs to. */ + bone: Bone; + + /** The color used to tint the slot's attachment. If {@link #getDarkColor()} is set, this is used as the light color for two + * color tinting. */ + color: Color; + + /** The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark + * color's alpha is not used. */ + darkColor: Color; + + attachment: Attachment; + + private attachmentTime: number; + + attachmentState: number; + + /** Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a + * weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions. + * + * See {@link VertexAttachment#computeWorldVertices()} and {@link DeformTimeline}. */ + deform = new Array(); + + constructor (data: SlotData, bone: Bone) { + if (data == null) throw new Error("data cannot be null."); + if (bone == null) throw new Error("bone cannot be null."); + this.data = data; + this.bone = bone; + this.color = new Color(); + this.darkColor = data.darkColor == null ? null : new Color(); + this.setToSetupPose(); + } + + /** The skeleton this slot belongs to. */ + getSkeleton (): Skeleton { + return this.bone.skeleton; + } + + /** The current attachment for the slot, or null if the slot has no attachment. */ + getAttachment (): Attachment { + return this.attachment; + } + + /** Sets the slot's attachment and, if the attachment changed, resets {@link #attachmentTime} and clears {@link #deform}. + * @param attachment May be null. */ + setAttachment (attachment: Attachment) { + if (this.attachment == attachment) return; + this.attachment = attachment; + this.attachmentTime = this.bone.skeleton.time; + this.deform.length = 0; + } + + setAttachmentTime (time: number) { + this.attachmentTime = this.bone.skeleton.time - time; + } + + /** The time that has elapsed since the last time the attachment was set or cleared. Relies on Skeleton + * {@link Skeleton#time}. */ + getAttachmentTime (): number { + return this.bone.skeleton.time - this.attachmentTime; + } + + /** Sets this slot to the setup pose. */ + setToSetupPose () { + this.color.setFromColor(this.data.color); + if (this.darkColor != null) this.darkColor.setFromColor(this.data.darkColor); + if (this.data.attachmentName == null) + this.attachment = null; + else { + this.attachment = null; + this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/SlotData.ts b/apps/module-ts/src/spine-ts/core/src/SlotData.ts new file mode 100755 index 0000000..5f24566 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/SlotData.ts @@ -0,0 +1,67 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores the setup pose for a {@link Slot}. */ + export class SlotData { + + /** The index of the slot in {@link Skeleton#getSlots()}. */ + index: number; + + /** The name of the slot, which is unique across all slots in the skeleton. */ + name: string; + + /** The bone this slot belongs to. */ + boneData: BoneData; + + /** The color used to tint the slot's attachment. If {@link #getDarkColor()} is set, this is used as the light color for two + * color tinting. */ + color = new Color(1, 1, 1, 1); + + /** The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark + * color's alpha is not used. */ + darkColor: Color; + + /** The name of the attachment that is visible for this slot in the setup pose, or null if no attachment is visible. */ + attachmentName: string; + + /** The blend mode for drawing the slot's attachment. */ + blendMode: BlendMode; + + constructor (index: number, name: string, boneData: BoneData) { + if (index < 0) throw new Error("index must be >= 0."); + if (name == null) throw new Error("name cannot be null."); + if (boneData == null) throw new Error("boneData cannot be null."); + this.index = index; + this.name = name; + this.boneData = boneData; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/Texture.ts b/apps/module-ts/src/spine-ts/core/src/Texture.ts new file mode 100755 index 0000000..670415a --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/Texture.ts @@ -0,0 +1,100 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + export abstract class Texture { + protected _image: HTMLImageElement | ImageBitmap; + + constructor (image: HTMLImageElement | ImageBitmap) { + this._image = image; + } + + getImage (): HTMLImageElement | ImageBitmap { + return this._image; + } + + abstract setFilters (minFilter: TextureFilter, magFilter: TextureFilter): void; + abstract setWraps (uWrap: TextureWrap, vWrap: TextureWrap): void; + abstract dispose (): void; + + public static filterFromString (text: string): TextureFilter { + switch (text.toLowerCase()) { + case "nearest": return TextureFilter.Nearest; + case "linear": return TextureFilter.Linear; + case "mipmap": return TextureFilter.MipMap; + case "mipmapnearestnearest": return TextureFilter.MipMapNearestNearest; + case "mipmaplinearnearest": return TextureFilter.MipMapLinearNearest; + case "mipmapnearestlinear": return TextureFilter.MipMapNearestLinear; + case "mipmaplinearlinear": return TextureFilter.MipMapLinearLinear; + default: throw new Error(`Unknown texture filter ${text}`); + } + } + + public static wrapFromString (text: string): TextureWrap { + switch (text.toLowerCase()) { + case "mirroredtepeat": return TextureWrap.MirroredRepeat; + case "clamptoedge": return TextureWrap.ClampToEdge; + case "repeat": return TextureWrap.Repeat; + default: throw new Error(`Unknown texture wrap ${text}`); + } + } + } + + export enum TextureFilter { + Nearest = 9728, // WebGLRenderingContext.NEAREST + Linear = 9729, // WebGLRenderingContext.LINEAR + MipMap = 9987, // WebGLRenderingContext.LINEAR_MIPMAP_LINEAR + MipMapNearestNearest = 9984, // WebGLRenderingContext.NEAREST_MIPMAP_NEAREST + MipMapLinearNearest = 9985, // WebGLRenderingContext.LINEAR_MIPMAP_NEAREST + MipMapNearestLinear = 9986, // WebGLRenderingContext.NEAREST_MIPMAP_LINEAR + MipMapLinearLinear = 9987 // WebGLRenderingContext.LINEAR_MIPMAP_LINEAR + } + + export enum TextureWrap { + MirroredRepeat = 33648, // WebGLRenderingContext.MIRRORED_REPEAT + ClampToEdge = 33071, // WebGLRenderingContext.CLAMP_TO_EDGE + Repeat = 10497 // WebGLRenderingContext.REPEAT + } + + export class TextureRegion { + renderObject: any; + u = 0; v = 0; + u2 = 0; v2 = 0; + width = 0; height = 0; + rotate = false; + offsetX = 0; offsetY = 0; + originalWidth = 0; originalHeight = 0; + } + + export class FakeTexture extends Texture { + setFilters(minFilter: TextureFilter, magFilter: TextureFilter) { } + setWraps(uWrap: TextureWrap, vWrap: TextureWrap) { } + dispose() { } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/TextureAtlas.ts b/apps/module-ts/src/spine-ts/core/src/TextureAtlas.ts new file mode 100755 index 0000000..bdc10ff --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/TextureAtlas.ts @@ -0,0 +1,220 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + export class TextureAtlas implements Disposable { + pages = new Array(); + regions = new Array(); + + constructor (atlasText: string, textureLoader: (path: string) => any) { + this.load(atlasText, textureLoader); + } + + private load (atlasText: string, textureLoader: (path: string) => any) { + if (textureLoader == null) + throw new Error("textureLoader cannot be null."); + + let reader = new TextureAtlasReader(atlasText); + let tuple = new Array(4); + let page:TextureAtlasPage = null; + while (true) { + let line = reader.readLine(); + if (line == null) + break; + line = line.trim(); + if (line.length == 0) + page = null; + else if (!page) { + page = new TextureAtlasPage(); + page.name = line; + + if (reader.readTuple(tuple) == 2) { // size is only optional for an atlas packed with an old TexturePacker. + page.width = parseInt(tuple[0]); + page.height = parseInt(tuple[1]); + reader.readTuple(tuple); + } + // page.format = Format[tuple[0]]; we don't need format in WebGL + + reader.readTuple(tuple); + page.minFilter = Texture.filterFromString(tuple[0]); + page.magFilter = Texture.filterFromString(tuple[1]); + + let direction= reader.readValue(); + page.uWrap = TextureWrap.ClampToEdge; + page.vWrap = TextureWrap.ClampToEdge; + if (direction == "x") + page.uWrap = TextureWrap.Repeat; + else if (direction == "y") + page.vWrap = TextureWrap.Repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = TextureWrap.Repeat; + + page.texture = textureLoader(line); + page.texture.setFilters(page.minFilter, page.magFilter); + page.texture.setWraps(page.uWrap, page.vWrap); + page.width = page.texture.getImage().width; + page.height = page.texture.getImage().height; + this.pages.push(page); + } else { + let region:TextureAtlasRegion = new TextureAtlasRegion(); + region.name = line; + region.page = page; + + let rotateValue = reader.readValue(); + if (rotateValue.toLocaleLowerCase() == "true") { + region.degrees = 90; + } else if (rotateValue.toLocaleLowerCase() == "false") { + region.degrees = 0; + } else { + region.degrees = parseFloat(rotateValue); + } + region.rotate = region.degrees == 90; + + reader.readTuple(tuple); + let x = parseInt(tuple[0]); + let y = parseInt(tuple[1]); + + reader.readTuple(tuple); + let width = parseInt(tuple[0]); + let height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + // region.splits = new Vector.(parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])); + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + //region.pads = Vector.(parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])); + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + region.texture = page.texture; + this.regions.push(region); + } + } + } + + findRegion (name: string): TextureAtlasRegion { + for (let i = 0; i < this.regions.length; i++) { + if (this.regions[i].name == name) { + return this.regions[i]; + } + } + return null; + } + + dispose () { + for (let i = 0; i < this.pages.length; i++) { + this.pages[i].texture.dispose(); + } + } + } + + class TextureAtlasReader { + lines: Array; + index: number = 0; + + constructor (text: string) { + this.lines = text.split(/\r\n|\r|\n/); + } + + readLine (): string { + if (this.index >= this.lines.length) + return null; + return this.lines[this.index++]; + } + + readValue (): string { + let line = this.readLine(); + let colon= line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + return line.substring(colon + 1).trim(); + } + + readTuple (tuple: Array): number { + let line = this.readLine(); + let colon = line.indexOf(":"); + if (colon == -1) + throw new Error("Invalid line: " + line); + let i = 0, lastMatch = colon + 1; + for (; i < 3; i++) { + let comma = line.indexOf(",", lastMatch); + if (comma == -1) break; + tuple[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + } + tuple[i] = line.substring(lastMatch).trim(); + return i + 1; + } + } + + export class TextureAtlasPage { + name: string; + minFilter: TextureFilter; + magFilter: TextureFilter; + uWrap: TextureWrap; + vWrap: TextureWrap; + texture: Texture; + width: number; + height: number; + } + + export class TextureAtlasRegion extends TextureRegion { + page: TextureAtlasPage; + name: string; + x: number; + y: number; + index: number; + rotate: boolean; + degrees: number; + texture: Texture; + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/TransformConstraint.ts b/apps/module-ts/src/spine-ts/core/src/TransformConstraint.ts new file mode 100755 index 0000000..7b74afe --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/TransformConstraint.ts @@ -0,0 +1,300 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores the current pose for a transform constraint. A transform constraint adjusts the world transform of the constrained + * bones to match that of the target bone. + * + * See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */ + export class TransformConstraint implements Updatable { + + /** The transform constraint's setup pose data. */ + data: TransformConstraintData; + + /** The bones that will be modified by this transform constraint. */ + bones: Array; + + /** The target bone whose world transform will be copied to the constrained bones. */ + target: Bone; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ + rotateMix = 0; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained translations. */ + translateMix = 0; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained scales. */ + scaleMix = 0; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained scales. */ + shearMix = 0; + + temp = new Vector2(); + active = false; + + constructor (data: TransformConstraintData, skeleton: Skeleton) { + if (data == null) throw new Error("data cannot be null."); + if (skeleton == null) throw new Error("skeleton cannot be null."); + this.data = data; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + this.scaleMix = data.scaleMix; + this.shearMix = data.shearMix; + this.bones = new Array(); + for (let i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + + isActive () { + return this.active; + } + + /** Applies the constraint to the constrained bones. */ + apply () { + this.update(); + } + + update () { + if (this.data.local) { + if (this.data.relative) + this.applyRelativeLocal(); + else + this.applyAbsoluteLocal(); + + } else { + if (this.data.relative) + this.applyRelativeWorld(); + else + this.applyAbsoluteWorld(); + } + } + + applyAbsoluteWorld () { + let rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + let target = this.target; + let ta = target.a, tb = target.b, tc = target.c, td = target.d; + let degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad; + let offsetRotation = this.data.offsetRotation * degRadReflect; + let offsetShearY = this.data.offsetShearY * degRadReflect; + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + let modified = false; + + if (rotateMix != 0) { + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + let r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r *= rotateMix; + let cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + + if (translateMix != 0) { + let temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += (temp.x - bone.worldX) * translateMix; + bone.worldY += (temp.y - bone.worldY) * translateMix; + modified = true; + } + + if (scaleMix > 0) { + let s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + let ts = Math.sqrt(ta * ta + tc * tc); + if (s > 0.00001) s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s; + bone.a *= s; + bone.c *= s; + s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + ts = Math.sqrt(tb * tb + td * td); + if (s > 0.00001) s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s; + bone.b *= s; + bone.d *= s; + modified = true; + } + + if (shearMix > 0) { + let b = bone.b, d = bone.d; + let by = Math.atan2(d, b); + let r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r = by + (r + offsetShearY) * shearMix; + let s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + + if (modified) bone.appliedValid = false; + } + } + + applyRelativeWorld () { + let rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + let target = this.target; + let ta = target.a, tb = target.b, tc = target.c, td = target.d; + let degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad; + let offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + let modified = false; + + if (rotateMix != 0) { + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + let r = Math.atan2(tc, ta) + offsetRotation; + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) r += MathUtils.PI2; + r *= rotateMix; + let cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + modified = true; + } + + if (translateMix != 0) { + let temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += temp.x * translateMix; + bone.worldY += temp.y * translateMix; + modified = true; + } + + if (scaleMix > 0) { + let s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1; + bone.a *= s; + bone.c *= s; + s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1; + bone.b *= s; + bone.d *= s; + modified = true; + } + + if (shearMix > 0) { + let r = Math.atan2(td, tb) - Math.atan2(tc, ta); + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) r += MathUtils.PI2; + let b = bone.b, d = bone.d; + r = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * shearMix; + let s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + modified = true; + } + + if (modified) bone.appliedValid = false; + } + } + + applyAbsoluteLocal () { + let rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + let target = this.target; + if (!target.appliedValid) target.updateAppliedTransform(); + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (!bone.appliedValid) bone.updateAppliedTransform(); + + let rotation = bone.arotation; + if (rotateMix != 0) { + let r = target.arotation - rotation + this.data.offsetRotation; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + rotation += r * rotateMix; + } + + let x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax - x + this.data.offsetX) * translateMix; + y += (target.ay - y + this.data.offsetY) * translateMix; + } + + let scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX; + if (scaleY > 0.00001) scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY; + } + + let shearY = bone.ashearY; + if (shearMix != 0) { + let r = target.ashearY - shearY + this.data.offsetShearY; + r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; + bone.shearY += r * shearMix; + } + + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + } + + applyRelativeLocal () { + let rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; + let target = this.target; + if (!target.appliedValid) target.updateAppliedTransform(); + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (!bone.appliedValid) bone.updateAppliedTransform(); + + let rotation = bone.arotation; + if (rotateMix != 0) rotation += (target.arotation + this.data.offsetRotation) * rotateMix; + + let x = bone.ax, y = bone.ay; + if (translateMix != 0) { + x += (target.ax + this.data.offsetX) * translateMix; + y += (target.ay + this.data.offsetY) * translateMix; + } + + let scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (scaleMix != 0) { + if (scaleX > 0.00001) scaleX *= ((target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix) + 1; + if (scaleY > 0.00001) scaleY *= ((target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix) + 1; + } + + let shearY = bone.ashearY; + if (shearMix != 0) shearY += (target.ashearY + this.data.offsetShearY) * shearMix; + + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/TransformConstraintData.ts b/apps/module-ts/src/spine-ts/core/src/TransformConstraintData.ts new file mode 100755 index 0000000..5a3b38c --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/TransformConstraintData.ts @@ -0,0 +1,80 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** Stores the setup pose for a {@link TransformConstraint}. + * + * See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */ + export class TransformConstraintData extends ConstraintData { + + /** The bones that will be modified by this transform constraint. */ + bones = new Array(); + + /** The target bone whose world transform will be copied to the constrained bones. */ + target: BoneData; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ + rotateMix = 0; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained translations. */ + translateMix = 0; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained scales. */ + scaleMix = 0; + + /** A percentage (0-1) that controls the mix between the constrained and unconstrained shears. */ + shearMix = 0; + + /** An offset added to the constrained bone rotation. */ + offsetRotation = 0; + + /** An offset added to the constrained bone X translation. */ + offsetX = 0; + + /** An offset added to the constrained bone Y translation. */ + offsetY = 0; + + /** An offset added to the constrained bone scaleX. */ + offsetScaleX = 0; + + /** An offset added to the constrained bone scaleY. */ + offsetScaleY = 0; + + /** An offset added to the constrained bone shearY. */ + offsetShearY = 0; + + relative = false; + local = false; + + constructor (name: string) { + super(name, 0, false); + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/Triangulator.ts b/apps/module-ts/src/spine-ts/core/src/Triangulator.ts new file mode 100755 index 0000000..785e879 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/Triangulator.ts @@ -0,0 +1,269 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + export class Triangulator { + private convexPolygons = new Array>(); + private convexPolygonsIndices = new Array>(); + + private indicesArray = new Array(); + private isConcaveArray = new Array(); + private triangles = new Array(); + + private polygonPool = new Pool>(() => { + return new Array(); + }); + + private polygonIndicesPool = new Pool>(() => { + return new Array(); + }); + + public triangulate (verticesArray: ArrayLike): Array { + let vertices = verticesArray; + let vertexCount = verticesArray.length >> 1; + + let indices = this.indicesArray; + indices.length = 0; + for (let i = 0; i < vertexCount; i++) + indices[i] = i; + + let isConcave = this.isConcaveArray; + isConcave.length = 0; + for (let i = 0, n = vertexCount; i < n; ++i) + isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices); + + let triangles = this.triangles; + triangles.length = 0; + + while (vertexCount > 3) { + // Find ear tip. + let previous = vertexCount - 1, i = 0, next = 1; + while (true) { + outer: + if (!isConcave[i]) { + let p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; + let p1x = vertices[p1], p1y = vertices[p1 + 1]; + let p2x = vertices[p2], p2y = vertices[p2 + 1]; + let p3x = vertices[p3], p3y = vertices[p3 + 1]; + for (let ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) { + if (!isConcave[ii]) continue; + let v = indices[ii] << 1; + let vx = vertices[v], vy = vertices[v + 1]; + if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) { + if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) { + if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) break outer; + } + } + } + break; + } + + if (next == 0) { + do { + if (!isConcave[i]) break; + i--; + } while (i > 0); + break; + } + + previous = i; + i = next; + next = (next + 1) % vertexCount; + } + + // Cut ear tip. + triangles.push(indices[(vertexCount + i - 1) % vertexCount]); + triangles.push(indices[i]); + triangles.push(indices[(i + 1) % vertexCount]); + indices.splice(i, 1); + isConcave.splice(i, 1); + vertexCount--; + + let previousIndex = (vertexCount + i - 1) % vertexCount; + let nextIndex = i == vertexCount ? 0 : i; + isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices); + isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices); + } + + if (vertexCount == 3) { + triangles.push(indices[2]); + triangles.push(indices[0]); + triangles.push(indices[1]); + } + + return triangles; + } + + decompose (verticesArray: Array, triangles: Array) : Array> { + let vertices = verticesArray; + let convexPolygons = this.convexPolygons; + this.polygonPool.freeAll(convexPolygons); + convexPolygons.length = 0; + + let convexPolygonsIndices = this.convexPolygonsIndices; + this.polygonIndicesPool.freeAll(convexPolygonsIndices); + convexPolygonsIndices.length = 0; + + let polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + + let polygon = this.polygonPool.obtain(); + polygon.length = 0; + + // Merge subsequent triangles if they form a triangle fan. + let fanBaseIndex = -1, lastWinding = 0; + for (let i = 0, n = triangles.length; i < n; i += 3) { + let t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1; + let x1 = vertices[t1], y1 = vertices[t1 + 1]; + let x2 = vertices[t2], y2 = vertices[t2 + 1]; + let x3 = vertices[t3], y3 = vertices[t3 + 1]; + + // If the base of the last triangle is the same as this triangle, check if they form a convex polygon (triangle fan). + let merged = false; + if (fanBaseIndex == t1) { + let o = polygon.length - 4; + let winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3); + let winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]); + if (winding1 == lastWinding && winding2 == lastWinding) { + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(t3); + merged = true; + } + } + + // Otherwise make this triangle the new base. + if (!merged) { + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } else { + this.polygonPool.free(polygon) + this.polygonIndicesPool.free(polygonIndices); + } + polygon = this.polygonPool.obtain(); + polygon.length = 0; + polygon.push(x1); + polygon.push(y1); + polygon.push(x2); + polygon.push(y2); + polygon.push(x3); + polygon.push(y3); + polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + polygonIndices.push(t1); + polygonIndices.push(t2); + polygonIndices.push(t3); + lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + } + + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + + // Go through the list of polygons and try to merge the remaining triangles with the found triangle fans. + for (let i = 0, n = convexPolygons.length; i < n; i++) { + polygonIndices = convexPolygonsIndices[i]; + if (polygonIndices.length == 0) continue; + let firstIndex = polygonIndices[0]; + let lastIndex = polygonIndices[polygonIndices.length - 1]; + + polygon = convexPolygons[i]; + let o = polygon.length - 4; + let prevPrevX = polygon[o], prevPrevY = polygon[o + 1]; + let prevX = polygon[o + 2], prevY = polygon[o + 3]; + let firstX = polygon[0], firstY = polygon[1]; + let secondX = polygon[2], secondY = polygon[3]; + let winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + + for (let ii = 0; ii < n; ii++) { + if (ii == i) continue; + let otherIndices = convexPolygonsIndices[ii]; + if (otherIndices.length != 3) continue; + let otherFirstIndex = otherIndices[0]; + let otherSecondIndex = otherIndices[1]; + let otherLastIndex = otherIndices[2]; + + let otherPoly = convexPolygons[ii]; + let x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1]; + + if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) continue; + let winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); + let winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY); + if (winding1 == winding && winding2 == winding) { + otherPoly.length = 0; + otherIndices.length = 0; + polygon.push(x3); + polygon.push(y3); + polygonIndices.push(otherLastIndex); + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = 0; + } + } + } + + // Remove empty polygons that resulted from the merge step above. + for (let i = convexPolygons.length - 1; i >= 0; i--) { + polygon = convexPolygons[i]; + if (polygon.length == 0) { + convexPolygons.splice(i, 1); + this.polygonPool.free(polygon); + polygonIndices = convexPolygonsIndices[i] + convexPolygonsIndices.splice(i, 1) + this.polygonIndicesPool.free(polygonIndices); + } + } + + return convexPolygons; + } + + private static isConcave (index: number, vertexCount: number, vertices: ArrayLike, indices: ArrayLike): boolean { + let previous = indices[(vertexCount + index - 1) % vertexCount] << 1; + let current = indices[index] << 1; + let next = indices[(index + 1) % vertexCount] << 1; + return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], + vertices[next + 1]); + } + + private static positiveArea (p1x: number, p1y: number, p2x: number, p2y: number, p3x: number, p3y: number): boolean { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + } + + private static winding (p1x: number, p1y: number, p2x: number, p2y: number, p3x: number, p3y: number): number { + let px = p2x - p1x, py = p2y - p1y; + return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/Updatable.ts b/apps/module-ts/src/spine-ts/core/src/Updatable.ts new file mode 100755 index 0000000..e24cf9a --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/Updatable.ts @@ -0,0 +1,42 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** The interface for items updated by {@link Skeleton#updateWorldTransform()}. */ + export interface Updatable { + update(): void; + + /** Returns false when this item has not been updated because a skin is required and the {@link Skeleton#skin active skin} + * does not contain this item. + * @see Skin#getBones() + * @see Skin#getConstraints() */ + isActive(): boolean; + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/Utils.ts b/apps/module-ts/src/spine-ts/core/src/Utils.ts new file mode 100755 index 0000000..39f6a98 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/Utils.ts @@ -0,0 +1,422 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + export interface Map { + [key: string]: T; + } + + export class IntSet { + array = new Array(); + + add (value: number): boolean { + let contains = this.contains(value); + this.array[value | 0] = value | 0; + return !contains; + } + + contains (value: number) { + return this.array[value | 0] != undefined; + } + + remove (value: number) { + this.array[value | 0] = undefined; + } + + clear () { + this.array.length = 0; + } + } + + export interface Disposable { + dispose (): void; + } + + export interface Restorable { + restore (): void; + } + + export class Color { + public static WHITE = new Color(1, 1, 1, 1); + public static RED = new Color(1, 0, 0, 1); + public static GREEN = new Color(0, 1, 0, 1); + public static BLUE = new Color(0, 0, 1, 1); + public static MAGENTA = new Color(1, 0, 1, 1); + + constructor (public r: number = 0, public g: number = 0, public b: number = 0, public a: number = 0) { + } + + set (r: number, g: number, b: number, a: number) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + this.clamp(); + return this; + } + + setFromColor (c: Color) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + } + + setFromString (hex: string) { + hex = hex.charAt(0) == '#' ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255.0; + this.g = parseInt(hex.substr(2, 2), 16) / 255.0; + this.b = parseInt(hex.substr(4, 2), 16) / 255.0; + this.a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0; + return this; + } + + add (r: number, g: number, b: number, a: number) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + this.clamp(); + return this; + } + + clamp () { + if (this.r < 0) this.r = 0; + else if (this.r > 1) this.r = 1; + + if (this.g < 0) this.g = 0; + else if (this.g > 1) this.g = 1; + + if (this.b < 0) this.b = 0; + else if (this.b > 1) this.b = 1; + + if (this.a < 0) this.a = 0; + else if (this.a > 1) this.a = 1; + return this; + } + + static rgba8888ToColor(color: Color, value: number) { + color.r = ((value & 0xff000000) >>> 24) / 255; + color.g = ((value & 0x00ff0000) >>> 16) / 255; + color.b = ((value & 0x0000ff00) >>> 8) / 255; + color.a = ((value & 0x000000ff)) / 255; + } + + static rgb888ToColor (color: Color, value: number) { + color.r = ((value & 0x00ff0000) >>> 16) / 255; + color.g = ((value & 0x0000ff00) >>> 8) / 255; + color.b = ((value & 0x000000ff)) / 255; + } + } + + export class MathUtils { + static PI = 3.1415927; + static PI2 = MathUtils.PI * 2; + static radiansToDegrees = 180 / MathUtils.PI; + static radDeg = MathUtils.radiansToDegrees; + static degreesToRadians = MathUtils.PI / 180; + static degRad = MathUtils.degreesToRadians; + + static clamp (value: number, min: number, max: number) { + if (value < min) return min; + if (value > max) return max; + return value; + } + + static cosDeg (degrees: number) { + return Math.cos(degrees * MathUtils.degRad); + } + + static sinDeg (degrees: number) { + return Math.sin(degrees * MathUtils.degRad); + } + + static signum (value: number): number { + return value > 0 ? 1 : value < 0 ? -1 : 0; + } + + static toInt (x: number) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + } + + static cbrt (x: number) { + let y = Math.pow(Math.abs(x), 1/3); + return x < 0 ? -y : y; + } + + static randomTriangular (min: number, max: number): number { + return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); + } + + static randomTriangularWith (min: number, max: number, mode: number): number { + let u = Math.random(); + let d = max - min; + if (u <= (mode - min) / d) return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + } + } + + export abstract class Interpolation { + protected abstract applyInternal (a: number): number; + apply(start: number, end: number, a: number): number { + return start + (end - start) * this.applyInternal(a); + } + } + + export class Pow extends Interpolation { + protected power = 2; + + constructor (power: number) { + super(); + this.power = power; + } + + applyInternal (a: number): number { + if (a <= 0.5) return Math.pow(a * 2, this.power) / 2; + return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; + } + } + + export class PowOut extends Pow { + constructor (power: number) { + super(power); + } + + applyInternal (a: number) : number { + return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; + } + } + + export class Utils { + static SUPPORTS_TYPED_ARRAYS = typeof(Float32Array) !== "undefined"; + + static arrayCopy (source: ArrayLike, sourceStart: number, dest: ArrayLike, destStart: number, numElements: number) { + for (let i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { + dest[j] = source[i]; + } + } + + static setArraySize (array: Array, size: number, value: any = 0): Array { + let oldSize = array.length; + if (oldSize == size) return array; + array.length = size; + if (oldSize < size) { + for (let i = oldSize; i < size; i++) array[i] = value; + } + return array; + } + + static ensureArrayCapacity (array: Array, size: number, value: any = 0): Array { + if (array.length >= size) return array; + return Utils.setArraySize(array, size, value); + } + + static newArray (size: number, defaultValue: T): Array { + let array = new Array(size); + for (let i = 0; i < size; i++) array[i] = defaultValue; + return array; + } + + static newFloatArray (size: number): ArrayLike { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Float32Array(size) + } else { + let array = new Array(size); + for (let i = 0; i < array.length; i++) array[i] = 0; + return array; + } + } + + static newShortArray (size: number): ArrayLike { + if (Utils.SUPPORTS_TYPED_ARRAYS) { + return new Int16Array(size) + } else { + let array = new Array(size); + for (let i = 0; i < array.length; i++) array[i] = 0; + return array; + } + } + + static toFloatArray (array: Array) { + return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + } + + static toSinglePrecision (value: number) { + return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + } + + // This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109 + static webkit602BugfixHelper (alpha: number, blend: MixBlend) { + + } + + static contains (array: Array, element: T, identity = true) { + for (var i = 0; i < array.length; i++) { + if (array[i] == element) return true; + } + return false; + } + } + + export class DebugUtils { + static logBones(skeleton: Skeleton) { + for (let i = 0; i < skeleton.bones.length; i++) { + let bone = skeleton.bones[i]; + console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); + } + } + } + + export class Pool { + private items = new Array(); + private instantiator: () => T; + + constructor (instantiator: () => T) { + this.instantiator = instantiator; + } + + obtain () { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + } + + free (item: T) { + if ((item as any).reset) (item as any).reset(); + this.items.push(item); + } + + freeAll (items: ArrayLike) { + for (let i = 0; i < items.length; i++) { + this.free(items[i]); + } + } + + clear () { + this.items.length = 0; + } + } + + export class Vector2 { + constructor (public x = 0, public y = 0) { + } + + set (x: number, y: number): Vector2 { + this.x = x; + this.y = y; + return this; + } + + length () { + let x = this.x; + let y = this.y; + return Math.sqrt(x * x + y * y); + } + + normalize () { + let len = this.length(); + if (len != 0) { + this.x /= len; + this.y /= len; + } + return this; + } + } + + export class TimeKeeper { + maxDelta = 0.064; + framesPerSecond = 0; + delta = 0; + totalTime = 0; + + private lastTime = Date.now() / 1000; + private frameCount = 0; + private frameTime = 0; + + update () { + let now = Date.now() / 1000; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + if (this.delta > this.maxDelta) this.delta = this.maxDelta; + this.lastTime = now; + + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + } + } + + export interface ArrayLike { + length: number; + [n: number]: T; + } + + export class WindowedMean { + values: Array; + addedValues = 0; + lastValue = 0; + mean = 0; + dirty = true; + + constructor (windowSize: number = 32) { + this.values = new Array(windowSize); + } + + hasEnoughData () { + return this.addedValues >= this.values.length; + } + + addValue (value: number) { + if (this.addedValues < this.values.length) + this.addedValues++; + this.values[this.lastValue++] = value; + if (this.lastValue > this.values.length - 1) this.lastValue = 0; + this.dirty = true; + } + + getMean () { + if (this.hasEnoughData()) { + if (this.dirty) { + let mean = 0; + for (let i = 0; i < this.values.length; i++) { + mean += this.values[i]; + } + this.mean = mean / this.values.length; + this.dirty = false; + } + return this.mean; + } else { + return 0; + } + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/VertexEffect.ts b/apps/module-ts/src/spine-ts/core/src/VertexEffect.ts new file mode 100755 index 0000000..1036666 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/VertexEffect.ts @@ -0,0 +1,36 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + export interface VertexEffect { + begin(skeleton: Skeleton): void; + transform(position: Vector2, uv: Vector2, light: Color, dark: Color): void; + end(): void; + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/attachments/Attachment.ts b/apps/module-ts/src/spine-ts/core/src/attachments/Attachment.ts new file mode 100755 index 0000000..912281c --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/attachments/Attachment.ts @@ -0,0 +1,159 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + /** The base class for all attachments. */ + export abstract class Attachment { + name: string; + + constructor (name: string) { + if (name == null) throw new Error("name cannot be null."); + this.name = name; + } + + abstract copy (): Attachment; + } + + /** Base class for an attachment with vertices that are transformed by one or more bones and can be deformed by a slot's + * {@link Slot#deform}. */ + export abstract class VertexAttachment extends Attachment { + private static nextID = 0; + + /** The unique ID for this attachment. */ + id = (VertexAttachment.nextID++ & 65535) << 11; + + /** The bones which affect the {@link #getVertices()}. The array entries are, for each vertex, the number of bones affecting + * the vertex followed by that many bone indices, which is the index of the bone in {@link Skeleton#bones}. Will be null + * if this attachment has no weights. */ + bones: Array; + + /** The vertex positions in the bone's coordinate system. For a non-weighted attachment, the values are `x,y` + * entries for each vertex. For a weighted attachment, the values are `x,y,weight` entries for each bone affecting + * each vertex. */ + vertices: ArrayLike; + + /** The maximum number of world vertex values that can be output by + * {@link #computeWorldVertices()} using the `count` parameter. */ + worldVerticesLength = 0; + + /** Deform keys for the deform attachment are also applied to this attachment. May be null if no deform keys should be applied. */ + deformAttachment: VertexAttachment = this; + + constructor (name: string) { + super(name); + } + + /** Transforms the attachment's local {@link vertices} to world coordinates. If the slot's {@link Slot#deform} is + * not empty, it is used to deform the vertices. + * + * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine + * Runtimes Guide. + * @param start The index of the first {@link #vertices} value to transform. Each vertex has 2 values, x and y. + * @param count The number of world vertex values to output. Must be <= {@link #worldVerticesLength} - `start`. + * @param worldVertices The output world vertices. Must have a length >= `offset` + `count` * + * `stride` / 2. + * @param offset The `worldVertices` index to begin writing values. + * @param stride The number of `worldVertices` entries between the value pairs written. */ + computeWorldVertices (slot: Slot, start: number, count: number, worldVertices: ArrayLike, offset: number, stride: number) { + count = offset + (count >> 1) * stride; + let skeleton = slot.bone.skeleton; + let deformArray = slot.deform; + let vertices = this.vertices; + let bones = this.bones; + if (bones == null) { + if (deformArray.length > 0) vertices = deformArray; + let bone = slot.bone; + let x = bone.worldX; + let y = bone.worldY; + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (let v = start, w = offset; w < count; v += 2, w += stride) { + let vx = vertices[v], vy = vertices[v + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + let v = 0, skip = 0; + for (let i = 0; i < start; i += 2) { + let n = bones[v]; + v += n + 1; + skip += n; + } + let skeletonBones = skeleton.bones; + if (deformArray.length == 0) { + for (let w = offset, b = skip * 3; w < count; w += stride) { + let wx = 0, wy = 0; + let n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + let bone = skeletonBones[bones[v]]; + let vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } else { + let deform = deformArray; + for (let w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { + let wx = 0, wy = 0; + let n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + let bone = skeletonBones[bones[v]]; + let vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + } + + /** Does not copy id (generated) or name (set on construction). **/ + copyTo (attachment: VertexAttachment) { + if (this.bones != null) { + attachment.bones = new Array(this.bones.length); + Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); + } else + attachment.bones = null; + + if (this.vertices != null) { + attachment.vertices = Utils.newFloatArray(this.vertices.length); + Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); + } else + attachment.vertices = null; + + attachment.worldVerticesLength = this.worldVerticesLength; + attachment.deformAttachment = this.deformAttachment; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/attachments/AttachmentLoader.ts b/apps/module-ts/src/spine-ts/core/src/attachments/AttachmentLoader.ts new file mode 100755 index 0000000..f10471e --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/attachments/AttachmentLoader.ts @@ -0,0 +1,55 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** The interface which can be implemented to customize creating and populating attachments. + * + * See [Loading skeleton data](http://esotericsoftware.com/spine-loading-skeleton-data#AttachmentLoader) in the Spine + * Runtimes Guide. */ + export interface AttachmentLoader { + /** @return May be null to not load an attachment. */ + newRegionAttachment (skin: Skin, name: string, path: string): RegionAttachment; + + /** @return May be null to not load an attachment. */ + newMeshAttachment (skin: Skin, name: string, path: string) : MeshAttachment; + + /** @return May be null to not load an attachment. */ + newBoundingBoxAttachment (skin: Skin, name: string) : BoundingBoxAttachment; + + /** @return May be null to not load an attachment */ + newPathAttachment(skin: Skin, name: string): PathAttachment; + + /** @return May be null to not load an attachment */ + newPointAttachment(skin: Skin, name: string): PointAttachment; + + /** @return May be null to not load an attachment */ + newClippingAttachment(skin: Skin, name: string): ClippingAttachment; + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/attachments/AttachmentType.ts b/apps/module-ts/src/spine-ts/core/src/attachments/AttachmentType.ts new file mode 100755 index 0000000..920a799 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/attachments/AttachmentType.ts @@ -0,0 +1,34 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + export enum AttachmentType { + Region, BoundingBox, Mesh, LinkedMesh, Path, Point, Clipping + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/attachments/BoundingBoxAttachment.ts b/apps/module-ts/src/spine-ts/core/src/attachments/BoundingBoxAttachment.ts new file mode 100755 index 0000000..4c46a67 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/attachments/BoundingBoxAttachment.ts @@ -0,0 +1,51 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** An attachment with vertices that make up a polygon. Can be used for hit detection, creating physics bodies, spawning particle + * effects, and more. + * + * See {@link SkeletonBounds} and [Bounding Boxes](http://esotericsoftware.com/spine-bounding-boxes) in the Spine User + * Guide. */ + export class BoundingBoxAttachment extends VertexAttachment { + color = new Color(1, 1, 1, 1); + + constructor (name: string) { + super(name); + } + + copy (): Attachment { + let copy = new BoundingBoxAttachment(this.name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/attachments/ClippingAttachment.ts b/apps/module-ts/src/spine-ts/core/src/attachments/ClippingAttachment.ts new file mode 100755 index 0000000..f04a99a --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/attachments/ClippingAttachment.ts @@ -0,0 +1,54 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + /** An attachment with vertices that make up a polygon used for clipping the rendering of other attachments. */ + export class ClippingAttachment extends VertexAttachment { + /** Clipping is performed between the clipping polygon's slot and the end slot. Returns null if clipping is done until the end of + * the skeleton's rendering. */ + endSlot: SlotData; + + // Nonessential. + /** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons + * are not usually rendered at runtime. */ + color = new Color(0.2275, 0.2275, 0.8078, 1); // ce3a3aff + + constructor (name: string) { + super(name); + } + + copy (): Attachment { + let copy = new ClippingAttachment(this.name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.color.setFromColor(this.color); + return copy; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/attachments/MeshAttachment.ts b/apps/module-ts/src/spine-ts/core/src/attachments/MeshAttachment.ts new file mode 100755 index 0000000..8cd9c7b --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/attachments/MeshAttachment.ts @@ -0,0 +1,198 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + /** An attachment that displays a textured mesh. A mesh has hull vertices and internal vertices within the hull. Holes are not + * supported. Each vertex has UVs (texture coordinates) and triangles are used to map an image on to the mesh. + * + * See [Mesh attachments](http://esotericsoftware.com/spine-meshes) in the Spine User Guide. */ + export class MeshAttachment extends VertexAttachment { + region: TextureRegion; + + /** The name of the texture region for this attachment. */ + path: string; + + /** The UV pair for each vertex, normalized within the texture region. */ + regionUVs: ArrayLike; + + /** The UV pair for each vertex, normalized within the entire texture. + * + * See {@link #updateUVs}. */ + uvs: ArrayLike; + + /** Triplets of vertex indices which describe the mesh's triangulation. */ + triangles: Array; + + /** The color to tint the mesh. */ + color = new Color(1, 1, 1, 1); + + /** The width of the mesh's image. Available only when nonessential data was exported. */ + width: number; + + /** The height of the mesh's image. Available only when nonessential data was exported. */ + height: number; + + /** The number of entries at the beginning of {@link #vertices} that make up the mesh hull. */ + hullLength: number; + + /** Vertex index pairs describing edges for controling triangulation. Mesh triangles will never cross edges. Only available if + * nonessential data was exported. Triangulation is not performed at runtime. */ + edges: Array; + + private parentMesh: MeshAttachment; + tempColor = new Color(0, 0, 0, 0); + + constructor (name: string) { + super(name); + } + + /** Calculates {@link #uvs} using {@link #regionUVs} and the {@link #region}. Must be called after changing the region UVs or + * region. */ + updateUVs () { + let regionUVs = this.regionUVs; + if (this.uvs == null || this.uvs.length != regionUVs.length) this.uvs = Utils.newFloatArray(regionUVs.length); + let uvs = this.uvs; + let n = this.uvs.length; + let u = this.region.u, v = this.region.v, width = 0, height = 0; + if (this.region instanceof TextureAtlasRegion) { + let region = this.region; + let textureWidth = region.texture.getImage().width, textureHeight = region.texture.getImage().height; + switch(region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; + } + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } else if (this.region == null) { + u = v = 0; + width = height = 1; + } else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + + for (let i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + } + + /** The parent mesh if this is a linked mesh, else null. A linked mesh shares the {@link #bones}, {@link #vertices}, + * {@link #regionUVs}, {@link #triangles}, {@link #hullLength}, {@link #edges}, {@link #width}, and {@link #height} with the + * parent mesh, but may have a different {@link #name} or {@link #path} (and therefore a different texture). */ + getParentMesh () { + return this.parentMesh; + } + + /** @param parentMesh May be null. */ + setParentMesh (parentMesh: MeshAttachment) { + this.parentMesh = parentMesh; + if (parentMesh != null) { + this.bones = parentMesh.bones; + this.vertices = parentMesh.vertices; + this.worldVerticesLength = parentMesh.worldVerticesLength; + this.regionUVs = parentMesh.regionUVs; + this.triangles = parentMesh.triangles; + this.hullLength = parentMesh.hullLength; + this.worldVerticesLength = parentMesh.worldVerticesLength + } + } + + copy (): Attachment { + if (this.parentMesh != null) return this.newLinkedMesh(); + + let copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + + this.copyTo(copy); + copy.regionUVs = new Array(this.regionUVs.length); + Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.uvs = new Array(this.uvs.length); + Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); + copy.triangles = new Array(this.triangles.length); + Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + + // Nonessential. + if (this.edges != null) { + copy.edges = new Array(this.edges.length); + Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + + return copy; + } + + /** Returns a new mesh with the {@link #parentMesh} set to this mesh's parent mesh, if any, else to this mesh. **/ + newLinkedMesh (): MeshAttachment { + let copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + copy.deformAttachment = this.deformAttachment; + copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this); + copy.updateUVs(); + return copy; + } + } + +} diff --git a/apps/module-ts/src/spine-ts/core/src/attachments/PathAttachment.ts b/apps/module-ts/src/spine-ts/core/src/attachments/PathAttachment.ts new file mode 100755 index 0000000..10b478d --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/attachments/PathAttachment.ts @@ -0,0 +1,66 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** An attachment whose vertices make up a composite Bezier curve. + * + * See {@link PathConstraint} and [Paths](http://esotericsoftware.com/spine-paths) in the Spine User Guide. */ + export class PathAttachment extends VertexAttachment { + + /** The lengths along the path in the setup pose from the start of the path to the end of each Bezier curve. */ + lengths: Array; + + /** If true, the start and end knots are connected. */ + closed = false; + + /** If true, additional calculations are performed to make calculating positions along the path more accurate. If false, fewer + * calculations are performed but calculating positions along the path is less accurate. */ + constantSpeed = false; + + /** The color of the path as it was in Spine. Available only when nonessential data was exported. Paths are not usually + * rendered at runtime. */ + color = new Color(1, 1, 1, 1); + + constructor (name: string) { + super(name); + } + + copy (): Attachment { + let copy = new PathAttachment(this.name); + this.copyTo(copy); + copy.lengths = new Array(this.lengths.length); + Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/attachments/PointAttachment.ts b/apps/module-ts/src/spine-ts/core/src/attachments/PointAttachment.ts new file mode 100755 index 0000000..ac91a6a --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/attachments/PointAttachment.ts @@ -0,0 +1,69 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + /** An attachment which is a single point and a rotation. This can be used to spawn projectiles, particles, etc. A bone can be + * used in similar ways, but a PointAttachment is slightly less expensive to compute and can be hidden, shown, and placed in a + * skin. + * + * See [Point Attachments](http://esotericsoftware.com/spine-point-attachments) in the Spine User Guide. */ + export class PointAttachment extends VertexAttachment { + x: number; y: number; rotation: number; + + /** The color of the point attachment as it was in Spine. Available only when nonessential data was exported. Point attachments + * are not usually rendered at runtime. */ + color = new Color(0.38, 0.94, 0, 1); + + constructor (name: string) { + super(name); + } + + computeWorldPosition (bone: Bone, point: Vector2) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + } + + computeWorldRotation (bone: Bone) { + let cos = MathUtils.cosDeg(this.rotation), sin = MathUtils.sinDeg(this.rotation); + let x = cos * bone.a + sin * bone.b; + let y = cos * bone.c + sin * bone.d; + return Math.atan2(y, x) * MathUtils.radDeg; + } + + copy (): Attachment { + let copy = new PointAttachment(this.name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/attachments/RegionAttachment.ts b/apps/module-ts/src/spine-ts/core/src/attachments/RegionAttachment.ts new file mode 100755 index 0000000..8428860 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/attachments/RegionAttachment.ts @@ -0,0 +1,234 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + + /** An attachment that displays a textured quadrilateral. + * + * See [Region attachments](http://esotericsoftware.com/spine-regions) in the Spine User Guide. */ + export class RegionAttachment extends Attachment { + static OX1 = 0; + static OY1 = 1; + static OX2 = 2; + static OY2 = 3; + static OX3 = 4; + static OY3 = 5; + static OX4 = 6; + static OY4 = 7; + + static X1 = 0; + static Y1 = 1; + static C1R = 2; + static C1G = 3; + static C1B = 4; + static C1A = 5; + static U1 = 6; + static V1 = 7; + + static X2 = 8; + static Y2 = 9; + static C2R = 10; + static C2G = 11; + static C2B = 12; + static C2A = 13; + static U2 = 14; + static V2 = 15; + + static X3 = 16; + static Y3 = 17; + static C3R = 18; + static C3G = 19; + static C3B = 20; + static C3A = 21; + static U3 = 22; + static V3 = 23; + + static X4 = 24; + static Y4 = 25; + static C4R = 26; + static C4G = 27; + static C4B = 28; + static C4A = 29; + static U4 = 30; + static V4 = 31; + + /** The local x translation. */ + x = 0; + + /** The local y translation. */ + y = 0; + + /** The local scaleX. */ + scaleX = 1; + + /** The local scaleY. */ + scaleY = 1; + + /** The local rotation. */ + rotation = 0; + + /** The width of the region attachment in Spine. */ + width = 0; + + /** The height of the region attachment in Spine. */ + height = 0; + + /** The color to tint the region attachment. */ + color = new Color(1, 1, 1, 1); + + /** The name of the texture region for this attachment. */ + path: string; + + rendererObject: any; + region: TextureRegion; + + /** For each of the 4 vertices, a pair of x,y values that is the local position of the vertex. + * + * See {@link #updateOffset()}. */ + offset = Utils.newFloatArray(8); + + + uvs = Utils.newFloatArray(8); + + tempColor = new Color(1, 1, 1, 1); + + constructor (name:string) { + super(name); + } + + /** Calculates the {@link #offset} using the region settings. Must be called after changing region settings. */ + updateOffset () : void { + let regionScaleX = this.width / this.region.originalWidth * this.scaleX; + let regionScaleY = this.height / this.region.originalHeight * this.scaleY; + let localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX; + let localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY; + let localX2 = localX + this.region.width * regionScaleX; + let localY2 = localY + this.region.height * regionScaleY; + let radians = this.rotation * Math.PI / 180; + let cos = Math.cos(radians); + let sin = Math.sin(radians); + let localXCos = localX * cos + this.x; + let localXSin = localX * sin; + let localYCos = localY * cos + this.y; + let localYSin = localY * sin; + let localX2Cos = localX2 * cos + this.x; + let localX2Sin = localX2 * sin; + let localY2Cos = localY2 * cos + this.y; + let localY2Sin = localY2 * sin; + let offset = this.offset; + offset[RegionAttachment.OX1] = localXCos - localYSin; + offset[RegionAttachment.OY1] = localYCos + localXSin; + offset[RegionAttachment.OX2] = localXCos - localY2Sin; + offset[RegionAttachment.OY2] = localY2Cos + localXSin; + offset[RegionAttachment.OX3] = localX2Cos - localY2Sin; + offset[RegionAttachment.OY3] = localY2Cos + localX2Sin; + offset[RegionAttachment.OX4] = localX2Cos - localYSin; + offset[RegionAttachment.OY4] = localYCos + localX2Sin; + } + + setRegion (region: TextureRegion) : void { + this.region = region; + let uvs = this.uvs; + if (region.rotate) { + uvs[2] = region.u; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v; + uvs[0] = region.u2; + uvs[1] = region.v2; + } else { + uvs[0] = region.u; + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[5] = region.v; + uvs[6] = region.u2; + uvs[7] = region.v2; + } + } + + /** Transforms the attachment's four vertices to world coordinates. + * + * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine + * Runtimes Guide. + * @param worldVertices The output world vertices. Must have a length >= `offset` + 8. + * @param offset The `worldVertices` index to begin writing values. + * @param stride The number of `worldVertices` entries between the value pairs written. */ + computeWorldVertices (bone: Bone, worldVertices: ArrayLike, offset: number, stride: number) { + let vertexOffset = this.offset; + let x = bone.worldX, y = bone.worldY; + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + let offsetX = 0, offsetY = 0; + + offsetX = vertexOffset[RegionAttachment.OX1]; + offsetY = vertexOffset[RegionAttachment.OY1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; // br + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + + offsetX = vertexOffset[RegionAttachment.OX2]; + offsetY = vertexOffset[RegionAttachment.OY2]; + worldVertices[offset] = offsetX * a + offsetY * b + x; // bl + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + + offsetX = vertexOffset[RegionAttachment.OX3]; + offsetY = vertexOffset[RegionAttachment.OY3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; // ul + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + + offsetX = vertexOffset[RegionAttachment.OX4]; + offsetY = vertexOffset[RegionAttachment.OY4]; + worldVertices[offset] = offsetX * a + offsetY * b + x; // ur + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + } + + copy (): Attachment { + let copy = new RegionAttachment(this.name); + copy.region = this.region; + copy.rendererObject = this.rendererObject; + copy.path = this.path; + copy.x = this.x; + copy.y = this.y; + copy.scaleX = this.scaleX; + copy.scaleY = this.scaleY; + copy.rotation = this.rotation; + copy.width = this.width; + copy.height = this.height; + Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8); + Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8); + copy.color.setFromColor(this.color); + return copy; + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/polyfills.ts b/apps/module-ts/src/spine-ts/core/src/polyfills.ts new file mode 100755 index 0000000..a6bb2cd --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/polyfills.ts @@ -0,0 +1,42 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +interface Math { + fround(n: number): number; +} + +(() => { + if (!Math.fround) { + Math.fround = (function (array) { + return function (x: number) { + return array[0] = x, array[0]; + }; + })(new Float32Array(1)); + } +})(); diff --git a/apps/module-ts/src/spine-ts/core/src/vertexeffects/JitterEffect.ts b/apps/module-ts/src/spine-ts/core/src/vertexeffects/JitterEffect.ts new file mode 100755 index 0000000..acff7b0 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/vertexeffects/JitterEffect.ts @@ -0,0 +1,51 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + export class JitterEffect implements VertexEffect { + jitterX = 0; + jitterY = 0; + + constructor (jitterX: number, jitterY: number) { + this.jitterX = jitterX; + this.jitterY = jitterY; + } + + begin(skeleton: Skeleton): void { + } + + transform(position: Vector2, uv: Vector2, light: Color, dark: Color): void { + position.x += MathUtils.randomTriangular(-this.jitterX, this.jitterY); + position.y += MathUtils.randomTriangular(-this.jitterX, this.jitterY); + } + + end(): void { + } + } +} diff --git a/apps/module-ts/src/spine-ts/core/src/vertexeffects/SwirlEffect.ts b/apps/module-ts/src/spine-ts/core/src/vertexeffects/SwirlEffect.ts new file mode 100755 index 0000000..c216040 --- /dev/null +++ b/apps/module-ts/src/spine-ts/core/src/vertexeffects/SwirlEffect.ts @@ -0,0 +1,66 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + export class SwirlEffect implements VertexEffect { + static interpolation = new PowOut(2); + centerX = 0; + centerY = 0; + radius = 0; + angle = 0; + private worldX = 0; + private worldY = 0; + + constructor (radius: number) { + this.radius = radius; + } + + begin(skeleton: Skeleton): void { + this.worldX = skeleton.x + this.centerX; + this.worldY = skeleton.y + this.centerY; + } + + transform(position: Vector2, uv: Vector2, light: Color, dark: Color): void { + let radAngle = this.angle * MathUtils.degreesToRadians; + let x = position.x - this.worldX; + let y = position.y - this.worldY; + let dist = Math.sqrt(x * x + y * y); + if (dist < this.radius) { + let theta = SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius); + let cos = Math.cos(theta); + let sin = Math.sin(theta); + position.x = cos * x - sin * y + this.worldX; + position.y = sin * x + cos * y + this.worldY; + } + } + + end(): void { + } + } +} diff --git a/apps/module-ts/src/spine-ts/player/css/spine-player.css b/apps/module-ts/src/spine-ts/player/css/spine-player.css new file mode 100755 index 0000000..1cf86e0 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/css/spine-player.css @@ -0,0 +1,408 @@ +/** Player **/ +.spine-player { + box-sizing: border-box; + width: 100%; + height: 100%; + background: none; + position: relative; +} + +.spine-player * { + box-sizing: border-box; + font-family: "PT Sans",Arial,"Helvetica Neue",Helvetica,Tahoma,sans-serif; + color: #dddddd; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.spine-player-error { + font-size: 14px; + display: flex; + justify-content: center; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: black; + z-index: 10; + border-radius: 4px; + overflow: auto; +} + +.spine-player-hidden { + display: none; +} + +/** Slider **/ +.spine-player-slider { + width: 100%; + height: 16px; + position: relative; + cursor: pointer; +} + +.spine-player-slider-value { + position: absolute; + bottom: 0; + height: 2px; + background: rgba(98, 176, 238, 0.6); + cursor: pointer; +} + +.spine-player-slider:hover .spine-player-slider-value { + height: 4px; + background: rgba(98, 176, 238, 1); + transition: height 0.2s; +} + +.spine-player-slider-value.hovering { + height: 4px; + background: rgba(98, 176, 238, 1); + transition: height 0.2s; +} + +.spine-player-slider.big { + height: 12px; + background: rgb(0, 0, 0); +} + +.spine-player-slider.big .spine-player-slider-value { + height: 12px; + background: rgba(98, 176, 238, 1); +} + +/** Column and row layout elements **/ +.spine-player-column { + display: flex; + flex-direction: column; +} + +.spine-player-row { + display: flex; + flex-direction: row; +} + +/** List **/ +.spine-player-list { + list-style: none !important; + padding: 0 !important; + margin: 0 !important; +} + +.spine-player-list li { + cursor: pointer; + margin: 8px 8px; +} + +.spine-player-list .selectable { + display: flex; + flex-direction: row; + margin: 0 !important; + padding: 2px 20px 2px 0 !important; +} + +.spine-player-list li.selectable:first-child { + margin-top: 4px !important; +} +.spine-player-list li.selectable:last-child { + margin-bottom: 4px !important; +} + +.spine-player-list li.selectable:hover { + background: #6e6e6e; +} + +.spine-player-list li.selectable .selectable-circle { + display: flex; + flex-direction: row; + width: 6px; + min-width: 6px; + height: 6px; + border-radius: 50%; + background: #fff; + align-self: center; + opacity: 0; + margin: 5px 10px; +} + +.spine-player-list li.selectable.selected .selectable-circle { + opacity: 1; +} + +.spine-player-list li.selectable .selectable-text { + color: #aaa; +} + +.spine-player-list li.selectable.selected .selectable-text, .spine-player-list li.selectable:hover .selectable-text { + color: #ddd; +} + +/** Switch **/ +.spine-player-switch { + display: flex; + flex-direction: row; + margin: 2px 10px; +} + +.spine-player-switch-text { + flex: 1; + margin-right: 8px; +} + +.spine-player-switch-knob-area { + width: 30px; /* width of the switch */ + height: 10px; + display: block; + border-radius: 5px; /* must be half of height */ + background: #6e6e6e; + position: relative; + align-self: center; + justify-self: flex-end; +} + +.spine-player-switch.active .spine-player-switch-knob-area { + background: #5EAFF1; +} + +.spine-player-switch-knob { + display: block; + width: 14px; + height: 14px; + border-radius: 50%; + background: #9e9e9e; + position: absolute; + left: 0px; + top: -2px; + filter: drop-shadow(0 0 1px #333); + transition: transform 0.2s; +} +.spine-player-switch.active .spine-player-switch-knob { + background: #fff; + transform: translateX(18px); + transition: transform 0.2s; +} + +/** Popup **/ +.spine-player-popup-parent { + position: relative; +} + +.spine-player-popup { + user-select: none; + position: absolute; + background: rgba(0, 0, 0, 0.75); + z-index: 1; + right: 2px; + bottom: 40px; + border-radius: 4px; + max-height: 400%; + overflow: auto; + font-size: 85%; +} + +.spine-player-popup-title { + margin: 4px 15px 2px 15px; + text-align: center; +} + +.spine-player-popup hr { + margin: 0; + border: 0; + border-bottom: 1px solid #cccccc70; +} + +/** Canvas **/ +.spine-player canvas { + display: block; + width: 100%; + height: 100%; + border-radius: 4px; +} + +/** Player controls **/ +.spine-player-controls { + display: flex; + flex-direction: column; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + opacity: 1; + transition: opacity 0.4s; +} + +.spine-player-controls-hidden { + pointer-events: none; + opacity: 0; + transition: opacity 0.4s; +} + +/** Player buttons **/ +.spine-player-buttons { + display: flex; + flex-direction: row; + width: 100%; + background: rgba(0, 0, 0, 0.5); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + padding: 2px 8px 3px; +} + +.spine-player-button { + background: none; + outline: 0; + border: none; + width: 32px; + height: 32px; + background-size: 20px; + background-repeat: no-repeat; + background-position: center; + cursor: pointer; + margin-right: 3px; + padding-bottom: 3px; + filter: drop-shadow(0 0 1px #333); +} + +.spine-player-button-spacer { + flex: 1; +} + +.spine-player-button-icon-play { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplay%3C%2Ftitle%3E%3Cg%20id%3D%22play%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2243%2023.3%204%2047%204%201%2043%2023.3%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-play:hover { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplay%3C%2Ftitle%3E%3Cg%20id%3D%22play%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2243%2023.3%204%2047%204%201%2043%2023.3%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-play-selected { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplay%3C%2Ftitle%3E%3Cg%20id%3D%22play%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2243%2023.3%204%2047%204%201%2043%2023.3%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-pause { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Epause%3C%2Ftitle%3E%3Cg%20id%3D%22pause%22%3E%3Crect%20class%3D%22cls-1%22%20x%3D%226%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3Crect%20class%3D%22cls-1%22%20x%3D%2228%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-pause:hover { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Epause%3C%2Ftitle%3E%3Cg%20id%3D%22pause%22%3E%3Crect%20class%3D%22cls-1%22%20x%3D%226%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3Crect%20class%3D%22cls-1%22%20x%3D%2228%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-pause-selected { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Epause%3C%2Ftitle%3E%3Cg%20id%3D%22pause%22%3E%3Crect%20class%3D%22cls-1%22%20x%3D%226%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3Crect%20class%3D%22cls-1%22%20x%3D%2228%22%20y%3D%221%22%20width%3D%2213%22%20height%3D%2246%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-speed { + background-image: url("data:image/svg+xml,%3Csvg%20id%3D%22playback%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplayback%3C%2Ftitle%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M48%2C28V20l-4.7-1.18a20.16%2C20.16%2C0%2C0%2C0-2-4.81l2.49-4.15L38.14%2C4.2%2C34%2C6.69a20.16%2C20.16%2C0%2C0%2C0-4.81-2L28%2C0H20L18.82%2C4.7A20.16%2C20.16%2C0%2C0%2C0%2C14%2C6.7L9.86%2C4.2%2C4.2%2C9.86%2C6.69%2C14a20.16%2C20.16%2C0%2C0%2C0-2%2C4.81L0%2C20v8l4.7%2C1.18A20.16%2C20.16%2C0%2C0%2C0%2C6.7%2C34L4.2%2C38.14%2C9.86%2C43.8%2C14%2C41.31a20.16%2C20.16%2C0%2C0%2C0%2C4.81%2C2L20%2C48h8l1.18-4.7a20.16%2C20.16%2C0%2C0%2C0%2C4.81-2l4.15%2C2.49%2C5.66-5.66L41.31%2C34a20.16%2C20.16%2C0%2C0%2C0%2C2-4.81ZM24%2C38A14%2C14%2C0%2C1%2C1%2C38%2C24%2C14%2C14%2C0%2C0%2C1%2C24%2C38Z%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2234%2024%2018%2033%2018%2015%2034%2024%2034%2024%22%2F%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-speed:hover { + background-image: url("data:image/svg+xml,%3Csvg%20id%3D%22playback%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplayback%3C%2Ftitle%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M48%2C28V20l-4.7-1.18a20.16%2C20.16%2C0%2C0%2C0-2-4.81l2.49-4.15L38.14%2C4.2%2C34%2C6.69a20.16%2C20.16%2C0%2C0%2C0-4.81-2L28%2C0H20L18.82%2C4.7A20.16%2C20.16%2C0%2C0%2C0%2C14%2C6.7L9.86%2C4.2%2C4.2%2C9.86%2C6.69%2C14a20.16%2C20.16%2C0%2C0%2C0-2%2C4.81L0%2C20v8l4.7%2C1.18A20.16%2C20.16%2C0%2C0%2C0%2C6.7%2C34L4.2%2C38.14%2C9.86%2C43.8%2C14%2C41.31a20.16%2C20.16%2C0%2C0%2C0%2C4.81%2C2L20%2C48h8l1.18-4.7a20.16%2C20.16%2C0%2C0%2C0%2C4.81-2l4.15%2C2.49%2C5.66-5.66L41.31%2C34a20.16%2C20.16%2C0%2C0%2C0%2C2-4.81ZM24%2C38A14%2C14%2C0%2C1%2C1%2C38%2C24%2C14%2C14%2C0%2C0%2C1%2C24%2C38Z%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2234%2024%2018%2033%2018%2015%2034%2024%2034%2024%22%2F%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-speed-selected { + background-image: url("data:image/svg+xml,%3Csvg%20id%3D%22playback%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eplayback%3C%2Ftitle%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M48%2C28V20l-4.7-1.18a20.16%2C20.16%2C0%2C0%2C0-2-4.81l2.49-4.15L38.14%2C4.2%2C34%2C6.69a20.16%2C20.16%2C0%2C0%2C0-4.81-2L28%2C0H20L18.82%2C4.7A20.16%2C20.16%2C0%2C0%2C0%2C14%2C6.7L9.86%2C4.2%2C4.2%2C9.86%2C6.69%2C14a20.16%2C20.16%2C0%2C0%2C0-2%2C4.81L0%2C20v8l4.7%2C1.18A20.16%2C20.16%2C0%2C0%2C0%2C6.7%2C34L4.2%2C38.14%2C9.86%2C43.8%2C14%2C41.31a20.16%2C20.16%2C0%2C0%2C0%2C4.81%2C2L20%2C48h8l1.18-4.7a20.16%2C20.16%2C0%2C0%2C0%2C4.81-2l4.15%2C2.49%2C5.66-5.66L41.31%2C34a20.16%2C20.16%2C0%2C0%2C0%2C2-4.81ZM24%2C38A14%2C14%2C0%2C1%2C1%2C38%2C24%2C14%2C14%2C0%2C0%2C1%2C24%2C38Z%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2234%2024%2018%2033%2018%2015%2034%2024%2034%2024%22%2F%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-animations { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eanimations%3C%2Ftitle%3E%3Cg%20id%3D%22animations%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M12%2C45V43.22a6.39%2C6.39%2C0%2C0%2C0%2C.63-.81%2C27.83%2C27.83%2C0%2C0%2C1%2C3.79-4.16c.93-.84%2C2.06-1.88%2C2.86-2.71a13.83%2C13.83%2C0%2C0%2C0%2C1.53-1.9l3.9-5.24c1-1.17.95-1.1%2C2.11%2C0l3%2C2.24a4%2C4%2C0%2C0%2C0-2.29%2C2.38c-1.37%2C3-2.39%2C4-2.68%2C4.22l-.23.18c-.54.39-1.81%2C1-1.7%2C1.54l.8%2C1.49a4.5%2C4.5%2C0%2C0%2C1%2C.39%2C1l.57%2C2.15a.69.69%2C0%2C0%2C0%2C.58.48c.47.08%2C1%2C.5%2C1.33.53%2C1.29.1%2C1.79%2C0%2C1.42-.54L26.7%2C42.72a.86.86%2C0%2C0%2C1-.2-.24%2C3.64%2C3.64%2C0%2C0%2C1-.42-2.2A5.39%2C5.39%2C0%2C0%2C1%2C26.61%2C39c1.84-2%2C6.74-6.36%2C6.74-6.36%2C1.71-1.81%2C1.4-2.52.81-3.84a27.38%2C27.38%2C0%2C0%2C0-2-3c-.41-.61-2.08-2.38-2.85-3.28-.43-.5.38-2.08.87-2.82.18-.12-.41.05%2C1.72.07a23.32%2C23.32%2C0%2C0%2C0%2C3.56-.19l1.63.61c.28%2C0%2C1.18-.09%2C1.31-.35l.12-.78c.18-.39.31-1.56-.05-1.75l-.6-.52a2.28%2C2.28%2C0%2C0%2C0-1.61.07l-.2.44c-.14.15-.52.37-.71.29l-2.24%2C0c-.5.12-1.18-.42-1.81-.73L32.05%2C15a8%2C8%2C0%2C0%2C0%2C.8-3.92%2C1.22%2C1.22%2C0%2C0%2C0-.28-.82%2C7.87%2C7.87%2C0%2C0%2C0-1.15-1.06l.11-.73c-.12-.49%2C1-.82%2C1.52-.82l.76-.33c.32%2C0%2C.68-.89.78-1.21L34.94%2C4a11.26%2C11.26%2C0%2C0%2C0%2C0-1.61C34.57.08%2C30.06-1.42%2C28.78%2C2c-.14.38-.62.77.34%2C3.21a1.55%2C1.55%2C0%2C0%2C1-.3%2C1.2L28.4%2C7a4%2C4%2C0%2C0%2C1-1.19.49c-.79%2C0-1.59-.75-4%2C.54C21%2C9.16%2C18.59%2C13%2C17.7%2C14.22a3.21%2C3.21%2C0%2C0%2C0-.61%2C1.58c-.05%2C1.16.7%2C3.74.87%2C5.75.13%2C1.53.21%2C2.52.72%2C3.06%2C1.07%2C1.14%2C2.1-.18%2C2.61-1a2.74%2C2.74%2C0%2C0%2C0-.14-1.86l-.74-.1c-.15-.15-.4-.42-.39-.64-.05-3.48-.22-3.14-.18-5.39%2C1.74-1.46%2C2.4-2.45%2C2.3-2-.2%2C1.15.28%2C2.83.09%2C4.35a6.46%2C6.46%2C0%2C0%2C1-.7%2C2.58s-2.11%2C4.22-2.14%2C4.27l-1.26%2C5.6-.7%2C1.44s-.71.54-1.59%2C1.21a9.67%2C9.67%2C0%2C0%2C0-2.27%2C3.18%2C20.16%2C20.16%2C0%2C0%2C1-1.42%2C2.83l-.87%2C1.31a1.72%2C1.72%2C0%2C0%2C1-.6.61l-1.83%2C1.1a1.39%2C1.39%2C0%2C0%2C0-.16.93l.68%2C1.71a4.07%2C4.07%2C0%2C0%2C1%2C.27%2C1.07l.17%2C1.56a.75.75%2C0%2C0%2C0%2C.71.59%2C18.13%2C18.13%2C0%2C0%2C0%2C3.26-.5c.27-.09-.29-.78-.53-1s-.45-.36-.45-.36A12.78%2C12.78%2C0%2C0%2C1%2C12%2C45Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") +} + +.spine-player-button-icon-animations:hover { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eanimations%3C%2Ftitle%3E%3Cg%20id%3D%22animations%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M12%2C45V43.22a6.39%2C6.39%2C0%2C0%2C0%2C.63-.81%2C27.83%2C27.83%2C0%2C0%2C1%2C3.79-4.16c.93-.84%2C2.06-1.88%2C2.86-2.71a13.83%2C13.83%2C0%2C0%2C0%2C1.53-1.9l3.9-5.24c1-1.17.95-1.1%2C2.11%2C0l3%2C2.24a4%2C4%2C0%2C0%2C0-2.29%2C2.38c-1.37%2C3-2.39%2C4-2.68%2C4.22l-.23.18c-.54.39-1.81%2C1-1.7%2C1.54l.8%2C1.49a4.5%2C4.5%2C0%2C0%2C1%2C.39%2C1l.57%2C2.15a.69.69%2C0%2C0%2C0%2C.58.48c.47.08%2C1%2C.5%2C1.33.53%2C1.29.1%2C1.79%2C0%2C1.42-.54L26.7%2C42.72a.86.86%2C0%2C0%2C1-.2-.24%2C3.64%2C3.64%2C0%2C0%2C1-.42-2.2A5.39%2C5.39%2C0%2C0%2C1%2C26.61%2C39c1.84-2%2C6.74-6.36%2C6.74-6.36%2C1.71-1.81%2C1.4-2.52.81-3.84a27.38%2C27.38%2C0%2C0%2C0-2-3c-.41-.61-2.08-2.38-2.85-3.28-.43-.5.38-2.08.87-2.82.18-.12-.41.05%2C1.72.07a23.32%2C23.32%2C0%2C0%2C0%2C3.56-.19l1.63.61c.28%2C0%2C1.18-.09%2C1.31-.35l.12-.78c.18-.39.31-1.56-.05-1.75l-.6-.52a2.28%2C2.28%2C0%2C0%2C0-1.61.07l-.2.44c-.14.15-.52.37-.71.29l-2.24%2C0c-.5.12-1.18-.42-1.81-.73L32.05%2C15a8%2C8%2C0%2C0%2C0%2C.8-3.92%2C1.22%2C1.22%2C0%2C0%2C0-.28-.82%2C7.87%2C7.87%2C0%2C0%2C0-1.15-1.06l.11-.73c-.12-.49%2C1-.82%2C1.52-.82l.76-.33c.32%2C0%2C.68-.89.78-1.21L34.94%2C4a11.26%2C11.26%2C0%2C0%2C0%2C0-1.61C34.57.08%2C30.06-1.42%2C28.78%2C2c-.14.38-.62.77.34%2C3.21a1.55%2C1.55%2C0%2C0%2C1-.3%2C1.2L28.4%2C7a4%2C4%2C0%2C0%2C1-1.19.49c-.79%2C0-1.59-.75-4%2C.54C21%2C9.16%2C18.59%2C13%2C17.7%2C14.22a3.21%2C3.21%2C0%2C0%2C0-.61%2C1.58c-.05%2C1.16.7%2C3.74.87%2C5.75.13%2C1.53.21%2C2.52.72%2C3.06%2C1.07%2C1.14%2C2.1-.18%2C2.61-1a2.74%2C2.74%2C0%2C0%2C0-.14-1.86l-.74-.1c-.15-.15-.4-.42-.39-.64-.05-3.48-.22-3.14-.18-5.39%2C1.74-1.46%2C2.4-2.45%2C2.3-2-.2%2C1.15.28%2C2.83.09%2C4.35a6.46%2C6.46%2C0%2C0%2C1-.7%2C2.58s-2.11%2C4.22-2.14%2C4.27l-1.26%2C5.6-.7%2C1.44s-.71.54-1.59%2C1.21a9.67%2C9.67%2C0%2C0%2C0-2.27%2C3.18%2C20.16%2C20.16%2C0%2C0%2C1-1.42%2C2.83l-.87%2C1.31a1.72%2C1.72%2C0%2C0%2C1-.6.61l-1.83%2C1.1a1.39%2C1.39%2C0%2C0%2C0-.16.93l.68%2C1.71a4.07%2C4.07%2C0%2C0%2C1%2C.27%2C1.07l.17%2C1.56a.75.75%2C0%2C0%2C0%2C.71.59%2C18.13%2C18.13%2C0%2C0%2C0%2C3.26-.5c.27-.09-.29-.78-.53-1s-.45-.36-.45-.36A12.78%2C12.78%2C0%2C0%2C1%2C12%2C45Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") +} + +.spine-player-button-icon-animations-selected { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eanimations%3C%2Ftitle%3E%3Cg%20id%3D%22animations%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M12%2C45V43.22a6.39%2C6.39%2C0%2C0%2C0%2C.63-.81%2C27.83%2C27.83%2C0%2C0%2C1%2C3.79-4.16c.93-.84%2C2.06-1.88%2C2.86-2.71a13.83%2C13.83%2C0%2C0%2C0%2C1.53-1.9l3.9-5.24c1-1.17.95-1.1%2C2.11%2C0l3%2C2.24a4%2C4%2C0%2C0%2C0-2.29%2C2.38c-1.37%2C3-2.39%2C4-2.68%2C4.22l-.23.18c-.54.39-1.81%2C1-1.7%2C1.54l.8%2C1.49a4.5%2C4.5%2C0%2C0%2C1%2C.39%2C1l.57%2C2.15a.69.69%2C0%2C0%2C0%2C.58.48c.47.08%2C1%2C.5%2C1.33.53%2C1.29.1%2C1.79%2C0%2C1.42-.54L26.7%2C42.72a.86.86%2C0%2C0%2C1-.2-.24%2C3.64%2C3.64%2C0%2C0%2C1-.42-2.2A5.39%2C5.39%2C0%2C0%2C1%2C26.61%2C39c1.84-2%2C6.74-6.36%2C6.74-6.36%2C1.71-1.81%2C1.4-2.52.81-3.84a27.38%2C27.38%2C0%2C0%2C0-2-3c-.41-.61-2.08-2.38-2.85-3.28-.43-.5.38-2.08.87-2.82.18-.12-.41.05%2C1.72.07a23.32%2C23.32%2C0%2C0%2C0%2C3.56-.19l1.63.61c.28%2C0%2C1.18-.09%2C1.31-.35l.12-.78c.18-.39.31-1.56-.05-1.75l-.6-.52a2.28%2C2.28%2C0%2C0%2C0-1.61.07l-.2.44c-.14.15-.52.37-.71.29l-2.24%2C0c-.5.12-1.18-.42-1.81-.73L32.05%2C15a8%2C8%2C0%2C0%2C0%2C.8-3.92%2C1.22%2C1.22%2C0%2C0%2C0-.28-.82%2C7.87%2C7.87%2C0%2C0%2C0-1.15-1.06l.11-.73c-.12-.49%2C1-.82%2C1.52-.82l.76-.33c.32%2C0%2C.68-.89.78-1.21L34.94%2C4a11.26%2C11.26%2C0%2C0%2C0%2C0-1.61C34.57.08%2C30.06-1.42%2C28.78%2C2c-.14.38-.62.77.34%2C3.21a1.55%2C1.55%2C0%2C0%2C1-.3%2C1.2L28.4%2C7a4%2C4%2C0%2C0%2C1-1.19.49c-.79%2C0-1.59-.75-4%2C.54C21%2C9.16%2C18.59%2C13%2C17.7%2C14.22a3.21%2C3.21%2C0%2C0%2C0-.61%2C1.58c-.05%2C1.16.7%2C3.74.87%2C5.75.13%2C1.53.21%2C2.52.72%2C3.06%2C1.07%2C1.14%2C2.1-.18%2C2.61-1a2.74%2C2.74%2C0%2C0%2C0-.14-1.86l-.74-.1c-.15-.15-.4-.42-.39-.64-.05-3.48-.22-3.14-.18-5.39%2C1.74-1.46%2C2.4-2.45%2C2.3-2-.2%2C1.15.28%2C2.83.09%2C4.35a6.46%2C6.46%2C0%2C0%2C1-.7%2C2.58s-2.11%2C4.22-2.14%2C4.27l-1.26%2C5.6-.7%2C1.44s-.71.54-1.59%2C1.21a9.67%2C9.67%2C0%2C0%2C0-2.27%2C3.18%2C20.16%2C20.16%2C0%2C0%2C1-1.42%2C2.83l-.87%2C1.31a1.72%2C1.72%2C0%2C0%2C1-.6.61l-1.83%2C1.1a1.39%2C1.39%2C0%2C0%2C0-.16.93l.68%2C1.71a4.07%2C4.07%2C0%2C0%2C1%2C.27%2C1.07l.17%2C1.56a.75.75%2C0%2C0%2C0%2C.71.59%2C18.13%2C18.13%2C0%2C0%2C0%2C3.26-.5c.27-.09-.29-.78-.53-1s-.45-.36-.45-.36A12.78%2C12.78%2C0%2C0%2C1%2C12%2C45Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") +} + +.spine-player-button-icon-skins { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eskins%3C%2Ftitle%3E%3Cg%20id%3D%22skins%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M36%2C12.54l-6.92%2C1-.79%2C1.2c-1%2C.25-2-.62-3-.55V12.33a1.35%2C1.35%2C0%2C0%2C1%2C.55-1.07c3-2.24%2C3.28-3.75%2C3.28-5.34A5.06%2C5.06%2C0%2C0%2C0%2C24%2C.76c-2.54%2C0-4.38.71-5.49%2C2.13a5.74%2C5.74%2C0%2C0%2C0-.9%2C4.57l2.48-.61a3.17%2C3.17%2C0%2C0%2C1%2C.45-2.4c.6-.75%2C1.75-1.13%2C3.42-1.13%2C2.56%2C0%2C2.56%2C1.24%2C2.56%2C2.56%2C0%2C.92%2C0%2C1.65-2.26%2C3.34a3.92%2C3.92%2C0%2C0%2C0-1.58%2C3.12v1.86c-1-.07-2%2C.8-3%2C.55l-.79-1.2-6.92-1c-2.25%2C0-4.35%2C2.09-5.64%2C3.93L1%2C24c3.83%2C5.11%2C10.22%2C5.11%2C10.22%2C5.11V41.93c0%2C2.34%2C2.68%2C3.88%2C5.59%2C4.86a22.59%2C22.59%2C0%2C0%2C0%2C14.37%2C0c2.91-1%2C5.59-2.52%2C5.59-4.86V29.15S43.17%2C29.15%2C47%2C24l-5.33-7.57C40.38%2C14.63%2C38.27%2C12.54%2C36%2C12.54ZM23.32%2C20.09%2C21%2C17l1.8-.6a3.79%2C3.79%2C0%2C0%2C1%2C2.4%2C0L27%2C17l-2.32%2C3.09A.85.85%2C0%2C0%2C1%2C23.32%2C20.09Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); + width: 31px; + height: 31px; +} + +.spine-player-button-icon-skins:hover { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eskins%3C%2Ftitle%3E%3Cg%20id%3D%22skins%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M36%2C12.54l-6.92%2C1-.79%2C1.2c-1%2C.25-2-.62-3-.55V12.33a1.35%2C1.35%2C0%2C0%2C1%2C.55-1.07c3-2.24%2C3.28-3.75%2C3.28-5.34A5.06%2C5.06%2C0%2C0%2C0%2C24%2C.76c-2.54%2C0-4.38.71-5.49%2C2.13a5.74%2C5.74%2C0%2C0%2C0-.9%2C4.57l2.48-.61a3.17%2C3.17%2C0%2C0%2C1%2C.45-2.4c.6-.75%2C1.75-1.13%2C3.42-1.13%2C2.56%2C0%2C2.56%2C1.24%2C2.56%2C2.56%2C0%2C.92%2C0%2C1.65-2.26%2C3.34a3.92%2C3.92%2C0%2C0%2C0-1.58%2C3.12v1.86c-1-.07-2%2C.8-3%2C.55l-.79-1.2-6.92-1c-2.25%2C0-4.35%2C2.09-5.64%2C3.93L1%2C24c3.83%2C5.11%2C10.22%2C5.11%2C10.22%2C5.11V41.93c0%2C2.34%2C2.68%2C3.88%2C5.59%2C4.86a22.59%2C22.59%2C0%2C0%2C0%2C14.37%2C0c2.91-1%2C5.59-2.52%2C5.59-4.86V29.15S43.17%2C29.15%2C47%2C24l-5.33-7.57C40.38%2C14.63%2C38.27%2C12.54%2C36%2C12.54ZM23.32%2C20.09%2C21%2C17l1.8-.6a3.79%2C3.79%2C0%2C0%2C1%2C2.4%2C0L27%2C17l-2.32%2C3.09A.85.85%2C0%2C0%2C1%2C23.32%2C20.09Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-skins-selected { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eskins%3C%2Ftitle%3E%3Cg%20id%3D%22skins%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M36%2C12.54l-6.92%2C1-.79%2C1.2c-1%2C.25-2-.62-3-.55V12.33a1.35%2C1.35%2C0%2C0%2C1%2C.55-1.07c3-2.24%2C3.28-3.75%2C3.28-5.34A5.06%2C5.06%2C0%2C0%2C0%2C24%2C.76c-2.54%2C0-4.38.71-5.49%2C2.13a5.74%2C5.74%2C0%2C0%2C0-.9%2C4.57l2.48-.61a3.17%2C3.17%2C0%2C0%2C1%2C.45-2.4c.6-.75%2C1.75-1.13%2C3.42-1.13%2C2.56%2C0%2C2.56%2C1.24%2C2.56%2C2.56%2C0%2C.92%2C0%2C1.65-2.26%2C3.34a3.92%2C3.92%2C0%2C0%2C0-1.58%2C3.12v1.86c-1-.07-2%2C.8-3%2C.55l-.79-1.2-6.92-1c-2.25%2C0-4.35%2C2.09-5.64%2C3.93L1%2C24c3.83%2C5.11%2C10.22%2C5.11%2C10.22%2C5.11V41.93c0%2C2.34%2C2.68%2C3.88%2C5.59%2C4.86a22.59%2C22.59%2C0%2C0%2C0%2C14.37%2C0c2.91-1%2C5.59-2.52%2C5.59-4.86V29.15S43.17%2C29.15%2C47%2C24l-5.33-7.57C40.38%2C14.63%2C38.27%2C12.54%2C36%2C12.54ZM23.32%2C20.09%2C21%2C17l1.8-.6a3.79%2C3.79%2C0%2C0%2C1%2C2.4%2C0L27%2C17l-2.32%2C3.09A.85.85%2C0%2C0%2C1%2C23.32%2C20.09Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-settings { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Esettings%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M40%2C3H8A5%2C5%2C0%2C0%2C0%2C3%2C8V40a5%2C5%2C0%2C0%2C0%2C5%2C5H40a5%2C5%2C0%2C0%2C0%2C5-5V8A5%2C5%2C0%2C0%2C0%2C40%2C3ZM16%2C40H9V33h7Zm0-12H9V21h7Zm0-12H9V9h7ZM39%2C38H20V35H39Zm0-12H20V23H39Zm0-12H20V11H39Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); + margin-top: 1px; +} + +.spine-player-button-icon-settings:hover { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Esettings%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M40%2C3H8A5%2C5%2C0%2C0%2C0%2C3%2C8V40a5%2C5%2C0%2C0%2C0%2C5%2C5H40a5%2C5%2C0%2C0%2C0%2C5-5V8A5%2C5%2C0%2C0%2C0%2C40%2C3ZM16%2C40H9V33h7Zm0-12H9V21h7Zm0-12H9V9h7ZM39%2C38H20V35H39Zm0-12H20V23H39Zm0-12H20V11H39Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-settings-selected { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Esettings%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpath%20class%3D%22cls-1%22%20d%3D%22M40%2C3H8A5%2C5%2C0%2C0%2C0%2C3%2C8V40a5%2C5%2C0%2C0%2C0%2C5%2C5H40a5%2C5%2C0%2C0%2C0%2C5-5V8A5%2C5%2C0%2C0%2C0%2C40%2C3ZM16%2C40H9V33h7Zm0-12H9V21h7Zm0-12H9V9h7ZM39%2C38H20V35H39Zm0-12H20V23H39Zm0-12H20V11H39Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-fullscreen { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eexpand%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2230.14%208%2040%208%2040%2017.86%2044.5%2017.86%2044.5%203.5%2030.14%203.5%2030.14%208%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%228%2017.86%208%208%2017.86%208%2017.86%203.5%203.5%203.5%203.5%2017.86%208%2017.86%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2240%2030.14%2040%2040%2030.14%2040%2030.14%2044.5%2044.5%2044.5%2044.5%2030.14%2040%2030.14%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2217.86%2040%208%2040%208%2030.14%203.5%2030.14%203.5%2044.5%2017.86%2044.5%2017.86%2040%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); + margin-top: 1px; +} + +.spine-player-button-icon-fullscreen:hover { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eexpand%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2230.14%208%2040%208%2040%2017.86%2044.5%2017.86%2044.5%203.5%2030.14%203.5%2030.14%208%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%228%2017.86%208%208%2017.86%208%2017.86%203.5%203.5%203.5%203.5%2017.86%208%2017.86%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2240%2030.14%2040%2040%2030.14%2040%2030.14%2044.5%2044.5%2044.5%2044.5%2030.14%2040%2030.14%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2217.86%2040%208%2040%208%2030.14%203.5%2030.14%203.5%2044.5%2017.86%2044.5%2017.86%2040%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-fullscreen-selected { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill%3A%2362B0EE%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Eexpand%3C%2Ftitle%3E%3Cg%20id%3D%22settings%22%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2230.14%208%2040%208%2040%2017.86%2044.5%2017.86%2044.5%203.5%2030.14%203.5%2030.14%208%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%228%2017.86%208%208%2017.86%208%2017.86%203.5%203.5%203.5%203.5%2017.86%208%2017.86%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2240%2030.14%2040%2040%2030.14%2040%2030.14%2044.5%2044.5%2044.5%2044.5%2030.14%2040%2030.14%22%2F%3E%3Cpolygon%20class%3D%22cls-1%22%20points%3D%2217.86%2040%208%2040%208%2030.14%203.5%2030.14%203.5%2044.5%2017.86%2044.5%2017.86%2040%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} + +.spine-player-button-icon-spine-logo { + height: 20px; + position: relative; + top: 1px; + margin: 0 8px !important; + align-self: center; + border: none !important; + width: auto !important; + cursor: pointer; + transition: transform 0.2s; + box-shadow: none !important; + filter: drop-shadow(0 0 1px #333); +} + +.spine-player-button-icon-spine-logo:hover { + transform: scale(1.05); + transition: transform 0.2s; +} + +/** Speed slider **/ +.spine-player-speed-slider { + width: 150px; +} + +/** Player editor **/ +.spine-player-editor-container { + display: flex; + flex-direction: row; + height: 100%; + width: 100%; +} + +.spine-player-editor-code { + flex: 1; + overflow: auto; +} + +.CodeMirror { + height: 100%; +} + +.spine-player-editor-player { + flex: 1; + border: none; + background: black; +} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/player/example/assets/raptor-pma.atlas b/apps/module-ts/src/spine-ts/player/example/assets/raptor-pma.atlas new file mode 100755 index 0000000..228f825 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/assets/raptor-pma.atlas @@ -0,0 +1,272 @@ + +raptor-pma.png +size: 1024,512 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back-arm + rotate: true + xy: 829, 88 + size: 46, 25 + orig: 46, 25 + offset: 0, 0 + index: -1 +back-bracer + rotate: true + xy: 195, 238 + size: 39, 28 + orig: 39, 28 + offset: 0, 0 + index: -1 +back-hand + rotate: true + xy: 724, 140 + size: 36, 34 + orig: 36, 34 + offset: 0, 0 + index: -1 +back-knee + rotate: true + xy: 760, 131 + size: 49, 67 + orig: 49, 67 + offset: 0, 0 + index: -1 +back-thigh + rotate: true + xy: 225, 238 + size: 39, 24 + orig: 39, 24 + offset: 0, 0 + index: -1 +eyes-open + rotate: false + xy: 975, 204 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +front-arm + rotate: false + xy: 969, 112 + size: 48, 26 + orig: 48, 26 + offset: 0, 0 + index: -1 +front-bracer + rotate: true + xy: 724, 97 + size: 41, 29 + orig: 41, 29 + offset: 0, 0 + index: -1 +front-hand + rotate: false + xy: 251, 239 + size: 41, 38 + orig: 41, 38 + offset: 0, 0 + index: -1 +front-open-hand + rotate: true + xy: 856, 76 + size: 43, 44 + orig: 43, 44 + offset: 0, 0 + index: -1 +front-thigh + rotate: true + xy: 729, 178 + size: 57, 29 + orig: 57, 29 + offset: 0, 0 + index: -1 +gun + rotate: false + xy: 894, 251 + size: 107, 103 + orig: 107, 103 + offset: 0, 0 + index: -1 +gun-nohand + rotate: false + xy: 764, 241 + size: 105, 102 + orig: 105, 102 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 756, 345 + size: 136, 149 + orig: 136, 149 + offset: 0, 0 + index: -1 +lower-leg + rotate: true + xy: 475, 237 + size: 73, 98 + orig: 73, 98 + offset: 0, 0 + index: -1 +mouth-grind + rotate: false + xy: 975, 172 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth-smile + rotate: false + xy: 975, 140 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 366, 282 + size: 18, 21 + orig: 18, 21 + offset: 0, 0 + index: -1 +raptor-back-arm + rotate: true + xy: 636, 97 + size: 82, 86 + orig: 82, 86 + offset: 0, 0 + index: -1 +raptor-body + rotate: false + xy: 2, 2 + size: 632, 233 + orig: 632, 233 + offset: 0, 0 + index: -1 +raptor-front-arm + rotate: true + xy: 871, 168 + size: 81, 102 + orig: 81, 102 + offset: 0, 0 + index: -1 +raptor-front-leg + rotate: false + xy: 2, 237 + size: 191, 257 + orig: 191, 257 + offset: 0, 0 + index: -1 +raptor-hindleg-back + rotate: false + xy: 195, 279 + size: 169, 215 + orig: 169, 215 + offset: 0, 0 + index: -1 +raptor-horn + rotate: true + xy: 431, 312 + size: 182, 80 + orig: 182, 80 + offset: 0, 0 + index: -1 +raptor-horn-back + rotate: true + xy: 513, 318 + size: 176, 77 + orig: 176, 77 + offset: 0, 0 + index: -1 +raptor-jaw + rotate: false + xy: 894, 356 + size: 126, 138 + orig: 126, 138 + offset: 0, 0 + index: -1 +raptor-jaw-tooth + rotate: true + xy: 294, 240 + size: 37, 48 + orig: 37, 48 + offset: 0, 0 + index: -1 +raptor-mouth-inside + rotate: true + xy: 344, 241 + size: 36, 41 + orig: 36, 41 + offset: 0, 0 + index: -1 +raptor-saddle-strap-back + rotate: false + xy: 575, 242 + size: 54, 74 + orig: 54, 74 + offset: 0, 0 + index: -1 +raptor-saddle-strap-front + rotate: true + xy: 764, 182 + size: 57, 95 + orig: 57, 95 + offset: 0, 0 + index: -1 +raptor-saddle-w-shadow + rotate: false + xy: 592, 323 + size: 162, 171 + orig: 162, 171 + offset: 0, 0 + index: -1 +raptor-tail-shadow + rotate: true + xy: 366, 305 + size: 189, 63 + orig: 189, 63 + offset: 0, 0 + index: -1 +raptor-tongue + rotate: false + xy: 387, 239 + size: 86, 64 + orig: 86, 64 + offset: 0, 0 + index: -1 +stirrup-back + rotate: true + xy: 829, 136 + size: 44, 35 + orig: 44, 35 + offset: 0, 0 + index: -1 +stirrup-front + rotate: true + xy: 866, 121 + size: 45, 50 + orig: 45, 50 + offset: 0, 0 + index: -1 +stirrup-strap + rotate: false + xy: 918, 120 + size: 49, 46 + orig: 49, 46 + offset: 0, 0 + index: -1 +torso + rotate: true + xy: 636, 181 + size: 54, 91 + orig: 54, 91 + offset: 0, 0 + index: -1 +visor + rotate: false + xy: 631, 237 + size: 131, 84 + orig: 131, 84 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/player/example/assets/raptor-pma.png b/apps/module-ts/src/spine-ts/player/example/assets/raptor-pma.png new file mode 100755 index 0000000..6492e18 Binary files /dev/null and b/apps/module-ts/src/spine-ts/player/example/assets/raptor-pma.png differ diff --git a/apps/module-ts/src/spine-ts/player/example/assets/raptor-pro.json b/apps/module-ts/src/spine-ts/player/example/assets/raptor-pro.json new file mode 100755 index 0000000..23920f0 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/assets/raptor-pro.json @@ -0,0 +1,3444 @@ +{ +"skeleton": { + "hash": "JHJJgNYXlhOA6Mx224y3i9qDC5M", + "spine": "3.8.99", + "x": -809.16, + "y": -73.54, + "width": 1280.26, + "height": 1039.44, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "rotation": 8.96, "x": -122.52, "y": 392.65, "color": "fbff00ff" }, + { + "name": "torso1", + "parent": "hip", + "length": 126.26, + "rotation": -4.98, + "x": 30.04, + "y": -0.4, + "color": "eaff00ff" + }, + { + "name": "saddle", + "parent": "torso1", + "length": 50.92, + "rotation": 91.8, + "x": 25.31, + "y": 70.65, + "color": "ff7300ff" + }, + { + "name": "spineboy-hip", + "parent": "saddle", + "length": 0.53, + "rotation": 90.02, + "x": 81.88, + "y": 2.69, + "color": "e8ff00ff" + }, + { + "name": "spineboy-torso", + "parent": "spineboy-hip", + "length": 122.45, + "rotation": -75.86, + "x": 1.05, + "y": -2.11, + "color": "e8ff00ff" + }, + { + "name": "torso2", + "parent": "torso1", + "length": 121.2, + "rotation": 39.85, + "x": 126.26, + "y": -0.38, + "color": "e9ff00ff" + }, + { + "name": "neck", + "parent": "torso2", + "length": 70.6, + "rotation": 41.38, + "x": 121.2, + "y": 0.35, + "color": "eaff00ff" + }, + { + "name": "head", + "parent": "neck", + "length": 105.51, + "rotation": 9.83, + "x": 70.6, + "y": 0.04, + "color": "eaff00ff" + }, + { + "name": "horn-back", + "parent": "head", + "length": 73.78, + "rotation": 44.32, + "x": 104.76, + "y": -242.01, + "color": "e07800ff" + }, + { "name": "spineboy-back-arm-target", "parent": "horn-back", "rotation": -133.55, "x": 232.68, "y": 245.85, "color": "ff3f00ff" }, + { + "name": "back-arm", + "parent": "spineboy-torso", + "length": 67.21, + "rotation": -120.9, + "x": 96.33, + "y": -38.47, + "color": "e07800ff" + }, + { + "name": "back-bracer", + "parent": "back-arm", + "length": 43.69, + "rotation": 17.48, + "x": 67.22, + "y": -0.32, + "color": "e07800ff" + }, + { + "name": "back-arm1", + "parent": "torso2", + "length": 109.56, + "rotation": -124.72, + "x": 83.68, + "y": -83.24, + "color": "e07800ff" + }, + { + "name": "back-arm2", + "parent": "back-arm1", + "length": 85.8, + "rotation": 123.56, + "x": 109.57, + "y": -0.01, + "color": "e07800ff" + }, + { "name": "back-foot-target", "parent": "root", "x": 33.44, "y": 30.82, "color": "ff3f00ff" }, + { "name": "back-leg-target", "parent": "back-foot-target", "x": -127.51, "y": 75.99, "color": "ff3f00ff" }, + { + "name": "back-leg1", + "parent": "hip", + "length": 226.28, + "rotation": -54.76, + "x": 55.19, + "y": -71.25, + "color": "e07800ff" + }, + { + "name": "back-leg2", + "parent": "back-leg1", + "length": 172.59, + "rotation": -92.25, + "x": 226.32, + "y": 0.23, + "color": "e07800ff" + }, + { + "name": "back-leg3", + "parent": "back-leg2", + "length": 103.05, + "rotation": 82.82, + "x": 172.32, + "y": 2.21, + "color": "e07800ff" + }, + { + "name": "back-foot1", + "parent": "back-leg3", + "length": 84.51, + "rotation": 75.43, + "x": 102.38, + "y": -0.03, + "color": "e07800ff" + }, + { + "name": "back-foot2", + "parent": "back-foot1", + "length": 102.31, + "rotation": -6.14, + "x": 84.5, + "y": -0.35, + "transform": "noRotationOrReflection", + "color": "e07800ff" + }, + { + "name": "back-hand", + "parent": "back-arm2", + "length": 45.81, + "rotation": -76.28, + "x": 85.8, + "y": 0.11, + "color": "e07800ff" + }, + { + "name": "back-hand2", + "parent": "spineboy-back-arm-target", + "length": 41.98, + "rotation": 27.78, + "x": -0.03, + "y": 0.05, + "transform": "noRotationOrReflection", + "color": "e07800ff" + }, + { "name": "spineboy-back-foot-target", "parent": "saddle", "x": -30.44, "y": -100.08, "color": "ff3f00ff" }, + { + "name": "back-thigh", + "parent": "spineboy-hip", + "length": 71.16, + "rotation": 160.75, + "x": -9.57, + "y": 2.32, + "color": "e07800ff" + }, + { + "name": "back-knee", + "parent": "back-thigh", + "length": 97.17, + "rotation": -54.98, + "x": 71.16, + "y": -0.28, + "color": "e07800ff" + }, + { + "name": "neck2", + "parent": "spineboy-torso", + "length": 32.05, + "rotation": -45.23, + "x": 113.44, + "y": -15.22, + "color": "e8ff00ff" + }, + { + "name": "head2", + "parent": "neck2", + "length": 167.19, + "rotation": 11.66, + "x": 25.68, + "y": -0.77, + "color": "e7ff00ff" + }, + { + "name": "bone", + "parent": "head2", + "length": 39.92, + "rotation": -35.23, + "x": 166.09, + "y": -79.27, + "color": "e7ff00ff" + }, + { "name": "bone2", "parent": "bone", "length": 47.42, "rotation": 51.8, "x": 39.92, "color": "e7ff00ff" }, + { + "name": "bone3", + "parent": "head2", + "length": 45.41, + "rotation": -12.34, + "x": 179.8, + "y": -20.91, + "color": "e7ff00ff" + }, + { + "name": "bone4", + "parent": "bone3", + "length": 43.31, + "rotation": 42.01, + "x": 44.64, + "y": 0.3, + "color": "e7ff00ff" + }, + { "name": "bone5", "parent": "bone4", "length": 44.88, "rotation": 48.8, "x": 43.31, "color": "e7ff00ff" }, + { + "name": "horn-front", + "parent": "head", + "length": 87.48, + "rotation": 49.36, + "x": 87.97, + "y": -235.15, + "color": "15ff00ff" + }, + { "name": "spineboy-front-arm-target", "parent": "horn-front", "rotation": -138.6, "x": 294.58, "y": 234.18, "color": "ff3f00ff" }, + { + "name": "front-arm", + "parent": "spineboy-torso", + "length": 74.52, + "rotation": -118.17, + "x": 101.38, + "y": 9.79, + "color": "14ff00ff" + }, + { + "name": "front-bracer", + "parent": "front-arm", + "length": 39.85, + "rotation": 20.31, + "x": 74.52, + "y": -0.42, + "color": "14ff00ff" + }, + { + "name": "front-arm1", + "parent": "torso2", + "length": 109.99, + "rotation": 224.54, + "x": 73, + "y": -72.46, + "color": "15ff00ff" + }, + { + "name": "front-arm2", + "parent": "front-arm1", + "length": 86.33, + "rotation": 105.24, + "x": 109.99, + "y": 0.2, + "color": "15ff00ff" + }, + { "name": "front-foot-target", "parent": "root", "rotation": -6.96, "x": -45.8, "y": -28.67, "color": "ff3f00ff" }, + { "name": "front-leg-target", "parent": "front-foot-target", "x": -106.06, "y": 115.58, "color": "ff3f00ff" }, + { + "name": "front-leg1", + "parent": "hip", + "length": 251.75, + "rotation": -51.51, + "x": 27.36, + "y": -28.28, + "color": "15ff00ff" + }, + { + "name": "front-leg2", + "parent": "front-leg1", + "length": 208.55, + "rotation": 261.94, + "x": 251.04, + "y": 0.16, + "color": "15ff00ff" + }, + { + "name": "front-leg3", + "parent": "front-leg2", + "length": 118.18, + "rotation": 85.46, + "x": 208.5, + "y": -1.64, + "color": "15ff00ff" + }, + { + "name": "front-foot1", + "parent": "front-leg3", + "length": 57.79, + "rotation": 54.46, + "x": 118.2, + "y": -0.79, + "color": "15ff00ff" + }, + { + "name": "front-foot2", + "parent": "front-foot1", + "length": 56.19, + "rotation": -2.16, + "x": 57.79, + "y": -0.02, + "scaleX": 0.731, + "scaleY": 0.823, + "transform": "onlyTranslation", + "color": "15ff00ff" + }, + { + "name": "front-foot3", + "parent": "front-foot2", + "length": 129.88, + "rotation": -2.7, + "x": 49.71, + "y": 20.66, + "scaleX": 1.155, + "color": "15ff00ff" + }, + { + "name": "front-hand", + "parent": "front-arm2", + "length": 47.56, + "rotation": -56.83, + "x": 86.33, + "y": 0.06, + "color": "15ff00ff" + }, + { + "name": "front-hand2", + "parent": "front-bracer", + "length": 58.19, + "rotation": 17.31, + "x": 42.72, + "y": -2.77, + "transform": "noRotationOrReflection", + "color": "14ff00ff" + }, + { "name": "spineboy-front-foot-target", "parent": "saddle", "x": -50.71, "y": -96.93, "color": "ff3f00ff" }, + { + "name": "front-thigh", + "parent": "spineboy-hip", + "length": 77.79, + "rotation": 163.34, + "x": 15.52, + "y": 17.02, + "color": "14ff00ff" + }, + { + "name": "lower-leg", + "parent": "front-thigh", + "length": 111.5, + "rotation": -49.62, + "x": 77.93, + "y": -0.11, + "color": "14ff00ff" + }, + { + "name": "gun", + "parent": "spineboy-hip", + "length": 181.35, + "rotation": 107.12, + "x": 16.86, + "y": -7.89, + "scaleX": 0.816, + "scaleY": 0.816, + "color": "ffffffff" + }, + { + "name": "jaw", + "parent": "head", + "length": 203.76, + "rotation": -129.48, + "x": 49.11, + "y": -68.46, + "color": "ffff00ff" + }, + { "name": "jaw-inside", "parent": "jaw", "x": 94.7, "y": 33.64, "color": "ffff00ff" }, + { + "name": "saddle-strap-back", + "parent": "saddle", + "length": 74.6, + "rotation": 151.14, + "x": -33.34, + "y": 87.33, + "color": "ff7300ff" + }, + { + "name": "saddle-strap-front", + "parent": "saddle", + "length": 154.29, + "rotation": -148.12, + "x": -27.36, + "y": -73.39, + "color": "ff7300ff" + }, + { + "name": "stirrup", + "parent": "saddle", + "length": 78.17, + "rotation": -68.86, + "x": -81.94, + "y": -103.38, + "color": "ff3f00ff" + }, + { + "name": "stirrup-strap1", + "parent": "saddle", + "length": 43.7, + "rotation": -135, + "x": -20.38, + "y": -29.37, + "color": "ff7300ff" + }, + { "name": "stirrup-strap2", "parent": "stirrup-strap1", "length": 51.62, "rotation": 9.39, "x": 43.71, "color": "ff7300ff" }, + { + "name": "tail1", + "parent": "hip", + "length": 81.26, + "rotation": 153.61, + "x": -20.87, + "y": 6.87, + "color": "eaff00ff" + }, + { "name": "tail2", "parent": "tail1", "length": 81.26, "rotation": 10.42, "x": 81.26, "color": "eaff00ff" }, + { "name": "tail3", "parent": "tail2", "length": 65.01, "rotation": 12.18, "x": 81.26, "color": "eaff00ff" }, + { "name": "tail4", "parent": "tail3", "length": 65.01, "x": 65.01, "color": "eaff00ff" }, + { "name": "tail5", "parent": "tail4", "length": 70.53, "rotation": 4.36, "x": 65.01, "color": "eaff00ff" }, + { "name": "tail6", "parent": "tail5", "length": 70.53, "x": 70.53, "color": "eaff00ff" }, + { "name": "tail7", "parent": "tail6", "length": 63.13, "rotation": 2.35, "x": 70.53, "color": "eaff00ff" }, + { "name": "tail8", "parent": "tail7", "length": 54.46, "rotation": 0.97, "x": 63.13, "color": "eaff00ff" }, + { "name": "tail9", "parent": "tail8", "length": 49.21, "rotation": -1.29, "x": 54.46, "color": "eaff00ff" }, + { "name": "tail10", "parent": "tail9", "length": 45.53, "rotation": 0.36, "x": 49.21, "color": "eaff00ff" }, + { + "name": "tongue1", + "parent": "head", + "length": 55.12, + "rotation": -129.04, + "x": 20.82, + "y": -104.75, + "color": "ffff00ff" + }, + { + "name": "tongue2", + "parent": "tongue1", + "length": 44.67, + "rotation": 8.93, + "x": 55.6, + "y": 0.93, + "color": "fff200ff" + }, + { + "name": "tongue3", + "parent": "tongue2", + "length": 43.65, + "rotation": 12.86, + "x": 44.27, + "y": -0.21, + "color": "fff200ff" + } +], +"slots": [ + { "name": "back-hand", "bone": "back-hand2", "attachment": "back-hand" }, + { "name": "back-arm", "bone": "back-arm", "attachment": "back-arm" }, + { "name": "back-bracer", "bone": "back-bracer", "attachment": "back-bracer" }, + { "name": "back-knee", "bone": "back-knee", "attachment": "back-knee" }, + { "name": "raptor-jaw-inside", "bone": "jaw-inside", "color": "646464ff", "attachment": "raptor-jaw2" }, + { "name": "raptor-mouth-inside", "bone": "jaw", "attachment": "raptor-mouth-inside" }, + { "name": "raptor-horn-back", "bone": "horn-back", "attachment": "raptor-horn-back" }, + { "name": "raptow-jaw-tooth", "bone": "jaw", "attachment": "raptor-jaw-tooth" }, + { "name": "raptor-tongue", "bone": "tongue1", "attachment": "raptor-tongue" }, + { "name": "raptor-hindleg-back", "bone": "back-leg1", "attachment": "raptor-hindleg-back" }, + { "name": "raptor-back-arm", "bone": "back-arm1", "attachment": "raptor-back-arm" }, + { "name": "back-thigh", "bone": "back-thigh", "attachment": "back-thigh" }, + { "name": "raptor-body", "bone": "torso1", "attachment": "raptor-body" }, + { "name": "raptor-saddle-strap-front", "bone": "saddle-strap-front", "attachment": "raptor-saddle-strap-front" }, + { "name": "raptor-saddle-strap-back", "bone": "saddle-strap-back", "attachment": "raptor-saddle-strap-back" }, + { "name": "raptor-saddle", "bone": "saddle", "attachment": "raptor-saddle-w-shadow" }, + { "name": "raptor-jaw", "bone": "jaw", "attachment": "raptor-jaw" }, + { "name": "raptor-front-arm", "bone": "front-arm1", "attachment": "raptor-front-arm" }, + { "name": "raptor-front-leg", "bone": "front-leg1", "attachment": "raptor-front-leg" }, + { "name": "neck", "bone": "neck2", "attachment": "neck" }, + { "name": "spineboy-torso", "bone": "spineboy-torso", "attachment": "torso" }, + { "name": "head", "bone": "head2", "attachment": "head" }, + { "name": "eyes-open", "bone": "head2", "attachment": "eyes-open" }, + { "name": "mouth-smile", "bone": "head2", "attachment": "mouth-smile" }, + { "name": "visor", "bone": "head2", "attachment": "visor" }, + { "name": "raptor-horn", "bone": "horn-front", "attachment": "raptor-horn" }, + { "name": "front-thigh", "bone": "front-thigh", "attachment": "front-thigh" }, + { "name": "stirrup-back", "bone": "stirrup", "attachment": "stirrup-back" }, + { "name": "lower-leg", "bone": "lower-leg", "attachment": "lower-leg" }, + { "name": "stirrup-strap", "bone": "stirrup", "attachment": "stirrup-strap" }, + { "name": "stirrup-front", "bone": "stirrup", "attachment": "stirrup-front" }, + { "name": "gun", "bone": "gun", "attachment": "gun-nohand" }, + { "name": "front-arm", "bone": "front-arm", "attachment": "front-arm" }, + { "name": "front-bracer", "bone": "front-bracer", "attachment": "front-bracer" }, + { "name": "front-hand", "bone": "front-hand2", "attachment": "front-hand" }, + { "name": "tail-shadow", "bone": "torso1", "color": "00000000" } +], +"ik": [ + { + "name": "back-foot-ik", + "order": 3, + "bones": [ "back-leg3", "back-foot1" ], + "target": "back-foot-target" + }, + { + "name": "back-leg-ik", + "order": 2, + "bones": [ "back-leg1", "back-leg2" ], + "target": "back-leg-target", + "bendPositive": false + }, + { + "name": "front-foot-ik", + "order": 1, + "bones": [ "front-leg3", "front-foot1" ], + "target": "front-foot-target" + }, + { + "name": "front-leg-ik", + "bones": [ "front-leg1", "front-leg2" ], + "target": "front-leg-target", + "bendPositive": false + }, + { + "name": "spineboy-back-arm-ik", + "order": 8, + "bones": [ "back-arm", "back-bracer" ], + "target": "spineboy-back-arm-target" + }, + { + "name": "spineboy-back-leg-ik", + "order": 5, + "bones": [ "back-thigh", "back-knee" ], + "target": "spineboy-back-foot-target", + "bendPositive": false + }, + { + "name": "spineboy-front-arm-ik", + "order": 7, + "bones": [ "front-arm", "front-bracer" ], + "target": "spineboy-front-arm-target" + }, + { + "name": "spineboy-front-leg-ik", + "order": 4, + "bones": [ "front-thigh", "lower-leg" ], + "target": "spineboy-front-foot-target", + "bendPositive": false + }, + { + "name": "stirrup", + "order": 6, + "bones": [ "stirrup-strap1", "stirrup-strap2" ], + "target": "stirrup" + } +], +"skins": [ + { + "name": "default", + "attachments": { + "back-arm": { + "back-arm": { "x": 28.57, "y": -12.03, "rotation": 16.76, "width": 91, "height": 49 } + }, + "back-bracer": { + "back-bracer": { "x": 13.2, "y": -4.28, "rotation": -0.73, "width": 77, "height": 55 } + }, + "back-hand": { + "back-hand": { "x": 18.61, "y": 4.24, "rotation": -10.99, "width": 72, "height": 68 } + }, + "back-knee": { + "back-knee": { "x": 45.77, "y": 20.47, "rotation": 74.23, "width": 97, "height": 134 } + }, + "back-thigh": { + "back-thigh": { "x": 37.85, "y": -4.37, "rotation": 19.25, "width": 78, "height": 47 } + }, + "eyes-open": { + "eyes-open": { "x": 93.24, "y": -25.45, "rotation": -70.58, "width": 93, "height": 89 } + }, + "front-arm": { + "front-arm": { "x": 33.68, "y": -1.53, "rotation": 14.02, "width": 96, "height": 51 } + }, + "front-bracer": { + "front-bracer": { "x": 11.68, "y": -1.37, "rotation": -6.28, "width": 81, "height": 58 } + }, + "front-hand": { + "front-hand": { "x": 35.7, "y": 7.84, "rotation": -13.97, "width": 82, "height": 75 }, + "front-open-hand": { "x": 42.55, "y": 4.62, "rotation": 62.19, "width": 86, "height": 87 }, + "gun": { "x": 98.91, "y": 22.98, "rotation": 56.35, "width": 213, "height": 206 } + }, + "front-thigh": { + "front-thigh": { "x": 45.7, "y": -3.1, "rotation": 16.66, "width": 114, "height": 58 } + }, + "gun": { + "gun-nohand": { "x": 54.65, "y": -24.93, "rotation": 55.2, "width": 210, "height": 203 } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.73461, 0.04542, 0.88414, 0.17033, 0.88955, 0.31976, 0.91126, 0.27463, 0.9461, 0.20217, 1, 0.29892, 1, 0.34554, 1, 0.4508, 0.91249, 0.51206, 0.84514, 0.51207, 0.8209, 0.59663, 0.77915, 0.67257, 0.73605, 0.75464, 0.83571, 0.73994, 0.84784, 0.84528, 0.7549, 0.93101, 0.63773, 1, 0.39394, 1, 0.14747, 0.82935, 0, 0.59419, 0, 0.36645, 0.09623, 0.20353, 0.21474, 0.14594, 0.45179, 0.15693, 0.51509, 0.1263, 0.507, 0.07853, 0.42079, 0, 0.56221, 0, 0.19055, 0.39949, 0.27942, 0.31373, 0.79396, 0.479, 0.76029, 0.85997, 0.53421, 0.16964, 0.53207, 0.04286, 0.61949, 0.08784, 0.70424, 0.16685, 0.69053, 0.432, 0.85592, 0.37861, 0.45844, 0.34997, 0.48658, 0.30193, 0.66307, 0.35065, 0.58439, 0.39448, 0.70468, 0.26242, 0.51985, 0.21924 ], + "triangles": [ 23, 24, 32, 32, 24, 34, 35, 34, 0, 34, 25, 33, 34, 24, 25, 33, 27, 34, 34, 27, 0, 25, 26, 33, 33, 26, 27, 32, 35, 42, 35, 0, 1, 32, 34, 35, 36, 40, 37, 40, 42, 37, 37, 42, 2, 40, 43, 42, 2, 42, 1, 43, 32, 42, 42, 35, 1, 7, 37, 6, 37, 2, 6, 6, 2, 5, 2, 3, 5, 3, 4, 5, 8, 37, 7, 10, 36, 30, 10, 11, 36, 15, 16, 31, 18, 12, 17, 38, 18, 28, 12, 31, 16, 12, 41, 36, 41, 12, 18, 41, 18, 38, 38, 28, 29, 15, 31, 14, 12, 16, 17, 14, 31, 13, 31, 12, 13, 18, 19, 28, 12, 36, 11, 19, 20, 28, 29, 28, 21, 38, 39, 41, 28, 20, 21, 39, 43, 40, 38, 29, 39, 21, 22, 29, 29, 22, 39, 22, 23, 39, 39, 23, 43, 43, 23, 32, 41, 39, 40, 10, 30, 9, 41, 40, 36, 8, 9, 37, 9, 30, 37, 30, 36, 37 ], + "vertices": [ 2, 32, 58.33, -14.31, 0.30205, 33, -0.88, -20.72, 0.69795, 3, 30, 69.21, 19.04, 0.07711, 31, 87.24, -25.34, 0.8077, 32, 14.49, -47.57, 0.11518, 3, 29, 43.19, 28.99, 0.10855, 30, 24.81, 15.35, 0.61823, 31, 50.15, -50.03, 0.27322, 1, 30, 38.53, 10.15, 1, 1, 30, 60.57, 1.79, 1, 1, 30, 32.5, -14.23, 1, 1, 30, 18.62, -14.92, 1, 2, 29, 45.01, -20.18, 0.76042, 30, -12.71, -16.48, 0.23958, 1, 28, 166.12, -105.42, 1, 1, 28, 160.05, -88.21, 1, 1, 28, 134.1, -90.39, 1, 1, 28, 108.99, -87.24, 1, 1, 28, 82.04, -84.36, 1, 1, 28, 95.16, -108.38, 1, 1, 28, 66.64, -121.91, 1, 1, 28, 34.17, -106.65, 1, 1, 28, 4.23, -83.54, 1, 1, 28, -17.74, -21.23, 1, 1, 28, 8.01, 58.67, 1, 1, 28, 60.82, 119.66, 1, 1, 28, 124.82, 142.22, 1, 1, 28, 179.28, 133.77, 1, 1, 28, 206.14, 109.19, 1, 3, 28, 224.42, 47.51, 0.55599, 32, 39.26, 67.02, 0.19527, 33, 47.76, 47.19, 0.24873, 3, 28, 238.73, 34.37, 0.20521, 32, 45.19, 48.52, 0.20866, 33, 37.74, 30.54, 0.58612, 2, 32, 59.59, 48.14, 0.05508, 33, 46.95, 19.46, 0.94492, 1, 33, 79.02, 11.41, 1, 1, 33, 46.15, -8.3, 1, 1, 28, 132.71, 90.25, 1, 1, 28, 164.81, 76.03, 1, 1, 28, 164.73, -71.85, 1, 1, 28, 54.62, -100.99, 1, 3, 28, 228.27, 25.19, 0.29316, 32, 31.56, 45.72, 0.3088, 33, 26.66, 38.96, 0.39805, 1, 33, 46.59, 6.85, 1, 2, 32, 51.44, 18.64, 0.07922, 33, 19.38, 6.16, 0.92078, 1, 32, 24.18, 0.23, 1, 1, 28, 168.62, -40.76, 1, 3, 29, 25.61, 19.96, 0.50536, 30, 6.84, 23.59, 0.2645, 31, 30.44, -51.51, 0.23014, 1, 28, 170.76, 26.69, 1, 4, 28, 186.8, 24.26, 0.75057, 31, -2.82, 45.62, 0.07609, 32, -4.94, 65.43, 0.10488, 33, 17.45, 79.4, 0.06845, 1, 31, 10.01, -2.69, 1, 1, 28, 169.6, -9.91, 1, 1, 31, 38.3, 1.56, 1, 4, 28, 213.04, 23.94, 0.43153, 31, 22.88, 50.92, 0.09832, 32, 17.71, 52.17, 0.26174, 33, 22.39, 53.63, 0.20841 ], + "hull": 28, + "edges": [ 10, 8, 4, 2, 2, 0, 0, 54, 52, 54, 52, 50, 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 56, 56, 58, 60, 18, 18, 16, 16, 14, 38, 40, 38, 36, 36, 34, 32, 34, 32, 30, 30, 62, 62, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, 18, 28, 30, 48, 64, 50, 66, 66, 54, 0, 68, 68, 48, 66, 68, 2, 70, 70, 64, 68, 70, 72, 60, 10, 12, 12, 14, 4, 12, 4, 6, 6, 8, 10, 6, 14, 74, 4, 74, 74, 72, 58, 76, 78, 76, 78, 44, 80, 78, 72, 82, 82, 76, 80, 82, 80, 74, 70, 84, 84, 80, 4, 84, 64, 86, 86, 78, 84, 86 ], + "width": 271, + "height": 298 + } + }, + "lower-leg": { + "lower-leg": { "x": 76.2, "y": 22.21, "rotation": 66.28, "width": 146, "height": 195 } + }, + "mouth-smile": { + "mouth-grind": { "x": 27.66, "y": -31.33, "rotation": -70.58, "width": 93, "height": 59 }, + "mouth-smile": { "x": 27.66, "y": -31.33, "rotation": -70.58, "width": 93, "height": 59 } + }, + "neck": { + "neck": { "x": 15.1, "y": -1.67, "rotation": -58.92, "width": 36, "height": 41 } + }, + "raptor-back-arm": { + "raptor-back-arm": { + "type": "mesh", + "uvs": [ 0.38712, 0.29362, 0.31383, 0.46513, 0.29243, 0.51522, 0.32476, 0.49311, 0.57587, 0.32139, 0.63255, 0.28263, 0.71632, 0.34508, 0.94948, 0.51888, 0.94948, 0.60129, 1, 0.65257, 1, 0.90624, 0.95463, 0.99934, 0.88957, 0.83205, 0.80295, 0.99999, 0.75236, 0.75696, 0.6654, 0.71301, 0.62289, 0.63243, 0.58195, 0.65032, 0.22479, 0.80641, 0.07792, 0.73315, 0.07825, 0.6655, 0.07985, 0.34307, 0, 0.29728, 0, 0, 0.32335, 0 ], + "triangles": [ 6, 15, 16, 5, 6, 16, 5, 16, 4, 6, 7, 15, 16, 17, 4, 8, 15, 7, 14, 15, 8, 12, 14, 8, 12, 8, 9, 12, 9, 10, 11, 12, 10, 13, 14, 12, 17, 3, 4, 19, 20, 2, 18, 19, 2, 18, 2, 3, 18, 3, 17, 21, 22, 23, 24, 21, 23, 0, 21, 24, 1, 21, 0, 1, 20, 21, 2, 20, 1 ], + "vertices": [ 2, 13, 36.95, 33.31, 0.91667, 14, 68.54, 41.05, 0.08333, 2, 13, 66.02, 20.36, 0.76814, 14, 41.42, 24.4, 0.23186, 2, 13, 74.51, 16.58, 0.64468, 14, 33.5, 19.53, 0.35532, 2, 13, 70.89, 21.97, 0.29072, 14, 40, 19.47, 0.70928, 3, 13, 42.78, 63.9, 0.11484, 14, 90.47, 18.95, 0.60855, 22, -17.2, 9.01, 0.27661, 2, 14, 101.86, 18.84, 0.45956, 22, -14.39, 20.05, 0.54044, 2, 14, 106.48, 2.09, 0.0625, 22, 2.98, 20.56, 0.9375, 1, 22, 51.32, 21.99, 1, 1, 22, 60.41, 11.11, 1, 1, 22, 72.39, 9.62, 1, 1, 22, 100.37, -23.87, 1, 1, 22, 104.96, -40.9, 1, 1, 22, 78.37, -25.62, 1, 1, 22, 86.06, -56.84, 1, 1, 22, 52.92, -30.05, 1, 2, 14, 62.25, -43.93, 0.0625, 22, 37.19, -33.34, 0.9375, 2, 14, 64.89, -28.66, 0.3125, 22, 22.99, -27.14, 0.6875, 2, 14, 57.7, -27.17, 0.30612, 22, 19.84, -33.78, 0.69388, 2, 13, 124.19, 3.84, 0.19395, 14, -5.1, -14.24, 0.80605, 2, 13, 110.78, -19.65, 0.3125, 14, -16.89, 10.11, 0.6875, 2, 13, 99.15, -19.2, 0.51614, 14, -9.94, 19.44, 0.48386, 2, 13, 43.73, -17.04, 0.9375, 14, 23.18, 63.93, 0.0625, 1, 13, 35.41, -29.78, 1, 1, 13, -15.69, -28.02, 1, 1, 13, -13.88, 24.65, 1 ], + "hull": 25, + "edges": [ 44, 46, 44, 42, 38, 36, 32, 30, 30, 28, 28, 26, 24, 22, 18, 16, 16, 14, 46, 48, 38, 4, 6, 4, 6, 36, 42, 40, 40, 38, 4, 2, 2, 0, 40, 2, 10, 32, 36, 34, 34, 32, 10, 8, 8, 6, 34, 8, 14, 12, 12, 10, 12, 30, 18, 20, 22, 20, 26, 24, 48, 0 ], + "width": 163, + "height": 172 + } + }, + "raptor-body": { + "raptor-body": { + "type": "mesh", + "uvs": [ 0.88305, 0.02794, 0.91758, 0.05592, 0.9497, 0.09133, 0.97573, 0.13213, 0.99055, 0.17339, 0.99759, 0.22987, 0.99678, 0.27226, 0.99353, 0.31287, 0.9839, 0.38477, 0.97956, 0.35307, 0.96687, 0.38782, 0.96442, 0.34841, 0.94742, 0.38391, 0.94489, 0.33238, 0.9386, 0.34808, 0.93784, 0.32559, 0.92667, 0.34333, 0.92539, 0.31538, 0.91182, 0.34989, 0.90925, 0.28963, 0.89984, 0.27929, 0.87514, 0.33979, 0.86225, 0.40838, 0.87429, 0.45818, 0.84272, 0.50226, 0.81998, 0.59622, 0.81697, 0.68641, 0.81951, 0.7069, 0.78696, 0.82183, 0.74283, 0.91135, 0.68699, 0.97585, 0.6244, 1, 0.58849, 1, 0.51466, 1, 0.49121, 0.8368, 0.4727, 0.78488, 0.44707, 0.74644, 0.42472, 0.72176, 0.3966, 0.70938, 0.37043, 0.69548, 0.34684, 0.68416, 0.32377, 0.6759, 0.29877, 0.66711, 0.26827, 0.65566, 0.24021, 0.64447, 0.2154, 0.63308, 0.18745, 0.62026, 0.163, 0.61056, 0.13948, 0.60123, 0.11931, 0.59392, 0.09945, 0.58672, 0.08097, 0.5824, 0.06076, 0.58225, 0.04257, 0.58149, 0.02388, 0.58253, 0, 0.58455, 0, 0.56298, 0.0209, 0.55046, 0.03794, 0.53974, 0.05634, 0.52692, 0.0746, 0.51306, 0.09507, 0.49881, 0.11728, 0.48334, 0.1375, 0.46924, 0.16277, 0.45174, 0.18782, 0.43439, 0.21308, 0.4189, 0.23873, 0.40318, 0.26735, 0.38578, 0.2969, 0.36723, 0.32579, 0.35014, 0.35725, 0.33294, 0.37992, 0.3207, 0.41103, 0.31696, 0.44145, 0.29137, 0.47584, 0.28483, 0.49453, 0.31832, 0.5288, 0.35569, 0.60144, 0.41756, 0.65116, 0.41078, 0.70843, 0.42446, 0.7118, 0.2925, 0.70946, 0.19468, 0.70683, 0.08348, 0.76023, 0.01941, 0.79301, 0, 0.83875, 0, 0.02258, 0.5679, 0.04005, 0.56141, 0.05877, 0.55312, 0.07877, 0.54786, 0.09747, 0.5401, 0.12059, 0.53086, 0.14233, 0.52663, 0.16642, 0.52304, 0.19163, 0.52137, 0.2177, 0.51241, 0.24501, 0.50218, 0.27577, 0.49505, 0.30141, 0.49242, 0.3286, 0.49077, 0.3541, 0.49188, 0.38137, 0.49347, 0.40824, 0.49495, 0.44136, 0.50946, 0.47122, 0.53169, 0.49886, 0.56568, 0.53162, 0.60054, 0.60671, 0.67484, 0.6857, 0.67243, 0.7506, 0.59437, 0.76886, 0.46557, 0.7773, 0.34161, 0.77355, 0.22842, 0.8056, 0.09401, 0.86736, 0.07427, 0.90484, 0.17059, 0.9096, 0.19933, 0.91959, 0.21397, 0.93193, 0.20183, 0.93608, 0.17463, 0.92873, 0.1403, 0.91672, 0.13455, 0.90667, 0.14854, 0.91663, 0.09795, 0.89868, 0.09514, 0.88034, 0.09404, 0.9309, 0.11529, 0.93998, 0.15741, 0.94213, 0.17477, 0.94345, 0.19647, 0.94192, 0.20763, 0.92187, 0.22801, 0.9048, 0.23489, 0.8899, 0.19847, 0.8874, 0.16914, 0.87831, 0.12122, 0.585, 0.84243, 0.63024, 0.8646, 0.68284, 0.85192, 0.72923, 0.80453, 0.75898, 0.76323, 0.78513, 0.70347, 0.78536, 0.6783, 0.78141, 0.59277, 0.94721, 0.11131, 0.96236, 0.1618, 0.96367, 0.19318, 0.95806, 0.21052, 0.976, 0.16763, 0.98026, 0.22172, 0.98039, 0.26467, 0.97933, 0.31612, 0.96394, 0.25896, 0.95648, 0.31982, 0.9432, 0.24678, 0.93886, 0.28792 ], + "triangles": [ 110, 107, 78, 76, 106, 105, 76, 77, 106, 77, 107, 106, 78, 107, 77, 37, 105, 36, 105, 106, 36, 106, 35, 36, 106, 107, 35, 107, 34, 35, 108, 34, 107, 115, 86, 0, 115, 0, 1, 114, 85, 86, 114, 86, 115, 84, 85, 114, 83, 84, 114, 125, 126, 115, 1, 125, 115, 1, 124, 125, 2, 124, 1, 2, 127, 124, 145, 127, 2, 126, 114, 115, 136, 114, 126, 145, 2, 3, 122, 124, 127, 121, 122, 127, 125, 122, 126, 122, 125, 124, 127, 128, 121, 127, 145, 128, 145, 3, 128, 146, 128, 3, 4, 149, 3, 146, 3, 149, 126, 123, 136, 122, 123, 126, 135, 136, 123, 116, 135, 123, 120, 121, 128, 129, 128, 146, 120, 128, 129, 147, 146, 149, 129, 146, 147, 82, 83, 114, 130, 129, 147, 134, 135, 116, 123, 122, 121, 123, 121, 120, 116, 123, 120, 117, 116, 120, 134, 116, 117, 119, 117, 120, 130, 119, 120, 130, 120, 129, 131, 119, 130, 148, 130, 147, 131, 130, 148, 147, 149, 4, 118, 117, 119, 150, 147, 4, 148, 147, 150, 131, 132, 118, 131, 118, 119, 113, 82, 114, 135, 113, 114, 135, 114, 136, 113, 135, 134, 150, 4, 5, 133, 134, 117, 133, 117, 118, 133, 118, 132, 155, 131, 148, 155, 148, 150, 132, 131, 155, 153, 155, 150, 151, 153, 150, 5, 151, 150, 6, 151, 5, 133, 113, 134, 20, 113, 133, 155, 133, 132, 156, 155, 153, 155, 20, 133, 156, 20, 155, 19, 20, 156, 81, 82, 113, 6, 152, 151, 17, 19, 156, 151, 156, 153, 7, 152, 6, 152, 156, 151, 154, 17, 156, 152, 154, 156, 15, 17, 154, 13, 15, 154, 20, 112, 113, 112, 81, 113, 20, 21, 112, 16, 17, 15, 17, 18, 19, 13, 14, 15, 11, 154, 152, 13, 154, 11, 9, 152, 7, 11, 152, 9, 11, 12, 13, 8, 9, 7, 10, 11, 9, 22, 112, 21, 111, 22, 23, 112, 80, 81, 111, 80, 112, 111, 112, 22, 24, 111, 23, 144, 111, 24, 110, 80, 111, 110, 111, 144, 25, 144, 24, 79, 110, 78, 110, 79, 80, 109, 108, 110, 143, 144, 25, 110, 144, 143, 109, 110, 143, 26, 143, 25, 142, 109, 143, 142, 143, 26, 142, 26, 27, 141, 109, 142, 140, 109, 141, 27, 141, 142, 28, 141, 27, 140, 141, 28, 140, 108, 109, 29, 140, 28, 139, 140, 29, 30, 139, 29, 110, 108, 107, 137, 34, 108, 108, 140, 137, 139, 137, 140, 138, 137, 139, 138, 139, 30, 33, 34, 137, 32, 33, 137, 138, 32, 137, 138, 31, 32, 30, 31, 138, 75, 104, 74, 104, 73, 74, 103, 73, 104, 105, 104, 75, 76, 105, 75, 38, 103, 104, 104, 37, 38, 104, 105, 37, 72, 102, 71, 72, 103, 102, 101, 71, 102, 73, 103, 72, 101, 102, 40, 40, 102, 39, 39, 102, 103, 38, 39, 103, 101, 100, 70, 69, 70, 100, 71, 101, 70, 69, 100, 99, 100, 42, 99, 100, 41, 42, 100, 101, 41, 101, 40, 41, 99, 68, 69, 68, 98, 67, 99, 98, 68, 98, 97, 67, 98, 44, 97, 43, 44, 98, 99, 43, 98, 42, 43, 99, 97, 66, 67, 96, 65, 66, 97, 96, 66, 96, 95, 65, 96, 46, 95, 45, 46, 96, 97, 45, 96, 44, 45, 97, 95, 64, 65, 94, 63, 64, 95, 94, 64, 94, 93, 63, 94, 48, 93, 47, 48, 94, 95, 47, 94, 46, 47, 95, 93, 62, 63, 92, 61, 62, 93, 92, 62, 91, 61, 92, 49, 50, 91, 92, 49, 91, 93, 49, 92, 48, 49, 93, 60, 61, 91, 90, 60, 91, 59, 60, 90, 89, 59, 90, 51, 52, 89, 50, 51, 90, 51, 89, 90, 50, 90, 91, 58, 59, 89, 88, 58, 89, 57, 58, 88, 87, 57, 88, 56, 57, 87, 52, 53, 88, 87, 88, 53, 52, 88, 89, 54, 87, 53, 55, 56, 87, 55, 87, 54 ], + "vertices": [ 1, 8, 142.31, -163.1, 1, 1, 8, 129.87, -206.92, 1, 1, 8, 113.94, -247.72, 1, 1, 8, 95.41, -280.88, 1, 1, 8, 76.47, -299.85, 1, 1, 8, 50.32, -309.1, 1, 1, 8, 30.6, -308.34, 1, 1, 8, 11.66, -304.47, 1, 1, 8, -21.93, -292.74, 1, 1, 8, -7.26, -287.07, 1, 1, 8, -23.63, -271.23, 1, 1, 8, -5.35, -267.89, 1, 1, 8, -22.13, -246.63, 1, 1, 8, 1.79, -243.11, 1, 1, 8, -5.62, -235.26, 1, 1, 8, 4.82, -234.16, 1, 1, 8, -3.61, -220.15, 1, 1, 8, 9.36, -218.37, 1, 1, 8, -6.91, -201.42, 1, 1, 8, 21.07, -197.82, 1, 1, 8, 25.72, -185.86, 1, 2, 8, -2.82, -155.01, 0.648, 54, 99.81, 14.95, 0.352, 2, 8, -34.92, -139.14, 0.536, 54, 107.98, -19.92, 0.464, 2, 8, -57.88, -154.65, 0.552, 54, 134.55, -27.77, 0.448, 4, 6, 214.38, -86.5, 0.416, 7, 12.5, -126.76, 0.24294, 8, -78.89, -115.02, 0.17462, 54, 117.33, -69.19, 0.16644, 3, 6, 164.81, -103.2, 0.46938, 7, -35.73, -106.53, 0.34058, 54, 123.6, -121.11, 0.19004, 3, 6, 135.98, -133.89, 0.80096, 7, -77.65, -110.49, 0.11639, 54, 147.79, -155.59, 0.08264, 3, 6, 132.63, -143.37, 0.82428, 7, -86.43, -115.4, 0.10285, 54, 156.4, -160.78, 0.07287, 1, 6, 67.3, -160.11, 1, 2, 2, 226.09, -123.55, 0.23474, 6, -2.28, -158.53, 0.76526, 3, 2, 156.49, -155.76, 0.52831, 6, -76.36, -138.65, 0.37693, 1, 172.42, -169.15, 0.09477, 3, 2, 77.76, -169.48, 0.67731, 6, -145.59, -98.75, 0.09201, 1, 92.8, -175.99, 0.23068, 3, 2, 32.4, -170.91, 0.60686, 61, -141.38, 131.19, 0.07586, 1, 47.48, -173.48, 0.31728, 3, 2, -60.88, -173.87, 0.38324, 61, -55.62, 167.98, 0.21887, 1, -45.7, -168.32, 0.39789, 3, 2, -92.91, -98.95, 0.1876, 61, 1.54, 109.92, 0.4859, 1, -71.11, -90.91, 0.3265, 4, 62, -30.38, 104.17, 0.11817, 2, -117.05, -75.56, 0.05927, 61, 32.55, 96.96, 0.64839, 1, -93.12, -65.52, 0.17416, 3, 63, -54.56, 107.85, 0.06735, 62, 5.17, 93.91, 0.36034, 61, 69.37, 93.3, 0.57231, 3, 63, -26.17, 96.68, 0.19082, 62, 35.28, 88.98, 0.51174, 61, 99.87, 93.89, 0.29744, 4, 64, -55.58, 91.31, 0.07799, 63, 9.43, 91.31, 0.41358, 62, 71.21, 91.24, 0.42326, 61, 134.8, 102.61, 0.08518, 3, 64, -22.44, 85.2, 0.26281, 63, 42.57, 85.2, 0.51956, 62, 104.89, 92.27, 0.21763, 4, 65, -51.3, 84.41, 0.0571, 64, 7.44, 80.26, 0.49907, 63, 72.45, 80.26, 0.37109, 62, 135.14, 93.74, 0.07275, 3, 65, -22.46, 78.67, 0.21618, 64, 36.63, 76.74, 0.61839, 63, 101.64, 76.74, 0.16543, 2, 65, 8.81, 72.53, 0.54611, 64, 68.28, 72.99, 0.45389, 3, 66, -23.6, 64.7, 0.19291, 65, 46.93, 64.7, 0.70982, 64, 106.89, 68.09, 0.09727, 2, 66, 11.45, 57.2, 0.627, 65, 81.98, 57.2, 0.373, 2, 66, 42.4, 49.87, 0.91827, 65, 112.93, 49.87, 0.08173, 2, 67, 8.43, 41.3, 0.57837, 66, 77.27, 41.61, 0.42163, 1, 67, 38.69, 33.54, 1, 2, 68, 5.1, 25.99, 0.53675, 67, 67.79, 26.07, 0.46325, 1, 68, 29.98, 19.49, 1, 2, 69, -0.28, 13.08, 0.45935, 68, 54.48, 13.08, 0.54065, 1, 69, 22.77, 8.73, 1, 2, 70, -1, 6.11, 0.43721, 69, 48.17, 6.1, 0.56279, 1, 70, 21.83, 3.3, 1, 1, 70, 45.36, 1.27, 1, 1, 70, 75.48, -1.02, 1, 1, 70, 74.41, -10.99, 1, 1, 70, 47.53, -13.96, 1, 1, 70, 25.58, -16.62, 1, 2, 70, 1.81, -20.07, 0.53626, 69, 51.15, -20.06, 0.46374, 1, 69, 27.54, -24.16, 1, 2, 69, 1.14, -28.15, 0.51508, 68, 54.96, -28.17, 0.48492, 2, 68, 26.21, -31.86, 0.90506, 67, 89.88, -31.41, 0.09494, 2, 68, 0.04, -35.22, 0.44307, 67, 63.76, -35.22, 0.55693, 2, 67, 31.14, -39.93, 0.94421, 66, 103.28, -38.62, 0.05579, 2, 67, -1.2, -44.59, 0.49116, 66, 71.16, -44.6, 0.50884, 3, 67, -33.71, -48.36, 0.07828, 66, 38.83, -49.7, 0.85291, 65, 109.36, -49.7, 0.06881, 2, 66, 6, -54.89, 0.55934, 65, 76.53, -54.89, 0.44066, 3, 66, -30.62, -60.6, 0.1151, 65, 39.91, -60.6, 0.77179, 64, 109.41, -57.39, 0.11311, 2, 65, 2.07, -66.77, 0.55035, 64, 72.15, -66.42, 0.44965, 3, 65, -34.88, -72.32, 0.18232, 64, 35.73, -74.76, 0.57653, 63, 100.73, -74.76, 0.24115, 3, 64, -3.96, -83.19, 0.3735, 63, 61.05, -83.19, 0.55244, 62, 158.49, -68.43, 0.07406, 3, 64, -32.54, -89.19, 0.18318, 63, 32.47, -89.19, 0.60103, 62, 131.82, -80.33, 0.21578, 2, 63, -6.84, -91.35, 0.45056, 62, 93.85, -90.74, 0.54944, 3, 63, -45.16, -103.67, 0.18109, 62, 58.99, -110.86, 0.64678, 61, 159.33, -98.37, 0.17213, 3, 63, -88.59, -107.18, 0.06648, 62, 17.28, -123.46, 0.59371, 61, 120.58, -118.3, 0.33982, 3, 62, -9.21, -113.51, 0.47579, 2, -96.32, 142.15, 0.06216, 61, 92.73, -113.3, 0.46205, 3, 62, -55.3, -106.16, 0.18947, 2, -52.49, 126.15, 0.211, 61, 46.08, -114.41, 0.59953, 3, 2, 40.2, 100.3, 0.70054, 6, -1.56, 132.44, 0.1247, 61, -49.65, -124.17, 0.17476, 2, 2, 102.91, 105.44, 0.48476, 6, 49.88, 96.2, 0.51524, 2, 6, 102.97, 46.59, 0.55391, 7, 16.89, 46.74, 0.44609, 2, 7, 77.99, 53.82, 0.34839, 8, 16.46, 51.73, 0.65161, 1, 8, 61.91, 55.28, 1, 1, 8, 113.57, 59.28, 1, 1, 8, 144.24, -7.82, 1, 1, 8, 153.81, -49.13, 1, 1, 8, 154.57, -106.94, 1, 1, 70, 46.28, -5.67, 1, 1, 70, 24, -6.32, 1, 2, 70, 0.06, -7.63, 0.51043, 69, 49.31, -7.63, 0.48957, 1, 69, 23.92, -7.52, 1, 2, 69, 0.04, -8.74, 0.50854, 68, 54.3, -8.74, 0.49146, 1, 68, 24.78, -9.42, 1, 2, 68, -2.74, -7.99, 0.3706, 67, 60.53, -8.04, 0.6294, 1, 67, 30.07, -6.47, 1, 2, 67, -1.7, -3.86, 0.44024, 66, 68.99, -3.93, 0.55976, 1, 66, 35.83, -5.93, 1, 2, 66, 1.08, -8.43, 0.54293, 65, 71.61, -8.43, 0.45707, 1, 65, 32.59, -9.2, 1, 2, 65, 0.17, -8.31, 0.51547, 64, 65.82, -8.27, 0.48453, 1, 64, 31.46, -9.41, 1, 2, 64, -0.78, -9.24, 0.46357, 63, 64.23, -9.24, 0.53643, 1, 63, 29.76, -8.87, 1, 2, 63, -4.21, -8.55, 0.36579, 62, 78.95, -9.25, 0.63421, 1, 62, 36.63, -11.94, 1, 2, 62, -2.46, -10.23, 0.43368, 61, 80.69, -10.51, 0.56632, 1, 61, 42.35, -9.75, 1, 2, 61, -2.09, -11.18, 0.90336, 1, -14.03, 15.96, 0.09664, 1, 2, 50.64, -19.06, 1, 2, 2, 150.39, -14.78, 0.14978, 6, 9.3, -26.52, 0.85022, 2, 6, 96.28, -48.49, 0.94283, 7, -50.98, -20.17, 0.05717, 3, 6, 151.36, -15.54, 0.20351, 7, 12.13, -31.86, 0.68534, 54, 35.04, -116.47, 0.11116, 3, 7, 70.75, -31.76, 0.49957, 8, -5.28, -31.36, 0.22959, 54, 5.95, -65.58, 0.27084, 2, 8, 47.28, -25.92, 0.69253, 54, -31.67, -28.46, 0.30747, 2, 8, 110.31, -65.62, 0.816, 54, -41.11, 45.43, 0.184, 1, 8, 120.51, -143.55, 1, 1, 8, 76.35, -191.51, 1, 1, 8, 63.06, -197.7, 1, 1, 8, 56.42, -210.42, 1, 1, 8, 62.27, -225.94, 1, 1, 8, 74.99, -231.02, 1, 1, 8, 90.83, -221.52, 1, 1, 8, 93.3, -206.31, 1, 1, 8, 86.63, -193.69, 1, 1, 8, 110.32, -205.97, 1, 1, 8, 111.33, -183.27, 1, 1, 8, 111.53, -160.07, 1, 1, 8, 102.49, -224.1, 1, 1, 8, 83.06, -235.84, 1, 1, 8, 75.02, -238.67, 1, 1, 8, 64.95, -240.47, 1, 1, 8, 59.74, -238.59, 1, 1, 8, 49.93, -213.38, 1, 1, 8, 46.45, -191.85, 1, 1, 8, 63.13, -172.79, 1, 1, 8, 76.73, -169.46, 1, 1, 8, 98.86, -157.68, 1, 3, 2, 25.68, -97.82, 0.63735, 61, -108.45, 65.59, 0.06216, 1, 47.13, -100.08, 0.30049, 3, 2, 83.15, -106.32, 0.72603, 6, -100.98, -53.7, 0.09811, 1, 103.65, -113.53, 0.17585, 3, 2, 149.42, -98.32, 0.50192, 6, -44.98, -90.03, 0.42892, 1, 170.36, -111.32, 0.06917, 2, 2, 207.34, -74.44, 0.18186, 6, 14.79, -108.81, 0.81814, 2, 2, 244.31, -54.06, 0.05649, 6, 56.23, -116.86, 0.94351, 2, 6, 99.39, -115.34, 0.92692, 7, -92.84, -72.39, 0.07308, 3, 6, 106.83, -106.29, 0.84981, 7, -81.28, -70.52, 0.08915, 54, 114.85, -178.52, 0.06104, 3, 6, 127.4, -71.89, 0.69944, 7, -43.11, -58.31, 0.19328, 54, 85.35, -151.38, 0.10728, 1, 8, 104.61, -244.7, 1, 1, 8, 81.39, -264.16, 1, 1, 8, 66.82, -266.01, 1, 1, 8, 58.66, -259.02, 1, 1, 8, 78.9, -281.43, 1, 1, 8, 53.83, -287.14, 1, 1, 8, 33.86, -287.57, 1, 1, 8, 9.92, -286.55, 1, 1, 8, 36.24, -266.75, 1, 1, 8, 7.82, -257.69, 1, 1, 8, 41.56, -240.46, 1, 1, 8, 22.36, -235.22, 1 ], + "hull": 87, + "edges": [ 110, 108, 108, 106, 106, 104, 104, 102, 102, 100, 88, 86, 86, 84, 84, 82, 82, 80, 80, 78, 78, 76, 76, 74, 74, 72, 72, 70, 70, 68, 68, 66, 110, 112, 112, 114, 114, 116, 116, 118, 118, 120, 120, 122, 96, 98, 98, 100, 92, 94, 94, 96, 88, 90, 90, 92, 126, 128, 128, 130, 130, 132, 132, 134, 134, 136, 136, 138, 138, 140, 140, 142, 142, 144, 144, 146, 146, 148, 148, 150, 150, 152, 152, 154, 122, 124, 124, 126, 174, 176, 176, 178, 178, 180, 180, 182, 182, 184, 184, 186, 186, 188, 188, 190, 190, 192, 192, 194, 194, 196, 196, 198, 198, 200, 200, 202, 202, 204, 130, 190, 132, 192, 128, 188, 126, 186, 124, 184, 122, 182, 120, 180, 118, 178, 116, 176, 90, 192, 92, 190, 94, 188, 96, 186, 98, 184, 100, 182, 102, 180, 104, 178, 106, 176, 134, 194, 136, 196, 88, 194, 86, 196, 198, 84, 82, 200, 202, 80, 78, 204, 206, 76, 74, 208, 72, 210, 212, 70, 68, 214, 198, 138, 140, 200, 142, 202, 144, 204, 146, 206, 208, 148, 150, 210, 152, 212, 154, 214, 64, 66, 62, 64, 62, 60, 60, 58, 58, 56, 56, 54, 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 172, 170, 172, 170, 168, 168, 166, 166, 164, 164, 162, 162, 160, 160, 158, 158, 156, 156, 154, 232, 234, 234, 236, 236, 238, 238, 240, 240, 242, 242, 244, 244, 246, 246, 232, 248, 250, 250, 252, 248, 254, 254, 256, 256, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, 270, 270, 272 ], + "width": 1264, + "height": 465 + } + }, + "raptor-front-arm": { + "raptor-front-arm": { + "type": "mesh", + "uvs": [ 0.39563, 0.1396, 0.38771, 0.30213, 0.31231, 0.41784, 0.27287, 0.47836, 0.33389, 0.4507, 0.5488, 0.35329, 0.64093, 0.31153, 0.73024, 0.3653, 1, 0.5277, 1, 0.86607, 0.93243, 1, 0.86176, 0.80967, 0.75576, 0.99765, 0.71748, 1, 0.70276, 0.77443, 0.62032, 0.73448, 0.58793, 0.64519, 0.53561, 0.6582, 0.13449, 0.75798, 0, 0.69219, 0.01846, 0.56358, 0.05499, 0.30918, 0, 0.27863, 0, 0.12423, 0, 0, 0.19596, 0, 0.40243, 0, 0.24536, 0.19241, 0.21679, 0.0811 ], + "triangles": [ 6, 7, 16, 6, 16, 5, 15, 16, 7, 7, 14, 15, 8, 14, 7, 11, 14, 8, 11, 8, 9, 12, 14, 11, 13, 14, 12, 10, 11, 9, 17, 4, 5, 16, 17, 5, 18, 19, 3, 18, 3, 4, 18, 4, 17, 0, 28, 26, 23, 25, 28, 23, 24, 25, 27, 28, 0, 27, 23, 28, 1, 27, 0, 21, 22, 27, 21, 27, 1, 2, 21, 1, 2, 20, 21, 3, 20, 2, 19, 20, 3, 27, 22, 23, 28, 25, 26 ], + "vertices": [ 2, 38, 9.24, 26.77, 0.808, 6, 85.19, -98.03, 0.192, 1, 38, 35.87, 35.63, 1, 2, 38, 61.98, 28.62, 0.84641, 39, 40.04, 38.85, 0.15359, 2, 38, 77.67, 27.28, 0.34921, 39, 34.62, 24.06, 0.65079, 3, 38, 73.77, 39.05, 0.10938, 39, 47.01, 24.74, 0.78124, 48, -42.17, -19.42, 0.10938, 2, 39, 86.98, 31.25, 0.65079, 48, -25.75, 17.61, 0.34921, 2, 39, 103.84, 34.49, 0.34375, 48, -19.24, 33.5, 0.65625, 2, 39, 114.05, 19.51, 0.10938, 48, -1.12, 33.84, 0.89062, 1, 48, 53.62, 34.88, 1, 1, 48, 96.03, -19.16, 1, 1, 48, 104.2, -47.32, 1, 1, 48, 71.34, -23.98, 1, 1, 48, 81.39, -64.61, 1, 1, 48, 76.81, -68.82, 1, 1, 48, 46.66, -34.26, 1, 2, 39, 73.14, -45.77, 0.10938, 48, 31.14, -36.12, 0.89062, 2, 39, 73.98, -26.91, 0.34375, 48, 15.82, -25.1, 0.65625, 2, 39, 65.11, -26.69, 0.65079, 48, 10.78, -32.4, 0.34921, 3, 38, 134.76, 4.51, 0.10938, 39, -2.35, -25.03, 0.78124, 48, -27.52, -87.96, 0.10938, 2, 38, 121.45, -16.1, 0.34921, 39, -18.74, -6.77, 0.65079, 2, 38, 96.94, -14.98, 0.84641, 39, -11.21, 16.58, 0.15359, 1, 38, 45.47, -17.43, 1, 1, 38, 47.64, -32.91, 1, 2, 38, 12.11, -34.27, 0.536, 6, 40.33, -56.53, 0.464, 2, 38, -2.57, -46.21, 0.536, 6, 42.42, -37.73, 0.464, 2, 38, -7.4, -14.83, 0.472, 6, 67.87, -56.7, 0.528, 2, 38, -12.49, 18.22, 0.664, 6, 94.68, -76.69, 0.336, 1, 38, 18.79, 4.26, 1, 2, 38, 0.95, -1.4, 0.512, 6, 71.34, -72.13, 0.488 ], + "hull": 27, + "edges": [ 38, 36, 32, 30, 30, 28, 28, 26, 24, 26, 24, 22, 22, 20, 20, 18, 18, 16, 44, 42, 38, 6, 38, 40, 40, 42, 6, 4, 4, 2, 40, 4, 8, 6, 36, 8, 32, 12, 42, 2, 52, 0, 0, 2, 16, 14, 14, 12, 30, 14, 36, 34, 34, 32, 12, 10, 10, 8, 34, 10, 48, 50, 50, 52, 44, 46, 46, 48, 50, 56, 56, 54 ], + "width": 162, + "height": 203 + } + }, + "raptor-front-leg": { + "raptor-front-leg": { + "type": "mesh", + "uvs": [ 0.55117, 0.17818, 0.6279, 0.36027, 0.66711, 0.4533, 0.6488, 0.51528, 0.53554, 0.56894, 0.32335, 0.66947, 0.28674, 0.72087, 0.32539, 0.80401, 0.36258, 0.80144, 0.42056, 0.79744, 0.61015, 0.78436, 0.73352, 0.81335, 0.84813, 0.84029, 1, 0.93855, 0.732, 0.92345, 0.62439, 0.91738, 0.72813, 1, 0.58574, 1, 0.47086, 0.98249, 0.36708, 0.96668, 0.26307, 0.95082, 0.16267, 0.93552, 0.03859, 0.72238, 0, 0.66947, 0.0374, 0.62999, 0.1647, 0.49563, 0.23732, 0.45681, 0.2702, 0.43923, 0.28064, 0.43365, 0.223, 0.40571, 0.12565, 0.35851, 0, 0.2976, 0, 0.1524, 0, 0, 0.32132, 0, 0.32222, 0.22778, 0.44931, 0.38031, 0.47664, 0.44362, 0.4615, 0.47375, 0.35106, 0.53247, 0.20091, 0.65257, 0.18528, 0.72148, 0.25222, 0.86314, 0.30942, 0.88124, 0.55694, 0.89613, 0.55858, 0.89208, 0.47493, 0.8534, 0.6059, 0.91526, 0.39706, 0.8913, 0.1323, 0.09352, 0.36997, 0.45346, 0.37163, 0.43828, 0.32516, 0.39424, 0.2376, 0.34426, 0.34066, 0.47415, 0.51677, 0.90503, 0.07821, 0.26333, 0.05796, 0.13086, 0.09601, 0.05963, 0.29303, 0.03825 ], + "triangles": [ 48, 8, 9, 48, 9, 46, 46, 9, 10, 45, 46, 10, 44, 46, 45, 55, 46, 44, 15, 47, 45, 10, 15, 45, 44, 45, 47, 55, 44, 47, 11, 15, 10, 14, 15, 11, 14, 11, 12, 14, 12, 13, 48, 43, 8, 48, 46, 55, 19, 43, 48, 20, 43, 19, 18, 48, 55, 19, 48, 18, 17, 55, 47, 18, 55, 17, 17, 47, 15, 16, 17, 15, 22, 24, 41, 23, 24, 22, 42, 41, 6, 42, 6, 7, 43, 42, 7, 43, 7, 8, 21, 22, 41, 21, 41, 42, 20, 42, 43, 21, 42, 20, 50, 28, 51, 27, 28, 50, 38, 51, 37, 50, 51, 38, 54, 27, 50, 26, 27, 54, 3, 37, 2, 38, 37, 3, 39, 54, 50, 39, 50, 38, 4, 38, 3, 39, 38, 4, 40, 25, 26, 24, 25, 40, 39, 40, 26, 39, 26, 54, 5, 40, 39, 5, 39, 4, 6, 40, 5, 41, 24, 40, 41, 40, 6, 59, 34, 0, 34, 58, 33, 59, 58, 34, 49, 58, 59, 57, 33, 58, 57, 58, 49, 32, 33, 57, 56, 57, 49, 32, 57, 56, 35, 59, 0, 49, 59, 35, 56, 49, 35, 31, 32, 56, 53, 56, 35, 30, 56, 53, 31, 56, 30, 36, 35, 0, 36, 0, 1, 52, 53, 35, 36, 52, 35, 29, 30, 53, 29, 53, 52, 28, 29, 52, 51, 52, 36, 28, 52, 51, 37, 36, 1, 51, 36, 37, 37, 1, 2 ], + "vertices": [ 2, 42, 128.03, 88.47, 0.85041, 1, 158.83, -71.92, 0.14959, 2, 42, 219.55, 53.15, 0.77988, 43, -48.05, -38.59, 0.22012, 2, 42, 266.31, 35.11, 0.53545, 43, -36.73, 10.22, 0.46455, 2, 42, 286.89, 9.8, 0.35167, 43, -14.56, 34.15, 0.64833, 2, 42, 281.55, -41.24, 0.09228, 43, 36.71, 36, 0.90772, 3, 42, 271.54, -136.86, 0.05787, 43, 132.77, 39.48, 0.71426, 44, 35, 78.76, 0.22788, 3, 43, 158.22, 55.17, 0.5308, 44, 52.66, 54.64, 0.38143, 45, 7.02, 85.54, 0.08776, 4, 43, 167.14, 99.49, 0.22977, 44, 97.55, 49.25, 0.37788, 45, 28.72, 45.88, 0.15198, 46, -21.26, 49.99, 0.24037, 4, 44, 102.57, 62.61, 0.26558, 45, 42.51, 49.56, 0.17568, 46, -7.07, 51.4, 0.22874, 47, -58.17, 28.03, 0.33001, 4, 44, 109.72, 83.4, 0.11934, 45, 64.09, 55.24, 0.13984, 46, 15.13, 53.52, 0.16668, 47, -36.1, 31.19, 0.57414, 1, 47, 35.81, 41.81, 1, 1, 47, 83.66, 29.43, 1, 1, 47, 128.11, 17.93, 1, 1, 47, 188.73, -29.42, 1, 2, 46, 145.37, -10.99, 0.34248, 47, 84.02, -27.11, 0.65752, 2, 46, 93.3, -7.6, 0.48, 47, 44.87, -26.18, 0.52, 2, 46, 133.18, -49.83, 0.776, 47, 86.69, -66.48, 0.224, 2, 46, 78.79, -50.15, 0.768, 47, 32.38, -69.36, 0.232, 2, 46, 35.36, -41.46, 0.88989, 47, -9.88, -62.73, 0.11011, 1, 46, -4.92, -33.56, 1, 3, 44, 155.05, -5.14, 0.35918, 45, 17.88, -32.51, 0.30633, 46, -44.62, -25.61, 0.3345, 4, 43, 254.98, 126.28, 0.10155, 44, 131.22, -36.21, 0.54212, 45, -21.25, -31.18, 0.20873, 46, -83.02, -17.98, 0.1476, 3, 43, 240.34, 7.81, 0.25587, 44, 11.94, -30.99, 0.61615, 45, -86.32, 68.91, 0.12798, 2, 43, 239.27, -23.1, 0.45486, 44, -18.96, -32.37, 0.54514, 3, 42, 187.65, -209.74, 0.09777, 43, 216.67, -33.36, 0.58893, 44, -30.98, -10.65, 0.3133, 2, 42, 163.86, -128.68, 0.19603, 43, 139.75, -68.26, 0.80397, 2, 42, 165.75, -94.49, 0.31963, 43, 105.59, -71.26, 0.68037, 2, 42, 166.4, -79.07, 0.46225, 43, 90.23, -72.77, 0.53775, 2, 42, 166.49, -74.17, 0.53786, 43, 85.43, -73.29, 0.46214, 2, 42, 141.54, -82.47, 0.73138, 43, 97.13, -96.82, 0.26862, 2, 42, 99.76, -97.08, 0.85324, 43, 117.34, -136.23, 0.14676, 2, 42, 45.01, -114.56, 0.83615, 1, -51.09, -135.29, 0.16385, 1, 1, -42.95, -58.39, 1, 1, 1, -52.66, 17.56, 1, 1, 1, 70.07, 18.78, 1, 1, 42, 93.55, 4.14, 1, 2, 42, 185.14, -6.67, 0.75462, 43, 15.99, -64.28, 0.24539, 2, 42, 217.11, -18.75, 0.50845, 43, 23.47, -30.93, 0.49155, 2, 42, 225.64, -32.92, 0.32528, 43, 36.31, -20.51, 0.67472, 2, 42, 223, -84.74, 0.20193, 43, 87.97, -15.86, 0.79807, 3, 42, 235.62, -168.07, 0.08091, 43, 168.7, 8.29, 0.57148, 44, 6.75, 40.47, 0.34761, 3, 43, 191.8, 35.81, 0.32545, 44, 36.01, 19.63, 0.57243, 45, -31.15, 78.74, 0.10211, 4, 43, 206.64, 111.54, 0.10808, 44, 112.69, 10.83, 0.52068, 45, 6.26, 11.23, 0.23518, 46, -49.03, 19.43, 0.13606, 3, 44, 130.61, 26.42, 0.35068, 45, 29.36, 5.72, 0.28241, 46, -27.13, 10.26, 0.36691, 2, 46, 67.47, 3.17, 0.384, 47, 18.56, -16.63, 0.616, 1, 47, 19.07, -14.52, 1, 2, 46, 36.01, 24.95, 0.384, 47, -13.89, 3.64, 0.616, 2, 46, 86.23, -6.55, 0.488, 47, 37.76, -25.46, 0.512, 4, 44, 151.19, 56, 0.22879, 45, 65.44, 5.56, 0.18425, 46, 8.45, 4.28, 0.45492, 47, 0, 0, 0.13205, 2, 42, -9.28, -17.51, 0.22806, 1, 7.72, -30.86, 0.77194, 2, 42, 195.91, -53.82, 0.42369, 43, 61.12, -47.06, 0.57631, 2, 42, 190.1, -48.45, 0.53231, 43, 56.62, -53.56, 0.46769, 2, 42, 161.27, -48.26, 0.79874, 43, 60.44, -82.13, 0.20126, 2, 42, 120.38, -58.54, 0.85455, 43, 76.31, -121.19, 0.14545, 2, 42, 197.37, -69.23, 0.3355, 43, 76.18, -43.47, 0.6645, 4, 44, 167.22, 97.41, 0.10303, 45, 97.38, 0.84, 0.08297, 46, 54.09, -2.79, 0.51764, 47, 4.74, -23.22, 0.29636, 2, 42, 49.5, -83.17, 0.71382, 1, -17.26, -114.16, 0.28617, 2, 42, -9.83, -51.31, 0.41882, 1, -21.43, -46.95, 0.58118, 2, 42, -31.44, -20.43, 0.27617, 1, -6.57, -12.31, 0.72383, 2, 42, 0.92, 47.46, 0.41417, 1, 68.18, -4.06, 0.58583 ], + "hull": 35, + "edges": [ 46, 44, 44, 42, 32, 34, 32, 30, 26, 24, 14, 12, 12, 10, 6, 4, 66, 68, 0, 68, 46, 48, 48, 50, 40, 42, 16, 14, 58, 56, 4, 2, 2, 0, 10, 8, 8, 6, 78, 80, 80, 82, 82, 84, 84, 86, 86, 96, 16, 18, 18, 20, 38, 40, 62, 64, 64, 66, 100, 102, 102, 104, 58, 60, 60, 62, 106, 104, 54, 56, 50, 52, 52, 54, 108, 100, 78, 76, 76, 74, 72, 74, 72, 70, 70, 98, 92, 90, 56, 102, 100, 54, 52, 108, 58, 104, 60, 106, 76, 6, 74, 4, 72, 2, 78, 8, 92, 20, 92, 88, 88, 94, 90, 30, 94, 30, 26, 28, 28, 30, 20, 22, 22, 24, 28, 22, 34, 36, 36, 38, 94, 110, 110, 96, 36, 110, 110, 88, 60, 112, 112, 114, 114, 116, 116, 118, 118, 0 ], + "width": 382, + "height": 514 + } + }, + "raptor-hindleg-back": { + "raptor-hindleg-back": { + "type": "mesh", + "uvs": [ 0.45041, 0.09352, 0.56934, 0.23361, 0.65294, 0.47297, 0.66354, 0.50822, 0.63175, 0.54255, 0.32384, 0.69723, 0.30069, 0.73876, 0.27934, 0.77704, 0.30417, 0.83513, 0.31059, 0.85014, 0.34101, 0.85047, 0.45165, 0.85164, 0.59556, 0.81882, 0.91177, 0.92548, 1, 1, 0.56337, 0.96427, 0.4835, 0.98261, 0.29879, 0.98027, 0.22808, 0.98389, 0.15998, 0.98738, 0.15424, 0.95547, 0.13895, 0.87048, 0.07371, 0.78726, 0, 0.753, 0, 0.7049, 0, 0.671, 0.11876, 0.64653, 0.16535, 0.5266, 0.28496, 0.47398, 0.29011, 0.45774, 0.29427, 0.4446, 0.20635, 0.40396, 0.06129, 0.33691, 0, 0.25247, 0, 0, 0.30793, 0, 0.276, 0.20262, 0.40398, 0.31122, 0.48439, 0.45964, 0.48318, 0.48384, 0.47029, 0.51062, 0.22698, 0.67328, 0.17142, 0.7242, 0.17122, 0.78242, 0.22996, 0.89469, 0.24677, 0.90829, 0.28672, 0.9146, 0.46583, 0.91414 ], + "triangles": [ 15, 13, 14, 16, 47, 15, 15, 12, 13, 15, 47, 12, 18, 46, 17, 18, 45, 46, 17, 47, 16, 17, 46, 47, 47, 10, 11, 47, 46, 10, 47, 11, 12, 45, 18, 19, 44, 45, 20, 20, 45, 19, 20, 21, 44, 46, 9, 10, 46, 45, 9, 45, 44, 9, 21, 43, 44, 44, 8, 9, 44, 7, 8, 44, 43, 7, 21, 22, 43, 43, 22, 42, 43, 42, 7, 22, 23, 24, 24, 42, 22, 7, 42, 6, 42, 41, 6, 6, 41, 5, 24, 26, 42, 42, 26, 41, 24, 25, 26, 5, 40, 4, 5, 41, 40, 41, 28, 40, 26, 27, 41, 41, 27, 28, 40, 39, 4, 28, 29, 40, 40, 29, 39, 4, 39, 3, 39, 2, 3, 29, 30, 39, 39, 38, 2, 39, 30, 38, 38, 1, 2, 30, 37, 38, 38, 37, 1, 30, 31, 37, 31, 36, 37, 31, 32, 36, 32, 33, 36, 37, 0, 1, 37, 36, 0, 33, 34, 36, 36, 35, 0, 36, 34, 35 ], + "vertices": [ 1, 17, 53.94, 69.16, 1, 1, 17, 126.23, 67.31, 1, 2, 17, 226.42, 31.14, 0.9375, 18, -30.88, -1.11, 0.0625, 2, 17, 240.84, 25.33, 0.7, 18, -25.65, 13.52, 0.3, 2, 17, 246.67, 8.06, 0.3, 18, -8.61, 20.02, 0.7, 3, 17, 240.82, -115.25, 0.0625, 18, 114.81, 19.01, 0.875, 19, 9.48, 59.16, 0.0625, 2, 18, 131.07, 29.69, 0.7, 19, 22.12, 44.36, 0.3, 2, 18, 146.07, 39.54, 0.3, 19, 33.76, 30.71, 0.7, 3, 18, 152.6, 65.01, 0.12567, 19, 59.85, 27.41, 0.75203, 20, 15.86, 48.05, 0.1223, 2, 19, 66.6, 26.56, 0.82916, 20, 16.73, 41.31, 0.17084, 3, 19, 71.2, 35.76, 0.64716, 20, 26.79, 39.17, 0.1317, 21, -67.33, 18.96, 0.22114, 3, 19, 87.93, 69.21, 0.0625, 20, 63.37, 31.39, 0.675, 21, -30.18, 23.3, 0.2625, 2, 20, 113.82, 35.72, 0.10381, 21, 16.23, 43.56, 0.89619, 1, 21, 128.14, 12.02, 1, 1, 21, 161.85, -15.82, 1, 1, 21, 13.52, -19.72, 1, 2, 20, 62.98, -25.82, 0.7, 21, -12.23, -31.02, 0.3, 3, 19, 115.12, -1.34, 0.08333, 20, 1.94, -12.66, 0.83333, 21, -74.27, -38.11, 0.08333, 2, 19, 106.11, -23.53, 0.3, 20, -21.81, -9.53, 0.7, 2, 19, 97.44, -44.91, 0.7, 20, -44.67, -6.51, 0.3, 2, 19, 84.26, -40.69, 0.9375, 20, -43.91, 7.3, 0.0625, 1, 19, 49.19, -29.47, 1, 2, 18, 206.75, 5.37, 0.13333, 19, 7.44, -33.78, 0.86667, 2, 18, 219.64, -20.52, 0.36111, 19, -16.64, -49.81, 0.63889, 2, 18, 208.41, -37.83, 0.72083, 19, -35.22, -40.82, 0.27917, 2, 18, 200.49, -50.03, 0.91667, 19, -48.31, -34.49, 0.08333, 1, 18, 161.11, -36.98, 1, 2, 17, 150.1, -116.77, 0.08333, 18, 119.88, -71.55, 0.91667, 2, 17, 154.99, -70.72, 0.42846, 18, 73.68, -68.48, 0.57154, 2, 17, 150.31, -65.27, 0.35605, 18, 68.43, -73.37, 0.64395, 2, 17, 146.52, -60.87, 0.59148, 18, 64.18, -77.33, 0.40852, 2, 17, 115.13, -75.09, 0.8446, 18, 79.61, -108.13, 0.1554, 1, 17, 63.33, -98.54, 1, 1, 17, 21.78, -94.56, 1, 1, 17, -66.69, -32.05, 1, 1, 17, -6.63, 52.97, 1, 1, 17, 58.15, -6.01, 1, 1, 17, 121.17, 2.44, 1, 1, 17, 188.87, -12.1, 1, 2, 17, 197.12, -18.43, 0.7, 18, 19.79, -28.44, 0.3, 2, 17, 203.99, -28.62, 0.3, 18, 29.7, -21.18, 0.7, 1, 18, 136.67, -7.43, 1, 2, 18, 164.32, 0.67, 0.7, 19, -2.53, 7.74, 0.3, 2, 18, 177.98, 21.58, 0.25, 19, 19.92, -3.2, 0.75, 1, 19, 71.94, -6.3, 1, 2, 19, 79.66, -3.72, 0.7, 20, -9.29, 21.05, 0.3, 2, 19, 87.98, 7.26, 0.3125, 20, 3.43, 15.76, 0.6875, 2, 20, 62.84, 4.16, 0.72917, 21, -21.96, -2.67, 0.27083 ], + "hull": 36, + "edges": [ 66, 68, 66, 64, 56, 54, 54, 52, 52, 50, 46, 44, 44, 42, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 68, 70, 0, 70, 46, 48, 48, 50, 14, 12, 12, 10, 60, 58, 58, 56, 42, 40, 40, 38, 18, 16, 16, 14, 22, 20, 20, 18, 38, 36, 36, 34, 60, 62, 62, 64, 68, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 84, 86, 16, 88, 86, 88, 18, 90, 90, 38, 88, 90, 20, 92, 92, 36, 90, 92, 92, 94, 94, 22, 94, 32, 30, 24, 88, 40, 86, 14, 84, 12, 82, 10, 82, 52, 48, 84, 44, 86, 78, 6, 4, 76, 80, 8, 80, 56, 58, 78, 76, 60 ], + "width": 338, + "height": 429 + } + }, + "raptor-horn": { + "raptor-horn": { "x": 156.21, "y": 74.11, "rotation": -137.26, "width": 363, "height": 159 } + }, + "raptor-horn-back": { + "raptor-horn-back": { "x": 121.43, "y": 83.01, "rotation": -132.22, "width": 351, "height": 153 } + }, + "raptor-jaw": { + "raptor-jaw": { + "type": "mesh", + "uvs": [ 0.43611, 0.10281, 0.50457, 0.26446, 0.59673, 0.37777, 0.69416, 0.49754, 0.79771, 0.54917, 0.91149, 0.59812, 1, 0.63619, 0.99305, 0.85625, 0.67606, 1, 0.39521, 1, 0.19457, 0.89404, 0.2161, 0.6497, 0, 0.46112, 0, 0, 0.26125, 1.0E-5, 0.19457, 0.29385, 0.60678, 0.81243, 0.42896, 0.88938, 0.86006, 0.80271, 0.64788, 0.93008, 0.58349, 0.62419, 0.41196, 0.69752, 0.46153, 0.51921, 0.35989, 0.3664, 0.32564, 0.54238 ], + "triangles": [ 12, 13, 15, 15, 13, 14, 8, 18, 7, 8, 9, 19, 9, 17, 19, 8, 19, 18, 9, 10, 17, 17, 16, 19, 19, 16, 18, 10, 21, 17, 10, 11, 21, 17, 21, 16, 7, 18, 6, 21, 20, 16, 4, 16, 20, 4, 20, 3, 16, 4, 18, 18, 5, 6, 18, 4, 5, 11, 24, 21, 21, 22, 20, 21, 24, 22, 11, 12, 24, 20, 22, 3, 12, 15, 24, 24, 23, 22, 24, 15, 23, 22, 2, 3, 2, 23, 1, 2, 22, 23, 1, 23, 0, 23, 15, 0, 15, 14, 0 ], + "vertices": [ 1, 54, 28.47, 75.44, 1, 1, 54, 66.98, 65.83, 1, 1, 54, 98.09, 68.86, 1, 1, 54, 130.98, 72.06, 1, 1, 54, 159.14, 77.75, 1, 1, 54, 184.6, 91.13, 1, 1, 54, 204.41, 101.54, 1, 1, 54, 239.23, 68.91, 1, 1, 54, 229.24, 2.68, 1, 1, 54, 173.67, -58.3, 1, 1, 54, 125.49, -79.1, 1, 1, 54, 87.8, -40.51, 1, 2, 54, -5.59, -78.2, 0.32267, 8, -21.32, -18.84, 0.67733, 1, 8, 106.45, -6.22, 1, 1, 8, 95.42, -85.63, 1, 1, 54, 24.89, 6.25, 1, 1, 54, 174.32, 6.19, 1, 1, 54, 160.25, -36.54, 1, 1, 54, 210.56, 52.8, 1, 1, 54, 208.35, 3.52, 1, 1, 54, 137.3, 31.58, 1, 1, 54, 124.75, -11.2, 1, 1, 54, 102.54, 22.8, 1, 1, 54, 61.9, 25.79, 1, 1, 54, 86.18, -5.32, 1 ], + "hull": 15, + "edges": [ 24, 26, 24, 22, 22, 20, 20, 18, 18, 16, 8, 6, 2, 0, 26, 28, 0, 28, 26, 30, 24, 30, 30, 0, 14, 16, 14, 12, 8, 32, 32, 34, 8, 10, 10, 12, 2, 4, 4, 6 ], + "width": 252, + "height": 275 + } + }, + "raptor-jaw-inside": { + "raptor-jaw2": { + "type": "mesh", + "path": "raptor-jaw", + "uvs": [ 0.43611, 0.10281, 0.50457, 0.26446, 0.69416, 0.49754, 0.79771, 0.54917, 1, 0.63619, 0.99305, 0.85625, 0.67606, 1, 0.39521, 1, 0.19457, 0.89404, 0.2161, 0.6497, 0, 0.46112, 0, 0, 0.26125, 1.0E-5, 0.19457, 0.29385, 0.60678, 0.81243, 0.42896, 0.88938 ], + "triangles": [ 10, 11, 13, 13, 11, 12, 7, 15, 6, 15, 14, 6, 6, 14, 5, 7, 8, 15, 8, 9, 15, 15, 9, 14, 14, 3, 5, 5, 3, 4, 14, 2, 3, 14, 9, 2, 10, 13, 9, 9, 1, 2, 9, 13, 1, 13, 0, 1, 13, 12, 0 ], + "vertices": [ 1, 54, 28.9, 96.24, 1, 1, 54, 65.84, 86.82, 1, 1, 54, 125.41, 92.66, 1, 1, 54, 151.38, 98.09, 1, 1, 54, 191.91, 121, 1, 1, 54, 227.3, 89.29, 1, 1, 54, 223.4, 25.16, 1, 1, 54, 176.27, -33.76, 1, 1, 54, 132.75, -53.77, 1, 1, 54, 94.17, -16.26, 1, 2, 54, 19.52, -38.44, 0.32267, 8, -3.76, -62.46, 0.67733, 1, 8, 98.59, -46.15, 1, 1, 8, 110.02, -102.65, 1, 1, 54, 31.25, 29.22, 1, 1, 54, 171.54, 28.72, 1, 1, 54, 161.87, -12.64, 1 ], + "hull": 13, + "edges": [ 20, 22, 20, 18, 18, 16, 16, 14, 14, 12, 6, 4, 4, 2, 2, 0, 22, 24, 0, 24, 22, 26, 20, 26, 26, 0, 10, 12, 6, 8, 10, 8, 6, 28, 28, 30 ], + "width": 252, + "height": 275 + } + }, + "raptor-mouth-inside": { + "raptor-mouth-inside": { + "type": "mesh", + "uvs": [ 1, 0.29017, 0.37217, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 0, 1, 3, 3, 4, 0 ], + "vertices": [ 1, 8, 26.56, -211.68, 1, 1, 54, 130.45, -7.83, 1, 1, 54, 109.72, -24.21, 1, 1, 8, 47.22, -139.7, 1, 1, 8, 50.33, -210.63, 1 ], + "hull": 5, + "edges": [ 4, 6, 6, 8, 2, 4, 0, 8, 2, 0 ], + "width": 71, + "height": 82 + } + }, + "raptor-saddle": { + "raptor-saddle-w-shadow": { + "type": "mesh", + "uvs": [ 0.28517, 0.09749, 0.26891, 0.14719, 0.32431, 0.28893, 0.45069, 0.52793, 0.56076, 0.56219, 0.69936, 0.53502, 0.71567, 0.44878, 0.83797, 0.36373, 0.91271, 0.34719, 1, 0.53622, 1, 0.61771, 0.93479, 0.82943, 0.87524, 0.96013, 0.74099, 1, 0.28984, 0.9496, 0.12982, 0.85304, 0.10295, 0.69443, 0.10449, 0.63657, 0.20499, 0.6452, 0.0954, 0.41741, 0.00133, 0.37841, 0, 0.27026, 0.11186, 0, 0.17021, 0, 0.24413, 0, 0.46313, 0.92332, 0.56755, 0.84415, 0.94056, 0.67906, 0.9263, 0.43106, 0.2137, 0.18682, 0.18239, 0.28963, 0.21653, 0.33824, 0.32307, 0.44535, 0.38606, 0.52911, 0.39069, 0.55971, 0.36568, 0.6032, 0.38235, 0.62414, 0.43979, 0.69174, 0.53891, 0.71429, 0.62321, 0.7159, 0.70381, 0.69254, 0.74827, 0.66355, 0.78996, 0.62087, 0.80571, 0.56933, 0.79737, 0.54033, 0.75661, 0.51215, 0.72789, 0.51537, 0.20634, 0.08376, 0.17577, 0.12886, 0.13686, 0.18765, 0.11185, 0.28751, 0.17762, 0.36321, 0.26192, 0.46066, 0.30546, 0.50012, 0.31565, 0.55488, 0.81026, 0.7038, 0.86992, 0.65976, 0.89927, 0.54517, 0.84925, 0.47993, 0.81868, 0.43161 ], + "triangles": [ 47, 23, 24, 47, 24, 0, 47, 22, 23, 1, 47, 0, 48, 47, 1, 29, 48, 1, 48, 49, 22, 47, 48, 22, 49, 48, 29, 21, 22, 49, 50, 21, 49, 29, 1, 2, 30, 49, 29, 30, 29, 2, 50, 49, 30, 31, 30, 2, 51, 50, 30, 51, 30, 31, 20, 21, 50, 19, 20, 50, 19, 50, 51, 8, 9, 28, 7, 8, 28, 59, 7, 28, 32, 31, 2, 2, 3, 32, 7, 59, 6, 52, 31, 32, 51, 31, 52, 58, 59, 28, 53, 52, 32, 45, 6, 59, 45, 59, 58, 46, 6, 45, 33, 53, 32, 3, 33, 32, 46, 5, 6, 44, 45, 58, 57, 58, 28, 57, 28, 9, 44, 58, 57, 54, 53, 33, 34, 33, 3, 54, 33, 34, 43, 44, 57, 35, 54, 34, 57, 9, 10, 46, 44, 43, 44, 46, 45, 36, 35, 34, 52, 19, 51, 19, 52, 18, 54, 52, 53, 54, 18, 52, 56, 43, 57, 27, 56, 57, 42, 43, 56, 46, 42, 5, 43, 42, 46, 41, 5, 42, 10, 27, 57, 3, 36, 34, 37, 3, 4, 37, 36, 3, 40, 5, 41, 4, 5, 40, 16, 17, 18, 55, 42, 56, 41, 42, 55, 38, 37, 4, 39, 38, 4, 40, 39, 4, 27, 55, 56, 11, 55, 27, 11, 27, 10, 26, 38, 39, 15, 16, 18, 26, 25, 37, 26, 37, 38, 14, 18, 37, 35, 18, 54, 36, 18, 35, 37, 18, 36, 14, 37, 25, 15, 18, 14, 12, 55, 11, 55, 13, 40, 55, 40, 41, 13, 55, 12, 26, 39, 40, 13, 26, 40, 25, 26, 13, 14, 25, 13 ], + "vertices": [ 262.59, 79.92, 244.74, 92.82, 188.83, 69.76, 114.07, 26.79, 102.07, -9.38, 113.32, -54.32, 145.78, -58.87, 178.6, -97.98, 185.38, -122.19, 120.06, -152.19, 84.63, -153.03, 15.94, -134.16, -24.77, -117.84, -45.38, -70.46, -59.12, 75.16, -24.15, 128.17, 35.11, 138.33, 56.81, 138.33, 54.35, 105.5, 138.9, 143.23, 152.8, 174.24, 193.34, 175.62, 295.51, 141.56, 295.96, 122.54, 296.53, 98.45, -47.94, 18.91, -17.46, -14.42, 67.83, -136.04, 154.04, -127.36, 226.26, 106.71, 187.47, 116.01, 169.51, 104.45, 130.18, 68.79, 99.26, 47.52, 87.82, 45.74, 71.33, 53.5, 63.61, 47.89, 52.57, 28.9, 44.88, -3.61, 44.93, -31.1, 54.3, -57.16, 65.51, -71.39, 81.83, -84.6, 101.28, -89.28, 112.08, -86.31, 122.33, -72.77, 120.91, -63.44, 264.84, 110.02, 247.7, 119.59, 225.36, 131.75, 187.73, 139.02, 159.85, 116.91, 123.97, 88.58, 109.51, 74.04, 89.06, 70.23, 41.99, -86.15, 68.62, -111.21, 111.05, -119.56, 135.12, -102.68, 153, -92.29 ], + "hull": 25, + "edges": [ 44, 42, 40, 42, 40, 38, 38, 36, 36, 34, 34, 32, 32, 30, 30, 28, 28, 50, 50, 52, 52, 26, 26, 24, 24, 22, 22, 54, 54, 20, 20, 18, 18, 56, 56, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 26, 28, 20, 22, 16, 18, 2, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 92, 10, 44, 46, 46, 48, 46, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 108, 36, 110, 112, 112, 114, 114, 116, 116, 118, 118, 14 ], + "width": 324, + "height": 341 + } + }, + "raptor-saddle-strap-back": { + "raptor-saddle-strap-back": { "x": 78.45, "y": -4.2, "rotation": 120.24, "width": 108, "height": 148 } + }, + "raptor-saddle-strap-front": { + "raptor-saddle-strap-front": { "x": 128.83, "y": -4.72, "rotation": 61.29, "width": 114, "height": 189 } + }, + "raptor-tongue": { + "raptor-tongue": { + "type": "mesh", + "uvs": [ 0.35242, 0.21561, 0.4794, 0.44246, 0.62072, 0.61177, 0.80563, 0.75374, 1, 0.90297, 1, 1, 0.8971, 1, 0.72055, 0.92255, 0.50668, 0.82872, 0.30402, 0.70725, 0.10537, 0.57889, 0, 0.50622, 0, 0, 0.26225, 0 ], + "triangles": [ 7, 8, 3, 6, 7, 3, 4, 6, 3, 6, 4, 5, 8, 7, 6, 9, 1, 2, 8, 9, 2, 9, 10, 1, 8, 2, 3, 0, 11, 12, 0, 12, 13, 10, 11, 0, 1, 10, 0 ], + "vertices": [ 2, 71, 3.64, 27.05, 0.6875, 72, -47.27, 33.88, 0.3125, 3, 71, 39.1, 19.46, 0.3125, 72, -13.42, 20.87, 0.625, 73, -51.54, 33.38, 0.0625, 3, 71, 71.56, 19.03, 0.0625, 72, 18.59, 15.4, 0.625, 73, -21.56, 20.92, 0.3125, 2, 72, 55.03, 16.86, 0.3125, 73, 14.29, 14.24, 0.6875, 2, 72, 93.34, 18.4, 0.08333, 73, 51.98, 7.21, 0.91667, 1, 73, 56.09, -4.51, 1, 2, 72, 85.07, -1.49, 0.08333, 73, 39.49, -10.33, 0.91667, 2, 72, 54.23, -9.18, 0.3125, 73, 7.71, -10.97, 0.6875, 3, 71, 75.14, -14.72, 0.0625, 72, 16.87, -18.5, 0.625, 73, -30.77, -11.74, 0.3125, 3, 71, 38.8, -25.81, 0.3125, 72, -20.75, -23.8, 0.625, 73, -68.63, -8.54, 0.0625, 2, 71, 2.4, -35.78, 0.6875, 72, -58.25, -27.99, 0.3125, 2, 71, -17.29, -40.63, 0.91667, 72, -78.46, -29.72, 0.08333, 1, 71, -59.92, 8.19, 1, 2, 71, -26.14, 37.69, 0.91667, 72, -75.02, 49.02, 0.08333 ], + "hull": 14, + "edges": [ 22, 24, 10, 12, 10, 8, 24, 26, 16, 4, 18, 16, 2, 4, 18, 2, 22, 20, 0, 26, 20, 0, 0, 2, 12, 14, 14, 16, 4, 6, 6, 8, 14, 6, 20, 18 ], + "width": 171, + "height": 128 + } + }, + "raptow-jaw-tooth": { + "raptor-jaw-tooth": { + "x": 215.7, + "y": 103.86, + "scaleX": 0.8674, + "scaleY": 0.8317, + "rotation": 56.5, + "width": 73, + "height": 96 + } + }, + "spineboy-torso": { + "torso": { "x": 55.88, "y": 4.87, "rotation": -104.14, "width": 108, "height": 182 } + }, + "stirrup-back": { + "stirrup-back": { "x": 53.2, "y": 31.34, "rotation": -21.13, "width": 87, "height": 69 } + }, + "stirrup-front": { + "stirrup-front": { "x": 36.14, "y": 20.39, "rotation": -21.13, "width": 89, "height": 100 } + }, + "stirrup-strap": { + "stirrup-strap": { + "type": "mesh", + "uvs": [ 0.36823, 0.27894, 0.45738, 0.38897, 0.54452, 0.49652, 0.67872, 0.59135, 0.81977, 0.69102, 1, 0.77344, 1, 1, 0.77957, 1, 0.6373, 0.8163, 0.53364, 0.72349, 0.40534, 0.60861, 0.30886, 0.52535, 0.2105, 0.44048, 0, 0.26245, 0, 0, 0.30637, 0, 0.20242, 0.23001 ], + "triangles": [ 2, 10, 1, 9, 10, 2, 9, 2, 3, 8, 9, 3, 8, 3, 4, 7, 8, 4, 7, 4, 5, 7, 5, 6, 16, 14, 15, 13, 14, 16, 16, 15, 0, 12, 16, 0, 12, 0, 1, 13, 16, 12, 11, 12, 1, 10, 11, 1 ], + "vertices": [ 2, 59, 24.72, 8.04, 0.80345, 60, -17.42, 11.02, 0.19655, 2, 59, 37.95, 8.04, 0.59979, 60, -4.37, 8.87, 0.40021, 2, 59, 50.88, 8.05, 0.36895, 60, 8.39, 6.77, 0.63105, 2, 59, 65.92, 12.27, 0.17748, 60, 23.92, 8.48, 0.82252, 2, 59, 81.73, 16.71, 0.05943, 60, 40.24, 10.28, 0.94057, 2, 59, 98.83, 25.04, 0.0121, 60, 58.47, 15.72, 0.9879, 2, 59, 114.44, 11.58, 0.00191, 60, 71.67, -0.11, 0.99809, 2, 59, 100.47, -4.61, 0.01818, 60, 55.25, -13.81, 0.98182, 2, 59, 78.8, -4.14, 0.07488, 60, 33.95, -9.81, 0.92512, 2, 59, 65.83, -6.24, 0.2028, 60, 20.81, -9.77, 0.7972, 2, 59, 49.79, -8.84, 0.39972, 60, 4.56, -9.71, 0.60028, 2, 59, 37.94, -10.97, 0.62658, 60, -7.48, -9.89, 0.37342, 2, 59, 25.86, -13.15, 0.82035, 60, -19.76, -10.07, 0.17965, 2, 59, 0.25, -18.03, 0.95289, 60, -45.82, -10.7, 0.04711, 2, 59, -17.84, -2.43, 0.9771, 60, -61.11, 7.64, 0.0229, 2, 59, 1.58, 20.07, 0.94775, 60, -38.29, 26.68, 0.05225, 2, 59, 10.84, -1.24, 0.9771, 60, -32.63, 4.14, 0.0229 ], + "hull": 16, + "edges": [ 28, 30, 30, 0, 12, 10, 8, 10, 12, 14, 14, 16, 26, 28, 24, 26, 26, 32, 32, 30, 20, 22, 22, 24, 0, 2, 2, 4, 4, 6, 6, 8, 16, 18, 18, 20 ], + "width": 97, + "height": 91 + } + }, + "tail-shadow": { + "raptor-tail-shadow": { + "type": "mesh", + "uvs": [ 1, 0.50387, 0.89276, 1, 0.82069, 0.96993, 0.72927, 0.92231, 0.64083, 0.87624, 0.54988, 0.83667, 0.47106, 0.80022, 0.40123, 0.7783, 0.32238, 0.75321, 0.25301, 0.73107, 0.20375, 0.71883, 0.11753, 0.71414, 0, 0.72519, 0, 0.66338, 0.10358, 0.57282, 0.18201, 0.5128, 0.23534, 0.47512, 0.30555, 0.4281, 0.37968, 0.37769, 0.44858, 0.3281, 0.51987, 0.2798, 0.61007, 0.21367, 0.70725, 0.14608, 0.80109, 0.08082, 0.90134, 0 ], + "triangles": [ 10, 11, 14, 13, 14, 11, 10, 14, 15, 12, 13, 11, 9, 10, 15, 8, 9, 16, 9, 15, 16, 8, 16, 17, 7, 8, 17, 6, 7, 18, 7, 17, 18, 6, 18, 19, 5, 6, 19, 4, 20, 21, 4, 5, 20, 5, 19, 20, 2, 22, 23, 3, 21, 22, 4, 21, 3, 3, 22, 2, 23, 24, 0, 23, 0, 2, 1, 2, 0 ], + "vertices": [ 1, 65, -0.16, 6.41, 1, 2, 65, 42.4, 61.67, 0.7548, 66, -28.13, 61.67, 0.2452, 2, 65, 69.28, 56.16, 0.53679, 66, -1.25, 56.16, 0.46321, 3, 65, 103.42, 48.48, 0.13235, 66, 32.89, 48.48, 0.82952, 67, -35.63, 49.98, 0.03813, 3, 65, 136.1, 39.06, 0.00439, 66, 65.57, 39.06, 0.62467, 67, -3.36, 39.23, 0.37094, 3, 66, 99.5, 32, 0.0995, 67, 30.26, 30.79, 0.87982, 68, -32.35, 31.34, 0.02068, 3, 66, 129.1, 26.76, 4.6E-4, 67, 59.61, 24.34, 0.57172, 68, -3.11, 24.4, 0.42782, 2, 67, 85.42, 18.44, 0.04275, 68, 22.59, 18.06, 0.95725, 2, 68, 51.63, 10.96, 0.64526, 69, -3.07, 10.89, 0.35474, 2, 68, 77.16, 4.61, 0.00246, 69, 22.59, 5.12, 0.99754, 2, 69, 40.97, 2.02, 0.84959, 70, -8.23, 2.08, 0.15041, 1, 70, 23.84, -2.64, 1, 1, 70, 68.09, -5.25, 1, 1, 70, 68.64, -7.05, 1, 1, 70, 29.23, -12.51, 1, 2, 69, 48.26, -18.17, 0.57427, 70, -1.07, -18.16, 0.42573, 1, 69, 27.9, -20.81, 1, 2, 68, 55.03, -24.11, 0.40024, 69, 1.11, -24.1, 0.59976, 3, 67, 90.24, -26.6, 0.00715, 68, 26.65, -27.06, 0.98709, 69, -27.19, -27.68, 0.00576, 2, 67, 63.89, -30.1, 0.5083, 68, 0.25, -30.11, 0.4917, 3, 66, 108.32, -33.03, 0.01005, 67, 36.41, -34.55, 0.9784, 68, -27.3, -34.09, 0.01155, 2, 66, 74.22, -38.09, 0.50429, 67, 2.13, -38.21, 0.49571, 3, 65, 107.88, -44.01, 0.04245, 66, 37.35, -44.01, 0.94684, 67, -34.96, -42.61, 0.01071, 2, 65, 72.14, -50.49, 0.52154, 66, 1.61, -50.49, 0.47846, 2, 65, 33.89, -58.82, 0.93522, 66, -36.64, -58.82, 0.06478 ], + "hull": 25, + "edges": [ 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 20, 30, 32, 18, 20, 32, 18, 34, 32, 16, 18, 34, 16, 14, 36, 16, 14, 34, 36, 38, 36, 12, 14, 38, 12, 40, 38, 10, 12, 40, 10, 2, 4, 46, 4, 42, 8, 8, 10, 40, 42, 46, 44, 44, 42, 4, 6, 6, 8, 44, 6, 2, 0, 0, 48, 46, 48 ], + "width": 377, + "height": 126 + } + }, + "visor": { + "visor": { "x": 99.13, "y": 6.51, "rotation": -70.58, "width": 261, "height": 168 } + } + } + } +], +"animations": { + "gun-grab": { + "slots": { + "front-hand": { + "attachment": [ + { "name": "front-open-hand" }, + { "time": 0.2333, "name": "gun" } + ] + }, + "gun": { + "attachment": [ + { "time": 0.2333, "name": null } + ] + } + }, + "bones": { + "front-hand2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 12.34 }, + { "time": 0.2333, "angle": -89.55, "curve": "stepped" }, + { "time": 0.2667, "angle": -89.55 }, + { "time": 0.3333, "angle": -79.79 }, + { "time": 0.6667, "angle": -10.18 } + ], + "scale": [ + {}, + { "time": 0.2333, "x": 0.938, "y": 0.938 }, + { "time": 0.6667 } + ] + }, + "front-arm": { + "rotate": [ + {}, + { "time": 0.1, "angle": -32 }, + { "time": 0.2333, "angle": 223.11, "curve": 0.25, "c3": 0.75 }, + { "time": 0.3333, "angle": 155.19, "curve": 0.25, "c3": 0.75 }, + { "time": 0.5333, "angle": 246.14, "curve": 0.184, "c2": 0.34, "c3": 0.75 }, + { "time": 0.6667, "angle": -56.75 } + ], + "translate": [ + {}, + { "time": 0.2333, "x": 6.5, "y": -2.66 }, + { "time": 0.3333, "x": 6.84, "y": 4.8 }, + { "time": 0.6667 } + ] + }, + "front-bracer": { + "rotate": [ + {}, + { "time": 0.2333, "angle": 86.02, "curve": "stepped" }, + { "time": 0.2667, "angle": 86.02 }, + { "time": 0.3333, "angle": 114.95 }, + { "time": 0.5333, "angle": 81.86, "curve": 0.25, "c3": 0.75 }, + { "time": 0.6667, "angle": 34.74 } + ] + } + }, + "ik": { + "spineboy-front-arm-ik": [ + { "mix": 0 } + ] + } + }, + "gun-holster": { + "slots": { + "front-hand": { + "attachment": [ + { "name": "gun" }, + { "time": 0.3, "name": "front-open-hand" }, + { "time": 0.6667, "name": "front-hand" } + ] + }, + "gun": { + "attachment": [ + { "name": null }, + { "time": 0.3, "name": "gun-nohand" } + ] + } + }, + "bones": { + "front-hand2": { + "rotate": [ + { "angle": -10.18 }, + { "time": 0.1667, "angle": -88.65 }, + { "time": 0.3, "angle": -89.52 }, + { "time": 0.4667, "angle": -35.36 }, + { "time": 0.6667, "angle": 0.18 } + ], + "scale": [ + {}, + { "time": 0.3, "x": 0.888, "y": 0.888 } + ] + }, + "front-arm": { + "rotate": [ + { "angle": -56.75 }, + { "time": 0.1667, "angle": 162.12 }, + { "time": 0.3, "angle": 216.91 }, + { "time": 0.4667, "angle": 200.21 }, + { "time": 0.6667, "angle": -25.24 } + ] + }, + "front-bracer": { + "rotate": [ + { "angle": 34.74 }, + { "time": 0.1667, "angle": 97.01 }, + { "time": 0.3, "angle": 97.41 }, + { "time": 0.4, "angle": 99.27 }, + { "time": 0.4667, "angle": 116.1 } + ] + } + }, + "ik": { + "spineboy-front-arm-ik": [ + { "mix": 0, "curve": "stepped" }, + { "time": 0.4667, "mix": 0 }, + { "time": 0.6667, "mix": 0.996 } + ] + } + }, + "jump": { + "slots": { + "mouth-smile": { + "attachment": [ + { "time": 0.1333, "name": "mouth-grind" }, + { "time": 0.9, "name": "mouth-smile" } + ] + } + }, + "bones": { + "front-foot-target": { + "rotate": [ + { "time": 0.3 }, + { "time": 0.4, "angle": -41.64 }, + { "time": 0.4667, "angle": -69.67 }, + { "time": 0.5333, "angle": -12.81 }, + { "time": 0.6667, "angle": 5.74 }, + { "time": 0.9667 } + ], + "translate": [ + { "y": 36.5, "curve": "stepped" }, + { "time": 0.4, "y": 36.5 }, + { "time": 0.4333, "x": -51.5, "y": 55.55 }, + { "time": 0.4667, "x": -134.04, "y": 111.1 }, + { "time": 0.5, "x": -128.33, "y": 165.93 }, + { "time": 0.5333, "x": -12.99, "y": 277.66 }, + { "time": 0.6667, "x": 243.74, "y": 685.02, "curve": 0.55, "c3": 0.928, "c4": 0.67 }, + { "time": 0.9667, "x": 95.94, "y": 36.5 } + ] + }, + "hip": { + "rotate": [ + { "angle": -4.48 }, + { "time": 0.1333, "angle": -23.03 }, + { "time": 0.4, "angle": 19.24, "curve": 0.228, "c2": 0.46, "c3": 0.75 }, + { "time": 0.6667, "angle": 31.43 }, + { "time": 0.9667, "angle": -10.76 }, + { "time": 1.0667, "angle": -18.59 }, + { "time": 1.2333, "angle": 3.45 }, + { "time": 1.3667, "angle": -4.48 } + ], + "translate": [ + { "x": -100.65, "y": 49.77 }, + { "time": 0.1333, "x": 9.38, "y": -109.07, "curve": 0.246, "c3": 0.609, "c4": 0.42 }, + { + "time": 0.2667, + "x": 150.37, + "y": -76.51, + "curve": 0.401, + "c2": 0.34, + "c3": 0.858, + "c4": 0.88 + }, + { "time": 0.4, "x": 361.01, "y": 36.69 }, + { "time": 0.6667, "x": 5.37, "y": 486.67, "curve": 0.665, "c3": 0.883, "c4": 0.6 }, + { "time": 0.9667, "x": -82.29, "y": 108.4 }, + { "time": 1.0667, "x": 84.63, "y": -79.01 }, + { "time": 1.1333, "x": 181, "y": -57.13 }, + { "time": 1.2333, "x": 238.12, "y": 50.64, "curve": 0.25, "c3": 0.75 }, + { "time": 1.3667, "x": 213.2, "y": 49.77 } + ] + }, + "back-foot-target": { + "rotate": [ + { "time": 0.3 }, + { "time": 0.4, "angle": -41.64 }, + { "time": 0.4667, "angle": -69.67 }, + { "time": 0.5333, "angle": -57.97 }, + { "time": 1, "angle": -9.2 }, + { "time": 1.0333, "angle": -7.79 } + ], + "translate": [ + { "time": 0.4 }, + { "time": 0.4333, "x": -87.33, "y": 23.79 }, + { "time": 0.4667, "x": -172.24, "y": 47.59 }, + { "time": 0.5, "x": -205.57, "y": 86.83 }, + { "time": 0.5333, "x": -176.81, "y": 207.15 }, + { + "time": 0.6667, + "x": 61.3, + "y": 639.9, + "curve": 0.651, + "c2": 0.41, + "c3": 0.756, + "c4": 0.91 + }, + { "time": 1.0333, "x": 235.63 } + ] + }, + "front-leg-target": { + "translate": [ + { "time": 0.4 }, + { "time": 0.4667, "x": -11.12, "y": 1.13 }, + { "time": 0.5, "x": 35.48, "y": 8.27 }, + { "time": 0.5333, "x": 6.65, "y": -19.6 }, + { "time": 0.6667, "x": -46.09, "y": -54.23 }, + { "time": 1, "x": -0.4, "y": 24.3 }, + { "time": 1.0667 } + ] + }, + "back-leg-target": { + "translate": [ + { "time": 0.4 }, + { "time": 0.4667, "x": 22.17, "y": 54.94 }, + { "time": 0.5, "x": 38.22, "y": 65.55 }, + { "time": 0.5333, "x": 20.12, "y": -2.63 }, + { "time": 0.6667, "x": -3.59, "y": -12.74 }, + { "time": 1, "x": -43, "y": -42.05 }, + { "time": 1.0667, "x": -29.03, "y": -3.97 } + ] + }, + "tail1": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -11.02 }, + { "time": 0.4, "angle": 0.53 }, + { "time": 0.5333, "angle": 8.64 }, + { "time": 1, "angle": -9.74 }, + { "time": 1.0667, "angle": -4.46, "curve": 0.243, "c3": 0.649 }, + { "time": 1.3667 } + ] + }, + "tail3": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -9.81 }, + { "time": 0.2333, "angle": -22.06 }, + { "time": 0.3, "angle": -26.63 }, + { "time": 0.4, "angle": -17.42 }, + { "time": 0.5333, "angle": -6.59 }, + { "time": 0.6667, "angle": 1.28 }, + { "time": 0.8667, "angle": -7.23 }, + { "time": 1, "angle": -12.78 }, + { "time": 1.0667, "angle": -12.03 }, + { "time": 1.1, "angle": -11.94 }, + { "time": 1.1667, "angle": -4.94 }, + { "time": 1.3667 } + ] + }, + "torso2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 0.52 }, + { "time": 0.4, "angle": -1.91 }, + { "time": 0.6667, "angle": 3 }, + { "time": 1, "angle": -3.26 }, + { "time": 1.0667, "angle": 4.82 }, + { "time": 1.3667 } + ] + }, + "front-arm1": { + "rotate": [ + {}, + { "time": 0.2667, "angle": -308.79 }, + { "time": 0.5, "angle": -398.7 }, + { "time": 0.7667, "angle": -297.81 }, + { "time": 1, "angle": 62.19 }, + { "time": 1.0667, "angle": -325.37 }, + { "time": 1.1333, "angle": -374.43 }, + { "time": 1.3667 } + ] + }, + "neck": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -5.01 }, + { "time": 0.4, "angle": -7.26 }, + { "time": 0.6667, "angle": 10.19 }, + { "time": 1, "angle": 24.02 }, + { "time": 1.0667, "angle": 4.83 }, + { "time": 1.1667, "angle": -1.79 }, + { "time": 1.3667 } + ], + "translate": [ + {}, + { "time": 0.1333, "x": -23.92, "y": -8.77, "curve": 0.146, "c2": 0.61, "c3": 0.75 }, + { "time": 0.4, "x": 29.55, "y": -17.63 }, + { "time": 0.6667, "x": 8.9, "y": -2.9 }, + { "time": 1 }, + { "time": 1.0667, "x": 52.78, "y": -42.59 }, + { "time": 1.1667, "x": 27.85, "y": -19.16 } + ] + }, + "back-arm1": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 51.21 }, + { "time": 0.5333, "angle": -38.7 }, + { "time": 0.8667, "angle": 62.19, "curve": "stepped" }, + { "time": 1.0333, "angle": 62.19 }, + { "time": 1.1, "angle": 34.63 }, + { "time": 1.1667, "angle": -14.43 }, + { "time": 1.3667 } + ] + }, + "spineboy-hip": { + "translate": [ + {}, + { "time": 0.1333, "x": 40.49, "y": -30.56 }, + { "time": 0.3333, "x": 53.35, "y": -66.67 }, + { "time": 0.4, "x": 38.42, "y": -79.98 }, + { "time": 0.5667, "x": 48.41, "y": -88.19 }, + { "time": 0.6667, "x": 46.33, "y": -75.54 }, + { "time": 1, "x": 41.71, "y": -19.46 }, + { "time": 1.1667 } + ] + }, + "tail5": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 7.22 }, + { "time": 0.2333, "angle": -10.93 }, + { "time": 0.3, "angle": -14.58 }, + { "time": 0.4, "angle": -5.79 }, + { "time": 0.5333, "angle": 5.75 }, + { "time": 0.5667, "angle": 8.65 }, + { "time": 0.6333, "angle": 17.01 }, + { "time": 0.6667, "angle": 11.44 }, + { "time": 0.8667, "angle": 8.39 }, + { "time": 1, "angle": 3.54 }, + { "time": 1.0667, "angle": -20.69 }, + { "time": 1.1, "angle": -22.16 }, + { "time": 1.1667, "angle": -18.9 }, + { "time": 1.2667, "angle": -10.15 }, + { "time": 1.3667 } + ] + }, + "front-arm2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 23.11 }, + { "time": 0.5, "angle": -75.93 }, + { "time": 0.7667, "angle": -1.41 }, + { "time": 1.0667, "angle": 26.87 }, + { "time": 1.1333, "angle": -56.15 }, + { "time": 1.3667 } + ] + }, + "gun": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 15.28 }, + { "time": 0.4, "angle": -53.41 }, + { "time": 0.7667, "angle": -63.35 }, + { "time": 1.0667, "angle": -29.92 }, + { "time": 1.2, "angle": 7.24 }, + { "time": 1.3, "angle": -3.7 }, + { "time": 1.3667 } + ] + }, + "head": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 22.2, "curve": 0.25, "c3": 0.75 }, + { "time": 0.2333, "angle": -11.5, "curve": 0.483, "c3": 0.686 }, + { "time": 0.4333, "angle": 10.27 }, + { "time": 0.6667, "angle": -40.57, "curve": 0.145, "c2": 0.48, "c3": 0.75 }, + { "time": 1, "angle": -23.3 }, + { "time": 1.0667, "angle": 21.8 }, + { "time": 1.1667, "angle": 15.37 }, + { "time": 1.3667 } + ], + "translate": [ + { "time": 0.2333 }, + { "time": 0.4333, "x": 23.4, "y": -54.02 }, + { "time": 0.6667, "x": 26.32, "y": -20.79 }, + { "time": 1, "x": 19.04, "y": 1.7 } + ] + }, + "back-arm2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 23.11 }, + { "time": 0.5, "angle": -75.93 }, + { "time": 0.7667, "angle": -1.41 }, + { "time": 1.0667, "angle": 26.87 }, + { "time": 1.1333, "angle": -56.15 }, + { "time": 1.3667 } + ] + }, + "spineboy-torso": { + "rotate": [ + { "angle": -4.78 }, + { "time": 0.1333, "angle": -36.59 }, + { "time": 0.2667, "angle": -24.94 }, + { "time": 0.3333, "angle": -20.34 }, + { "time": 0.6667, "angle": -11.2 }, + { "time": 1, "angle": 10.49 }, + { "time": 1.1333, "angle": -30.21, "curve": 0.25, "c3": 0.75 }, + { "time": 1.3, "angle": -17.91 }, + { "time": 1.3667, "angle": -31.12 } + ] + }, + "tail7": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 14.46 }, + { "time": 0.2333, "angle": 20.19 }, + { "time": 0.3, "angle": -12.08 }, + { "time": 0.4, "angle": -13.06 }, + { "time": 0.5333, "angle": 7.14 }, + { "time": 0.5667, "angle": 23.54 }, + { "time": 0.6667, "angle": 9.86 }, + { "time": 0.8667, "angle": 10.31 }, + { "time": 1, "angle": 6.72 }, + { "time": 1.0667, "angle": -11.17 }, + { "time": 1.1, "angle": -16.51 }, + { "time": 1.1667, "angle": -11.98 }, + { "time": 1.2667, "angle": -8.74 }, + { "time": 1.3667 } + ] + }, + "front-foot2": { + "rotate": [ + { "time": 0.4 }, + { "time": 0.4333, "angle": -28.28 }, + { "time": 0.4667, "angle": -40.52 }, + { "time": 0.5333, "angle": -67.11 }, + { "time": 0.6667, "angle": -16.7 }, + { "time": 0.9667, "angle": 24.85 }, + { "time": 1.0667 } + ] + }, + "front-hand": { + "rotate": [ + {}, + { "time": 0.6667, "angle": -27.75 }, + { "time": 1.0667, "angle": -27.1 }, + { "time": 1.3667 } + ] + }, + "jaw": { + "rotate": [ + { "angle": 0.83 }, + { "time": 0.1333, "angle": 3.45 }, + { "time": 0.3333, "angle": -3.98 }, + { "time": 0.4667, "angle": -10.78, "curve": 0.609, "c3": 0.75 }, + { "time": 0.9, "angle": 2.06 }, + { "time": 0.9333, "angle": -3.14 }, + { "time": 1.2333, "angle": 0.83 } + ], + "translate": [ + { "x": -10.21, "y": 13.96 } + ] + }, + "back-foot2": { + "rotate": [ + { "time": 0.4 }, + { "time": 0.4333, "angle": -18.7 }, + { "time": 0.4667, "angle": -28.34 }, + { "time": 0.5333, "angle": -126.75 }, + { "time": 0.6667, "angle": -63.79 }, + { "time": 0.9333, "angle": 11.7 }, + { "time": 1, "angle": 24.85 }, + { "time": 1.0667 } + ] + }, + "back-hand": { + "rotate": [ + {}, + { "time": 0.6667, "angle": -27.75 }, + { "time": 1.0667, "angle": -27.1 }, + { "time": 1.3667 } + ] + }, + "tail9": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 10.15 }, + { "time": 0.2333, "angle": 21.25 }, + { "time": 0.3, "angle": -7.52 }, + { "time": 0.4, "angle": -13.06 }, + { "time": 0.5333, "angle": 10.6 }, + { "time": 0.5667, "angle": 23.27 }, + { "time": 0.6667, "angle": 9.49 }, + { "time": 0.8667, "angle": 23.25 }, + { "time": 1, "angle": 16.01 }, + { "time": 1.0667, "angle": -11.17 }, + { "time": 1.1, "angle": -17.02 }, + { "time": 1.1667, "angle": -22.43 }, + { "time": 1.2667, "angle": -13.57 }, + { "time": 1.3667 } + ] + }, + "front-foot3": { + "rotate": [ + { "time": 0.4 }, + { "time": 0.4333, "angle": 8.47 }, + { "time": 0.4667, "angle": 3.02 }, + { "time": 0.5333, "angle": -19.17 }, + { "time": 0.6667, "angle": -15.11 }, + { "time": 0.9667, "angle": 10.78 }, + { "time": 1.0667 } + ] + }, + "head2": { + "rotate": [ + { "angle": 18.08 }, + { "time": 0.1333, "angle": 44.55 }, + { "time": 0.3, "angle": 23.94 }, + { "time": 0.4, "angle": 16.51 }, + { "time": 0.6333, "angle": 11.09 }, + { "time": 0.9667, "angle": 7.01 }, + { "time": 1.0667, "angle": 26.78 }, + { "time": 1.1333, "angle": 31.89 }, + { "time": 1.2333, "angle": 16.95 }, + { "time": 1.3, "angle": 30.99 }, + { "time": 1.3667, "angle": 31.09 } + ] + }, + "neck2": { + "rotate": [ + { "angle": -0.77 }, + { "time": 0.1333, "angle": 15.96 }, + { "time": 0.3, "angle": 5.09 }, + { "time": 0.4, "angle": -2.34 }, + { "time": 0.6333, "angle": -7.76 }, + { "time": 0.9667, "angle": -11.84 }, + { "time": 1.0667, "angle": 7.94 }, + { "time": 1.1333, "angle": 13.05 }, + { "time": 1.2333, "angle": -1.91 }, + { "time": 1.3667, "angle": 12.24 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + { "x": -0.43, "y": -9.01 }, + { "time": 0.1333, "x": -27.62, "y": 9.05 }, + { "time": 0.2667, "x": 10.24, "y": -25.26 }, + { "time": 0.4, "x": 16.65, "y": -40.28 }, + { "time": 0.5, "x": 12.66, "y": -34.61 }, + { "time": 0.6667, "x": 2.73, "y": -3.04 }, + { "time": 0.9667, "x": -6.56, "y": 0.7 }, + { "time": 1.0667, "x": 12.25, "y": -29.51 } + ] + }, + "front-hand2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -22.27 }, + { "time": 0.2667, "angle": -16.91 }, + { "time": 0.4333, "angle": -2.22 }, + { "time": 0.6667, "angle": -6.95 } + ] + }, + "stirrup": { + "rotate": [ + {}, + { "time": 0.3, "angle": -13.39, "curve": "stepped" }, + { "time": 0.9667, "angle": -13.39 }, + { "time": 1.2333 } + ] + }, + "spineboy-front-foot-target": { + "translate": [ + { "time": 0.2667 }, + { "time": 0.4333, "x": 19.72, "y": -2.18 }, + { "time": 0.5333, "x": 19.39, "y": -3.07 }, + { "time": 0.6667, "x": -3.87, "y": 6.01 }, + { "time": 1.0667, "x": -10.92, "y": 4.87 }, + { "time": 1.3667 } + ] + }, + "tail2": { + "rotate": [ + {}, + { "time": 0.2333, "angle": -6.06 }, + { "time": 0.3, "angle": -7.05 }, + { "time": 0.4, "angle": 4.7 }, + { "time": 0.5333, "angle": -1.99 }, + { "time": 1, "angle": -0.83 }, + { "time": 1.0667, "angle": -3.56 }, + { "time": 1.1, "angle": -7.07 }, + { "time": 1.1667, "angle": -6.46 } + ] + }, + "tail4": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 5.9 }, + { "time": 0.2333, "angle": -2.65 }, + { "time": 0.3, "angle": -3.31 }, + { "time": 0.4, "angle": 0.99 }, + { "time": 0.5333, "angle": 7.03 }, + { "time": 1, "angle": 5.36 }, + { "time": 1.0667, "angle": -0.43 }, + { "time": 1.1, "angle": -3.37 }, + { "time": 1.1667, "angle": -2.18 }, + { "time": 1.2667, "angle": 3.65 } + ] + }, + "tail6": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 20.13 }, + { "time": 0.2333, "angle": -3.52 }, + { "time": 0.3, "angle": -4.18 }, + { "time": 0.4, "angle": -11.91 }, + { "time": 0.5333, "angle": 4.01 }, + { "time": 0.5667, "angle": 8.34 }, + { "time": 0.8667, "angle": 5.66 }, + { "time": 1, "angle": 9.81 }, + { "time": 1.0667, "angle": -15.56 }, + { "time": 1.1, "angle": -18.28 }, + { "time": 1.1667, "angle": -10.86 }, + { "time": 1.2667, "angle": 3.69 } + ] + }, + "tail8": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 14.81 }, + { "time": 0.2333, "angle": 17.13 }, + { "time": 0.3, "angle": -10.98 }, + { "time": 0.4, "angle": -14.47 }, + { "time": 0.5333, "angle": 4.33 }, + { "time": 0.5667, "angle": 13.57 }, + { "time": 0.8667, "angle": 9.11 }, + { "time": 1, "angle": 9.41 }, + { "time": 1.0667, "angle": -15.96 }, + { "time": 1.1, "angle": -20.19 }, + { "time": 1.1667, "angle": -23.17 }, + { "time": 1.2667, "angle": -11.89 } + ] + }, + "tail10": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 0.52 }, + { "time": 0.2333, "angle": 10.93 }, + { "time": 0.3, "angle": -7.46 }, + { "time": 0.4, "angle": -12.6 }, + { "time": 0.5333, "angle": 11.74 }, + { "time": 1, "angle": 3.35 }, + { "time": 1.0667, "angle": -22.02 }, + { "time": 1.1, "angle": -26.24 }, + { "time": 1.1667, "angle": -29.22 }, + { "time": 1.2667, "angle": -17.95 } + ] + }, + "saddle-strap-back": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -3.99 }, + { "time": 0.2667, "angle": -2.13 }, + { "time": 0.5333, "angle": 1.36 }, + { "time": 0.9333, "angle": -1.8 }, + { "time": 1.3333, "angle": -0.3 }, + { "time": 1.4333 } + ] + }, + "back-leg1": { + "translate": [ + {}, + { "time": 0.4667, "x": -12.67, "y": -22.45 }, + { "time": 0.9 } + ] + }, + "bone3": { + "rotate": [ + {}, + { "time": 0.1, "angle": 3.16 }, + { "time": 0.1667, "angle": -7.3 }, + { "time": 0.2667, "angle": 14.19 }, + { "time": 0.3333, "angle": 5.37 }, + { "time": 0.5, "angle": -1.88 }, + { "time": 0.7667, "angle": 2.1 }, + { "time": 0.9667, "angle": 8.65 }, + { "time": 1.0333, "angle": -10.01 }, + { "time": 1.1, "angle": -14.96 }, + { "time": 1.1667, "angle": 2.21 }, + { "time": 1.2333, "angle": 6.21 }, + { "time": 1.3, "angle": 1.14 }, + { "time": 1.4, "angle": -2.77 } + ] + }, + "bone4": { + "rotate": [ + {}, + { "time": 0.1, "angle": 3.16 }, + { "time": 0.1667, "angle": -7.3 }, + { "time": 0.2667, "angle": 14.19 }, + { "time": 0.3333, "angle": 5.37 }, + { "time": 0.5, "angle": -1.88 }, + { "time": 0.7667, "angle": 2.1 }, + { "time": 0.9667, "angle": 8.65 }, + { "time": 1.0333, "angle": -10.01 }, + { "time": 1.1, "angle": -14.96 }, + { "time": 1.1667, "angle": 2.21 }, + { "time": 1.2333, "angle": 6.21 }, + { "time": 1.3, "angle": 1.14 }, + { "time": 1.4, "angle": -2.77 } + ] + }, + "bone5": { + "rotate": [ + {}, + { "time": 0.1, "angle": 3.16 }, + { "time": 0.1667, "angle": -7.3 }, + { "time": 0.2667, "angle": 14.19 }, + { "time": 0.3333, "angle": 5.37 }, + { "time": 0.5, "angle": -1.88 }, + { "time": 0.7667, "angle": 2.1 }, + { "time": 0.9667, "angle": 8.65 }, + { "time": 1.0333, "angle": -10.01 }, + { "time": 1.1, "angle": -14.96 }, + { "time": 1.1667, "angle": 2.21 }, + { "time": 1.2333, "angle": 6.21 }, + { "time": 1.3, "angle": 1.14 }, + { "time": 1.4, "angle": -2.77 } + ] + }, + "bone": { + "rotate": [ + {}, + { "time": 0.1, "angle": 3.16 }, + { "time": 0.1667, "angle": -7.3 }, + { "time": 0.2667, "angle": 14.19 }, + { "time": 0.3333, "angle": 5.37 }, + { "time": 0.5, "angle": -1.88 }, + { "time": 0.7667, "angle": 2.1 }, + { "time": 0.9667, "angle": 8.65 }, + { "time": 1.0333, "angle": -10.01 }, + { "time": 1.1, "angle": -14.96 }, + { "time": 1.1667, "angle": 2.21 }, + { "time": 1.2333, "angle": 6.21 }, + { "time": 1.3, "angle": 1.14 }, + { "time": 1.4, "angle": -2.77 } + ] + }, + "bone2": { + "rotate": [ + {}, + { "time": 0.1, "angle": 3.16 }, + { "time": 0.1667, "angle": -7.3 }, + { "time": 0.2667, "angle": 14.19 }, + { "time": 0.3333, "angle": 5.37 }, + { "time": 0.5, "angle": -1.88 }, + { "time": 0.7667, "angle": 2.1 }, + { "time": 0.9667, "angle": 8.65 }, + { "time": 1.0333, "angle": -10.01 }, + { "time": 1.1, "angle": -14.96 }, + { "time": 1.1667, "angle": 2.21 }, + { "time": 1.2333, "angle": 6.21 }, + { "time": 1.3, "angle": 1.14 }, + { "time": 1.4, "angle": -2.77 } + ] + } + } + }, + "roar": { + "slots": { + "mouth-smile": { + "attachment": [ + { "time": 0.6, "name": "mouth-grind" }, + { "time": 1.4333, "name": "mouth-smile" } + ] + } + }, + "bones": { + "hip": { + "rotate": [ + { "curve": 0.25, "c3": 0.75 }, + { "time": 0.2, "angle": -27.34, "curve": 0.334, "c2": 0.4, "c3": 0.656, "c4": 0.73 }, + { "time": 0.3, "angle": -22.37, "curve": 0.45, "c2": 0.09, "c3": 0.724, "c4": 0.65 }, + { "time": 0.5333, "angle": -3.36 }, + { "time": 0.6, "angle": -5.46 }, + { "time": 0.6667, "angle": -0.43 }, + { "time": 1.5667, "angle": -12.77, "curve": 0.295, "c3": 0.521, "c4": 0.96 }, + { "time": 1.8 } + ], + "translate": [ + { "curve": 0.817, "c2": 0.01, "c3": 0.75 }, + { + "time": 0.2, + "x": -225.6, + "y": -78.54, + "curve": 0.334, + "c2": 0.4, + "c3": 0.657, + "c4": 0.73 + }, + { "time": 0.3, "x": -339.74, "y": -70.39, "curve": 0.475, "c3": 0.793, "c4": 0.67 }, + { "time": 0.5333, "x": -121.06, "y": -146.24 }, + { "time": 0.6, "x": -9.1, "y": -87.2 }, + { "time": 0.6667, "x": 44.98, "y": -13.34 }, + { "time": 0.7333, "x": 41.57, "y": -6.52 }, + { "time": 0.8, "x": 44.98, "y": -13.34 }, + { "time": 0.8667, "x": 41.57, "y": -6.52, "curve": 0.25, "c3": 0.75 }, + { + "time": 1.2333, + "x": 48.94, + "y": -29.36, + "curve": 0.574, + "c2": 0.03, + "c3": 0.619, + "c4": 0.76 + }, + { + "time": 1.5667, + "x": -127.64, + "y": 26.21, + "curve": 0.36, + "c2": 0.01, + "c3": 0.701, + "c4": 0.55 + }, + { + "time": 1.7333, + "x": -45.45, + "y": 70.65, + "curve": 0.355, + "c2": 0.39, + "c3": 0.69, + "c4": 0.76 + }, + { + "time": 1.8, + "x": -25.54, + "y": 44.36, + "curve": 0.056, + "c2": 0.99, + "c3": 0.683, + "c4": 0.64 + }, + { "time": 2 } + ] + }, + "torso2": { + "rotate": [ + {}, + { "time": 0.2, "angle": 0.52 }, + { "time": 0.6, "angle": -22.13 }, + { "time": 1.5667, "angle": 0.52 }, + { "time": 1.8 } + ] + }, + "spineboy-torso": { + "rotate": [ + {}, + { "time": 0.2, "angle": -12.47 }, + { "time": 0.3, "angle": -37.77 }, + { "time": 0.4, "angle": -51.05 }, + { "time": 0.5, "angle": -59.08 }, + { "time": 0.6, "angle": -73.34 }, + { "time": 0.6667, "angle": -74.18 }, + { "time": 0.8, "angle": -68.39 }, + { "time": 0.8667, "angle": -67.25 }, + { "time": 1.1, "angle": -62.14 }, + { "time": 1.2, "angle": -64.59 }, + { "time": 1.3667, "angle": -50.19 }, + { "time": 1.5667, "angle": -12.47 }, + { "time": 1.8 } + ] + }, + "head2": { + "rotate": [ + { "angle": 12.98 }, + { "time": 0.2, "angle": 29.86 }, + { "time": 0.3, "angle": 38.44 }, + { "time": 0.6, "angle": 42.77 }, + { "time": 0.7, "angle": 46.69 }, + { "time": 0.8667, "angle": 45.89 }, + { "time": 1.2, "angle": 45.61 }, + { "time": 1.2667, "angle": 42.06 }, + { "time": 1.3667, "angle": 48.76 }, + { "time": 1.5667, "angle": 29.86 }, + { "time": 1.8 }, + { "time": 2, "angle": 12.98 } + ] + }, + "neck2": { + "rotate": [ + {}, + { "time": 0.2, "angle": 11.08 }, + { "time": 0.6, "angle": 37.25 }, + { "time": 1.2, "angle": 33.93 }, + { "time": 1.3667, "angle": 27.8 }, + { "time": 1.5667, "angle": 11.08 }, + { "time": 1.8 } + ] + }, + "front-arm1": { + "rotate": [ + {}, + { "time": 0.2, "angle": 25.6, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "angle": -393.29 }, + { "time": 0.6667, "angle": -379.24 }, + { "time": 0.8333, "angle": -388.76 }, + { "time": 1.3667, "angle": -18.16 }, + { "time": 1.8, "angle": -346.22 }, + { "time": 2 } + ] + }, + "front-arm2": { + "rotate": [ + {}, + { "time": 0.2, "angle": 23.11, "curve": 0.331, "c2": 0.42, "c3": 0.647, "c4": 0.74 }, + { "time": 0.4333, "angle": -9.34, "curve": 0.311, "c2": 0.38, "c3": 0.639, "c4": 0.7 }, + { "time": 0.5, "angle": -5.4, "curve": 0.287, "c2": 0.38, "c3": 0.611, "c4": 0.69 }, + { "time": 0.6, "angle": -52.61 }, + { "time": 0.7667, "angle": -65.84 }, + { "time": 1.0333, "angle": -39.95 }, + { "time": 1.3667, "angle": -67.86 }, + { "time": 1.8, "angle": -8.99 }, + { "time": 2 } + ] + }, + "front-hand": { + "rotate": [ + {}, + { "time": 0.2, "angle": -7.24 }, + { "time": 0.5, "angle": -25.8 }, + { "time": 0.6, "angle": 33.41 }, + { "time": 0.7667, "angle": 52.51 }, + { "time": 1.4, "angle": -30.97 }, + { "time": 1.5667, "angle": -7.24 }, + { "time": 1.8 } + ] + }, + "back-arm2": { + "rotate": [ + {}, + { "time": 0.2333, "angle": 23.11, "curve": 0.324, "c2": 0.45, "c3": 0.628, "c4": 0.76 }, + { "time": 0.4333, "angle": -2.44, "curve": 0.3, "c2": 0.38, "c3": 0.628, "c4": 0.7 }, + { "time": 0.5333, "angle": -22.11, "curve": 0.307, "c2": 0.35, "c3": 0.638, "c4": 0.68 }, + { "time": 0.6, "angle": -77.6 }, + { "time": 0.7667, "angle": -66.07 }, + { "time": 1.3667, "angle": -58.31 }, + { "time": 1.8, "angle": -8.99 }, + { "time": 2 } + ] + }, + "back-hand": { + "rotate": [ + {}, + { "time": 0.2, "angle": -7.24 }, + { "time": 0.4333, "angle": -36 }, + { "time": 0.6, "angle": 10.34 }, + { "time": 0.7667, "angle": 55.96 }, + { "time": 1.2333, "angle": 8.39 }, + { "time": 1.8 } + ] + }, + "back-arm1": { + "rotate": [ + {}, + { "time": 0.2333, "angle": 51.21, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "angle": -19.18 }, + { "time": 0.7667, "angle": -25.79 }, + { "time": 1.3667, "angle": -3.03 }, + { "time": 1.8, "angle": 13.78 }, + { "time": 2 } + ] + }, + "neck": { + "rotate": [ + {}, + { "time": 0.2, "angle": -8.26, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "angle": 13.44 }, + { "time": 1.5667, "angle": -8.26, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 1.8 } + ], + "translate": [ + {}, + { + "time": 0.2, + "x": -19.98, + "y": -1.45, + "curve": 0.28, + "c2": 0.54, + "c3": 0.53, + "c4": 0.78 + }, + { "time": 0.6, "x": 35.7, "y": -47.38 }, + { "time": 1.4667, "x": 2.83, "y": -4.9 }, + { "time": 1.5667, "x": 12.18, "y": 3.64 }, + { "time": 1.8, "x": 2.83, "y": -4.9 }, + { "time": 2 } + ] + }, + "head": { + "rotate": [ + {}, + { "time": 0.2, "angle": 9.94, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "angle": 23.25 }, + { "time": 0.7333, "angle": 24.85 }, + { "time": 0.9333, "angle": 25.3 }, + { "time": 1.3667, "angle": 27.9 }, + { "time": 1.5667, "angle": 12, "curve": 0.237, "c2": 0.4, "c3": 0.587, "c4": 0.72 }, + { "time": 1.6667, "angle": 11.92, "curve": 0.293, "c2": 0.42, "c3": 0.69, "c4": 0.67 }, + { "time": 1.9 } + ], + "translate": [ + { "time": 0.2, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "x": 12.3, "y": -89.23 }, + { "time": 0.6667, "x": 18.74, "y": -87.42 }, + { "time": 0.7333, "x": 16.57, "y": -87.92 }, + { "time": 0.8, "x": 18.74, "y": -87.42 }, + { "time": 0.8667, "x": 16.57, "y": -87.92 }, + { "time": 0.9333, "x": 18.74, "y": -87.42 }, + { "time": 1.3667, "x": 27.31, "y": -84.9 }, + { "time": 1.5667 } + ] + }, + "jaw": { + "rotate": [ + { "angle": -1.2 }, + { "time": 0.2, "angle": 1.83 }, + { "time": 0.4333, "angle": -13.72 }, + { "time": 0.6, "angle": 304.71 }, + { "time": 0.7333, "angle": -49.51 }, + { "time": 0.7667, "angle": -47.49 }, + { "time": 0.8, "angle": -45.13 }, + { "time": 0.8333, "angle": -43.73 }, + { "time": 0.8667, "angle": -43.36 }, + { "time": 0.9, "angle": -40.64 }, + { "time": 0.9333, "angle": -42.02, "curve": 0.775, "c2": 0.06, "c3": 0.821, "c4": 0.7 }, + { "time": 1.4, "angle": -17.61 }, + { "time": 1.5667, "angle": -8.79, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 1.8 } + ], + "translate": [ + { "x": -3.44, "y": 2.51 }, + { "time": 0.2, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "x": -19.47, "y": 17.94 }, + { "time": 0.6667, "x": -30.92, "y": 23.07 }, + { "time": 1.5667, "x": -3.44, "y": 2.51 } + ] + }, + "tongue1": { + "rotate": [ + { "time": 0.1667, "angle": 16.25 }, + { "time": 0.2, "angle": 15.93, "curve": 0.33, "c2": 0.42, "c3": 0.644, "c4": 0.74 }, + { "time": 0.3333, "angle": -0.58, "curve": 0.27, "c2": 0.42, "c3": 0.581, "c4": 0.72 }, + { "time": 0.5, "angle": 5.31 }, + { "time": 0.6, "angle": -4.66 }, + { "time": 0.6667, "angle": 5.7 }, + { "time": 0.7, "angle": 13.7 }, + { "time": 0.8333, "angle": 16.75 }, + { "time": 1, "angle": 15.1 }, + { "time": 1.1, "angle": 17.24 }, + { "time": 1.2667, "angle": 2.26 }, + { "time": 1.5667, "angle": 32.1, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 1.8 } + ], + "translate": [ + { "x": -22.37, "y": 13.32 } + ], + "scale": [ + { "time": 0.2 }, + { "time": 0.5667, "x": 1.16 }, + { "time": 0.7, "x": 1.413 }, + { "time": 0.8333, "x": 1.632 }, + { "time": 1.5667 } + ] + }, + "torso1": { + "rotate": [ + { "time": 0.6 }, + { "time": 0.6667, "angle": -6.14 }, + { "time": 0.7333, "angle": -3.57 }, + { "time": 0.8, "angle": -6.14 }, + { "time": 0.8667, "angle": -3.57 }, + { "time": 1, "angle": 3.56 }, + { "time": 1.3667, "angle": -6.11 }, + { "time": 1.5667 } + ] + }, + "horn-back": { + "rotate": [ + { "time": 0.2 }, + { "time": 1, "angle": 7.62 }, + { "time": 1.8 } + ] + }, + "horn-front": { + "rotate": [ + { "time": 0.2 }, + { "time": 1, "angle": 7.62 }, + { "time": 1.8 } + ] + }, + "front-leg-target": { + "translate": [ + {}, + { "time": 0.1333, "x": 94.98, "y": 17.68, "curve": "stepped" }, + { "time": 0.1667, "x": 94.98, "y": 17.68 }, + { + "time": 0.3, + "x": -61.43, + "y": -80.97, + "curve": 0.591, + "c2": 0.02, + "c3": 0.565, + "c4": 0.73 + }, + { "time": 0.6, "x": 54.8, "y": 26.89 }, + { "time": 0.6667, "x": 104.34, "y": 47.28 }, + { + "time": 1.2333, + "x": 126.91, + "y": 52.57, + "curve": 0.452, + "c2": 0.26, + "c3": 0.698, + "c4": 0.49 + }, + { "time": 1.5667, "x": 49.5, "y": 28.71 }, + { "time": 2 } + ] + }, + "back-leg-target": { + "translate": [ + {}, + { + "time": 0.2, + "x": -40.46, + "y": -17.34, + "curve": 0.33, + "c2": 0.42, + "c3": 0.644, + "c4": 0.74 + }, + { + "time": 0.4333, + "x": -39.15, + "y": -5.5, + "curve": 0.27, + "c2": 0.42, + "c3": 0.581, + "c4": 0.72 + }, + { "time": 0.6, "x": 17.09, "y": 42.26 }, + { + "time": 1.2333, + "x": 31.18, + "y": 60.17, + "curve": 0.452, + "c2": 0.26, + "c3": 0.698, + "c4": 0.49 + }, + { "time": 1.5667, "x": -19.04, "y": 19.62 }, + { "time": 2 } + ] + }, + "spineboy-hip": { + "translate": [ + {}, + { "time": 0.2, "x": 35.97, "y": -11.83 }, + { "time": 0.3, "x": 42.12, "y": -39.3 }, + { "time": 0.4333, "x": 48.96, "y": -59.92 }, + { "time": 0.5, "x": 48.85, "y": -52.7 }, + { "time": 0.6, "x": 49.06, "y": -51.25 }, + { "time": 0.6667, "x": 56.03, "y": -56.03 }, + { "time": 0.7333, "x": 43.66, "y": -49.87 }, + { "time": 0.8, "x": 42.93, "y": -49.25 }, + { "time": 0.8667, "x": 34.13, "y": -41.42 }, + { "time": 1, "x": 43.1, "y": -52.61 }, + { "time": 1.2667, "x": 53.82, "y": -63.04 }, + { "time": 1.3667, "x": 60.15, "y": -45.04 }, + { "time": 1.5667, "x": 35.97, "y": -11.83 }, + { "time": 1.8 } + ] + }, + "front-hand2": { + "rotate": [ + {}, + { "time": 0.2, "angle": -21.93 }, + { "time": 0.3, "angle": -23.29 }, + { "time": 0.4, "angle": -29.8 }, + { "time": 0.5, "angle": -36.62 }, + { "time": 0.6, "angle": -40.49 }, + { "time": 0.6667, "angle": -38.28 }, + { "time": 0.7333, "angle": -33.33 }, + { "time": 0.8, "angle": -28.06 }, + { "time": 1.3, "angle": -27.17 }, + { "time": 1.4, "angle": -27.62 }, + { "time": 1.5667 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + { "time": 0.2 }, + { "time": 0.6, "x": 42.84, "y": -71.37 }, + { "time": 0.8, "x": 23.9, "y": -69.35 }, + { "time": 1.3, "x": 21.13, "y": -48.34 }, + { "time": 1.4, "x": 17.74, "y": -52.7 }, + { "time": 1.5667 } + ] + }, + "gun": { + "rotate": [ + {}, + { "time": 0.2, "angle": 15.28 }, + { "time": 0.3333, "angle": -13.87 }, + { "time": 0.4, "angle": -40.91, "curve": 0.761, "c3": 0.95, "c4": 0.87 }, + { "time": 0.6, "angle": -15.61 }, + { "time": 0.6667, "angle": -43.39, "curve": 0.45, "c3": 0.75 }, + { "time": 0.7333, "angle": -25.56 }, + { "time": 1, "angle": -23.42 }, + { "time": 1.1667, "angle": -21.64 }, + { "time": 1.3667, "angle": -27.73 }, + { "time": 1.5667, "angle": -6.38 }, + { "time": 1.7, "angle": -14.44 }, + { "time": 1.8 }, + { "time": 1.9, "angle": -15.75 }, + { "time": 2 } + ], + "translate": [ + { "time": 0.2 }, + { "time": 0.6, "x": -18.37, "y": -9.19 }, + { "time": 1.5667 } + ] + }, + "tail1": { + "rotate": [ + {}, + { "time": 0.2667, "angle": -14.69, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6 }, + { "time": 0.7667, "angle": 2.68 }, + { "time": 0.9333, "angle": 3.2, "curve": 0.377, "c2": 0.02, "c3": 0.713, "c4": 0.59 }, + { "time": 1.1667, "angle": -9.15, "curve": 0.431, "c2": 0.33, "c3": 0.738, "c4": 0.84 }, + { "time": 1.3, "angle": -14.94 }, + { "time": 1.5667, "angle": -11.02, "curve": 0.335, "c2": 0.34, "c3": 0.668, "c4": 0.67 }, + { "time": 1.6667, "angle": -10.95, "curve": 0.335, "c2": 0.35, "c3": 0.667, "c4": 0.69 }, + { "time": 1.8 }, + { "time": 2, "angle": 1.01 } + ] + }, + "tail3": { + "rotate": [ + { "angle": -4.66 }, + { "time": 0.1333, "angle": -1.14 }, + { "time": 0.2667, "angle": -10.12, "curve": 0.145, "c2": 0.39, "c3": 0.515, "c4": 0.72 }, + { "time": 0.4667, "angle": -27.25, "curve": 0.296, "c2": 0.39, "c3": 0.64, "c4": 0.73 }, + { "time": 0.6, "angle": 1.58 }, + { "time": 0.7333, "angle": -9.15 }, + { "time": 0.8333, "angle": -9.17 }, + { "time": 0.9333, "angle": -8.75 }, + { "time": 1.2, "angle": -1.6 }, + { "time": 1.3333, "angle": -14.48 }, + { "time": 1.5, "angle": -9.35 }, + { "time": 1.6667, "angle": 17.55 }, + { "time": 1.8333, "angle": 21.29 }, + { "time": 2, "angle": -4.66 } + ] + }, + "tail5": { + "rotate": [ + { "angle": 5.3 }, + { "time": 0.1333, "angle": 13.48 }, + { "time": 0.2667, "angle": 22.33 }, + { "time": 0.4667, "angle": -17.34, "curve": 0.269, "c2": 0.43, "c3": 0.578, "c4": 0.72 }, + { "time": 0.6, "angle": -7.88 }, + { "time": 0.7333, "angle": -2.96 }, + { "time": 0.8333, "angle": -5.92 }, + { "time": 0.9333, "angle": -5.02 }, + { "time": 1.2, "angle": 6.61 }, + { "time": 1.3333, "angle": 14.51 }, + { "time": 1.5, "angle": -15.86 }, + { "time": 1.6667, "angle": -4.49 }, + { "time": 2, "angle": 5.3 } + ] + }, + "tail7": { + "rotate": [ + { "angle": -10.89 }, + { "time": 0.1333, "angle": 12.24 }, + { "time": 0.2667, "angle": 19.39 }, + { "time": 0.4667, "angle": -11.34, "curve": 0.269, "c2": 0.43, "c3": 0.578, "c4": 0.72 }, + { "time": 0.6, "angle": -10.79 }, + { "time": 0.7333, "angle": -0.59 }, + { "time": 0.8333, "angle": 9.29 }, + { "time": 0.9333, "angle": -4.49 }, + { "time": 1.2, "angle": 7.15 }, + { "time": 1.3333, "angle": 15.05 }, + { "time": 1.5, "angle": -11.36 }, + { "time": 1.6667, "angle": -25.05 }, + { "time": 1.8333, "angle": -9.49 }, + { "time": 2, "angle": -10.89 } + ] + }, + "tail9": { + "rotate": [ + { "angle": -10.89 }, + { "time": 0.1333, "angle": 18.57 }, + { "time": 0.2667, "angle": 23.95 }, + { "time": 0.4667, "angle": -15.74, "curve": 0.269, "c2": 0.43, "c3": 0.578, "c4": 0.72 }, + { "time": 0.6, "angle": -9.8 }, + { "time": 0.7333, "angle": 8.13 }, + { "time": 0.8333, "angle": 11.04 }, + { "time": 0.9333, "angle": -2.74 }, + { "time": 1.2, "angle": 8.89 }, + { "time": 1.3333, "angle": 16.79 }, + { "time": 1.5, "angle": -9.62 }, + { "time": 1.6667, "angle": -23.3 }, + { "time": 1.8333, "angle": -7.74 }, + { "time": 2, "angle": -10.89 } + ] + }, + "tongue2": { + "rotate": [ + {}, + { "time": 0.1667, "angle": 6.48 }, + { "time": 0.2, "angle": 4.21 }, + { "time": 0.2667, "angle": 52.29 }, + { "time": 0.5, "angle": 17.71 }, + { "time": 0.6, "angle": 2.84 }, + { "time": 0.6667, "angle": 10.48 }, + { "time": 0.7, "angle": -9.91 }, + { "time": 0.7333, "angle": -12.97 }, + { "time": 0.7667, "angle": -5.12 }, + { "time": 0.8, "angle": -5.09 }, + { "time": 0.8333, "angle": 1.23 }, + { "time": 1, "angle": -33.21 }, + { "time": 1.2, "angle": 14.14 }, + { "time": 1.3667, "angle": 12.21 }, + { "time": 1.5667, "angle": -13.32 }, + { "time": 1.8 } + ], + "translate": [ + { "time": 0.2 }, + { "time": 0.5, "x": 6.19, "y": 1.67, "curve": "stepped" }, + { "time": 1.0667, "x": 6.19, "y": 1.67 }, + { "time": 1.3 } + ] + }, + "tongue3": { + "rotate": [ + {}, + { "time": 0.1667, "angle": 6.48 }, + { "time": 0.2, "angle": 4.21 }, + { "time": 0.2667, "angle": 52.29 }, + { "time": 0.5, "angle": 17.71 }, + { "time": 0.6, "angle": 13.82 }, + { "time": 0.6667, "angle": -2.82 }, + { "time": 0.7, "angle": -6.98 }, + { "time": 0.7333, "angle": -20.11 }, + { "time": 0.7667, "angle": -0.12 }, + { "time": 0.8, "angle": -7.1 }, + { "time": 0.8333, "angle": 1.23 }, + { "time": 1, "angle": -33.21 }, + { "time": 1.2, "angle": 14.14 }, + { "time": 1.3667, "angle": 19.46 }, + { "time": 1.5667, "angle": -36.24 }, + { "time": 1.8 } + ], + "translate": [ + { "time": 0.2 }, + { "time": 0.5, "x": 11.48, "y": 3.7 }, + { "time": 1.2333 } + ] + }, + "saddle-strap-back": { + "rotate": [ + { "angle": -2.53 }, + { "time": 0.2, "angle": -6.38 }, + { "time": 0.2667, "angle": -12.9 }, + { "time": 0.5, "angle": -4.15 }, + { "time": 0.6, "angle": -20.2 }, + { "time": 0.7, "angle": -5.55 }, + { "time": 0.8, "angle": -3.4 }, + { "time": 1.3333, "angle": -6.7 }, + { "time": 1.5667, "angle": -10.34 }, + { "time": 1.6333, "angle": -9.23 }, + { "time": 1.8 }, + { "time": 2, "angle": -2.53 } + ], + "scale": [ + { "time": 0.6 }, + { "time": 0.6667, "x": 1.083 }, + { "time": 0.8, "x": 1.097 }, + { "time": 1.5667 } + ] + }, + "front-foot-target": { + "rotate": [ + {}, + { "time": 0.1, "angle": -31.3 }, + { "time": 0.1667, "angle": -17.24 }, + { "time": 1.6, "angle": -2.25 }, + { "time": 1.6667, "angle": -21.66 }, + { "time": 1.8 } + ], + "translate": [ + {}, + { "time": 0.0333, "x": -101.15, "y": 98.46 }, + { "time": 0.1, "x": -308.64, "y": 72.48 }, + { "time": 0.1667, "x": -392.1, "y": 9.43, "curve": "stepped" }, + { "time": 1.6, "x": -392.1, "y": 9.43 }, + { "time": 1.6667, "x": -308.05, "y": 111.02 }, + { "time": 1.8 } + ] + }, + "front-foot2": { + "rotate": [ + {}, + { "time": 0.0333, "angle": -34.39 }, + { "time": 0.1, "angle": -11.91 }, + { "time": 0.2, "angle": -11.36 }, + { "time": 1.6, "angle": 14.29 }, + { "time": 1.6667, "angle": -41.83 }, + { "time": 1.7333, "angle": -1.1 }, + { "time": 1.8 } + ], + "scale": [ + { "time": 0.5667 }, + { "time": 0.6667, "x": 1.051 } + ] + }, + "front-foot3": { + "rotate": [ + {}, + { "time": 0.0333, "angle": 8 }, + { "time": 0.1, "angle": -1.59 }, + { "time": 0.2, "angle": 16.32 }, + { "time": 1.6, "angle": -8.75 }, + { "time": 1.6667, "angle": -12.37 }, + { "time": 1.8 } + ], + "translate": [ + { "x": -29.67, "curve": "stepped" }, + { "time": 1.6, "x": -29.67 }, + { "time": 1.6667, "x": -34.03, "y": 8.95 }, + { "time": 2, "x": -29.67 } + ], + "scale": [ + { "time": 0.5667 }, + { "time": 0.6667, "x": 1.058 } + ] + }, + "back-hand2": { + "rotate": [ + { "angle": -21.46 }, + { "time": 0.2, "angle": -21.93 }, + { "time": 0.3, "angle": -8.39 }, + { "time": 0.4, "angle": -5.38 }, + { "time": 0.5, "angle": -30.38 }, + { "time": 0.6, "angle": -55.56 }, + { "time": 0.6667, "angle": -18.74 }, + { "time": 0.7333, "angle": -20.26 }, + { "time": 0.8, "angle": -21.46 } + ] + }, + "saddle": { + "rotate": [ + { "angle": -3.18 }, + { "time": 0.6 }, + { "time": 0.8, "angle": -3.18 } + ], + "translate": [ + { "x": 12.68, "y": -2.67 }, + { "time": 0.6, "x": 9.26, "y": -0.42 }, + { "time": 0.7, "x": 12.68, "y": -2.67 } + ] + }, + "saddle-strap-front": { + "rotate": [ + { "angle": -0.37 }, + { "time": 0.2667, "angle": 0.04 }, + { "time": 0.4667, "angle": -4 }, + { "time": 0.6, "angle": -7 }, + { "time": 0.7, "angle": -7.25 }, + { "time": 0.8, "angle": -3.69 }, + { "time": 1.4667, "angle": -0.58 }, + { "time": 1.7667, "angle": 0.55 }, + { "time": 2, "angle": -0.37 } + ] + }, + "spineboy-back-arm-target": { + "translate": [ + {}, + { "time": 0.6, "x": 56.17, "y": -58.56 }, + { "time": 0.8, "x": 34.47, "y": -59.19 }, + { "time": 2 } + ] + }, + "tail2": { + "rotate": [ + { "angle": -4.33 }, + { "time": 0.1333, "angle": -15.43 }, + { "time": 0.2667, "angle": -9.41 }, + { "time": 0.7333, "angle": 0.95 }, + { "time": 0.9333, "angle": -1.28 }, + { "time": 1.3333, "angle": -16.53 }, + { "time": 1.5, "angle": -5.17 }, + { "time": 1.6667, "angle": 7.32 }, + { "time": 1.8333, "angle": 11.05 }, + { "time": 2, "angle": -4.33 } + ] + }, + "tail4": { + "rotate": [ + { "angle": 13.37 }, + { "time": 0.1333, "angle": 7.68 }, + { "time": 0.2667, "angle": 6.84 }, + { "time": 0.4667, "angle": -2.28 }, + { "time": 0.7333, "angle": -2.62 }, + { "time": 0.8333, "angle": -6.07 }, + { "time": 0.9333, "angle": 2.21 }, + { "time": 1.2, "angle": 9.58 }, + { "time": 1.3333, "angle": -0.15 }, + { "time": 1.5, "angle": -20.79 }, + { "time": 1.6667, "angle": -9.43 }, + { "time": 1.8333, "angle": -5.7 }, + { "time": 2, "angle": 13.37 } + ] + }, + "tail6": { + "rotate": [ + { "angle": 5.3 }, + { "time": 0.1333, "angle": 7.74 }, + { "time": 0.2667, "angle": 10.2 }, + { "time": 0.4667, "angle": -12.04 }, + { "time": 0.6, "angle": -1.26 }, + { "time": 0.9333, "angle": -4.96 }, + { "time": 1.2, "angle": 6.67 }, + { "time": 1.3333, "angle": 14.57 }, + { "time": 1.5, "angle": -11.84 }, + { "time": 1.6667, "angle": -25.53 }, + { "time": 1.8333, "angle": -9.25 }, + { "time": 2, "angle": 5.3 } + ] + }, + "tail8": { + "rotate": [ + { "angle": -10.89 }, + { "time": 0.1333, "angle": 6.12 }, + { "time": 0.2667, "angle": 15.74 }, + { "time": 0.4667, "angle": -21.25 }, + { "time": 0.6, "angle": -8.03 }, + { "time": 0.7333, "angle": 4.9 }, + { "time": 0.8333, "angle": 1.83 }, + { "time": 0.9333, "angle": -11.95 }, + { "time": 1.2, "angle": -0.32 }, + { "time": 1.3333, "angle": 7.59 }, + { "time": 1.5, "angle": -18.82 }, + { "time": 1.6667, "angle": -32.51 }, + { "time": 1.8333, "angle": -16.95 }, + { "time": 2, "angle": -10.89 } + ] + }, + "tail10": { + "rotate": [ + { "angle": -10.89 }, + { "time": 0.1333, "angle": 4.18 }, + { "time": 0.2667, "angle": 4.66 }, + { "time": 0.4667, "angle": -20.32 }, + { "time": 0.7333, "angle": 1.73 }, + { "time": 0.8333, "angle": -1.06 }, + { "time": 0.9333, "angle": -14.83 }, + { "time": 1.2, "angle": -3.2 }, + { "time": 1.3333, "angle": 4.7 }, + { "time": 1.5, "angle": -21.71 }, + { "time": 1.6667, "angle": -35.4 }, + { "time": 1.8333, "angle": -19.84 }, + { "time": 2, "angle": -10.89 } + ] + }, + "jaw-inside": { + "rotate": [ + {}, + { "time": 0.7333, "angle": 13.77 } + ], + "translate": [ + {}, + { "time": 0.5667, "x": -4.3, "y": 4.48 }, + { "time": 0.7333, "x": -23.59, "y": -9.32 } + ], + "scale": [ + { "time": 0.5667 }, + { "time": 0.7333, "x": 1.119 } + ] + }, + "bone": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -6.45 }, + { "time": 0.2667, "angle": 4.84 }, + { "time": 0.6667, "angle": 14.69 }, + { "time": 0.7667, "angle": -1.4 }, + { "time": 0.8333, "angle": 3.9 }, + { "time": 1.3333, "angle": 0.49 }, + { "time": 1.5, "angle": -8.16 }, + { "time": 1.5667, "angle": 4.87 }, + { "time": 1.6333, "angle": -1.8 }, + { "time": 1.8333, "angle": 1.81 }, + { "time": 2 } + ] + }, + "bone2": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -6.45 }, + { "time": 0.2667, "angle": 4.84 }, + { "time": 0.6667, "angle": 14.69 }, + { "time": 0.7667, "angle": -1.4 }, + { "time": 0.8333, "angle": 3.9 }, + { "time": 1.3333, "angle": 0.49 }, + { "time": 1.5, "angle": -8.16 }, + { "time": 1.5667, "angle": 4.87 }, + { "time": 1.6333, "angle": -1.8 }, + { "time": 1.8333, "angle": 1.81 }, + { "time": 2 } + ] + }, + "bone3": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -6.45 }, + { "time": 0.2667, "angle": 4.84 }, + { "time": 0.6667, "angle": 14.69 }, + { "time": 0.7667, "angle": -1.4 }, + { "time": 0.8333, "angle": 3.9 }, + { "time": 1.3333, "angle": 0.49 }, + { "time": 1.5, "angle": -8.16 }, + { "time": 1.5667, "angle": 4.87 }, + { "time": 1.6333, "angle": -1.8 }, + { "time": 1.8333, "angle": 1.81 }, + { "time": 2 } + ] + }, + "bone4": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -6.45 }, + { "time": 0.2667, "angle": 4.84 }, + { "time": 0.6667, "angle": 14.69 }, + { "time": 0.7667, "angle": -1.4 }, + { "time": 0.8333, "angle": 3.9 }, + { "time": 1.3333, "angle": 0.49 }, + { "time": 1.5, "angle": -8.16 }, + { "time": 1.5667, "angle": 4.87 }, + { "time": 1.6333, "angle": -1.8 }, + { "time": 1.8333, "angle": 1.81 }, + { "time": 2 } + ] + }, + "bone5": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -6.45 }, + { "time": 0.2667, "angle": 4.84 }, + { "time": 0.6667, "angle": 14.69 }, + { "time": 0.7667, "angle": -1.4 }, + { "time": 0.8333, "angle": 3.9 }, + { "time": 1.3333, "angle": 0.49 }, + { "time": 1.5, "angle": -8.16 }, + { "time": 1.5667, "angle": 4.87 }, + { "time": 1.6333, "angle": -1.8 }, + { "time": 1.8333, "angle": 1.81 }, + { "time": 2 } + ] + } + }, + "deform": { + "default": { + "raptor-front-leg": { + "raptor-front-leg": [ + {}, + { + "time": 0.1667, + "offset": 150, + "vertices": [ -10.88947, -30.36389, -10.71732, -22.72197, 25.01976, 2.27203, -7.08154, -15.97241, 17.35857, 1.98693, -7.08154, -15.97241, 17.35857, 1.98693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7.08154, -15.97241, -16.2515, -6.41524, 0, 0, 0, 0, -2.62177, -5.91267, 6.42596, 0.73537, -2.62177, -5.91267, 6.42596, 0.73537, -2.62177, -5.91267, 6.42596, 0.73537 ] + }, + { + "time": 0.5, + "offset": 144, + "vertices": [ -13.42749, 17.0267, 15.81436, -1.82489, 12.55496, -3.69128, -14.84991, -27.69955, -12.20212, -20.72182, 23.54478, 0.26454, -7.08154, -15.97241, 17.35857, 1.98693, -7.08154, -15.97241, 17.35857, 1.98693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7.08154, -15.97241, -16.2515, -6.41524, 0, 0, 0, 0, -2.62177, -5.91267, 6.42596, 0.73537, -2.14818, -17.13634, 17.0141, 4.48871, 0.76036, -16.70564, 15.74725, 7.14192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7.43222, -10.01694, -8.45212, 9.17316, 0, 0, 0, 0, 0, 0, 0, 0, 8.35347, -9.45856, -10.85333, -6.43872 ] + }, + { + "time": 0.7, + "offset": 144, + "vertices": [ -8.16173, 41.49426, 18.18862, -10.69293, -6.44682, -46.91269, -10.54358, -11.12482, -6.70166, -2.12044, 13.43587, 16.82005, -7.08154, -15.97241, 17.35857, 1.98693, -7.08154, -15.97241, 17.35857, 1.98693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.77762, -30.78729, -28.91833, 1.94682, 0, 0, 0, 0, -2.62177, -5.91267, 6.42596, 0.73537, -2.14818, -17.13634, 17.0141, 4.48871, 0.76036, -16.70564, 15.74725, 7.14192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7.43222, -10.01694, -8.45212, 9.17316, 0.67496, -8.34445, -6.28122, 5.53439, 2.34509, 11.36743, 6.20795, -9.80856, 19.70685, -3.18417, -16.38966, -11.3985 ] + }, + { "time": 1.8 } + ] + } + } + } + }, + "walk": { + "slots": { + "raptor-jaw-inside": { + "color": [ + { "color": "646464ff" }, + { "time": 0.5333, "color": "808080ff" }, + { "time": 1.0667, "color": "646464ff" } + ] + }, + "tail-shadow": { + "color": [ + { "color": "0000004a" }, + { "time": 0.1333, "color": "00000000" }, + { "time": 0.2667, "color": "0000000c", "curve": "stepped" }, + { "time": 0.4333, "color": "0000000c" }, + { "time": 0.4667, "color": "0000001c" }, + { "time": 0.5333, "color": "00000000", "curve": "stepped" }, + { "time": 0.6667, "color": "00000000" }, + { "time": 0.8, "color": "00000024" }, + { "time": 0.9333, "color": "0000003a" }, + { "time": 1.0667, "color": "0000004a" } + ], + "attachment": [ + { "name": "raptor-tail-shadow" } + ] + } + }, + "bones": { + "front-foot-target": { + "rotate": [ + {}, + { "time": 0.2667, "angle": -51.26 }, + { "time": 0.4, "angle": -65.18 }, + { "time": 0.5333, "angle": -76.29 }, + { "time": 0.8, "angle": -76.53 }, + { "time": 1.0667 } + ], + "translate": [ + { "x": 343.28, "y": 36.5 }, + { "time": 0.2667, "x": 86.51, "y": 36.99 }, + { "time": 0.5333, "x": -173.36, "y": 37.42 }, + { "time": 0.6, "x": -68.16, "y": 141.15 }, + { "time": 0.7333, "x": 91.79, "y": 238.01 }, + { "time": 0.8, "x": 155.9, "y": 190.91 }, + { "time": 0.9667, "x": 303.28, "y": 94.41 }, + { "time": 1.0667, "x": 343.28, "y": 36.5 } + ] + }, + "hip": { + "rotate": [ + { "angle": -4.78 }, + { "time": 0.0667, "angle": -3.99 }, + { "time": 0.2667, "angle": -12.5 }, + { "time": 0.5333, "angle": -4.78 }, + { "time": 0.6, "angle": -3.99 }, + { "time": 0.8, "angle": -12.5 }, + { "time": 1.0667, "angle": -4.78 } + ], + "translate": [ + { "x": 161.93, "y": 4.9, "curve": 0.27, "c2": 0.38, "c3": 0.621, "c4": 0.4 }, + { "time": 0.0667, "x": 165.04, "y": -5.99, "curve": 0.245, "c2": 0.01, "c3": 0.758 }, + { "time": 0.2667, "x": 178.81, "y": 136.53, "curve": 0.25, "c3": 0.841, "c4": 0.81 }, + { + "time": 0.5333, + "x": 161.93, + "y": 4.9, + "curve": 0.27, + "c2": 0.38, + "c3": 0.621, + "c4": 0.4 + }, + { "time": 0.6, "x": 165.04, "y": -5.99, "curve": 0.245, "c2": 0.01, "c3": 0.758 }, + { "time": 0.8, "x": 178.81, "y": 136.52, "curve": 0.25, "c3": 0.859, "c4": 0.82 }, + { "time": 1.0667, "x": 161.93, "y": 4.9 } + ] + }, + "back-foot-target": { + "rotate": [ + { "angle": -62.73 }, + { "time": 0.2667, "angle": -107.17 }, + { "time": 0.4667, "angle": -40.52 }, + { "time": 0.8, "angle": -97.16 }, + { "time": 1.0667, "angle": -62.73 } + ], + "translate": [ + { "x": -266.7, "y": -15.47 }, + { "time": 0.1333, "x": -87.88, "y": 124.85 }, + { "time": 0.2667, "x": 88.36, "y": 134.06 }, + { "time": 0.3667, "x": 198.39, "y": 90.65 }, + { "time": 0.4667, "x": 308.19, "y": -26.42 }, + { "time": 0.6, "x": 167.06, "y": -26.42 }, + { "time": 1.0667, "x": -266.7, "y": -15.47 } + ] + }, + "front-leg1": { + "translate": [ + {}, + { "time": 0.0667, "x": -0.22, "y": 15.2 }, + { "time": 0.5333, "x": -0.34, "y": 12.16 }, + { "time": 0.7333, "x": -4.75, "y": 31.94 }, + { "time": 1.0667 } + ] + }, + "front-leg-target": { + "translate": [ + { "x": -18.05, "y": -2.89 }, + { "time": 0.4333, "x": -42.2, "y": -88.63 }, + { "time": 0.5333, "x": -27.31, "y": -43.91 }, + { "time": 0.7333, "x": -1.52, "y": -94.29 }, + { "time": 0.8, "x": -24.29, "y": -116.41 }, + { "time": 1, "x": -41.88, "y": -93.3 }, + { "time": 1.0667, "x": -18.05, "y": -2.89 } + ] + }, + "back-leg-target": { + "translate": [ + { "x": -2.05, "y": 15.12 }, + { "time": 0.2667, "x": 17.49, "y": -150.44 }, + { "time": 0.4667, "x": -40.21, "y": -81.76 }, + { "time": 0.5333, "x": -31.69, "y": -82.43 }, + { "time": 0.8, "x": 2.65, "y": -169.22 }, + { "time": 0.9333, "x": -16.77, "y": -98.31 }, + { "time": 1.0667, "x": -2.05, "y": 15.12 } + ] + }, + "tail1": { + "rotate": [ + { "angle": 1.31 }, + { "time": 0.0667, "angle": 4.14 }, + { "time": 0.3333, "angle": -5.78 }, + { "time": 0.6333, "angle": 4.14 }, + { "time": 0.9, "angle": -5.78 }, + { "time": 1.0667, "angle": 1.31 } + ] + }, + "torso1": { + "rotate": [ + { "angle": 7.22 }, + { "time": 0.2667, "angle": 4.2 }, + { "time": 0.5333, "angle": 7.22 }, + { "time": 0.8, "angle": 4.2 }, + { "time": 1.0667, "angle": 7.22 } + ] + }, + "saddle": { + "rotate": [ + { "angle": -2.52 }, + { "time": 0.2667, "angle": -4.17 }, + { "time": 0.5333, "angle": -3.85 }, + { "time": 0.8, "angle": -3.1 }, + { "time": 1.0667, "angle": -2.52 } + ], + "translate": [ + { "x": 5.87, "y": -0.06 }, + { "time": 0.2667, "curve": 0.15, "c2": 0.28, "c3": 0.75 }, + { "time": 0.3333, "x": -0.04, "y": 5.92, "curve": 0.421, "c3": 0.85, "c4": 0.78 }, + { "time": 0.5333, "x": -8.81, "y": 0.1 }, + { "time": 0.6, "x": -7.83, "y": -2.27 }, + { "time": 0.8, "curve": 0.15, "c2": 0.28, "c3": 0.75 }, + { "time": 0.8667, "x": -0.04, "y": 5.92, "curve": 0.421, "c3": 0.85, "c4": 0.78 }, + { "time": 1.0667, "x": 5.87, "y": -0.06 } + ] + }, + "torso2": { + "rotate": [ + { "angle": -4.19 }, + { "time": 0.2667, "angle": -1.92, "curve": 0.25, "c3": 0.75 }, + { "time": 0.5333, "angle": -4.19 }, + { "time": 0.8, "angle": -1.92, "curve": 0.25, "c3": 0.75 }, + { "time": 1.0667, "angle": -4.19 } + ] + }, + "front-arm1": { + "rotate": [ + { "angle": -329.45 }, + { "time": 0.5, "angle": -349.54 }, + { "time": 1.0667, "angle": -329.45 } + ], + "translate": [ + { "x": 20.65, "y": -7.55 }, + { "time": 0.5, "x": -9.9, "y": 10.94 }, + { "time": 0.8, "x": 24.1, "y": -1.47 }, + { "time": 0.9333, "x": 21.73, "y": -3.71 }, + { "time": 1.0667, "x": 20.65, "y": -7.55 } + ] + }, + "neck": { + "rotate": [ + { "angle": -22.13 }, + { "time": 0.2667, "angle": -4.12 }, + { "time": 0.5333, "angle": -22.13 }, + { "time": 0.8, "angle": -4.12 }, + { "time": 1.0667, "angle": -22.13 } + ], + "translate": [ + { "x": 19.46, "y": -14.29 }, + { "time": 0.2667, "x": 9.68, "y": -8.36 }, + { "time": 0.5333, "x": 21.46, "y": -15.75 }, + { "time": 0.8, "x": 9.68, "y": -8.36 }, + { "time": 1.0667, "x": 19.46, "y": -14.29 } + ] + }, + "back-arm1": { + "rotate": [ + { "angle": 23.86 }, + { "time": 0.5, "angle": 37.58 }, + { "time": 1.0667, "angle": 23.86 } + ], + "translate": [ + {}, + { "time": 0.5, "x": 11.13, "y": -13.39 }, + { "time": 1.0667 } + ] + }, + "saddle-strap-back": { + "rotate": [ + { "angle": -5.12 }, + { "time": 0.1, "angle": 2.48 }, + { "time": 0.3, "angle": -2.61 }, + { "time": 0.4333, "angle": -4.47 }, + { "time": 0.6333, "angle": 3.21 }, + { "time": 0.9, "angle": -5.33 }, + { "time": 1.0667, "angle": -5.12 } + ] + }, + "front-arm2": { + "rotate": [ + { "angle": -11.14 }, + { "time": 0.5, "angle": 22.44 }, + { "time": 1.0667, "angle": -11.14 } + ] + }, + "head": { + "rotate": [ + { "angle": 16.44, "curve": 0.351, "c2": 0.65, "c3": 0.686 }, + { "time": 0.2667, "angle": 15.71, "curve": 0.375, "c2": 0.5, "c3": 0.75 }, + { "time": 0.5333, "angle": 18.05 }, + { "time": 0.8, "angle": 20.32, "curve": 0.364, "c2": 0.45, "c3": 0.729, "c4": 0.9 }, + { "time": 1.0667, "angle": 16.44 } + ], + "translate": [ + { "x": 9.88, "y": -14.4 }, + { "time": 0.2667, "x": 5.05, "y": 2.22 }, + { "time": 0.5333, "x": 7.52, "y": -10.95 }, + { "time": 0.8, "x": 5.05, "y": 2.22 }, + { "time": 1.0667, "x": 9.88, "y": -14.4 } + ] + }, + "back-arm2": { + "rotate": [ + {}, + { "time": 0.5, "angle": -30.21 }, + { "time": 1.0667 } + ] + }, + "stirrup": { + "rotate": [ + { "angle": -17.15 }, + { "time": 0.2667, "angle": -4.96 }, + { "time": 0.5333 }, + { "time": 0.8, "angle": -4.96 }, + { "time": 1.0667, "angle": -17.15 } + ], + "translate": [ + { "x": 8.98, "y": 4.99 }, + { "time": 0.2667, "x": 4.85, "y": 1 }, + { "time": 0.5333, "x": 7.76, "y": -2.99 }, + { "time": 0.8, "x": 4.85, "y": 1 }, + { "time": 1.0667, "x": 8.98, "y": 4.99 } + ] + }, + "front-foot2": { + "rotate": [ + { "angle": 36.9 }, + { "time": 0.0667, "angle": 7.88 }, + { "time": 0.1333, "angle": 4.67 }, + { "time": 0.4, "angle": 7.59 }, + { "time": 0.5333, "angle": 8.08 }, + { "time": 0.6667, "angle": -67.33 }, + { "time": 0.7333, "angle": -65.24 }, + { "time": 1, "angle": 27.75 }, + { "time": 1.0667, "angle": 36.9 } + ] + }, + "front-hand": { + "rotate": [ + { "angle": 9.49 }, + { "time": 0.5, "angle": -48.61 }, + { "time": 1.0667, "angle": 9.49 } + ] + }, + "horn-back": { + "translate": [ + {}, + { "time": 0.2667, "x": 17.11, "y": 15.23 }, + { "time": 0.5333, "x": 4.7, "y": 1.5 }, + { "time": 0.8, "x": 15.44, "y": 7.47 }, + { "time": 1.0667 } + ] + }, + "jaw": { + "rotate": [ + { "angle": -2.84 }, + { "time": 0.2, "angle": -10.94 }, + { "time": 0.3333, "angle": -10.86 }, + { "time": 0.6667, "angle": -16.61 }, + { "time": 0.8667, "angle": -9.25 }, + { "time": 1.0667, "angle": -2.84 } + ], + "translate": [ + { "x": -0.34, "y": -2.02 }, + { "time": 0.2667, "x": 0.79, "y": 9.47 }, + { "time": 0.5, "x": 0.93, "y": 6.09 }, + { "time": 0.7333, "x": 0.79, "y": 9.47 }, + { "time": 1.0667, "x": -0.34, "y": -2.02 } + ] + }, + "back-foot2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -82.38 }, + { "time": 0.2667, "angle": -110.31 }, + { "time": 0.4333, "angle": 36.22 }, + { "time": 0.5333, "angle": 2.1 }, + { "time": 1.0667 } + ] + }, + "back-hand": { + "rotate": [ + { "angle": -28.89 }, + { "time": 0.5, "angle": 12.2 }, + { "time": 1.0667, "angle": -28.89 } + ] + }, + "tongue1": { + "rotate": [ + { "angle": 30.23 }, + { "time": 0.2333, "angle": 14.93 }, + { "time": 0.7, "angle": 0.38 }, + { "time": 0.9, "angle": 18.55 }, + { "time": 1.0667, "angle": 30.23 } + ] + }, + "front-foot3": { + "rotate": [ + { "angle": -1.65 }, + { "time": 0.0667, "angle": -3.21 }, + { "time": 0.1333, "angle": -3.94 }, + { "time": 0.2667, "angle": -3.82 }, + { "time": 0.5333, "angle": -5.89 }, + { "time": 0.6333, "angle": -25.29 }, + { "time": 0.8333, "angle": -7.16 }, + { "time": 1, "angle": 10.93 }, + { "time": 1.0667, "angle": -1.65 } + ] + }, + "tongue2": { + "rotate": [ + { "angle": -16.02 }, + { "time": 0.2333, "angle": -11.27 }, + { "time": 0.7, "angle": -0.71 }, + { "time": 0.9, "angle": -6.84 }, + { "time": 1.0667, "angle": -16.02 } + ] + }, + "tongue3": { + "rotate": [ + { "angle": -16.02 }, + { "time": 0.2333, "angle": -28.5 }, + { "time": 0.7, "angle": -1.69 }, + { "time": 0.9, "angle": -32.34 }, + { "time": 1.0667, "angle": -16.02 } + ] + }, + "head2": { + "rotate": [ + { "angle": 16.22 }, + { "time": 0.2667, "angle": 29.6 }, + { "time": 0.5333, "angle": 18.04 }, + { "time": 0.8, "angle": 30.81 }, + { "time": 1.0667, "angle": 16.22 } + ] + }, + "neck2": { + "rotate": [ + { "angle": 36.68 }, + { "time": 0.2667, "angle": 9.43 }, + { "time": 0.4, "angle": 16.32 }, + { "time": 0.5333, "angle": 38.06 }, + { "time": 0.8, "angle": 14.74 }, + { "time": 1.0667, "angle": 36.68 } + ], + "translate": [ + { "x": -6.84, "y": -1.8 }, + { "time": 0.2667, "x": -6.99, "y": 1.2 }, + { "time": 0.5333, "x": -6.03, "y": -5.15 }, + { "time": 0.8, "x": -10.81, "y": -0.35 }, + { "time": 1.0667, "x": -6.84, "y": -1.8 } + ] + }, + "spineboy-hip": { + "translate": [ + { "x": 30.8, "y": -38.27, "curve": 0.413, "c3": 0.873, "c4": 0.78 }, + { "time": 0.2667, "x": -12.88, "y": 0.58, "curve": 0.139, "c2": 0.18, "c3": 0.75 }, + { "time": 0.5333, "x": 33.99, "y": -13.71, "curve": 0.367, "c3": 0.867, "c4": 0.82 }, + { "time": 0.8, "x": -12.88, "y": 0.58, "curve": 0.164, "c2": 0.17, "c3": 0.75 }, + { "time": 1.0667, "x": 30.8, "y": -38.27 } + ] + }, + "spineboy-torso": { + "rotate": [ + { "angle": -42.71 }, + { "time": 0.2667, "angle": -10.38, "curve": 0.493, "c3": 0.75 }, + { "time": 0.5333, "angle": -45.79 }, + { "time": 0.8, "angle": -17.34, "curve": 0.493, "c3": 0.75 }, + { "time": 1.0667, "angle": -42.71 } + ] + }, + "front-arm": { + "translate": [ + {}, + { "time": 0.3333, "x": -14.43, "y": -11.03 }, + { "time": 0.5333 }, + { "time": 0.8, "x": -14.43, "y": -11.03 }, + { "time": 1.0667 } + ] + }, + "gun": { + "rotate": [ + { "angle": -11.68, "curve": 0.379, "c2": 0.6, "c3": 0.724 }, + { "time": 0.0667, "angle": -17.6 }, + { "time": 0.3333, "angle": 0.63, "curve": 0.25, "c3": 0.75 }, + { "time": 0.6, "angle": -15.69, "curve": 0.326, "c2": 0.01, "c3": 0.716 }, + { "time": 0.8667, "angle": 0.55, "curve": 0.242, "c3": 0.667, "c4": 0.67 }, + { "time": 1.0667, "angle": -11.68 } + ], + "translate": [ + { "x": 0.84, "y": -3.82 }, + { "time": 0.0667 }, + { "time": 0.3333, "x": 3.38, "y": -15.28 }, + { "time": 0.6 }, + { "time": 0.8667, "x": 3.38, "y": -15.28 }, + { "time": 1.0667, "x": 0.84, "y": -3.82 } + ] + }, + "tail2": { + "rotate": [ + { "angle": 9.88 }, + { "time": 0.1333, "angle": -0.81 }, + { "time": 0.2333, "angle": -2.7 }, + { "time": 0.3, "angle": -11.33 }, + { "time": 0.4333, "angle": -15.11 }, + { "time": 0.5333, "angle": 9.88 }, + { "time": 0.6667, "angle": -0.81 }, + { "time": 0.7667, "angle": -2.7 }, + { "time": 0.8333, "angle": -11.33 }, + { "time": 0.9667, "angle": -15.11 }, + { "time": 1.0667, "angle": 9.88 } + ] + }, + "tail3": { + "rotate": [ + { "angle": -7.15 }, + { "time": 0.1333, "angle": 7.47 }, + { "time": 0.2333, "angle": -0.7 }, + { "time": 0.3, "angle": -6.29 }, + { "time": 0.4333, "angle": 0.13 }, + { "time": 0.5333, "angle": -7.15 }, + { "time": 0.6667, "angle": 7.47 }, + { "time": 0.7667, "angle": -0.7 }, + { "time": 0.8333, "angle": -6.29 }, + { "time": 0.9667, "angle": 0.13 }, + { "time": 1.0667, "angle": -7.15 } + ] + }, + "tail4": { + "rotate": [ + { "angle": -4.53 }, + { "time": 0.1333, "angle": 11.46 }, + { "time": 0.2333, "angle": 5.93 }, + { "time": 0.3, "angle": 2.43 }, + { "time": 0.4333, "angle": 0.24 }, + { "time": 0.5333, "angle": -4.53 }, + { "time": 0.6667, "angle": 11.46 }, + { "time": 0.7667, "angle": 5.93 }, + { "time": 0.8333, "angle": 2.43 }, + { "time": 0.9667, "angle": 0.24 }, + { "time": 1.0667, "angle": -4.53 } + ] + }, + "tail5": { + "rotate": [ + { "angle": -9.9 }, + { "time": 0.1333, "angle": 11.7 }, + { "time": 0.2333, "angle": 13.82 }, + { "time": 0.3, "angle": 10.26 }, + { "time": 0.4333, "angle": -4.1 }, + { "time": 0.5333, "angle": -9.9 }, + { "time": 0.6667, "angle": 11.7 }, + { "time": 0.7667, "angle": 13.82 }, + { "time": 0.8333, "angle": 10.26 }, + { "time": 0.9667, "angle": -4.1 }, + { "time": 1.0667, "angle": -9.9 } + ] + }, + "tail6": { + "rotate": [ + { "angle": -9.9 }, + { "time": 0.1333, "angle": 13.73 }, + { "time": 0.2333, "angle": 15.23 }, + { "time": 0.3, "angle": 12.03 }, + { "time": 0.4333, "angle": -10.82 }, + { "time": 0.5333, "angle": -9.9 }, + { "time": 0.6667, "angle": 13.73 }, + { "time": 0.7667, "angle": 15.23 }, + { "time": 0.8333, "angle": 12.03 }, + { "time": 0.9667, "angle": -10.82 }, + { "time": 1.0667, "angle": -9.9 } + ], + "scale": [ + {}, + { "time": 0.1333, "x": 0.845 }, + { "time": 0.2667, "x": 0.91 }, + { "time": 0.4, "x": 0.834 }, + { "time": 0.5333, "x": 0.92 }, + { "time": 0.6667, "x": 0.884 }, + { "time": 0.8, "x": 0.967 }, + { "time": 0.9333, "x": 0.904 }, + { "time": 1.0667 } + ] + }, + "tail7": { + "rotate": [ + { "angle": -9.9 }, + { "time": 0.1333, "angle": 9.57 }, + { "time": 0.2333, "angle": 10.69 }, + { "time": 0.3, "angle": 8.31 }, + { "time": 0.4333, "angle": -9.18 }, + { "time": 0.5333, "angle": -9.9 }, + { "time": 0.6667, "angle": 9.57 }, + { "time": 0.7667, "angle": 10.69 }, + { "time": 0.8333, "angle": 8.31 }, + { "time": 0.9667, "angle": -9.18 }, + { "time": 1.0667, "angle": -9.9 } + ], + "scale": [ + {}, + { "time": 0.1333, "x": 0.845 }, + { "time": 0.2667, "x": 0.91 }, + { "time": 0.4, "x": 0.834 }, + { "time": 0.5333, "x": 0.92 }, + { "time": 0.6667, "x": 0.884 }, + { "time": 0.8, "x": 0.967 }, + { "time": 0.9333, "x": 0.904 }, + { "time": 1.0667 } + ] + }, + "tail8": { + "rotate": [ + { "angle": -9.9 }, + { "time": 0.0667, "angle": -14.09 }, + { "time": 0.1333, "angle": -6.85 }, + { "time": 0.2, "angle": 10.88 }, + { "time": 0.2333, "angle": 9.63 }, + { "time": 0.3, "angle": 9.48 }, + { "time": 0.4333, "angle": -10.9 }, + { "time": 0.4667, "angle": -21.91 }, + { "time": 0.5333, "angle": -9.9 }, + { "time": 0.6, "angle": -14.09 }, + { "time": 0.6667, "angle": -6.85 }, + { "time": 0.7333, "angle": 10.88 }, + { "time": 0.7667, "angle": 9.63 }, + { "time": 0.8333, "angle": 9.48 }, + { "time": 0.9667, "angle": -10.9 }, + { "time": 1, "angle": -21.91 }, + { "time": 1.0667, "angle": -9.9 } + ], + "scale": [ + {}, + { "time": 0.1333, "x": 0.845 }, + { "time": 0.2667, "x": 0.91 }, + { "time": 0.4, "x": 0.834 }, + { "time": 0.5333, "x": 0.92 }, + { "time": 0.6667, "x": 0.884 }, + { "time": 0.8, "x": 0.967 }, + { "time": 0.9333, "x": 0.904 }, + { "time": 1.0667 } + ] + }, + "tail9": { + "rotate": [ + { "angle": -6.79 }, + { "time": 0.0333, "angle": -20.12 }, + { "time": 0.1333, "angle": -9.9 }, + { "time": 0.2, "angle": -18.42 }, + { "time": 0.2667, "angle": -15.51 }, + { "time": 0.3333, "angle": 10.33 }, + { "time": 0.3667, "angle": 13.13 }, + { "time": 0.4333, "angle": 4.99 }, + { "time": 0.5, "angle": 6.54 }, + { "time": 0.5667, "angle": -20.12 }, + { "time": 0.6667, "angle": -9.9 }, + { "time": 0.7333, "angle": -18.42 }, + { "time": 0.8, "angle": -15.51 }, + { "time": 0.8667, "angle": 10.33 }, + { "time": 0.9, "angle": 13.13 }, + { "time": 0.9667, "angle": 4.99 }, + { "time": 1.0333, "angle": 6.54 }, + { "time": 1.0667, "angle": -6.79 } + ], + "scale": [ + { "x": 0.904 }, + { "time": 0.1333 }, + { "time": 0.2667, "x": 0.845 }, + { "time": 0.4, "x": 0.91 }, + { "time": 0.5333, "x": 0.834 }, + { "time": 0.6667, "x": 0.92 }, + { "time": 0.8, "x": 0.884 }, + { "time": 0.9333, "x": 0.967 }, + { "time": 1.0667, "x": 0.904 } + ] + }, + "tail10": { + "rotate": [ + { "angle": -5.98 }, + { "time": 0.0333, "angle": -12.6 }, + { "time": 0.0667, "angle": -23.33 }, + { "time": 0.1333, "angle": -9.9 }, + { "time": 0.2, "angle": -23.4 }, + { "time": 0.2667, "angle": -25.45 }, + { "time": 0.3333, "angle": 2.64 }, + { "time": 0.3667, "angle": 6.57 }, + { "time": 0.4333, "angle": 13.89 }, + { "time": 0.5667, "angle": -12.6 }, + { "time": 0.6, "angle": -23.33 }, + { "time": 0.6667, "angle": -9.9 }, + { "time": 0.7333, "angle": -23.4 }, + { "time": 0.8, "angle": -25.45 }, + { "time": 0.8667, "angle": 2.64 }, + { "time": 0.9, "angle": 6.57 }, + { "time": 0.9667, "angle": 13.89 }, + { "time": 1.0667, "angle": -5.98 } + ], + "scale": [ + { "x": 0.904 }, + { "time": 0.1333 }, + { "time": 0.2667, "x": 0.845 }, + { "time": 0.4, "x": 0.91 }, + { "time": 0.5333, "x": 0.834 }, + { "time": 0.6667, "x": 0.92 }, + { "time": 0.8, "x": 0.884 }, + { "time": 0.9333, "x": 0.967 }, + { "time": 1.0667, "x": 0.904 } + ] + }, + "horn-front": { + "translate": [ + { "x": -2.29, "y": -13.82 }, + { "time": 0.2667, "x": 3.57, "y": -1.24 }, + { "time": 0.5333, "x": 5.09, "y": -3.74 }, + { "time": 0.8, "x": 3.99, "y": -5.87 }, + { "time": 1.0667, "x": -2.29, "y": -13.82 } + ] + }, + "saddle-strap-front": { + "rotate": [ + { "angle": 3.65 }, + { "time": 0.2667, "angle": 5.97 }, + { "time": 0.5333, "angle": 3.49 }, + { "time": 0.6, "angle": 5.82 }, + { "time": 0.8, "angle": 3.68 }, + { "time": 1.0667, "angle": 3.65 } + ] + }, + "jaw-inside": { + "translate": [ + { "x": -8.34, "y": -3.22 }, + { "time": 0.5333, "x": 1.17, "y": -1.6 }, + { "time": 1.0667, "x": -8.34, "y": -3.22 } + ] + }, + "bone": { + "rotate": [ + {}, + { "time": 0.1, "angle": -8.07 }, + { "time": 0.1667, "angle": -8.59 }, + { "time": 0.5333, "angle": -11.19 }, + { "time": 0.6333, "angle": -8.07 }, + { "time": 0.7, "angle": -8.59 }, + { "time": 1.0667 } + ] + }, + "bone2": { + "rotate": [ + {}, + { "time": 0.1, "angle": -8.07 }, + { "time": 0.1667, "angle": 14.12 }, + { "time": 0.3333, "angle": -10.54 }, + { "time": 0.5333, "angle": -13.65 }, + { "time": 0.6333, "angle": -8.07 }, + { "time": 0.7, "angle": 14.12 }, + { "time": 0.8667, "angle": -10.54 }, + { "time": 1.0667 } + ] + }, + "bone3": { + "rotate": [ + {}, + { "time": 0.1, "angle": 5.59 }, + { "time": 0.1667, "angle": 8.3 }, + { "time": 0.3333, "angle": -1.12 }, + { "time": 0.5333, "angle": -5.17 }, + { "time": 0.6333, "angle": 5.59 }, + { "time": 0.7, "angle": 8.3 }, + { "time": 0.8667, "angle": -1.12 }, + { "time": 1.0667 } + ] + }, + "bone4": { + "rotate": [ + {}, + { "time": 0.1, "angle": 5.59 }, + { "time": 0.1667, "angle": 8.3 }, + { "time": 0.3333, "angle": -1.12 }, + { "time": 0.5333, "angle": -5.17 }, + { "time": 0.6333, "angle": 5.59 }, + { "time": 0.7, "angle": 8.3 }, + { "time": 0.8667, "angle": -1.12 }, + { "time": 1.0667 } + ] + }, + "bone5": { + "rotate": [ + {}, + { "time": 0.1, "angle": 5.59 }, + { "time": 0.1667, "angle": 8.3 }, + { "time": 0.3333, "angle": -1.12 }, + { "time": 0.5333, "angle": -5.17 }, + { "time": 0.6333, "angle": 5.59 }, + { "time": 0.7, "angle": 8.3 }, + { "time": 0.8667, "angle": -1.12 }, + { "time": 1.0667 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + {}, + { "time": 0.2667, "x": -12.14, "y": 8.93 }, + { "time": 0.5333 }, + { "time": 0.8333, "x": -12.14, "y": 8.93 }, + { "time": 1.0667 } + ] + }, + "front-hand2": { + "rotate": [ + {}, + { "time": 0.2667, "angle": 15.62 }, + { "time": 0.5333 }, + { "time": 0.8333, "angle": 15.62 }, + { "time": 1.0667 } + ] + } + }, + "deform": { + "default": { + "raptor-body": { + "raptor-body": [ + { + "offset": 408, + "vertices": [ 13.71567, -12.38429, 8.86707, -16.21404, 14.13376, 11.90601, 8.86707, -16.21404, -0.71399, -18.46735, 14.13376, 11.90601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8.4906, -7.6657, 5.4895, -10.03702, 8.74924, 7.37085 ] + }, + { + "time": 0.2667, + "offset": 18, + "vertices": [ 0.70813, 7.44351, 1.07001, 11.24002, 1.08411, 11.39075, 1.02405, 10.74866, 1.03925, 10.92072, 0.85474, 8.98672, 0.86066, 9.04904, 0.89789, 9.44125, 0.90637, 9.5307, 0.94983, 9.98828, 0.96765, 10.17432, 1.00269, 10.54266, 0, 0, 0, 0, 0, 0, 0, 0, 0.90533, 6.48813, -4.83447, -4.4209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.59564, 4.3848, -2.59491, 7.48297, -5.60541, -5.59521, -2.59491, 7.48297, 0.75079, 7.88437, -5.60541, -5.59521, 0, 0, 0, 0, 0, 0, 0, 0, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, -16.63549, -1.25745, 13.9549, 9.14218, -16.65107, -1.03064, -12.07328, -0.91254, -10.08334, 6.70255, -12.08454, -0.74829, -6.81092, -0.51489, -5.68832, 3.78119, -6.81731, -0.42206, -2.13165, -0.16132, -1.78043, 1.1835, 0.92268, 0.06927, 0.77066, -0.51218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.59564, 4.3848, -2.59491, 7.48297, -5.60541, -5.59521, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.45563, 15.28763, 0, 0, 0.84955, 8.92258, 0.86261, 9.06027, 1.03558, 10.87985, 1.04388, 10.93173, 1.00079, 10.50467, 1.51581, 15.87836, 1.29034, 13.55914 ] + }, + { + "time": 0.5333, + "offset": 18, + "vertices": [ 0.70813, 7.44351, 1.07001, 11.24002, 1.08411, 11.39075, 1.02405, 10.74866, 1.03925, 10.92072, 0.85474, 8.98672, 0.86066, 9.04904, 0.89789, 9.44125, 0.90637, 9.5307, 0.94983, 9.98828, 0.96765, 10.17432, 1.00269, 10.54266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9.82916, 8.09055, -5.51956, 11.46271, -8.27203, -9.69153, -5.51956, 11.46271, 0.71658, 12.7357, -8.27203, -9.69153, 0, 0, 0, 0, 0, 0, 0, 0, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, -20.25358, 2.27841, 18.97852, 7.42908, -20.32699, 1.48425, -14.55186, 1.63705, -10.8692, 9.81364, -14.60457, 1.06616, -8.3676, 0.94171, -6.25018, 5.64297, -8.39783, 0.61307, -3.12171, 0.35193, -2.33182, 2.10535, -2.62373, 0.29605, -1.95944, 1.76942, -8.49063, 7.66762, -5.48889, 10.03763, -6.53128, 5.89809, -4.22223, 7.72119, -5.4693, -6.89392, -9.82916, 8.09055, -5.51956, 11.46271, -8.27203, -9.69153, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.45563, 15.28763, 0, 0, 0.84955, 8.92258, 0.86261, 9.06027, 1.03558, 10.87985, 1.04388, 10.93173, 1.00079, 10.50467, 1.51581, 15.87836, 1.29034, 13.55914 ] + }, + { + "time": 0.8, + "offset": 18, + "vertices": [ 0.70813, 7.44351, 1.07001, 11.24002, 1.08411, 11.39075, 1.02405, 10.74866, 1.03925, 10.92072, 0.85474, 8.98672, 0.86066, 9.04904, 0.89789, 9.44125, 0.90637, 9.5307, 0.94983, 9.98828, 0.96765, 10.17432, 1.00269, 10.54266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.45563, 15.28763, 0, 0, 0.84955, 8.92258, 0.86261, 9.06027, 1.03558, 10.87985, 1.04388, 10.93173, 1.00079, 10.50467, 1.51581, 15.87836, 1.29034, 13.55914 ] + }, + { + "time": 1.0667, + "offset": 408, + "vertices": [ 13.71567, -12.38429, 8.86707, -16.21404, 14.13376, 11.90601, 8.86707, -16.21404, -0.71399, -18.46735, 14.13376, 11.90601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8.4906, -7.6657, 5.4895, -10.03702, 8.74924, 7.37085 ] + } + ] + }, + "raptor-front-arm": { + "raptor-front-arm": [ + { + "vertices": [ 0.63858, 10.11987, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.63858, 10.11987, 8.91238, 4.83664, 8.91238, 4.83664, -2.95996, -9.69858, 9.59641, -3.2762, -9.13791, -4.39584 ] + }, + { + "time": 0.5333, + "vertices": [ 2.12625, -9.42834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.12625, -9.42834, 2.21136, -13.58762, 2.21136, -13.58762, -11.1066, 8.13367, -7.02609, 7.11565, 9.99887, -0.14359 ] + }, + { + "time": 1.0667, + "vertices": [ 0.63858, 10.11987, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.63858, 10.11987, 8.91238, 4.83664, 8.91238, 4.83664, -2.95996, -9.69858, 9.59641, -3.2762, -9.13791, -4.39584 ] + } + ] + }, + "raptor-front-leg": { + "raptor-front-leg": [ + { + "offset": 150, + "vertices": [ 5.88568, 2.31329, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 3.24279, 5.42923, -3.33963, 5.37029, 3.24279, 5.42923, 5.48474, 1.33588, -3.33963, 5.37029, 3.24279, 5.42923, 5.48474, 1.33588, 6.45844, -3.76048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.88568, 2.31329, 6.32144, 0.17871 ] + }, + { "time": 0.2667 }, + { + "time": 0.5333, + "offset": 144, + "vertices": [ -18.2879, 9.64194, 8.54771, -3.97604, 0, 0, -6.20459, -38.80288, -1.60495, -18.19489, 18.00257, -3.08813, 1.01712, -11.54924, 11.59372, 0.06879, 1.01712, -11.54924, 11.59372, 0.06879, 1.01712, -11.54924, 11.59372, 0.06879, 1.01712, -11.54924, 11.59372, 0.06879, 7.2315, -9.06223, 11.59372, 0.06879, 7.2315, -9.06223, -5.34506, -9.90634, 11.59372, 0.06879, 7.2315, -9.06223, -5.34506, -9.90634, -15.37766, 0.70782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.90936, -20.67399, -20.69142, 0.32318, 0.83218, -9.44935, 9.48574, 0.05627, 0.83218, -9.44935, 9.48574, 0.05627, 0.32794, -15.86422, 15.83783, -0.97108, 0.42538, -16.96904, 16.94692, -0.96432, 0.83218, -9.44935, 9.48574, 0.05627, 0, 0, 0, 0, 0, 0, 0, 0, -2.43991, -8.71271, -8.55199, 2.95432, -4.47107, -11.33224, -11.04593, 5.13776 ] + }, + { + "time": 0.6, + "offset": 144, + "vertices": [ 5.8644, -1.96475 ] + }, + { + "time": 0.6667, + "offset": 48, + "vertices": [ 2.83282, 3.82607, 2.88747, -3.47459, 6.13686, -0.65051, 1.80194, 5.80962, -3.46157, 8.71898, 1.95515, 17.84987, -2.16496, 11.59793, -21.96982, -6.69659, -9.24968, 5.30598, 3.17815, -2.1165, 0.26888, 0.03062, 0.02821, 0.2688, -10.98312, -7.06466, -4.71954, -11.86687, -13.45984, 4.74478, -3.79447, -8.00033, 0, 0, 0, 0, 4.81293, -9.78431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.41243, 0.36704, -0.00642, -0.55221, 0, 0, 0, 0, 0.7433, -1.29713, 0.49036, 1.41172, 1.3683, -5.24968, 3.06253, 4.47641, -1.30437, -1.14192, 1.71709, -0.23523, -1.14153, -2.38019, 2.54447, 0.70039, 0, 0, 0, 0, 7.63262, -3.45871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.34303, -8.30955, 8.08327, 3.22951, -3.09877, 0.10198, -0.71957, -2.98701, 0, 0, 0, 0, 0, 0, 0, 0, -0.68984, -0.87758, -1.06615, -0.32834, -1.4312, -0.38682, 1.22995, -0.8266 ] + }, + { + "time": 0.7, + "offset": 48, + "vertices": [ 1.41641, 1.91303, 1.44373, -1.7373, 3.06843, -0.32526, 0.90097, 2.90481, -1.73079, 4.35949, 0.97757, 8.92494, -1.08248, 5.79897, -7.52768, -11.41519, -8.67229, -4.663, -0.13032, -9.51013, 0.13444, 0.01531, 0.01411, 0.1344, -5.49157, -3.53233, -2.35977, -5.93344, -0.53535, 10.74624, -0.16897, 6.33698, 12.85229, 2.43229, 8.83852, 8.18031, 26.96328, -11.50604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.61864, 0.55055, -0.00964, -0.82832, 0, 0, 0, 0, 1.11495, -1.9457, 0.73553, 2.11757, 2.05245, -7.87452, 4.59379, 6.71461, -1.95655, -1.71288, 2.57563, -0.35284, -1.71229, -3.57028, 3.8167, 1.05059, 0, 0, 0, 0, 3.81631, -1.72936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.67152, -4.15478, 4.04164, 1.61476, -0.32874, 3.11779, -0.67256, 1.78751, 0, 0, 0, 0, 0, 0, 0, 0, -1.03475, -1.31637, -1.59922, -0.49251, -2.1468, -0.58024, 1.84492, -1.2399 ] + }, + { + "time": 0.7333, + "offset": 76, + "vertices": [ 2.70691, 7.35512, -0.12915, 7.83603, 0, 0, 0, 0, 14.23546, -11.27834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.82486, 0.73407, -0.01285, -1.10443, 0, 0, 0, 0, 1.4866, -2.59427, 0.98071, 2.82343, 2.7366, -10.49936, 6.12506, 8.95282, -2.60873, -2.28384, 3.43417, -0.47046, -2.28305, -4.76038, 5.08893, 1.40079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.37967, -1.75516, -2.1323, -0.65668, -2.8624, -0.77365, 2.4599, -1.6532 ] + }, + { + "time": 0.8, + "offset": 144, + "vertices": [ 4.33227, 5.00964 ] + }, + { + "time": 0.9, + "offset": 62, + "vertices": [ -2.62872, -4.62305, -2.90607, 8.52032, -0.22961, 8.99833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.00874, 9.84058 ] + }, + { + "time": 1.0667, + "offset": 150, + "vertices": [ 5.88568, 2.31329, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 3.24279, 5.42923, -3.33963, 5.37029, 3.24279, 5.42923, 5.48474, 1.33588, -3.33963, 5.37029, 3.24279, 5.42923, 5.48474, 1.33588, 6.45844, -3.76048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.88568, 2.31329, 6.32144, 0.17871 ] + } + ] + }, + "raptor-jaw": { + "raptor-jaw": [ + {}, + { + "time": 0.2667, + "offset": 2, + "vertices": [ -4.47122, -4.24109, -3.60373, -3.41827, -8.41095, -2.54828, -5.50699, -1.7359, -2.66876, -0.81238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5.87677, -3.0119, -8.36108, -4.3338, -1.12198, -1.06427, -2.6153, -2.24945, -8.84198, -3.32513, -4.86157, -4.61145, -10.66547, -5.80609, -5.57019, -5.28363, -5.70374, -5.41016 ] + }, + { + "time": 0.8, + "offset": 2, + "vertices": [ -4.47122, -4.24109, -3.60373, -3.41827, -2.6868, -2.5484, -1.83014, -1.7359, -0.85641, -0.81238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.17538, -3.0119, -4.56903, -4.3338, -1.12198, -1.06427, -2.37146, -2.24939, -3.50571, -3.3252, -4.86157, -4.61145, -4.60556, -4.36859, -5.57019, -5.28363, -5.70374, -5.41016 ] + }, + { "time": 1.0667 } + ] + }, + "raptor-saddle": { + "raptor-saddle-w-shadow": [ + { + "vertices": [ -0.00729, 4.41981, 0, 0, -0.01709, 10.45464, -0.01709, 10.45464, -0.01709, 10.45464, 0, 0, 0, 0, 0.01511, -8.47841, -0.0061, 3.66493, -0.0061, 3.66493, -0.0061, 3.66493, -0.0061, 3.66493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01511, -8.47841, -0.00729, 4.41981, 0, 0, 0, 0, -0.0061, 3.66493, -0.0061, 3.66493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0, 0, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841 ] + }, + { "time": 0.2667 }, + { + "time": 0.5333, + "vertices": [ 0.22061, -8.83728, 0, 0, 0.17395, -6.96783, 0.17395, -6.96783, 0.17395, -6.96783, 0, 0, 0, 0, -0.1377, 5.51426, 0.12805, -5.12938, 0, 0, 0, 0, 0.12805, -5.12938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.1377, 5.51426, 0.22061, -8.83728, 0, 0, 0, 0, 0.12805, -5.12938, 0.12805, -5.12938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, 0, 0, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426 ] + }, + { "time": 0.8 }, + { + "time": 1.0667, + "vertices": [ -0.00729, 4.41981, 0, 0, -0.01709, 10.45464, -0.01709, 10.45464, -0.01709, 10.45464, 0, 0, 0, 0, 0.01511, -8.47841, -0.0061, 3.66493, -0.0061, 3.66493, -0.0061, 3.66493, -0.0061, 3.66493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01511, -8.47841, -0.00729, 4.41981, 0, 0, 0, 0, -0.0061, 3.66493, -0.0061, 3.66493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0, 0, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841 ] + } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/player/example/assets/spineboy-pma.atlas b/apps/module-ts/src/spine-ts/player/example/assets/spineboy-pma.atlas new file mode 100755 index 0000000..d249a56 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/assets/spineboy-pma.atlas @@ -0,0 +1,286 @@ + +spineboy-pma.png +size: 1024,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +crosshair + rotate: false + xy: 813, 160 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +eye-indifferent + rotate: false + xy: 569, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +eye-surprised + rotate: true + xy: 643, 7 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +front-bracer + rotate: false + xy: 811, 51 + size: 29, 40 + orig: 29, 40 + offset: 0, 0 + index: -1 +front-fist-closed + rotate: false + xy: 807, 93 + size: 38, 41 + orig: 38, 41 + offset: 0, 0 + index: -1 +front-fist-open + rotate: false + xy: 815, 210 + size: 43, 44 + orig: 43, 44 + offset: 0, 0 + index: -1 +front-foot + rotate: true + xy: 706, 64 + size: 63, 35 + orig: 63, 35 + offset: 0, 0 + index: -1 +front-shin + rotate: false + xy: 80, 11 + size: 41, 92 + orig: 41, 92 + offset: 0, 0 + index: -1 +front-thigh + rotate: false + xy: 754, 12 + size: 23, 56 + orig: 23, 56 + offset: 0, 0 + index: -1 +front-upper-arm + rotate: false + xy: 618, 5 + size: 23, 49 + orig: 23, 49 + offset: 0, 0 + index: -1 +goggles + rotate: false + xy: 214, 20 + size: 131, 83 + orig: 131, 83 + offset: 0, 0 + index: -1 +gun + rotate: true + xy: 347, 14 + size: 105, 102 + orig: 105, 102 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 80, 105 + size: 136, 149 + orig: 136, 149 + offset: 0, 0 + index: -1 +hoverboard-board + rotate: true + xy: 2, 8 + size: 246, 76 + orig: 246, 76 + offset: 0, 0 + index: -1 +hoverboard-thruster + rotate: false + xy: 478, 2 + size: 30, 32 + orig: 30, 32 + offset: 0, 0 + index: -1 +hoverglow-small + rotate: true + xy: 218, 117 + size: 137, 38 + orig: 137, 38 + offset: 0, 0 + index: -1 +mouth-grind + rotate: true + xy: 775, 80 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth-oooo + rotate: true + xy: 779, 31 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth-smile + rotate: true + xy: 783, 207 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +muzzle-glow + rotate: false + xy: 779, 4 + size: 25, 25 + orig: 25, 25 + offset: 0, 0 + index: -1 +muzzle-ring + rotate: false + xy: 451, 14 + size: 25, 105 + orig: 25, 105 + offset: 0, 0 + index: -1 +muzzle01 + rotate: true + xy: 664, 60 + size: 67, 40 + orig: 67, 40 + offset: 0, 0 + index: -1 +muzzle02 + rotate: true + xy: 580, 56 + size: 68, 42 + orig: 68, 42 + offset: 0, 0 + index: -1 +muzzle03 + rotate: true + xy: 478, 36 + size: 83, 53 + orig: 83, 53 + offset: 0, 0 + index: -1 +muzzle04 + rotate: true + xy: 533, 49 + size: 75, 45 + orig: 75, 45 + offset: 0, 0 + index: -1 +muzzle05 + rotate: true + xy: 624, 56 + size: 68, 38 + orig: 68, 38 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 806, 8 + size: 18, 21 + orig: 18, 21 + offset: 0, 0 + index: -1 +portal-bg + rotate: false + xy: 258, 121 + size: 133, 133 + orig: 133, 133 + offset: 0, 0 + index: -1 +portal-flare1 + rotate: true + xy: 690, 2 + size: 56, 30 + orig: 56, 30 + offset: 0, 0 + index: -1 +portal-flare2 + rotate: false + xy: 510, 3 + size: 57, 31 + orig: 57, 31 + offset: 0, 0 + index: -1 +portal-flare3 + rotate: true + xy: 722, 4 + size: 58, 30 + orig: 58, 30 + offset: 0, 0 + index: -1 +portal-shade + rotate: false + xy: 393, 121 + size: 133, 133 + orig: 133, 133 + offset: 0, 0 + index: -1 +portal-streaks1 + rotate: false + xy: 528, 126 + size: 126, 128 + orig: 126, 128 + offset: 0, 0 + index: -1 +portal-streaks2 + rotate: false + xy: 656, 129 + size: 125, 125 + orig: 125, 125 + offset: 0, 0 + index: -1 +rear-bracer + rotate: false + xy: 826, 13 + size: 28, 36 + orig: 28, 36 + offset: 0, 0 + index: -1 +rear-foot + rotate: true + xy: 743, 70 + size: 57, 30 + orig: 57, 30 + offset: 0, 0 + index: -1 +rear-shin + rotate: false + xy: 174, 14 + size: 38, 89 + orig: 38, 89 + offset: 0, 0 + index: -1 +rear-thigh + rotate: false + xy: 783, 158 + size: 28, 47 + orig: 28, 47 + offset: 0, 0 + index: -1 +rear-upper-arm + rotate: true + xy: 783, 136 + size: 20, 44 + orig: 20, 44 + offset: 0, 0 + index: -1 +torso + rotate: false + xy: 123, 13 + size: 49, 90 + orig: 49, 90 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/player/example/assets/spineboy-pma.png b/apps/module-ts/src/spine-ts/player/example/assets/spineboy-pma.png new file mode 100755 index 0000000..872a63a Binary files /dev/null and b/apps/module-ts/src/spine-ts/player/example/assets/spineboy-pma.png differ diff --git a/apps/module-ts/src/spine-ts/player/example/assets/spineboy-pro.skel b/apps/module-ts/src/spine-ts/player/example/assets/spineboy-pro.skel new file mode 100755 index 0000000..63db99c Binary files /dev/null and b/apps/module-ts/src/spine-ts/player/example/assets/spineboy-pro.skel differ diff --git a/apps/module-ts/src/spine-ts/player/example/editor.html b/apps/module-ts/src/spine-ts/player/example/editor.html new file mode 100755 index 0000000..641ffe2 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/editor.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + +

              + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/player/example/embedding-binary-example.html b/apps/module-ts/src/spine-ts/player/example/embedding-binary-example.html new file mode 100755 index 0000000..ddcf652 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/embedding-binary-example.html @@ -0,0 +1,24 @@ + + + +
              + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/player/example/embedding-json-example.html b/apps/module-ts/src/spine-ts/player/example/embedding-json-example.html new file mode 100755 index 0000000..3df8d48 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/embedding-json-example.html @@ -0,0 +1,24 @@ + + + +
              + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/player/example/external/codemirror.css b/apps/module-ts/src/spine-ts/player/example/external/codemirror.css new file mode 100755 index 0000000..8f489dd --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/external/codemirror.css @@ -0,0 +1,395 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; + color: black; + direction: ltr; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + white-space: nowrap; +} + +.CodeMirror-guttermarker { color: black; } +.CodeMirror-guttermarker-subtle { color: #999; } + +/* CURSOR */ + +.CodeMirror-cursor { + border-left: 1px solid black; + border-right: none; + width: 0; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.cm-fat-cursor .CodeMirror-cursor { + width: auto; + border: 0 !important; + background: #7e7; +} +.cm-fat-cursor div.CodeMirror-cursors { + z-index: 1; +} +.cm-fat-cursor-mark { + background-color: rgba(20, 255, 20, 0.5); + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; +} +.cm-animate-fat-cursor { + width: auto; + border: 0; + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; + background-color: #7e7; +} +@-moz-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@-webkit-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} + +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror-overwrite .CodeMirror-cursor {} + +.cm-tab { display: inline-block; text-decoration: inherit; } + +.CodeMirror-rulers { + position: absolute; + left: 0; right: 0; top: -50px; bottom: -20px; + overflow: hidden; +} +.CodeMirror-ruler { + border-left: 1px solid #ccc; + top: 0; bottom: 0; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} +.cm-strikethrough {text-decoration: line-through;} + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable, +.cm-s-default .cm-punctuation, +.cm-s-default .cm-property, +.cm-s-default .cm-operator {} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +.CodeMirror-composing { border-bottom: 2px solid; } + +/* Default styles for common addons */ + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;} +.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + position: relative; + overflow: hidden; + background: white; +} + +.CodeMirror-scroll { + overflow: scroll !important; /* Things will break if this is overridden */ + /* 30px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -30px; margin-right: -30px; + padding-bottom: 30px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; +} +.CodeMirror-sizer { + position: relative; + border-right: 30px solid transparent; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actual scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + min-height: 100%; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + display: inline-block; + vertical-align: top; + margin-bottom: -30px; +} +.CodeMirror-gutter-wrapper { + position: absolute; + z-index: 4; + background: none !important; + border: none !important; +} +.CodeMirror-gutter-background { + position: absolute; + top: 0; bottom: 0; + z-index: 4; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} +.CodeMirror-gutter-wrapper ::selection { background-color: transparent } +.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent } + +.CodeMirror-lines { + cursor: text; + min-height: 1px; /* prevents collapsing before first draw */ +} +.CodeMirror pre { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; + -webkit-tap-highlight-color: transparent; + -webkit-font-variant-ligatures: contextual; + font-variant-ligatures: contextual; +} +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + padding: 0.1px; /* Force widget margins to stay inside of the container */ +} + +.CodeMirror-widget {} + +.CodeMirror-rtl pre { direction: rtl; } + +.CodeMirror-code { + outline: none; +} + +/* Force content-box sizing for the elements where we expect it */ +.CodeMirror-scroll, +.CodeMirror-sizer, +.CodeMirror-gutter, +.CodeMirror-gutters, +.CodeMirror-linenumber { + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.CodeMirror-cursor { + position: absolute; + pointer-events: none; +} +.CodeMirror-measure pre { position: static; } + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 3; +} +div.CodeMirror-dragcursors { + visibility: visible; +} + +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } +.CodeMirror-crosshair { cursor: crosshair; } +.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } +.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } + +.cm-searching { + background-color: #ffa; + background-color: rgba(255, 255, 0, .4); +} + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} + +/* See issue #2901 */ +.cm-tab-wrap-hack:after { content: ''; } + +/* Help users use markselection to safely style text background */ +span.CodeMirror-selectedtext { background: none; } + +.CodeMirror { + font-family: Monaco, "Courier New", monospace; + font-weight: normal; + font-size: 14px; + line-height: 18px; + letter-spacing: 0px; + height: 100%; +} + +.cm-s-monokai.CodeMirror { background: #1e1e1e; color: #f8f8f2; } +.cm-s-monokai div.CodeMirror-selected { background: #464646; } +.cm-s-monokai .CodeMirror-line::selection, .cm-s-monokai .CodeMirror-line > span::selection, .cm-s-monokai .CodeMirror-line > span > span::selection { background: rgba(73, 72, 62, .99); } +.cm-s-monokai .CodeMirror-line::-moz-selection, .cm-s-monokai .CodeMirror-line > span::-moz-selection, .cm-s-monokai .CodeMirror-line > span > span::-moz-selection { background: rgba(73, 72, 62, .99); } +.cm-s-monokai .CodeMirror-gutters { background: #1e1e1e; border-right: 0px; } +.cm-s-monokai .CodeMirror-guttermarker { color: white; } +.cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-monokai .CodeMirror-linenumber { color: #828282; } +.cm-s-monokai .CodeMirror-cursor { border-left: 1px solid #f8f8f0; } + +.cm-s-monokai span.cm-comment { color: #84ea53; } +.cm-s-monokai span.cm-atom { color: #539BD8; } +.cm-s-monokai span.cm-number { color: #AFC9A2; } + +.cm-s-monokai span.cm-comment.cm-attribute { color: #97b757; } +.cm-s-monokai span.cm-comment.cm-def { color: #bc9262; } +.cm-s-monokai span.cm-comment.cm-tag { color: #bc6283; } +.cm-s-monokai span.cm-comment.cm-type { color: #5998a6; } + +.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute { color: #a6e22e; } +.cm-s-monokai span.cm-keyword { color: #b97cb5; } +.cm-s-monokai span.cm-builtin { color: #b97cb5; } +.cm-s-monokai span.cm-string { color: #CA8D73; } + +.cm-s-monokai span.cm-variable { color: #99D9FE; } +.cm-s-monokai span.cm-variable-2 { color: #DCDDA7; } +.cm-s-monokai span.cm-variable-3, .cm-s-monokai span.cm-type { color: #DCDDA7; } +.cm-s-monokai span.cm-def { color: #fd971f; } +.cm-s-monokai span.cm-bracket { color: #f8f8f2; } +.cm-s-monokai span.cm-tag { color: #f92672; } +.cm-s-monokai span.cm-header { color: #ae81ff; } +.cm-s-monokai span.cm-link { color: #ae81ff; } +.cm-s-monokai span.cm-error { background: #f92672; color: #f8f8f0; } + +.cm-s-monokai .CodeMirror-activeline-background { background: #373831; } +.cm-s-monokai .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/player/example/external/codemirror.js b/apps/module-ts/src/spine-ts/player/example/external/codemirror.js new file mode 100755 index 0000000..2e8fdc9 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/external/codemirror.js @@ -0,0 +1,12015 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// This is CodeMirror (https://codemirror.net), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.CodeMirror = factory()); +}(this, (function () { 'use strict'; + + // Kludges for bugs and behavior differences that can't be feature + // detected are enabled based on userAgent etc sniffing. + var userAgent = navigator.userAgent; + var platform = navigator.platform; + + var gecko = /gecko\/\d/i.test(userAgent); + var ie_upto10 = /MSIE \d/.test(userAgent); + var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); + var edge = /Edge\/(\d+)/.exec(userAgent); + var ie = ie_upto10 || ie_11up || edge; + var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); + var webkit = !edge && /WebKit\//.test(userAgent); + var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); + var chrome = !edge && /Chrome\//.test(userAgent); + var presto = /Opera\//.test(userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); + var phantom = /PhantomJS/.test(userAgent); + + var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent); + var android = /Android/.test(userAgent); + // This is woefully incomplete. Suggestions for alternative methods welcome. + var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); + var mac = ios || /Mac/.test(platform); + var chromeOS = /\bCrOS\b/.test(userAgent); + var windows = /win/i.test(platform); + + var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); + if (presto_version) { presto_version = Number(presto_version[1]); } + if (presto_version && presto_version >= 15) { presto = false; webkit = true; } + // Some browsers use the wrong event properties to signal cmd/ctrl on OS X + var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); + var captureRightClick = gecko || (ie && ie_version >= 9); + + function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } + + var rmClass = function(node, cls) { + var current = node.className; + var match = classTest(cls).exec(current); + if (match) { + var after = current.slice(match.index + match[0].length); + node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); + } + }; + + function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + { e.removeChild(e.firstChild); } + return e + } + + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e) + } + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) { e.className = className; } + if (style) { e.style.cssText = style; } + if (typeof content == "string") { e.appendChild(document.createTextNode(content)); } + else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } } + return e + } + // wrapper for elt, which removes the elt from the accessibility tree + function eltP(tag, content, className, style) { + var e = elt(tag, content, className, style); + e.setAttribute("role", "presentation"); + return e + } + + var range; + if (document.createRange) { range = function(node, start, end, endNode) { + var r = document.createRange(); + r.setEnd(endNode || node, end); + r.setStart(node, start); + return r + }; } + else { range = function(node, start, end) { + var r = document.body.createTextRange(); + try { r.moveToElementText(node.parentNode); } + catch(e) { return r } + r.collapse(true); + r.moveEnd("character", end); + r.moveStart("character", start); + return r + }; } + + function contains(parent, child) { + if (child.nodeType == 3) // Android browser always returns false when child is a textnode + { child = child.parentNode; } + if (parent.contains) + { return parent.contains(child) } + do { + if (child.nodeType == 11) { child = child.host; } + if (child == parent) { return true } + } while (child = child.parentNode) + } + + function activeElt() { + // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. + // IE < 10 will throw when accessed while the page is loading or in an iframe. + // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. + var activeElement; + try { + activeElement = document.activeElement; + } catch(e) { + activeElement = document.body || null; + } + while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) + { activeElement = activeElement.shadowRoot.activeElement; } + return activeElement + } + + function addClass(node, cls) { + var current = node.className; + if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; } + } + function joinClasses(a, b) { + var as = a.split(" "); + for (var i = 0; i < as.length; i++) + { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } } + return b + } + + var selectInput = function(node) { node.select(); }; + if (ios) // Mobile Safari apparently has a bug where select() is broken. + { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; } + else if (ie) // Suppress mysterious IE10 errors + { selectInput = function(node) { try { node.select(); } catch(_e) {} }; } + + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function(){return f.apply(null, args)} + } + + function copyObj(obj, target, overwrite) { + if (!target) { target = {}; } + for (var prop in obj) + { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) + { target[prop] = obj[prop]; } } + return target + } + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + function countColumn(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) { end = string.length; } + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i); + if (nextTab < 0 || nextTab >= end) + { return n + (end - i) } + n += nextTab - i; + n += tabSize - (n % tabSize); + i = nextTab + 1; + } + } + + var Delayed = function() {this.id = null;}; + Delayed.prototype.set = function (ms, f) { + clearTimeout(this.id); + this.id = setTimeout(f, ms); + }; + + function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) + { if (array[i] == elt) { return i } } + return -1 + } + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerGap = 30; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = {toString: function(){return "CodeMirror.Pass"}}; + + // Reused option objects for setSelection & friends + var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; + + // The inverse of countColumn -- find the offset that corresponds to + // a particular column. + function findColumn(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos); + if (nextTab == -1) { nextTab = string.length; } + var skipped = nextTab - pos; + if (nextTab == string.length || col + skipped >= goal) + { return pos + Math.min(skipped, goal - col) } + col += nextTab - pos; + col += tabSize - (col % tabSize); + pos = nextTab + 1; + if (col >= goal) { return pos } + } + } + + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) + { spaceStrs.push(lst(spaceStrs) + " "); } + return spaceStrs[n] + } + + function lst(arr) { return arr[arr.length-1] } + + function map(array, f) { + var out = []; + for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); } + return out + } + + function insertSorted(array, value, score) { + var pos = 0, priority = score(value); + while (pos < array.length && score(array[pos]) <= priority) { pos++; } + array.splice(pos, 0, value); + } + + function nothing() {} + + function createObj(base, props) { + var inst; + if (Object.create) { + inst = Object.create(base); + } else { + nothing.prototype = base; + inst = new nothing(); + } + if (props) { copyObj(props, inst); } + return inst + } + + var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; + function isWordCharBasic(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)) + } + function isWordChar(ch, helper) { + if (!helper) { return isWordCharBasic(ch) } + if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true } + return helper.test(ch) + } + + function isEmpty(obj) { + for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } } + return true + } + + // Extending unicode characters. A series of a non-extending char + + // any number of extending chars is treated as a single unit as far + // as editing and measuring is concerned. This is not fully correct, + // since some scripts/fonts/browsers also treat other configurations + // of code points as a group. + var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; + function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) } + + // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. + function skipExtendingChars(str, pos, dir) { + while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; } + return pos + } + + // Returns the value from the range [`from`; `to`] that satisfies + // `pred` and is closest to `from`. Assumes that at least `to` + // satisfies `pred`. Supports `from` being greater than `to`. + function findFirst(pred, from, to) { + // At any point we are certain `to` satisfies `pred`, don't know + // whether `from` does. + var dir = from > to ? -1 : 1; + for (;;) { + if (from == to) { return from } + var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); + if (mid == from) { return pred(mid) ? from : to } + if (pred(mid)) { to = mid; } + else { from = mid + dir; } + } + } + + // The display handles the DOM integration, both for input reading + // and content drawing. It holds references to DOM nodes and + // display-related state. + + function Display(place, doc, input) { + var d = this; + this.input = input; + + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + d.scrollbarFiller.setAttribute("cm-not-content", "true"); + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + d.gutterFiller.setAttribute("cm-not-content", "true"); + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = eltP("div", null, "CodeMirror-code"); + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + d.cursorDiv = elt("div", null, "CodeMirror-cursors"); + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure"); + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], + null, "position: relative; outline: none"); + var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); + // Moved around its parent to cover visible view. + d.mover = elt("div", [lines], null, "position: relative"); + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + d.sizerWidth = null; + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } + if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; } + + if (place) { + if (place.appendChild) { place.appendChild(d.wrapper); } + else { place(d.wrapper); } + } + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first; + d.reportedViewFrom = d.reportedViewTo = doc.first; + // Information about the rendered lines. + d.view = []; + d.renderedView = null; + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null; + // Empty space (in pixels) above the view + d.viewOffset = 0; + d.lastWrapHeight = d.lastWrapWidth = 0; + d.updateLineNumbers = null; + + d.nativeBarWidth = d.barHeight = d.barWidth = 0; + d.scrollbarsClipped = false; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false; + + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + // True when shift is held down. + d.shift = false; + + // Used to track whether anything happened since the context menu + // was opened. + d.selForContextMenu = null; + + d.activeTouch = null; + + input.init(d); + } + + // Find the line object corresponding to the given line number. + function getLine(doc, n) { + n -= doc.first; + if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") } + var chunk = doc; + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break } + n -= sz; + } + } + return chunk.lines[n] + } + + // Get the part of a document between two positions, as an array of + // strings. + function getBetween(doc, start, end) { + var out = [], n = start.line; + doc.iter(start.line, end.line + 1, function (line) { + var text = line.text; + if (n == end.line) { text = text.slice(0, end.ch); } + if (n == start.line) { text = text.slice(start.ch); } + out.push(text); + ++n; + }); + return out + } + // Get the lines between from and to, as array of strings. + function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value + return out + } + + // Update the height of a line, propagating the height change + // upwards to parent nodes. + function updateLineHeight(line, height) { + var diff = height - line.height; + if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } } + } + + // Given a line object, find its line number by walking up through + // its parent links. + function lineNo(line) { + if (line.parent == null) { return null } + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) { break } + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first + } + + // Find the line at the given vertical position, using the height + // information in the document tree. + function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { + var child = chunk.children[i$1], ch = child.height; + if (h < ch) { chunk = child; continue outer } + h -= ch; + n += child.chunkSize(); + } + return n + } while (!chunk.lines) + var i = 0; + for (; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) { break } + h -= lh; + } + return n + i + } + + function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size} + + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)) + } + + // A Pos instance represents a position within the text. + function Pos(line, ch, sticky) { + if ( sticky === void 0 ) sticky = null; + + if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) } + this.line = line; + this.ch = ch; + this.sticky = sticky; + } + + // Compare two positions, return 0 if they are the same, a negative + // number when a is less, and a positive number otherwise. + function cmp(a, b) { return a.line - b.line || a.ch - b.ch } + + function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } + + function copyPos(x) {return Pos(x.line, x.ch)} + function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } + function minPos(a, b) { return cmp(a, b) < 0 ? a : b } + + // Most of the external API clips given positions to make sure they + // actually exist within the document. + function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} + function clipPos(doc, pos) { + if (pos.line < doc.first) { return Pos(doc.first, 0) } + var last = doc.first + doc.size - 1; + if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) } + return clipToLen(pos, getLine(doc, pos.line).text.length) + } + function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) { return Pos(pos.line, linelen) } + else if (ch < 0) { return Pos(pos.line, 0) } + else { return pos } + } + function clipPosArray(doc, array) { + var out = []; + for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); } + return out + } + + // Optimize some code when these features are not used. + var sawReadOnlySpans = false, sawCollapsedSpans = false; + + function seeReadOnlySpans() { + sawReadOnlySpans = true; + } + + function seeCollapsedSpans() { + sawCollapsedSpans = true; + } + + // TEXTMARKER SPANS + + function MarkedSpan(marker, from, to) { + this.marker = marker; + this.from = from; this.to = to; + } + + // Search an array of spans for a span matching the given marker. + function getMarkedSpanFor(spans, marker) { + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) { return span } + } } + } + // Remove a span from an array, returning undefined if no spans are + // left (we don't store arrays for lines without spans). + function removeMarkedSpan(spans, span) { + var r; + for (var i = 0; i < spans.length; ++i) + { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } } + return r + } + // Add a span to a line. + function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + span.marker.attachLine(line); + } + + // Used for the algorithm that adjusts markers for a change in the + // document. These functions cut an array of spans at a given + // character position, returning an array of remaining chunks (or + // undefined if nothing remains). + function markedSpansBefore(old, startCh, isInsert) { + var nw; + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); + } + } } + return nw + } + function markedSpansAfter(old, endCh, isInsert) { + var nw; + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, + span.to == null ? null : span.to - endCh)); + } + } } + return nw + } + + // Given a change object, compute the new set of marker spans that + // cover the line in which the change took place. Removes spans + // entirely within the change, reconnects spans belonging to the + // same marker that appear on both sides of the change, and cuts off + // spans partially within the change. Returns an array of span + // arrays with one element for each line in (after) the change. + function stretchSpansOverChange(doc, change) { + if (change.full) { return null } + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) { return null } + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) { span.to = startCh; } + else if (sameLine) { span.to = found.to == null ? null : found.to + offset; } + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i$1 = 0; i$1 < last.length; ++i$1) { + var span$1 = last[i$1]; + if (span$1.to != null) { span$1.to += offset; } + if (span$1.from == null) { + var found$1 = getMarkedSpanFor(first, span$1.marker); + if (!found$1) { + span$1.from = offset; + if (sameLine) { (first || (first = [])).push(span$1); } + } + } else { + span$1.from += offset; + if (sameLine) { (first || (first = [])).push(span$1); } + } + } + } + // Make sure we didn't create any zero-length spans + if (first) { first = clearEmptySpans(first); } + if (last && last != first) { last = clearEmptySpans(last); } + + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers; + if (gap > 0 && first) + { for (var i$2 = 0; i$2 < first.length; ++i$2) + { if (first[i$2].to == null) + { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } } + for (var i$3 = 0; i$3 < gap; ++i$3) + { newMarkers.push(gapMarkers); } + newMarkers.push(last); + } + return newMarkers + } + + // Remove spans that are empty and don't have a clearWhenEmpty + // option of false. + function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) + { spans.splice(i--, 1); } + } + if (!spans.length) { return null } + return spans + } + + // Used to 'clip' out readOnly ranges when making a change. + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function (line) { + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + { (markers || (markers = [])).push(mark); } + } } + }); + if (!markers) { return null } + var parts = [{from: from, to: to}]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(0); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue } + var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) + { newParts.push({from: p.from, to: m.from}); } + if (dto > 0 || !mk.inclusiveRight && !dto) + { newParts.push({from: m.to, to: p.to}); } + parts.splice.apply(parts, newParts); + j += newParts.length - 3; + } + } + return parts + } + + // Connect or disconnect spans from a line. + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.detachLine(line); } + line.markedSpans = null; + } + function attachMarkedSpans(line, spans) { + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.attachLine(line); } + line.markedSpans = spans; + } + + // Helpers used when computing which overlapping collapsed span + // counts as the larger one. + function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 } + function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 } + + // Returns a number indicating which of two overlapping collapsed + // spans is larger (and thus includes the other). Falls back to + // comparing ids when the spans cover exactly the same range. + function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length; + if (lenDiff != 0) { return lenDiff } + var aPos = a.find(), bPos = b.find(); + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); + if (fromCmp) { return -fromCmp } + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); + if (toCmp) { return toCmp } + return b.id - a.id + } + + // Find out whether a line ends or starts in a collapsed span. If + // so, return the marker for that span. + function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) + { found = sp.marker; } + } } + return found + } + function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) } + function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) } + + function collapsedSpanAround(line, ch) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; } + } } + return found + } + + // Test whether there exists a collapsed span that partially + // overlaps (covers the start or end, but not both) of a new span. + // Such overlap is not allowed. + function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) { + var line = getLine(doc, lineNo$$1); + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (!sp.marker.collapsed) { continue } + var found = sp.marker.find(0); + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue } + if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || + fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) + { return true } + } } + } + + // A visual line is a line as drawn on the screen. Folding, for + // example, can cause multiple logical lines to appear on the same + // visual line. This finds the start of the visual line that the + // given line is part of (usually that is the line itself). + function visualLine(line) { + var merged; + while (merged = collapsedSpanAtStart(line)) + { line = merged.find(-1, true).line; } + return line + } + + function visualLineEnd(line) { + var merged; + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line; } + return line + } + + // Returns an array of logical lines that continue the visual line + // started by the argument, or undefined if there are no such lines. + function visualLineContinued(line) { + var merged, lines; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line + ;(lines || (lines = [])).push(line); + } + return lines + } + + // Get the line number of the start of the visual line that the + // given line number is part of. + function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), vis = visualLine(line); + if (line == vis) { return lineN } + return lineNo(vis) + } + + // Get the line number of the start of the next visual line after + // the given line. + function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) { return lineN } + var line = getLine(doc, lineN), merged; + if (!lineIsHidden(doc, line)) { return lineN } + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line; } + return lineNo(line) + 1 + } + + // Compute whether a line is hidden. Lines count as hidden when they + // are part of a visual line that starts with another line, or when + // they are entirely covered by collapsed, non-widget span. + function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) { continue } + if (sp.from == null) { return true } + if (sp.marker.widgetNode) { continue } + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + { return true } + } } + } + function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true); + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)) + } + if (span.marker.inclusiveRight && span.to == line.text.length) + { return true } + for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && + (sp.to == null || sp.to != span.from) && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) { return true } + } + } + + // Find the height above the given line. + function heightAtLine(lineObj) { + lineObj = visualLine(lineObj); + + var h = 0, chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) { break } + else { h += line.height; } + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i$1 = 0; i$1 < p.children.length; ++i$1) { + var cur = p.children[i$1]; + if (cur == chunk) { break } + else { h += cur.height; } + } + } + return h + } + + // Compute the character length of a line, taking into account + // collapsed ranges (see markText) that might hide parts, and join + // other lines onto it. + function lineLength(line) { + if (line.height == 0) { return 0 } + var len = line.text.length, merged, cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true); + cur = found.from.line; + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found$1 = merged.find(0, true); + len -= cur.text.length - found$1.from.ch; + cur = found$1.to.line; + len += cur.text.length - found$1.to.ch; + } + return len + } + + // Find the longest line in the document. + function findMaxLine(cm) { + var d = cm.display, doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(d.maxLine); + d.maxLineChanged = true; + doc.iter(function (line) { + var len = lineLength(line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); + } + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) { return f(from, to, "ltr", 0) } + var found = false; + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i); + found = true; + } + } + if (!found) { f(from, to, "ltr"); } + } + + var bidiOther = null; + function getBidiPartAt(order, ch, sticky) { + var found; + bidiOther = null; + for (var i = 0; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < ch && cur.to > ch) { return i } + if (cur.to == ch) { + if (cur.from != cur.to && sticky == "before") { found = i; } + else { bidiOther = i; } + } + if (cur.from == ch) { + if (cur.from != cur.to && sticky != "before") { found = i; } + else { bidiOther = i; } + } + } + return found != null ? found : bidiOther + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; + // Character types for codepoints 0x600 to 0x6f9 + var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; + function charType(code) { + if (code <= 0xf7) { return lowTypes.charAt(code) } + else if (0x590 <= code && code <= 0x5f4) { return "R" } + else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) } + else if (0x6ee <= code && code <= 0x8ac) { return "r" } + else if (0x2000 <= code && code <= 0x200b) { return "w" } + else if (code == 0x200c) { return "b" } + else { return "L" } + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; + + function BidiSpan(level, from, to) { + this.level = level; + this.from = from; this.to = to; + } + + return function(str, direction) { + var outerType = direction == "ltr" ? "L" : "R"; + + if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false } + var len = str.length, types = []; + for (var i = 0; i < len; ++i) + { types.push(charType(str.charCodeAt(i))); } + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { + var type = types[i$1]; + if (type == "m") { types[i$1] = prev; } + else { prev = type; } + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { + var type$1 = types[i$2]; + if (type$1 == "1" && cur == "r") { types[i$2] = "n"; } + else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { + var type$2 = types[i$3]; + if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; } + else if (type$2 == "," && prev$1 == types[i$3+1] && + (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; } + prev$1 = type$2; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i$4 = 0; i$4 < len; ++i$4) { + var type$3 = types[i$4]; + if (type$3 == ",") { types[i$4] = "N"; } + else if (type$3 == "%") { + var end = (void 0); + for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; + for (var j = i$4; j < end; ++j) { types[j] = replace; } + i$4 = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { + var type$4 = types[i$5]; + if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; } + else if (isStrong.test(type$4)) { cur$1 = type$4; } + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i$6 = 0; i$6 < len; ++i$6) { + if (isNeutral.test(types[i$6])) { + var end$1 = (void 0); + for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} + var before = (i$6 ? types[i$6-1] : outerType) == "L"; + var after = (end$1 < len ? types[end$1] : outerType) == "L"; + var replace$1 = before == after ? (before ? "L" : "R") : outerType; + for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; } + i$6 = end$1 - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m; + for (var i$7 = 0; i$7 < len;) { + if (countsAsLeft.test(types[i$7])) { + var start = i$7; + for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} + order.push(new BidiSpan(0, start, i$7)); + } else { + var pos = i$7, at = order.length; + for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} + for (var j$2 = pos; j$2 < i$7;) { + if (countsAsNum.test(types[j$2])) { + if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); } + var nstart = j$2; + for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} + order.splice(at, 0, new BidiSpan(2, nstart, j$2)); + pos = j$2; + } else { ++j$2; } + } + if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); } + } + } + if (direction == "ltr") { + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift(new BidiSpan(0, 0, m[0].length)); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push(new BidiSpan(0, len - m[0].length, len)); + } + } + + return direction == "rtl" ? order.reverse() : order + } + })(); + + // Get the bidi ordering for the given line (and cache it). Returns + // false for lines that are fully left-to-right, and an array of + // BidiSpan objects otherwise. + function getOrder(line, direction) { + var order = line.order; + if (order == null) { order = line.order = bidiOrdering(line.text, direction); } + return order + } + + // EVENT HANDLING + + // Lightweight event framework. on/off also work on DOM nodes, + // registering native DOM handlers. + + var noHandlers = []; + + var on = function(emitter, type, f) { + if (emitter.addEventListener) { + emitter.addEventListener(type, f, false); + } else if (emitter.attachEvent) { + emitter.attachEvent("on" + type, f); + } else { + var map$$1 = emitter._handlers || (emitter._handlers = {}); + map$$1[type] = (map$$1[type] || noHandlers).concat(f); + } + }; + + function getHandlers(emitter, type) { + return emitter._handlers && emitter._handlers[type] || noHandlers + } + + function off(emitter, type, f) { + if (emitter.removeEventListener) { + emitter.removeEventListener(type, f, false); + } else if (emitter.detachEvent) { + emitter.detachEvent("on" + type, f); + } else { + var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type]; + if (arr) { + var index = indexOf(arr, f); + if (index > -1) + { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); } + } + } + } + + function signal(emitter, type /*, values...*/) { + var handlers = getHandlers(emitter, type); + if (!handlers.length) { return } + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); } + } + + // The DOM events that CodeMirror handles can be overridden by + // registering a (non-DOM) handler on the editor for the event name, + // and preventDefault-ing the event in that handler. + function signalDOMEvent(cm, e, override) { + if (typeof e == "string") + { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; } + signal(cm, override || e.type, cm, e); + return e_defaultPrevented(e) || e.codemirrorIgnore + } + + function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity; + if (!arr) { return } + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); + for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1) + { set.push(arr[i]); } } + } + + function hasHandler(emitter, type) { + return getHandlers(emitter, type).length > 0 + } + + // Add on and off methods to a constructor's prototype, to make + // registering events on such objects more convenient. + function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f);}; + ctor.prototype.off = function(type, f) {off(this, type, f);}; + } + + // Due to the fact that we still support jurassic IE versions, some + // compatibility wrappers are needed. + + function e_preventDefault(e) { + if (e.preventDefault) { e.preventDefault(); } + else { e.returnValue = false; } + } + function e_stopPropagation(e) { + if (e.stopPropagation) { e.stopPropagation(); } + else { e.cancelBubble = true; } + } + function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false + } + function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} + + function e_target(e) {return e.target || e.srcElement} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) { b = 1; } + else if (e.button & 2) { b = 3; } + else if (e.button & 4) { b = 2; } + } + if (mac && e.ctrlKey && b == 1) { b = 3; } + return b + } + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie && ie_version < 9) { return false } + var div = elt('div'); + return "draggable" in div || "dragDrop" in div + }(); + + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) + { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } + } + var node = zwspSupported ? elt("span", "\u200b") : + elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + node.setAttribute("cm-text", ""); + return node + } + + // Feature-detect IE's crummy client rect reporting for bidi text + var badBidiRects; + function hasBadBidiRects(measure) { + if (badBidiRects != null) { return badBidiRects } + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); + var r0 = range(txt, 0, 1).getBoundingClientRect(); + var r1 = range(txt, 1, 2).getBoundingClientRect(); + removeChildren(measure); + if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780) + return badBidiRects = (r1.right - r0.right < 3) + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) { nl = string.length; } + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result + } : function (string) { return string.split(/\r\n?|\n/); }; + + var hasSelection = window.getSelection ? function (te) { + try { return te.selectionStart != te.selectionEnd } + catch(e) { return false } + } : function (te) { + var range$$1; + try {range$$1 = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range$$1 || range$$1.parentElement() != te) { return false } + return range$$1.compareEndPoints("StartToEnd", range$$1) != 0 + }; + + var hasCopyEvent = (function () { + var e = elt("div"); + if ("oncopy" in e) { return true } + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == "function" + })(); + + var badZoomedRects = null; + function hasBadZoomedRects(measure) { + if (badZoomedRects != null) { return badZoomedRects } + var node = removeChildrenAndAdd(measure, elt("span", "x")); + var normal = node.getBoundingClientRect(); + var fromRange = range(node, 0, 1).getBoundingClientRect(); + return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1 + } + + // Known modes, by name and by MIME + var modes = {}, mimeModes = {}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + function defineMode(name, mode) { + if (arguments.length > 2) + { mode.dependencies = Array.prototype.slice.call(arguments, 2); } + modes[name] = mode; + } + + function defineMIME(mime, spec) { + mimeModes[mime] = spec; + } + + // Given a MIME type, a {name, ...options} config object, or a name + // string, return a mode config object. + function resolveMode(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + if (typeof found == "string") { found = {name: found}; } + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return resolveMode("application/xml") + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { + return resolveMode("application/json") + } + if (typeof spec == "string") { return {name: spec} } + else { return spec || {name: "null"} } + } + + // Given a mode spec (anything that resolveMode accepts), find and + // initialize an actual mode object. + function getMode(options, spec) { + spec = resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) { return getMode(options, "text/plain") } + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) { continue } + if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; } + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + if (spec.helperType) { modeObj.helperType = spec.helperType; } + if (spec.modeProps) { for (var prop$1 in spec.modeProps) + { modeObj[prop$1] = spec.modeProps[prop$1]; } } + + return modeObj + } + + // This can be used to attach properties to mode objects from + // outside the actual mode definition. + var modeExtensions = {}; + function extendMode(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + copyObj(properties, exts); + } + + function copyState(mode, state) { + if (state === true) { return state } + if (mode.copyState) { return mode.copyState(state) } + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) { val = val.concat([]); } + nstate[n] = val; + } + return nstate + } + + // Given a mode and a state (for that mode), find the inner mode and + // state at the position that the state refers to. + function innerMode(mode, state) { + var info; + while (mode.innerMode) { + info = mode.innerMode(state); + if (!info || info.mode == mode) { break } + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state} + } + + function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true + } + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + var StringStream = function(string, tabSize, lineOracle) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + this.lineStart = 0; + this.lineOracle = lineOracle; + }; + + StringStream.prototype.eol = function () {return this.pos >= this.string.length}; + StringStream.prototype.sol = function () {return this.pos == this.lineStart}; + StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined}; + StringStream.prototype.next = function () { + if (this.pos < this.string.length) + { return this.string.charAt(this.pos++) } + }; + StringStream.prototype.eat = function (match) { + var ch = this.string.charAt(this.pos); + var ok; + if (typeof match == "string") { ok = ch == match; } + else { ok = ch && (match.test ? match.test(ch) : match(ch)); } + if (ok) {++this.pos; return ch} + }; + StringStream.prototype.eatWhile = function (match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start + }; + StringStream.prototype.eatSpace = function () { + var this$1 = this; + + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; } + return this.pos > start + }; + StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;}; + StringStream.prototype.skipTo = function (ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true} + }; + StringStream.prototype.backUp = function (n) {this.pos -= n;}; + StringStream.prototype.column = function () { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) + }; + StringStream.prototype.indentation = function () { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) + }; + StringStream.prototype.match = function (pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; }; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) { this.pos += pattern.length; } + return true + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) { return null } + if (match && consume !== false) { this.pos += match[0].length; } + return match + } + }; + StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)}; + StringStream.prototype.hideFirstChars = function (n, inner) { + this.lineStart += n; + try { return inner() } + finally { this.lineStart -= n; } + }; + StringStream.prototype.lookAhead = function (n) { + var oracle = this.lineOracle; + return oracle && oracle.lookAhead(n) + }; + StringStream.prototype.baseToken = function () { + var oracle = this.lineOracle; + return oracle && oracle.baseToken(this.pos) + }; + + var SavedContext = function(state, lookAhead) { + this.state = state; + this.lookAhead = lookAhead; + }; + + var Context = function(doc, state, line, lookAhead) { + this.state = state; + this.doc = doc; + this.line = line; + this.maxLookAhead = lookAhead || 0; + this.baseTokens = null; + this.baseTokenPos = 1; + }; + + Context.prototype.lookAhead = function (n) { + var line = this.doc.getLine(this.line + n); + if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; } + return line + }; + + Context.prototype.baseToken = function (n) { + var this$1 = this; + + if (!this.baseTokens) { return null } + while (this.baseTokens[this.baseTokenPos] <= n) + { this$1.baseTokenPos += 2; } + var type = this.baseTokens[this.baseTokenPos + 1]; + return {type: type && type.replace(/( |^)overlay .*/, ""), + size: this.baseTokens[this.baseTokenPos] - n} + }; + + Context.prototype.nextLine = function () { + this.line++; + if (this.maxLookAhead > 0) { this.maxLookAhead--; } + }; + + Context.fromSaved = function (doc, saved, line) { + if (saved instanceof SavedContext) + { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) } + else + { return new Context(doc, copyState(doc.mode, saved), line) } + }; + + Context.prototype.save = function (copy) { + var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; + return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state + }; + + + // Compute a style array (an array starting with a mode generation + // -- for invalidation -- followed by pairs of end positions and + // style strings), which is used to highlight the tokens on the + // line. + function highlightLine(cm, line, context, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], lineClasses = {}; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); }, + lineClasses, forceToEnd); + var state = context.state; + + // Run overlays, adjust style array. + var loop = function ( o ) { + context.baseTokens = st; + var overlay = cm.state.overlays[o], i = 1, at = 0; + context.state = true; + runMode(cm, line.text, overlay.mode, context, function (end, style) { + var start = i; + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i]; + if (i_end > end) + { st.splice(i, 1, end, st[i+1], i_end); } + i += 2; + at = Math.min(end, i_end); + } + if (!style) { return } + if (overlay.opaque) { + st.splice(start, i - start, end, "overlay " + style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start+1]; + st[start+1] = (cur ? cur + " " : "") + "overlay " + style; + } + } + }, lineClasses); + context.state = state; + context.baseTokens = null; + context.baseTokenPos = 1; + }; + + for (var o = 0; o < cm.state.overlays.length; ++o) loop( o ); + + return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null} + } + + function getLineStyles(cm, line, updateFrontier) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var context = getContextBefore(cm, lineNo(line)); + var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); + var result = highlightLine(cm, line, context); + if (resetState) { context.state = resetState; } + line.stateAfter = context.save(!resetState); + line.styles = result.styles; + if (result.classes) { line.styleClasses = result.classes; } + else if (line.styleClasses) { line.styleClasses = null; } + if (updateFrontier === cm.doc.highlightFrontier) + { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); } + } + return line.styles + } + + function getContextBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display; + if (!doc.mode.startState) { return new Context(doc, true, n) } + var start = findStartLine(cm, n, precise); + var saved = start > doc.first && getLine(doc, start - 1).stateAfter; + var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start); + + doc.iter(start, n, function (line) { + processLine(cm, line.text, context); + var pos = context.line; + line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; + context.nextLine(); + }); + if (precise) { doc.modeFrontier = context.line; } + return context + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. Used for lines that + // aren't currently visible. + function processLine(cm, text, context, startAt) { + var mode = cm.doc.mode; + var stream = new StringStream(text, cm.options.tabSize, context); + stream.start = stream.pos = startAt || 0; + if (text == "") { callBlankLine(mode, context.state); } + while (!stream.eol()) { + readToken(mode, stream, context.state); + stream.start = stream.pos; + } + } + + function callBlankLine(mode, state) { + if (mode.blankLine) { return mode.blankLine(state) } + if (!mode.innerMode) { return } + var inner = innerMode(mode, state); + if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) } + } + + function readToken(mode, stream, state, inner) { + for (var i = 0; i < 10; i++) { + if (inner) { inner[0] = innerMode(mode, state).mode; } + var style = mode.token(stream, state); + if (stream.pos > stream.start) { return style } + } + throw new Error("Mode " + mode.name + " failed to advance stream.") + } + + var Token = function(stream, type, state) { + this.start = stream.start; this.end = stream.pos; + this.string = stream.current(); + this.type = type || null; + this.state = state; + }; + + // Utility for getTokenAt and getLineTokens + function takeToken(cm, pos, precise, asArray) { + var doc = cm.doc, mode = doc.mode, style; + pos = clipPos(doc, pos); + var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise); + var stream = new StringStream(line.text, cm.options.tabSize, context), tokens; + if (asArray) { tokens = []; } + while ((asArray || stream.pos < pos.ch) && !stream.eol()) { + stream.start = stream.pos; + style = readToken(mode, stream, context.state); + if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); } + } + return asArray ? tokens : new Token(stream, style, context.state) + } + + function extractLineClasses(type, output) { + if (type) { for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); + if (!lineClass) { break } + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); + var prop = lineClass[1] ? "bgClass" : "textClass"; + if (output[prop] == null) + { output[prop] = lineClass[2]; } + else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) + { output[prop] += " " + lineClass[2]; } + } } + return type + } + + // Run the given mode's parser over a line, calling f for each token. + function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; } + var curStart = 0, curStyle = null; + var stream = new StringStream(text, cm.options.tabSize, context), style; + var inner = cm.options.addModeClass && [null]; + if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); } + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + if (forceToEnd) { processLine(cm, text, context, stream.pos); } + stream.pos = text.length; + style = null; + } else { + style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); + } + if (inner) { + var mName = inner[0].name; + if (mName) { style = "m-" + (style ? mName + " " + style : mName); } + } + if (!flattenSpans || curStyle != style) { + while (curStart < stream.start) { + curStart = Math.min(stream.start, curStart + 5000); + f(curStart, curStyle); + } + curStyle = style; + } + stream.start = stream.pos; + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 + // characters, and returns inaccurate measurements in nodes + // starting around 5000 chars. + var pos = Math.min(stream.pos, curStart + 5000); + f(pos, curStyle); + curStart = pos; + } + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc; + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); + for (var search = n; search > lim; --search) { + if (search <= doc.first) { return doc.first } + var line = getLine(doc, search - 1), after = line.stateAfter; + if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) + { return search } + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline + } + + function retreatFrontier(doc, n) { + doc.modeFrontier = Math.min(doc.modeFrontier, n); + if (doc.highlightFrontier < n - 10) { return } + var start = doc.first; + for (var line = n - 1; line > start; line--) { + var saved = getLine(doc, line).stateAfter; + // change is on 3 + // state on line 1 looked ahead 2 -- so saw 3 + // test 1 + 2 < 3 should cover this + if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { + start = line + 1; + break + } + } + doc.highlightFrontier = Math.min(doc.highlightFrontier, start); + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + var Line = function(text, markedSpans, estimateHeight) { + this.text = text; + attachMarkedSpans(this, markedSpans); + this.height = estimateHeight ? estimateHeight(this) : 1; + }; + + Line.prototype.lineNo = function () { return lineNo(this) }; + eventMixin(Line); + + // Change the content (text, markers) of a line. Automatically + // invalidates cached information and tries to re-estimate the + // line's height. + function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) { line.stateAfter = null; } + if (line.styles) { line.styles = null; } + if (line.order != null) { line.order = null; } + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) { updateLineHeight(line, estHeight); } + } + + // Detach a line from the document tree and its markers. + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + // Convert a style as returned by a mode (either null, or a string + // containing one or more styles) to a CSS style. This is cached, + // and also looks for line-wide styles. + var styleToClassCache = {}, styleToClassCacheWithMode = {}; + function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) { return null } + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; + return cache[style] || + (cache[style] = style.replace(/\S+/g, "cm-$&")) + } + + // Render the DOM representation of the text of a line. Also builds + // up a 'line map', which points at the DOM nodes that represent + // specific stretches of text, and is used by the measuring code. + // The returned object contains the DOM node, this map, and + // information about line-wide styles that were set by the mode. + function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); + var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content, + col: 0, pos: 0, cm: cm, + trailingSpace: false, + splitSpaces: cm.getOption("lineWrapping")}; + lineView.measure = {}; + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0); + builder.pos = 0; + builder.addToken = buildToken; + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) + { builder.addToken = buildTokenBadBidi(builder.addToken, order); } + builder.map = []; + var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); + insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); + if (line.styleClasses) { + if (line.styleClasses.bgClass) + { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); } + if (line.styleClasses.textClass) + { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) + { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); } + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map; + lineView.measure.cache = {}; + } else { + (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map) + ;(lineView.measure.caches || (lineView.measure.caches = [])).push({}); + } + } + + // See issue #2901 + if (webkit) { + var last = builder.content.lastChild; + if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) + { builder.content.className = "cm-tab-wrap-hack"; } + } + + signal(cm, "renderLine", cm, lineView.line, builder.pre); + if (builder.pre.className) + { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); } + + return builder + } + + function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + ch.charCodeAt(0).toString(16); + token.setAttribute("aria-label", token.title); + return token + } + + // Build up the DOM representation for a single token, and add it to + // the line map. Takes care to render special characters separately. + function buildToken(builder, text, style, startStyle, endStyle, css, attributes) { + if (!text) { return } + var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; + var special = builder.cm.state.specialChars, mustWrap = false; + var content; + if (!special.test(text)) { + builder.col += text.length; + content = document.createTextNode(displayText); + builder.map.push(builder.pos, builder.pos + text.length, content); + if (ie && ie_version < 9) { mustWrap = true; } + builder.pos += text.length; + } else { + content = document.createDocumentFragment(); + var pos = 0; + while (true) { + special.lastIndex = pos; + var m = special.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); } + else { content.appendChild(txt); } + builder.map.push(builder.pos, builder.pos + skipped, txt); + builder.col += skipped; + builder.pos += skipped; + } + if (!m) { break } + pos += skipped + 1; + var txt$1 = (void 0); + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; + txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + txt$1.setAttribute("role", "presentation"); + txt$1.setAttribute("cm-text", "\t"); + builder.col += tabWidth; + } else if (m[0] == "\r" || m[0] == "\n") { + txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); + txt$1.setAttribute("cm-text", m[0]); + builder.col += 1; + } else { + txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); + txt$1.setAttribute("cm-text", m[0]); + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); } + else { content.appendChild(txt$1); } + builder.col += 1; + } + builder.map.push(builder.pos, builder.pos + 1, txt$1); + builder.pos++; + } + } + builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; + if (style || startStyle || endStyle || mustWrap || css) { + var fullStyle = style || ""; + if (startStyle) { fullStyle += startStyle; } + if (endStyle) { fullStyle += endStyle; } + var token = elt("span", [content], fullStyle, css); + if (attributes) { + for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class") + { token.setAttribute(attr, attributes[attr]); } } + } + return builder.content.appendChild(token) + } + builder.content.appendChild(content); + } + + // Change some spaces to NBSP to prevent the browser from collapsing + // trailing spaces at the end of a line when rendering text (issue #1362). + function splitSpaces(text, trailingBefore) { + if (text.length > 1 && !/ /.test(text)) { return text } + var spaceBefore = trailingBefore, result = ""; + for (var i = 0; i < text.length; i++) { + var ch = text.charAt(i); + if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) + { ch = "\u00a0"; } + result += ch; + spaceBefore = ch == " "; + } + return result + } + + // Work around nonsense dimensions being reported for stretches of + // right-to-left text. + function buildTokenBadBidi(inner, order) { + return function (builder, text, style, startStyle, endStyle, css, attributes) { + style = style ? style + " cm-force-border" : "cm-force-border"; + var start = builder.pos, end = start + text.length; + for (;;) { + // Find the part that overlaps with the start of this text + var part = (void 0); + for (var i = 0; i < order.length; i++) { + part = order[i]; + if (part.to > start && part.from <= start) { break } + } + if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) } + inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes); + startStyle = null; + text = text.slice(part.to - start); + start = part.to; + } + } + } + + function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode; + if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); } + if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { + if (!widget) + { widget = builder.content.appendChild(document.createElement("span")); } + widget.setAttribute("cm-marker", marker.id); + } + if (widget) { + builder.cm.display.input.setUneditable(widget); + builder.content.appendChild(widget); + } + builder.pos += size; + builder.trailingSpace = false; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0; + if (!spans) { + for (var i$1 = 1; i$1 < styles.length; i$1+=2) + { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); } + return + } + + var len = allText.length, pos = 0, i = 1, text = "", style, css; + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes; + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = css = ""; + attributes = null; + collapsed = null; nextChange = Infinity; + var foundBookmarks = [], endStyles = (void 0); + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker; + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { + foundBookmarks.push(m); + } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { + if (sp.to != null && sp.to != pos && nextChange > sp.to) { + nextChange = sp.to; + spanEndStyle = ""; + } + if (m.className) { spanStyle += " " + m.className; } + if (m.css) { css = (css ? css + ";" : "") + m.css; } + if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; } + if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); } + // support for the old title property + // https://github.com/codemirror/CodeMirror/pull/5673 + if (m.title) { (attributes || (attributes = {})).title = m.title; } + if (m.attributes) { + for (var attr in m.attributes) + { (attributes || (attributes = {}))[attr] = m.attributes[attr]; } + } + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) + { collapsed = sp; } + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + } + if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) + { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } } + + if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) + { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, + collapsed.marker, collapsed.from == null); + if (collapsed.to == null) { return } + if (collapsed.to == pos) { collapsed = false; } + } + } + if (pos >= len) { break } + + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes); + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break} + pos = end; + spanStartStyle = ""; + } + text = allText.slice(at, at = styles[i++]); + style = interpretTokenStyle(styles[i++], builder.cm.options); + } + } + } + + + // These objects are used to represent the visible (currently drawn) + // part of the document. A LineView may correspond to multiple + // logical lines, if those are connected by collapsed ranges. + function LineView(doc, line, lineN) { + // The starting line + this.line = line; + // Continuing lines, if any + this.rest = visualLineContinued(line); + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; + this.node = this.text = null; + this.hidden = lineIsHidden(doc, line); + } + + // Create a range of LineView objects for the given lines. + function buildViewArray(cm, from, to) { + var array = [], nextPos; + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); + nextPos = pos + view.size; + array.push(view); + } + return array + } + + var operationGroup = null; + + function pushOperation(op) { + if (operationGroup) { + operationGroup.ops.push(op); + } else { + op.ownsGroup = operationGroup = { + ops: [op], + delayedCallbacks: [] + }; + } + } + + function fireCallbacksForOps(group) { + // Calls delayed callbacks and cursorActivity handlers until no + // new ones appear + var callbacks = group.delayedCallbacks, i = 0; + do { + for (; i < callbacks.length; i++) + { callbacks[i].call(null); } + for (var j = 0; j < group.ops.length; j++) { + var op = group.ops[j]; + if (op.cursorActivityHandlers) + { while (op.cursorActivityCalled < op.cursorActivityHandlers.length) + { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } } + } + } while (i < callbacks.length) + } + + function finishOperation(op, endCb) { + var group = op.ownsGroup; + if (!group) { return } + + try { fireCallbacksForOps(group); } + finally { + operationGroup = null; + endCb(group); + } + } + + var orphanDelayedCallbacks = null; + + // Often, we want to signal events at a point where we are in the + // middle of some work, but don't want the handler to start calling + // other methods on the editor, which might be in an inconsistent + // state or simply not expect any other events to happen. + // signalLater looks whether there are any handlers, and schedules + // them to be executed when the last operation ends, or, if no + // operation is active, when a timeout fires. + function signalLater(emitter, type /*, values...*/) { + var arr = getHandlers(emitter, type); + if (!arr.length) { return } + var args = Array.prototype.slice.call(arguments, 2), list; + if (operationGroup) { + list = operationGroup.delayedCallbacks; + } else if (orphanDelayedCallbacks) { + list = orphanDelayedCallbacks; + } else { + list = orphanDelayedCallbacks = []; + setTimeout(fireOrphanDelayed, 0); + } + var loop = function ( i ) { + list.push(function () { return arr[i].apply(null, args); }); + }; + + for (var i = 0; i < arr.length; ++i) + loop( i ); + } + + function fireOrphanDelayed() { + var delayed = orphanDelayedCallbacks; + orphanDelayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) { delayed[i](); } + } + + // When an aspect of a line changes, a string is added to + // lineView.changes. This updates the relevant part of the line's + // DOM structure. + function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j]; + if (type == "text") { updateLineText(cm, lineView); } + else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); } + else if (type == "class") { updateLineClasses(cm, lineView); } + else if (type == "widget") { updateLineWidgets(cm, lineView, dims); } + } + lineView.changes = null; + } + + // Lines with gutter elements, widgets or a background class need to + // be wrapped, and have the extra elements added to the wrapper div + function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative"); + if (lineView.text.parentNode) + { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); } + lineView.node.appendChild(lineView.text); + if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; } + } + return lineView.node + } + + function updateLineBackground(cm, lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; + if (cls) { cls += " CodeMirror-linebackground"; } + if (lineView.background) { + if (cls) { lineView.background.className = cls; } + else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } + } else if (cls) { + var wrap = ensureLineWrapped(lineView); + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); + cm.display.input.setUneditable(lineView.background); + } + } + + // Wrapper around buildLineContent which will reuse the structure + // in display.externalMeasured when possible. + function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured; + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null; + lineView.measure = ext.measure; + return ext.built + } + return buildLineContent(cm, lineView) + } + + // Redraw the line's text. Interacts with the background and text + // classes because the mode may output tokens that influence these + // classes. + function updateLineText(cm, lineView) { + var cls = lineView.text.className; + var built = getLineContent(cm, lineView); + if (lineView.text == lineView.node) { lineView.node = built.pre; } + lineView.text.parentNode.replaceChild(built.pre, lineView.text); + lineView.text = built.pre; + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass; + lineView.textClass = built.textClass; + updateLineClasses(cm, lineView); + } else if (cls) { + lineView.text.className = cls; + } + } + + function updateLineClasses(cm, lineView) { + updateLineBackground(cm, lineView); + if (lineView.line.wrapClass) + { ensureLineWrapped(lineView).className = lineView.line.wrapClass; } + else if (lineView.node != lineView.text) + { lineView.node.className = ""; } + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; + lineView.text.className = textClass || ""; + } + + function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter); + lineView.gutter = null; + } + if (lineView.gutterBackground) { + lineView.node.removeChild(lineView.gutterBackground); + lineView.gutterBackground = null; + } + if (lineView.line.gutterClass) { + var wrap = ensureLineWrapped(lineView); + lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, + ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px")); + cm.display.input.setUneditable(lineView.gutterBackground); + wrap.insertBefore(lineView.gutterBackground, lineView.text); + } + var markers = lineView.line.gutterMarkers; + if (cm.options.lineNumbers || markers) { + var wrap$1 = ensureLineWrapped(lineView); + var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px")); + cm.display.input.setUneditable(gutterWrap); + wrap$1.insertBefore(gutterWrap, lineView.text); + if (lineView.line.gutterClass) + { gutterWrap.className += " " + lineView.line.gutterClass; } + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + { lineView.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineN), + "CodeMirror-linenumber CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); } + if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; + if (found) + { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); } + } } + } + } + + function updateLineWidgets(cm, lineView, dims) { + if (lineView.alignable) { lineView.alignable = null; } + for (var node = lineView.node.firstChild, next = (void 0); node; node = next) { + next = node.nextSibling; + if (node.className == "CodeMirror-linewidget") + { lineView.node.removeChild(node); } + } + insertLineWidgets(cm, lineView, dims); + } + + // Build a line's DOM representation from scratch + function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView); + lineView.text = lineView.node = built.pre; + if (built.bgClass) { lineView.bgClass = built.bgClass; } + if (built.textClass) { lineView.textClass = built.textClass; } + + updateLineClasses(cm, lineView); + updateLineGutter(cm, lineView, lineN, dims); + insertLineWidgets(cm, lineView, dims); + return lineView.node + } + + // A lineView may contain multiple logical lines (when merged by + // collapsed spans). The widgets for all of them need to be drawn. + function insertLineWidgets(cm, lineView, dims) { + insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } } + } + + function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { + if (!line.widgets) { return } + var wrap = ensureLineWrapped(lineView); + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); + if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); } + positionLineWidget(widget, node, lineView, dims); + cm.display.input.setUneditable(node); + if (allowAbove && widget.above) + { wrap.insertBefore(node, lineView.gutter || lineView.text); } + else + { wrap.appendChild(node); } + signalLater(widget, "redraw"); + } + } + + function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + (lineView.alignable || (lineView.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; } + } + } + + function widgetHeight(widget) { + if (widget.height != null) { return widget.height } + var cm = widget.doc.cm; + if (!cm) { return 0 } + if (!contains(document.body, widget.node)) { + var parentStyle = "position: relative;"; + if (widget.coverGutter) + { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; } + if (widget.noHScroll) + { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; } + removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); + } + return widget.height = widget.node.parentNode.offsetHeight + } + + // Return true when the given mouse event happened in a widget + function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || + (n.parentNode == display.sizer && n != display.mover)) + { return true } + } + } + + // POSITION MEASUREMENT + + function paddingTop(display) {return display.lineSpace.offsetTop} + function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight} + function paddingH(display) { + if (display.cachedPaddingH) { return display.cachedPaddingH } + var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; + var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; + if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; } + return data + } + + function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth } + function displayWidth(cm) { + return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth + } + function displayHeight(cm) { + return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight + } + + // Ensure the lineView.wrapping.heights array is populated. This is + // an array of bottom offsets for the lines that make up a drawn + // line. When lineWrapping is on, there might be more than one + // height. + function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping; + var curWidth = wrapping && displayWidth(cm); + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = []; + if (wrapping) { + lineView.measure.width = curWidth; + var rects = lineView.text.firstChild.getClientRects(); + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], next = rects[i + 1]; + if (Math.abs(cur.bottom - next.bottom) > 2) + { heights.push((cur.bottom + next.top) / 2 - rect.top); } + } + } + heights.push(rect.bottom - rect.top); + } + } + + // Find a line map (mapping character offsets to text nodes) and a + // measurement cache for the given line number. (A line view might + // contain multiple lines when collapsed ranges are present.) + function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) + { return {map: lineView.measure.map, cache: lineView.measure.cache} } + for (var i = 0; i < lineView.rest.length; i++) + { if (lineView.rest[i] == line) + { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } } + for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) + { if (lineNo(lineView.rest[i$1]) > lineN) + { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } } + } + + // Render a line into the hidden node display.externalMeasured. Used + // when measurement is needed for a line that's not in the viewport. + function updateExternalMeasurement(cm, line) { + line = visualLine(line); + var lineN = lineNo(line); + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); + view.lineN = lineN; + var built = view.built = buildLineContent(cm, view); + view.text = built.pre; + removeChildrenAndAdd(cm.display.lineMeasure, built.pre); + return view + } + + // Get a {top, bottom, left, right} box (in line-local coordinates) + // for a given character. + function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias) + } + + // Find a line view that corresponds to the given line number. + function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) + { return cm.display.view[findViewIndex(cm, lineN)] } + var ext = cm.display.externalMeasured; + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) + { return ext } + } + + // Measurement can be split in two steps, the set-up work that + // applies to the whole line, and the measurement of the actual + // character. Functions like coordsChar, that need to do a lot of + // measurements in a row, can thus ensure that the set-up work is + // only done once. + function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line); + var view = findViewForLine(cm, lineN); + if (view && !view.text) { + view = null; + } else if (view && view.changes) { + updateLineForChanges(cm, view, lineN, getDimensions(cm)); + cm.curOp.forceUpdate = true; + } + if (!view) + { view = updateExternalMeasurement(cm, line); } + + var info = mapFromLineView(view, line, lineN); + return { + line: line, view: view, rect: null, + map: info.map, cache: info.cache, before: info.before, + hasHeights: false + } + } + + // Given a prepared measurement object, measures the position of an + // actual character (or fetches it from the cache). + function measureCharPrepared(cm, prepared, ch, bias, varHeight) { + if (prepared.before) { ch = -1; } + var key = ch + (bias || ""), found; + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key]; + } else { + if (!prepared.rect) + { prepared.rect = prepared.view.text.getBoundingClientRect(); } + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect); + prepared.hasHeights = true; + } + found = measureCharInner(cm, prepared, ch, bias); + if (!found.bogus) { prepared.cache[key] = found; } + } + return {left: found.left, right: found.right, + top: varHeight ? found.rtop : found.top, + bottom: varHeight ? found.rbottom : found.bottom} + } + + var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; + + function nodeAndOffsetInLineMap(map$$1, ch, bias) { + var node, start, end, collapse, mStart, mEnd; + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map$$1.length; i += 3) { + mStart = map$$1[i]; + mEnd = map$$1[i + 1]; + if (ch < mStart) { + start = 0; end = 1; + collapse = "left"; + } else if (ch < mEnd) { + start = ch - mStart; + end = start + 1; + } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) { + end = mEnd - mStart; + start = end - 1; + if (ch >= mEnd) { collapse = "right"; } + } + if (start != null) { + node = map$$1[i + 2]; + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) + { collapse = bias; } + if (bias == "left" && start == 0) + { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) { + node = map$$1[(i -= 3) + 2]; + collapse = "left"; + } } + if (bias == "right" && start == mEnd - mStart) + { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) { + node = map$$1[(i += 3) + 2]; + collapse = "right"; + } } + break + } + } + return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd} + } + + function getUsefulRect(rects, bias) { + var rect = nullRect; + if (bias == "left") { for (var i = 0; i < rects.length; i++) { + if ((rect = rects[i]).left != rect.right) { break } + } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { + if ((rect = rects[i$1]).left != rect.right) { break } + } } + return rect + } + + function measureCharInner(cm, prepared, ch, bias) { + var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); + var node = place.node, start = place.start, end = place.end, collapse = place.collapse; + + var rect; + if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. + for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned + while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; } + while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; } + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) + { rect = node.parentNode.getBoundingClientRect(); } + else + { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); } + if (rect.left || rect.right || start == 0) { break } + end = start; + start = start - 1; + collapse = "right"; + } + if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); } + } else { // If it is a widget, simply get the box for the whole widget. + if (start > 0) { collapse = bias = "right"; } + var rects; + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) + { rect = rects[bias == "right" ? rects.length - 1 : 0]; } + else + { rect = node.getBoundingClientRect(); } + } + if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0]; + if (rSpan) + { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; } + else + { rect = nullRect; } + } + + var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; + var mid = (rtop + rbot) / 2; + var heights = prepared.view.measure.heights; + var i = 0; + for (; i < heights.length - 1; i++) + { if (mid < heights[i]) { break } } + var top = i ? heights[i - 1] : 0, bot = heights[i]; + var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, bottom: bot}; + if (!rect.left && !rect.right) { result.bogus = true; } + if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } + + return result + } + + // Work around problem with bounding client rects on ranges being + // returned incorrectly when zoomed on IE10 and below. + function maybeUpdateRectForZooming(measure, rect) { + if (!window.screen || screen.logicalXDPI == null || + screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) + { return rect } + var scaleX = screen.logicalXDPI / screen.deviceXDPI; + var scaleY = screen.logicalYDPI / screen.deviceYDPI; + return {left: rect.left * scaleX, right: rect.right * scaleX, + top: rect.top * scaleY, bottom: rect.bottom * scaleY} + } + + function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {}; + lineView.measure.heights = null; + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { lineView.measure.caches[i] = {}; } } + } + } + + function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null; + removeChildren(cm.display.lineMeasure); + for (var i = 0; i < cm.display.view.length; i++) + { clearLineMeasurementCacheFor(cm.display.view[i]); } + } + + function clearCaches(cm) { + clearLineMeasurementCache(cm); + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; + if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; } + cm.display.lineNumChars = null; + } + + function pageScrollX() { + // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 + // which causes page_Offset and bounding client rects to use + // different reference viewports and invalidate our calculations. + if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) } + return window.pageXOffset || (document.documentElement || document.body).scrollLeft + } + function pageScrollY() { + if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) } + return window.pageYOffset || (document.documentElement || document.body).scrollTop + } + + function widgetTopHeight(lineObj) { + var height = 0; + if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above) + { height += widgetHeight(lineObj.widgets[i]); } } } + return height + } + + // Converts a {top, bottom, left, right} box from line-local + // coordinates into another coordinate system. Context may be one of + // "line", "div" (display.lineDiv), "local"./null (editor), "window", + // or "page". + function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { + if (!includeWidgets) { + var height = widgetTopHeight(lineObj); + rect.top += height; rect.bottom += height; + } + if (context == "line") { return rect } + if (!context) { context = "local"; } + var yOff = heightAtLine(lineObj); + if (context == "local") { yOff += paddingTop(cm.display); } + else { yOff -= cm.display.viewOffset; } + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect(); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); + rect.left += xOff; rect.right += xOff; + } + rect.top += yOff; rect.bottom += yOff; + return rect + } + + // Coverts a box from "div" coords to another coordinate system. + // Context may be "window", "page", "div", or "local"./null. + function fromCoordSystem(cm, coords, context) { + if (context == "div") { return coords } + var left = coords.left, top = coords.top; + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX(); + top -= pageScrollY(); + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect(); + left += localBox.left; + top += localBox.top; + } + + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top} + } + + function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) { lineObj = getLine(cm.doc, pos.line); } + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context) + } + + // Returns a box for a given cursor position, which may have an + // 'other' property containing the position of the secondary cursor + // on a bidi boundary. + // A cursor Pos(line, char, "before") is on the same visual line as `char - 1` + // and after `char - 1` in writing order of `char - 1` + // A cursor Pos(line, char, "after") is on the same visual line as `char` + // and before `char` in writing order of `char` + // Examples (upper-case letters are RTL, lower-case are LTR): + // Pos(0, 1, ...) + // before after + // ab a|b a|b + // aB a|B aB| + // Ab |Ab A|b + // AB B|A B|A + // Every position after the last character on a line is considered to stick + // to the last character on the line. + function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); + if (right) { m.left = m.right; } else { m.right = m.left; } + return intoCoordSystem(cm, lineObj, m, context) + } + var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky; + if (ch >= lineObj.text.length) { + ch = lineObj.text.length; + sticky = "before"; + } else if (ch <= 0) { + ch = 0; + sticky = "after"; + } + if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") } + + function getBidi(ch, partPos, invert) { + var part = order[partPos], right = part.level == 1; + return get(invert ? ch - 1 : ch, right != invert) + } + var partPos = getBidiPartAt(order, ch, sticky); + var other = bidiOther; + var val = getBidi(ch, partPos, sticky == "before"); + if (other != null) { val.other = getBidi(ch, other, sticky != "before"); } + return val + } + + // Used to cheaply estimate the coordinates for a position. Used for + // intermediate scroll updates. + function estimateCoords(cm, pos) { + var left = 0; + pos = clipPos(cm.doc, pos); + if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; } + var lineObj = getLine(cm.doc, pos.line); + var top = heightAtLine(lineObj) + paddingTop(cm.display); + return {left: left, right: left, top: top, bottom: top + lineObj.height} + } + + // Positions returned by coordsChar contain some extra information. + // xRel is the relative x position of the input coordinates compared + // to the found position (so xRel > 0 means the coordinates are to + // the right of the character position, for example). When outside + // is true, that means the coordinates lie outside the line's + // vertical range. + function PosWithInfo(line, ch, sticky, outside, xRel) { + var pos = Pos(line, ch, sticky); + pos.xRel = xRel; + if (outside) { pos.outside = true; } + return pos + } + + // Compute the character position closest to the given coordinates. + // Input must be lineSpace-local ("div" coordinate system). + function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) } + var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; + if (lineN > last) + { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) } + if (x < 0) { x = 0; } + + var lineObj = getLine(doc, lineN); + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y); + var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0)); + if (!collapsed) { return found } + var rangeEnd = collapsed.find(1); + if (rangeEnd.line == lineN) { return rangeEnd } + lineObj = getLine(doc, lineN = rangeEnd.line); + } + } + + function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { + y -= widgetTopHeight(lineObj); + var end = lineObj.text.length; + var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0); + end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end); + return {begin: begin, end: end} + } + + function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } + var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; + return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop) + } + + // Returns true if the given side of a box is after the given + // coordinates, in top-to-bottom, left-to-right order. + function boxIsAfter(box, x, y, left) { + return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x + } + + function coordsCharInner(cm, lineObj, lineNo$$1, x, y) { + // Move y into line-local coordinate space + y -= heightAtLine(lineObj); + var preparedMeasure = prepareMeasureForLine(cm, lineObj); + // When directly calling `measureCharPrepared`, we have to adjust + // for the widgets at this line. + var widgetHeight$$1 = widgetTopHeight(lineObj); + var begin = 0, end = lineObj.text.length, ltr = true; + + var order = getOrder(lineObj, cm.doc.direction); + // If the line isn't plain left-to-right text, first figure out + // which bidi section the coordinates fall into. + if (order) { + var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart) + (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y); + ltr = part.level != 1; + // The awkward -1 offsets are needed because findFirst (called + // on these below) will treat its first bound as inclusive, + // second as exclusive, but we want to actually address the + // characters in the part's range + begin = ltr ? part.from : part.to - 1; + end = ltr ? part.to : part.from - 1; + } + + // A binary search to find the first character whose bounding box + // starts after the coordinates. If we run across any whose box wrap + // the coordinates, store that. + var chAround = null, boxAround = null; + var ch = findFirst(function (ch) { + var box = measureCharPrepared(cm, preparedMeasure, ch); + box.top += widgetHeight$$1; box.bottom += widgetHeight$$1; + if (!boxIsAfter(box, x, y, false)) { return false } + if (box.top <= y && box.left <= x) { + chAround = ch; + boxAround = box; + } + return true + }, begin, end); + + var baseX, sticky, outside = false; + // If a box around the coordinates was found, use that + if (boxAround) { + // Distinguish coordinates nearer to the left or right side of the box + var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr; + ch = chAround + (atStart ? 0 : 1); + sticky = atStart ? "after" : "before"; + baseX = atLeft ? boxAround.left : boxAround.right; + } else { + // (Adjust for extended bound, if necessary.) + if (!ltr && (ch == end || ch == begin)) { ch++; } + // To determine which side to associate with, get the box to the + // left of the character and compare it's vertical position to the + // coordinates + sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : + (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ? + "after" : "before"; + // Now get accurate coordinates for this place, in order to get a + // base X position + var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), "line", lineObj, preparedMeasure); + baseX = coords.left; + outside = y < coords.top || y >= coords.bottom; + } + + ch = skipExtendingChars(lineObj.text, ch, 1); + return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX) + } + + function coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) { + // Bidi parts are sorted left-to-right, and in a non-line-wrapping + // situation, we can take this ordering to correspond to the visual + // ordering. This finds the first part whose end is after the given + // coordinates. + var index = findFirst(function (i) { + var part = order[i], ltr = part.level != 1; + return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? "before" : "after"), + "line", lineObj, preparedMeasure), x, y, true) + }, 0, order.length - 1); + var part = order[index]; + // If this isn't the first part, the part's start is also after + // the coordinates, and the coordinates aren't on the same line as + // that start, move one part back. + if (index > 0) { + var ltr = part.level != 1; + var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? "after" : "before"), + "line", lineObj, preparedMeasure); + if (boxIsAfter(start, x, y, true) && start.top > y) + { part = order[index - 1]; } + } + return part + } + + function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { + // In a wrapped line, rtl text on wrapping boundaries can do things + // that don't correspond to the ordering in our `order` array at + // all, so a binary search doesn't work, and we want to return a + // part that only spans one line so that the binary search in + // coordsCharInner is safe. As such, we first find the extent of the + // wrapped line, and then do a flat search in which we discard any + // spans that aren't on the line. + var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); + var begin = ref.begin; + var end = ref.end; + if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; } + var part = null, closestDist = null; + for (var i = 0; i < order.length; i++) { + var p = order[i]; + if (p.from >= end || p.to <= begin) { continue } + var ltr = p.level != 1; + var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; + // Weigh against spans ending before this, so that they are only + // picked if nothing ends after + var dist = endX < x ? x - endX + 1e9 : endX - x; + if (!part || closestDist > dist) { + part = p; + closestDist = dist; + } + } + if (!part) { part = order[order.length - 1]; } + // Clip the part to the wrapped line. + if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; } + if (part.to > end) { part = {from: part.from, to: end, level: part.level}; } + return part + } + + var measureText; + // Compute the default text height. + function textHeight(display) { + if (display.cachedTextHeight != null) { return display.cachedTextHeight } + if (measureText == null) { + measureText = elt("pre"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) { display.cachedTextHeight = height; } + removeChildren(display.measure); + return height || 1 + } + + // Compute the default character width. + function charWidth(display) { + if (display.cachedCharWidth != null) { return display.cachedCharWidth } + var anchor = elt("span", "xxxxxxxxxx"); + var pre = elt("pre", [anchor]); + removeChildrenAndAdd(display.measure, pre); + var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; + if (width > 2) { display.cachedCharWidth = width; } + return width || 10 + } + + // Do a bulk-read of the DOM positions and sizes needed to draw the + // view, so that we don't interleave reading and writing to the DOM. + function getDimensions(cm) { + var d = cm.display, left = {}, width = {}; + var gutterLeft = d.gutters.clientLeft; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; + width[cm.options.gutters[i]] = n.clientWidth; + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth} + } + + // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, + // but using getBoundingClientRect to get a sub-pixel-accurate + // result. + function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left + } + + // Returns a function that estimates the height of a line, to use as + // first approximation until the line becomes visible (and is thus + // properly measurable). + function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function (line) { + if (lineIsHidden(cm.doc, line)) { return 0 } + + var widgetsHeight = 0; + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; } + } } + + if (wrapping) + { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th } + else + { return widgetsHeight + th } + } + } + + function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm); + doc.iter(function (line) { + var estHeight = est(line); + if (estHeight != line.height) { updateLineHeight(line, estHeight); } + }); + } + + // Given a mouse event, find the corresponding position. If liberal + // is false, it checks whether a gutter or scrollbar was clicked, + // and returns null if it was. forRect is used by rectangular + // selections, and tries to estimate a character position even for + // coordinates beyond the right of the text. + function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display; + if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null } + + var x, y, space = display.lineSpace.getBoundingClientRect(); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX - space.left; y = e.clientY - space.top; } + catch (e) { return null } + var coords = coordsChar(cm, x, y), line; + if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); + } + return coords + } + + // Find the view element corresponding to a given line. Return null + // when the line isn't visible. + function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) { return null } + n -= cm.display.viewFrom; + if (n < 0) { return null } + var view = cm.display.view; + for (var i = 0; i < view.length; i++) { + n -= view[i].size; + if (n < 0) { return i } + } + } + + function updateSelection(cm) { + cm.display.input.showSelection(cm.display.input.prepareSelection()); + } + + function prepareSelection(cm, primary) { + if ( primary === void 0 ) primary = true; + + var doc = cm.doc, result = {}; + var curFragment = result.cursors = document.createDocumentFragment(); + var selFragment = result.selection = document.createDocumentFragment(); + + for (var i = 0; i < doc.sel.ranges.length; i++) { + if (!primary && i == doc.sel.primIndex) { continue } + var range$$1 = doc.sel.ranges[i]; + if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue } + var collapsed = range$$1.empty(); + if (collapsed || cm.options.showCursorWhenSelecting) + { drawSelectionCursor(cm, range$$1.head, curFragment); } + if (!collapsed) + { drawSelectionRange(cm, range$$1, selFragment); } + } + return result + } + + // Draws a cursor for the given range + function drawSelectionCursor(cm, head, output) { + var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); + + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); + cursor.style.left = pos.left + "px"; + cursor.style.top = pos.top + "px"; + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); + otherCursor.style.display = ""; + otherCursor.style.left = pos.other.left + "px"; + otherCursor.style.top = pos.other.top + "px"; + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } + } + + function cmpCoords(a, b) { return a.top - b.top || a.left - b.left } + + // Draws the given range as a highlighted selection + function drawSelectionRange(cm, range$$1, output) { + var display = cm.display, doc = cm.doc; + var fragment = document.createDocumentFragment(); + var padding = paddingH(cm.display), leftSide = padding.left; + var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; + var docLTR = doc.direction == "ltr"; + + function add(left, top, width, bottom) { + if (top < 0) { top = 0; } + top = Math.round(top); + bottom = Math.round(bottom); + fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px"))); + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length; + var start, end; + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias) + } + + function wrapX(pos, dir, side) { + var extent = wrappedLineExtentChar(cm, lineObj, null, pos); + var prop = (dir == "ltr") == (side == "after") ? "left" : "right"; + var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); + return coords(ch, prop)[prop] + } + + var order = getOrder(lineObj, doc.direction); + iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) { + var ltr = dir == "ltr"; + var fromPos = coords(from, ltr ? "left" : "right"); + var toPos = coords(to - 1, ltr ? "right" : "left"); + + var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen; + var first = i == 0, last = !order || i == order.length - 1; + if (toPos.top - fromPos.top <= 3) { // Single line + var openLeft = (docLTR ? openStart : openEnd) && first; + var openRight = (docLTR ? openEnd : openStart) && last; + var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; + var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; + add(left, fromPos.top, right - left, fromPos.bottom); + } else { // Multiple lines + var topLeft, topRight, botLeft, botRight; + if (ltr) { + topLeft = docLTR && openStart && first ? leftSide : fromPos.left; + topRight = docLTR ? rightSide : wrapX(from, dir, "before"); + botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); + botRight = docLTR && openEnd && last ? rightSide : toPos.right; + } else { + topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); + topRight = !docLTR && openStart && first ? rightSide : fromPos.right; + botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; + botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); + } + add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); + if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); } + add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); + } + + if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; } + if (cmpCoords(toPos, start) < 0) { start = toPos; } + if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; } + if (cmpCoords(toPos, end) < 0) { end = toPos; } + }); + return {start: start, end: end} + } + + var sFrom = range$$1.from(), sTo = range$$1.to(); + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch); + } else { + var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); + var singleVLine = visualLine(fromLine) == visualLine(toLine); + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); + } + } + if (leftEnd.bottom < rightStart.top) + { add(leftSide, leftEnd.bottom, null, rightStart.top); } + } + + output.appendChild(fragment); + } + + // Cursor-blinking + function restartBlink(cm) { + if (!cm.state.focused) { return } + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursorDiv.style.visibility = ""; + if (cm.options.cursorBlinkRate > 0) + { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, + cm.options.cursorBlinkRate); } + else if (cm.options.cursorBlinkRate < 0) + { display.cursorDiv.style.visibility = "hidden"; } + } + + function ensureFocus(cm) { + if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } + } + + function delayBlurEvent(cm) { + cm.state.delayingBlurEvent = true; + setTimeout(function () { if (cm.state.delayingBlurEvent) { + cm.state.delayingBlurEvent = false; + onBlur(cm); + } }, 100); + } + + function onFocus(cm, e) { + if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; } + + if (cm.options.readOnly == "nocursor") { return } + if (!cm.state.focused) { + signal(cm, "focus", cm, e); + cm.state.focused = true; + addClass(cm.display.wrapper, "CodeMirror-focused"); + // This test prevents this from firing when a context + // menu is closed (since the input reset would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { + cm.display.input.reset(); + if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730 + } + cm.display.input.receivedFocus(); + } + restartBlink(cm); + } + function onBlur(cm, e) { + if (cm.state.delayingBlurEvent) { return } + + if (cm.state.focused) { + signal(cm, "blur", cm, e); + cm.state.focused = false; + rmClass(cm.display.wrapper, "CodeMirror-focused"); + } + clearInterval(cm.display.blinker); + setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150); + } + + // Read the actual heights of the rendered lines, and update their + // stored heights to match. + function updateHeightsInViewport(cm) { + var display = cm.display; + var prevBottom = display.lineDiv.offsetTop; + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], wrapping = cm.options.lineWrapping; + var height = (void 0), width = 0; + if (cur.hidden) { continue } + if (ie && ie_version < 8) { + var bot = cur.node.offsetTop + cur.node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = cur.node.getBoundingClientRect(); + height = box.bottom - box.top; + // Check that lines don't extend past the right of the current + // editor width + if (!wrapping && cur.text.firstChild) + { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; } + } + var diff = cur.line.height - height; + if (height < 2) { height = textHeight(display); } + if (diff > .005 || diff < -.005) { + updateLineHeight(cur.line, height); + updateWidgetHeight(cur.line); + if (cur.rest) { for (var j = 0; j < cur.rest.length; j++) + { updateWidgetHeight(cur.rest[j]); } } + } + if (width > cm.display.sizerWidth) { + var chWidth = Math.ceil(width / charWidth(cm.display)); + if (chWidth > cm.display.maxLineLength) { + cm.display.maxLineLength = chWidth; + cm.display.maxLine = cur.line; + cm.display.maxLineChanged = true; + } + } + } + } + + // Read and store the height of line widgets associated with the + // given line. + function updateWidgetHeight(line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) { + var w = line.widgets[i], parent = w.node.parentNode; + if (parent) { w.height = parent.offsetHeight; } + } } + } + + // Compute the lines that are visible in a given viewport (defaults + // the the current scroll position). viewport may contain top, + // height, and ensure (see op.scrollToPos) properties. + function visibleLines(display, doc, viewport) { + var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; + top = Math.floor(top - paddingTop(display)); + var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; + + var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewport && viewport.ensure) { + var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; + if (ensureFrom < from) { + from = ensureFrom; + to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); + } else if (Math.min(ensureTo, doc.lastLine()) >= to) { + from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); + to = ensureTo; + } + } + return {from: from, to: Math.max(to, from + 1)} + } + + // Re-align line numbers and gutter marks to compensate for + // horizontal scrolling. + function alignHorizontally(cm) { + var display = cm.display, view = display.view; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return } + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, left = comp + "px"; + for (var i = 0; i < view.length; i++) { if (!view[i].hidden) { + if (cm.options.fixedGutter) { + if (view[i].gutter) + { view[i].gutter.style.left = left; } + if (view[i].gutterBackground) + { view[i].gutterBackground.style.left = left; } + } + var align = view[i].alignable; + if (align) { for (var j = 0; j < align.length; j++) + { align[j].style.left = left; } } + } } + if (cm.options.fixedGutter) + { display.gutters.style.left = (comp + gutterW) + "px"; } + } + + // Used to ensure that the line number gutter is still the right + // size for the current document size. Returns true when an update + // is needed. + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) { return false } + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + updateGutterSpace(cm); + return true + } + return false + } + + // SCROLLING THINGS INTO VIEW + + // If an editor sits on the top or bottom of the window, partially + // scrolled out of view, this ensures that the cursor is visible. + function maybeScrollWindow(cm, rect) { + if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } + + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; + if (rect.top + box.top < 0) { doScroll = true; } + else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; } + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;")); + cm.display.lineSpace.appendChild(scrollNode); + scrollNode.scrollIntoView(doScroll); + cm.display.lineSpace.removeChild(scrollNode); + } + } + + // Scroll a given position into view (immediately), verifying that + // it actually became visible (as line heights are accurately + // measured, the position of something may 'drift' during drawing). + function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) { margin = 0; } + var rect; + if (!cm.options.lineWrapping && pos == end) { + // Set pos and end to the cursor positions around the character pos sticks to + // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch + // If pos == Pos(_, 0, "before"), pos and end are unchanged + pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; + end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; + } + for (var limit = 0; limit < 5; limit++) { + var changed = false; + var coords = cursorCoords(cm, pos); + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); + rect = {left: Math.min(coords.left, endCoords.left), + top: Math.min(coords.top, endCoords.top) - margin, + right: Math.max(coords.left, endCoords.left), + bottom: Math.max(coords.bottom, endCoords.bottom) + margin}; + var scrollPos = calculateScrollPos(cm, rect); + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + updateScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; } + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; } + } + if (!changed) { break } + } + return rect + } + + // Scroll a given set of coordinates into view (immediately). + function scrollIntoView(cm, rect) { + var scrollPos = calculateScrollPos(cm, rect); + if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); } + if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); } + } + + // Calculate a new scroll position needed to scroll the given + // rectangle into view. Returns an object with scrollTop and + // scrollLeft properties. When these are undefined, the + // vertical/horizontal position does not need to be adjusted. + function calculateScrollPos(cm, rect) { + var display = cm.display, snapMargin = textHeight(cm.display); + if (rect.top < 0) { rect.top = 0; } + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; + var screen = displayHeight(cm), result = {}; + if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; } + var docBottom = cm.doc.height + paddingVert(display); + var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin; + if (rect.top < screentop) { + result.scrollTop = atTop ? 0 : rect.top; + } else if (rect.bottom > screentop + screen) { + var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen); + if (newTop != screentop) { result.scrollTop = newTop; } + } + + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; + var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); + var tooWide = rect.right - rect.left > screenw; + if (tooWide) { rect.right = rect.left + screenw; } + if (rect.left < 10) + { result.scrollLeft = 0; } + else if (rect.left < screenleft) + { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); } + else if (rect.right > screenw + screenleft - 3) + { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; } + return result + } + + // Store a relative adjustment to the scroll position in the current + // operation (to be applied when the operation finishes). + function addToScrollTop(cm, top) { + if (top == null) { return } + resolveScrollToPos(cm); + cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; + } + + // Make sure that at the end of the operation the current cursor is + // shown. + function ensureCursorVisible(cm) { + resolveScrollToPos(cm); + var cur = cm.getCursor(); + cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin}; + } + + function scrollToCoords(cm, x, y) { + if (x != null || y != null) { resolveScrollToPos(cm); } + if (x != null) { cm.curOp.scrollLeft = x; } + if (y != null) { cm.curOp.scrollTop = y; } + } + + function scrollToRange(cm, range$$1) { + resolveScrollToPos(cm); + cm.curOp.scrollToPos = range$$1; + } + + // When an operation has its scrollToPos property set, and another + // scroll action is applied before the end of the operation, this + // 'simulates' scrolling that position into view in a cheap way, so + // that the effect of intermediate scroll commands is not ignored. + function resolveScrollToPos(cm) { + var range$$1 = cm.curOp.scrollToPos; + if (range$$1) { + cm.curOp.scrollToPos = null; + var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to); + scrollToCoordsRange(cm, from, to, range$$1.margin); + } + } + + function scrollToCoordsRange(cm, from, to, margin) { + var sPos = calculateScrollPos(cm, { + left: Math.min(from.left, to.left), + top: Math.min(from.top, to.top) - margin, + right: Math.max(from.right, to.right), + bottom: Math.max(from.bottom, to.bottom) + margin + }); + scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); + } + + // Sync the scrollable area and scrollbars, ensure the viewport + // covers the visible area. + function updateScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) { return } + if (!gecko) { updateDisplaySimple(cm, {top: val}); } + setScrollTop(cm, val, true); + if (gecko) { updateDisplaySimple(cm); } + startWorker(cm, 100); + } + + function setScrollTop(cm, val, forceScroll) { + val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val); + if (cm.display.scroller.scrollTop == val && !forceScroll) { return } + cm.doc.scrollTop = val; + cm.display.scrollbars.setScrollTop(val); + if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; } + } + + // Sync scroller and scrollbar, ensure the gutter elements are + // aligned. + function setScrollLeft(cm, val, isScroller, forceScroll) { + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); + if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return } + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; } + cm.display.scrollbars.setScrollLeft(val); + } + + // SCROLLBARS + + // Prepare DOM reads needed to update the scrollbars. Done in one + // shot to minimize update/measure roundtrips. + function measureForScrollbars(cm) { + var d = cm.display, gutterW = d.gutters.offsetWidth; + var docH = Math.round(cm.doc.height + paddingVert(cm.display)); + return { + clientHeight: d.scroller.clientHeight, + viewHeight: d.wrapper.clientHeight, + scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, + viewWidth: d.wrapper.clientWidth, + barLeft: cm.options.fixedGutter ? gutterW : 0, + docHeight: docH, + scrollHeight: docH + scrollGap(cm) + d.barHeight, + nativeBarWidth: d.nativeBarWidth, + gutterWidth: gutterW + } + } + + var NativeScrollbars = function(place, scroll, cm) { + this.cm = cm; + var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); + var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); + vert.tabIndex = horiz.tabIndex = -1; + place(vert); place(horiz); + + on(vert, "scroll", function () { + if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); } + }); + on(horiz, "scroll", function () { + if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); } + }); + + this.checkedZeroWidth = false; + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; } + }; + + NativeScrollbars.prototype.update = function (measure) { + var needsH = measure.scrollWidth > measure.clientWidth + 1; + var needsV = measure.scrollHeight > measure.clientHeight + 1; + var sWidth = measure.nativeBarWidth; + + if (needsV) { + this.vert.style.display = "block"; + this.vert.style.bottom = needsH ? sWidth + "px" : "0"; + var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); + // A bug in IE8 can cause this value to be negative, so guard it. + this.vert.firstChild.style.height = + Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; + } else { + this.vert.style.display = ""; + this.vert.firstChild.style.height = "0"; + } + + if (needsH) { + this.horiz.style.display = "block"; + this.horiz.style.right = needsV ? sWidth + "px" : "0"; + this.horiz.style.left = measure.barLeft + "px"; + var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); + this.horiz.firstChild.style.width = + Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; + } else { + this.horiz.style.display = ""; + this.horiz.firstChild.style.width = "0"; + } + + if (!this.checkedZeroWidth && measure.clientHeight > 0) { + if (sWidth == 0) { this.zeroWidthHack(); } + this.checkedZeroWidth = true; + } + + return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0} + }; + + NativeScrollbars.prototype.setScrollLeft = function (pos) { + if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; } + if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); } + }; + + NativeScrollbars.prototype.setScrollTop = function (pos) { + if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; } + if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); } + }; + + NativeScrollbars.prototype.zeroWidthHack = function () { + var w = mac && !mac_geMountainLion ? "12px" : "18px"; + this.horiz.style.height = this.vert.style.width = w; + this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; + this.disableHoriz = new Delayed; + this.disableVert = new Delayed; + }; + + NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { + bar.style.pointerEvents = "auto"; + function maybeDisable() { + // To find out whether the scrollbar is still visible, we + // check whether the element under the pixel in the bottom + // right corner of the scrollbar box is the scrollbar box + // itself (when the bar is still visible) or its filler child + // (when the bar is hidden). If it is still visible, we keep + // it enabled, if it's hidden, we disable pointer events. + var box = bar.getBoundingClientRect(); + var elt$$1 = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) + : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); + if (elt$$1 != bar) { bar.style.pointerEvents = "none"; } + else { delay.set(1000, maybeDisable); } + } + delay.set(1000, maybeDisable); + }; + + NativeScrollbars.prototype.clear = function () { + var parent = this.horiz.parentNode; + parent.removeChild(this.horiz); + parent.removeChild(this.vert); + }; + + var NullScrollbars = function () {}; + + NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} }; + NullScrollbars.prototype.setScrollLeft = function () {}; + NullScrollbars.prototype.setScrollTop = function () {}; + NullScrollbars.prototype.clear = function () {}; + + function updateScrollbars(cm, measure) { + if (!measure) { measure = measureForScrollbars(cm); } + var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; + updateScrollbarsInner(cm, measure); + for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { + if (startWidth != cm.display.barWidth && cm.options.lineWrapping) + { updateHeightsInViewport(cm); } + updateScrollbarsInner(cm, measureForScrollbars(cm)); + startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; + } + } + + // Re-synchronize the fake scrollbars with the actual size of the + // content. + function updateScrollbarsInner(cm, measure) { + var d = cm.display; + var sizes = d.scrollbars.update(measure); + + d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; + d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; + d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; + + if (sizes.right && sizes.bottom) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = sizes.bottom + "px"; + d.scrollbarFiller.style.width = sizes.right + "px"; + } else { d.scrollbarFiller.style.display = ""; } + if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = sizes.bottom + "px"; + d.gutterFiller.style.width = measure.gutterWidth + "px"; + } else { d.gutterFiller.style.display = ""; } + } + + var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; + + function initScrollbars(cm) { + if (cm.display.scrollbars) { + cm.display.scrollbars.clear(); + if (cm.display.scrollbars.addClass) + { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } + } + + cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { + cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); + // Prevent clicks in the scrollbars from killing focus + on(node, "mousedown", function () { + if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); } + }); + node.setAttribute("cm-not-content", "true"); + }, function (pos, axis) { + if (axis == "horizontal") { setScrollLeft(cm, pos); } + else { updateScrollTop(cm, pos); } + }, cm); + if (cm.display.scrollbars.addClass) + { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } + } + + // Operations are used to wrap a series of changes to the editor + // state in such a way that each change won't have to update the + // cursor and display (which would be awkward, slow, and + // error-prone). Instead, display updates are batched and then all + // combined and executed at once. + + var nextOpId = 0; + // Start a new operation. + function startOperation(cm) { + cm.curOp = { + cm: cm, + viewChanged: false, // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, // Used to detect need to update scrollbar + forceUpdate: false, // Used to force a redraw + updateInput: null, // Whether to reset the input textarea + typing: false, // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, // Accumulated changes, for firing change events + cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on + cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already + selectionChanged: false, // Whether the selection needs to be redrawn + updateMaxLine: false, // Set when the widest line needs to be determined anew + scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, // Used to scroll to a specific position + focus: false, + id: ++nextOpId // Unique ID + }; + pushOperation(cm.curOp); + } + + // Finish an operation, updating the display and signalling delayed events + function endOperation(cm) { + var op = cm.curOp; + if (op) { finishOperation(op, function (group) { + for (var i = 0; i < group.ops.length; i++) + { group.ops[i].cm.curOp = null; } + endOperations(group); + }); } + } + + // The DOM updates done when an operation finishes are batched so + // that the minimum number of relayouts are required. + function endOperations(group) { + var ops = group.ops; + for (var i = 0; i < ops.length; i++) // Read DOM + { endOperation_R1(ops[i]); } + for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe) + { endOperation_W1(ops[i$1]); } + for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM + { endOperation_R2(ops[i$2]); } + for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe) + { endOperation_W2(ops[i$3]); } + for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM + { endOperation_finish(ops[i$4]); } + } + + function endOperation_R1(op) { + var cm = op.cm, display = cm.display; + maybeClipScrollbars(cm); + if (op.updateMaxLine) { findMaxLine(cm); } + + op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || + op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || + op.scrollToPos.to.line >= display.viewTo) || + display.maxLineChanged && cm.options.lineWrapping; + op.update = op.mustUpdate && + new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); + } + + function endOperation_W1(op) { + op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); + } + + function endOperation_R2(op) { + var cm = op.cm, display = cm.display; + if (op.updatedDisplay) { updateHeightsInViewport(cm); } + + op.barMeasure = measureForScrollbars(cm); + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + // updateDisplay_W2 will use these properties to do the actual resizing + if (display.maxLineChanged && !cm.options.lineWrapping) { + op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; + cm.display.sizerWidth = op.adjustWidthTo; + op.barMeasure.scrollWidth = + Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); + op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); + } + + if (op.updatedDisplay || op.selectionChanged) + { op.preparedSelection = display.input.prepareSelection(); } + } + + function endOperation_W2(op) { + var cm = op.cm; + + if (op.adjustWidthTo != null) { + cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; + if (op.maxScrollLeft < cm.doc.scrollLeft) + { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); } + cm.display.maxLineChanged = false; + } + + var takeFocus = op.focus && op.focus == activeElt(); + if (op.preparedSelection) + { cm.display.input.showSelection(op.preparedSelection, takeFocus); } + if (op.updatedDisplay || op.startHeight != cm.doc.height) + { updateScrollbars(cm, op.barMeasure); } + if (op.updatedDisplay) + { setDocumentHeight(cm, op.barMeasure); } + + if (op.selectionChanged) { restartBlink(cm); } + + if (cm.state.focused && op.updateInput) + { cm.display.input.reset(op.typing); } + if (takeFocus) { ensureFocus(op.cm); } + } + + function endOperation_finish(op) { + var cm = op.cm, display = cm.display, doc = cm.doc; + + if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); } + + // Abort mouse wheel delta measurement, when scrolling explicitly + if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) + { display.wheelStartX = display.wheelStartY = null; } + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); } + + if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), + clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); + maybeScrollWindow(cm, rect); + } + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; + if (hidden) { for (var i = 0; i < hidden.length; ++i) + { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } } + if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1) + { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } } + + if (display.wrapper.offsetHeight) + { doc.scrollTop = cm.display.scroller.scrollTop; } + + // Fire change events, and delayed event handlers + if (op.changeObjs) + { signal(cm, "changes", cm, op.changeObjs); } + if (op.update) + { op.update.finish(); } + } + + // Run the given function in an operation + function runInOp(cm, f) { + if (cm.curOp) { return f() } + startOperation(cm); + try { return f() } + finally { endOperation(cm); } + } + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm, f) { + return function() { + if (cm.curOp) { return f.apply(cm, arguments) } + startOperation(cm); + try { return f.apply(cm, arguments) } + finally { endOperation(cm); } + } + } + // Used to add methods to editor and doc instances, wrapping them in + // operations. + function methodOp(f) { + return function() { + if (this.curOp) { return f.apply(this, arguments) } + startOperation(this); + try { return f.apply(this, arguments) } + finally { endOperation(this); } + } + } + function docMethodOp(f) { + return function() { + var cm = this.cm; + if (!cm || cm.curOp) { return f.apply(this, arguments) } + startOperation(cm); + try { return f.apply(this, arguments) } + finally { endOperation(cm); } + } + } + + // Updates the display.view data structure for a given change to the + // document. From and to are in pre-change coordinates. Lendiff is + // the amount of lines added or subtracted by the change. This is + // used for changes that span multiple lines, or change the way + // lines are divided into visual lines. regLineChange (below) + // registers single-line changes. + function regChange(cm, from, to, lendiff) { + if (from == null) { from = cm.doc.first; } + if (to == null) { to = cm.doc.first + cm.doc.size; } + if (!lendiff) { lendiff = 0; } + + var display = cm.display; + if (lendiff && to < display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers > from)) + { display.updateLineNumbers = from; } + + cm.curOp.viewChanged = true; + + if (from >= display.viewTo) { // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) + { resetView(cm); } + } else if (to <= display.viewFrom) { // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm); + } else { + display.viewFrom += lendiff; + display.viewTo += lendiff; + } + } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap + resetView(cm); + } else if (from <= display.viewFrom) { // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cut) { + display.view = display.view.slice(cut.index); + display.viewFrom = cut.lineN; + display.viewTo += lendiff; + } else { + resetView(cm); + } + } else if (to >= display.viewTo) { // Bottom overlap + var cut$1 = viewCuttingPoint(cm, from, from, -1); + if (cut$1) { + display.view = display.view.slice(0, cut$1.index); + display.viewTo = cut$1.lineN; + } else { + resetView(cm); + } + } else { // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1); + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index) + .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) + .concat(display.view.slice(cutBot.index)); + display.viewTo += lendiff; + } else { + resetView(cm); + } + } + + var ext = display.externalMeasured; + if (ext) { + if (to < ext.lineN) + { ext.lineN += lendiff; } + else if (from < ext.lineN + ext.size) + { display.externalMeasured = null; } + } + } + + // Register a change to a single line. Type must be one of "text", + // "gutter", "class", "widget" + function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true; + var display = cm.display, ext = cm.display.externalMeasured; + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) + { display.externalMeasured = null; } + + if (line < display.viewFrom || line >= display.viewTo) { return } + var lineView = display.view[findViewIndex(cm, line)]; + if (lineView.node == null) { return } + var arr = lineView.changes || (lineView.changes = []); + if (indexOf(arr, type) == -1) { arr.push(type); } + } + + // Clear the view. + function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first; + cm.display.view = []; + cm.display.viewOffset = 0; + } + + function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), diff, view = cm.display.view; + if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) + { return {index: index, lineN: newN} } + var n = cm.display.viewFrom; + for (var i = 0; i < index; i++) + { n += view[i].size; } + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) { return null } + diff = (n + view[index].size) - oldN; + index++; + } else { + diff = n - oldN; + } + oldN += diff; newN += diff; + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) { return null } + newN += dir * view[index - (dir < 0 ? 1 : 0)].size; + index += dir; + } + return {index: index, lineN: newN} + } + + // Force the view to cover a given range, adding empty view element + // or clipping off existing ones as needed. + function adjustView(cm, from, to) { + var display = cm.display, view = display.view; + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to); + display.viewFrom = from; + } else { + if (display.viewFrom > from) + { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); } + else if (display.viewFrom < from) + { display.view = display.view.slice(findViewIndex(cm, from)); } + display.viewFrom = from; + if (display.viewTo < to) + { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); } + else if (display.viewTo > to) + { display.view = display.view.slice(0, findViewIndex(cm, to)); } + } + display.viewTo = to; + } + + // Count the number of lines in the view whose DOM representation is + // out of date (or nonexistent). + function countDirtyView(cm) { + var view = cm.display.view, dirty = 0; + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; } + } + return dirty + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.doc.highlightFrontier < cm.display.viewTo) + { cm.state.highlight.set(time, bind(highlightWorker, cm)); } + } + + function highlightWorker(cm) { + var doc = cm.doc; + if (doc.highlightFrontier >= cm.display.viewTo) { return } + var end = +new Date + cm.options.workTime; + var context = getContextBefore(cm, doc.highlightFrontier); + var changedLines = []; + + doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { + if (context.line >= cm.display.viewFrom) { // Visible + var oldStyles = line.styles; + var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null; + var highlighted = highlightLine(cm, line, context, true); + if (resetState) { context.state = resetState; } + line.styles = highlighted.styles; + var oldCls = line.styleClasses, newCls = highlighted.classes; + if (newCls) { line.styleClasses = newCls; } + else if (oldCls) { line.styleClasses = null; } + var ischange = !oldStyles || oldStyles.length != line.styles.length || + oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); + for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; } + if (ischange) { changedLines.push(context.line); } + line.stateAfter = context.save(); + context.nextLine(); + } else { + if (line.text.length <= cm.options.maxHighlightLength) + { processLine(cm, line.text, context); } + line.stateAfter = context.line % 5 == 0 ? context.save() : null; + context.nextLine(); + } + if (+new Date > end) { + startWorker(cm, cm.options.workDelay); + return true + } + }); + doc.highlightFrontier = context.line; + doc.modeFrontier = Math.max(doc.modeFrontier, context.line); + if (changedLines.length) { runInOp(cm, function () { + for (var i = 0; i < changedLines.length; i++) + { regLineChange(cm, changedLines[i], "text"); } + }); } + } + + // DISPLAY DRAWING + + var DisplayUpdate = function(cm, viewport, force) { + var display = cm.display; + + this.viewport = viewport; + // Store some values that we'll need later (but don't want to force a relayout for) + this.visible = visibleLines(display, cm.doc, viewport); + this.editorIsHidden = !display.wrapper.offsetWidth; + this.wrapperHeight = display.wrapper.clientHeight; + this.wrapperWidth = display.wrapper.clientWidth; + this.oldDisplayWidth = displayWidth(cm); + this.force = force; + this.dims = getDimensions(cm); + this.events = []; + }; + + DisplayUpdate.prototype.signal = function (emitter, type) { + if (hasHandler(emitter, type)) + { this.events.push(arguments); } + }; + DisplayUpdate.prototype.finish = function () { + var this$1 = this; + + for (var i = 0; i < this.events.length; i++) + { signal.apply(null, this$1.events[i]); } + }; + + function maybeClipScrollbars(cm) { + var display = cm.display; + if (!display.scrollbarsClipped && display.scroller.offsetWidth) { + display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; + display.heightForcer.style.height = scrollGap(cm) + "px"; + display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; + display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; + display.scrollbarsClipped = true; + } + } + + function selectionSnapshot(cm) { + if (cm.hasFocus()) { return null } + var active = activeElt(); + if (!active || !contains(cm.display.lineDiv, active)) { return null } + var result = {activeElt: active}; + if (window.getSelection) { + var sel = window.getSelection(); + if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { + result.anchorNode = sel.anchorNode; + result.anchorOffset = sel.anchorOffset; + result.focusNode = sel.focusNode; + result.focusOffset = sel.focusOffset; + } + } + return result + } + + function restoreSelection(snapshot) { + if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return } + snapshot.activeElt.focus(); + if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { + var sel = window.getSelection(), range$$1 = document.createRange(); + range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset); + range$$1.collapse(false); + sel.removeAllRanges(); + sel.addRange(range$$1); + sel.extend(snapshot.focusNode, snapshot.focusOffset); + } + } + + // Does the actual updating of the line display. Bails out + // (returning false) when there is nothing to be done and forced is + // false. + function updateDisplayIfNeeded(cm, update) { + var display = cm.display, doc = cm.doc; + + if (update.editorIsHidden) { + resetView(cm); + return false + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!update.force && + update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && + display.renderedView == display.view && countDirtyView(cm) == 0) + { return false } + + if (maybeUpdateLineNumberWidth(cm)) { + resetView(cm); + update.dims = getDimensions(cm); + } + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size; + var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, update.visible.to + cm.options.viewportMargin); + if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); } + if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); } + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from); + to = visualLineEndNo(cm.doc, to); + } + + var different = from != display.viewFrom || to != display.viewTo || + display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; + adjustView(cm, from, to); + + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px"; + + var toUpdate = countDirtyView(cm); + if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) + { return false } + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var selSnapshot = selectionSnapshot(cm); + if (toUpdate > 4) { display.lineDiv.style.display = "none"; } + patchDisplay(cm, display.updateLineNumbers, update.dims); + if (toUpdate > 4) { display.lineDiv.style.display = ""; } + display.renderedView = display.view; + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + restoreSelection(selSnapshot); + + // Prevent selection and cursors from interfering with the scroll + // width and height. + removeChildren(display.cursorDiv); + removeChildren(display.selectionDiv); + display.gutters.style.height = display.sizer.style.minHeight = 0; + + if (different) { + display.lastWrapHeight = update.wrapperHeight; + display.lastWrapWidth = update.wrapperWidth; + startWorker(cm, 400); + } + + display.updateLineNumbers = null; + + return true + } + + function postUpdateDisplay(cm, update) { + var viewport = update.viewport; + + for (var first = true;; first = false) { + if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { + // Clip forced viewport to actual scrollable area. + if (viewport && viewport.top != null) + { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; } + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + update.visible = visibleLines(cm.display, cm.doc, viewport); + if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) + { break } + } + if (!updateDisplayIfNeeded(cm, update)) { break } + updateHeightsInViewport(cm); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.force = false; + } + + update.signal(cm, "update", cm); + if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { + update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); + cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; + } + } + + function updateDisplaySimple(cm, viewport) { + var update = new DisplayUpdate(cm, viewport); + if (updateDisplayIfNeeded(cm, update)) { + updateHeightsInViewport(cm); + postUpdateDisplay(cm, update); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.finish(); + } + } + + // Sync the actual display DOM structure with display.view, removing + // nodes for lines that are no longer in view, and creating the ones + // that are not there yet, and updating the ones that are out of + // date. + function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, lineNumbers = cm.options.lineNumbers; + var container = display.lineDiv, cur = container.firstChild; + + function rm(node) { + var next = node.nextSibling; + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) + { node.style.display = "none"; } + else + { node.parentNode.removeChild(node); } + return next + } + + var view = display.view, lineN = display.viewFrom; + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims); + container.insertBefore(node, cur); + } else { // Already drawn + while (cur != lineView.node) { cur = rm(cur); } + var updateNumber = lineNumbers && updateNumbersFrom != null && + updateNumbersFrom <= lineN && lineView.lineNumber; + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; } + updateLineForChanges(cm, lineView, lineN, dims); + } + if (updateNumber) { + removeChildren(lineView.lineNumber); + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); + } + cur = lineView.node.nextSibling; + } + lineN += lineView.size; + } + while (cur) { cur = rm(cur); } + } + + function updateGutterSpace(cm) { + var width = cm.display.gutters.offsetWidth; + cm.display.sizer.style.marginLeft = width + "px"; + } + + function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = measure.docHeight + "px"; + cm.display.heightForcer.style.top = measure.docHeight + "px"; + cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"; + } + + // Rebuild the gutter elements, ensure the margin to the left of the + // code matches their width. + function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters; + removeChildren(gutters); + var i = 0; + for (; i < specs.length; ++i) { + var gutterClass = specs[i]; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt; + gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = i ? "" : "none"; + updateGutterSpace(cm); + } + + // Make sure the gutters options contains the element + // "CodeMirror-linenumbers" when the lineNumbers option is true. + function setGuttersForLineNumbers(options) { + var found = indexOf(options.gutters, "CodeMirror-linenumbers"); + if (found == -1 && options.lineNumbers) { + options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); + } else if (found > -1 && !options.lineNumbers) { + options.gutters = options.gutters.slice(0); + options.gutters.splice(found, 1); + } + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) { wheelPixelsPerUnit = -.53; } + else if (gecko) { wheelPixelsPerUnit = 15; } + else if (chrome) { wheelPixelsPerUnit = -.7; } + else if (safari) { wheelPixelsPerUnit = -1/3; } + + function wheelEventDelta(e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; } + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; } + else if (dy == null) { dy = e.wheelDelta; } + return {x: dx, y: dy} + } + function wheelEventPixels(e) { + var delta = wheelEventDelta(e); + delta.x *= wheelPixelsPerUnit; + delta.y *= wheelPixelsPerUnit; + return delta + } + + function onScrollWheel(cm, e) { + var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; + + var display = cm.display, scroll = display.scroller; + // Quit if there's nothing to scroll here + var canScrollX = scroll.scrollWidth > scroll.clientWidth; + var canScrollY = scroll.scrollHeight > scroll.clientHeight; + if (!(dx && canScrollX || dy && canScrollY)) { return } + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur; + break outer + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { + if (dy && canScrollY) + { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); } + setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit)); + // Only prevent default scrolling if vertical scrolling is + // actually possible. Otherwise, it causes vertical scroll + // jitter on OSX trackpads when deltaX is small and deltaY + // is large (issue #3579) + if (!dy || (dy && canScrollY)) + { e_preventDefault(e); } + display.wheelStartX = null; // Abort measurement, if in progress + return + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit; + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; + if (pixels < 0) { top = Math.max(0, top + pixels - 50); } + else { bot = Math.min(cm.doc.height, bot + pixels + 50); } + updateDisplaySimple(cm, {top: top, bottom: bot}); + } + + if (wheelSamples < 20) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; display.wheelDY = dy; + setTimeout(function () { + if (display.wheelStartX == null) { return } + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX); + display.wheelStartX = display.wheelStartY = null; + if (!sample) { return } + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; display.wheelDY += dy; + } + } + } + + // Selection objects are immutable. A new one is created every time + // the selection changes. A selection is one or more non-overlapping + // (and non-touching) ranges, sorted, and an integer that indicates + // which one is the primary selection (the one that's scrolled into + // view, that getCursor returns, etc). + var Selection = function(ranges, primIndex) { + this.ranges = ranges; + this.primIndex = primIndex; + }; + + Selection.prototype.primary = function () { return this.ranges[this.primIndex] }; + + Selection.prototype.equals = function (other) { + var this$1 = this; + + if (other == this) { return true } + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false } + for (var i = 0; i < this.ranges.length; i++) { + var here = this$1.ranges[i], there = other.ranges[i]; + if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false } + } + return true + }; + + Selection.prototype.deepCopy = function () { + var this$1 = this; + + var out = []; + for (var i = 0; i < this.ranges.length; i++) + { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); } + return new Selection(out, this.primIndex) + }; + + Selection.prototype.somethingSelected = function () { + var this$1 = this; + + for (var i = 0; i < this.ranges.length; i++) + { if (!this$1.ranges[i].empty()) { return true } } + return false + }; + + Selection.prototype.contains = function (pos, end) { + var this$1 = this; + + if (!end) { end = pos; } + for (var i = 0; i < this.ranges.length; i++) { + var range = this$1.ranges[i]; + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) + { return i } + } + return -1 + }; + + var Range = function(anchor, head) { + this.anchor = anchor; this.head = head; + }; + + Range.prototype.from = function () { return minPos(this.anchor, this.head) }; + Range.prototype.to = function () { return maxPos(this.anchor, this.head) }; + Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }; + + // Take an unsorted, potentially overlapping set of ranges, and + // build a selection out of it. 'Consumes' ranges array (modifying + // it). + function normalizeSelection(cm, ranges, primIndex) { + var mayTouch = cm && cm.options.selectionsMayTouch; + var prim = ranges[primIndex]; + ranges.sort(function (a, b) { return cmp(a.from(), b.from()); }); + primIndex = indexOf(ranges, prim); + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], prev = ranges[i - 1]; + var diff = cmp(prev.to(), cur.from()); + if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) { + var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; + if (i <= primIndex) { --primIndex; } + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); + } + } + return new Selection(ranges, primIndex) + } + + function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0) + } + + // Compute the position of the end of a change (its 'to' property + // refers to the pre-change end). + function changeEnd(change) { + if (!change.text) { return change.to } + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)) + } + + // Adjust a position to refer to the post-change position of the + // same text, or the end of the change if the change covers it. + function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) { return pos } + if (cmp(pos, change.to) <= 0) { return changeEnd(change) } + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; + if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; } + return Pos(line, ch) + } + + function computeSelAfterChange(doc, change) { + var out = []; + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + out.push(new Range(adjustForChange(range.anchor, change), + adjustForChange(range.head, change))); + } + return normalizeSelection(doc.cm, out, doc.sel.primIndex) + } + + function offsetPos(pos, old, nw) { + if (pos.line == old.line) + { return Pos(nw.line, pos.ch - old.ch + nw.ch) } + else + { return Pos(nw.line + (pos.line - old.line), pos.ch) } + } + + // Used by replaceSelections to allow moving the selection to the + // start or around the replaced test. Hint may be "start" or "around". + function computeReplacedSel(doc, changes, hint) { + var out = []; + var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + var from = offsetPos(change.from, oldPrev, newPrev); + var to = offsetPos(changeEnd(change), oldPrev, newPrev); + oldPrev = change.to; + newPrev = to; + if (hint == "around") { + var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; + out[i] = new Range(inv ? to : from, inv ? from : to); + } else { + out[i] = new Range(from, from); + } + } + return new Selection(out, doc.sel.primIndex) + } + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + cm.doc.mode = getMode(cm.options, cm.doc.modeOption); + resetModeState(cm); + } + + function resetModeState(cm) { + cm.doc.iter(function (line) { + if (line.stateAfter) { line.stateAfter = null; } + if (line.styles) { line.styles = null; } + }); + cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) { regChange(cm); } + } + + // DOCUMENT DATA STRUCTURE + + // By default, updates that start and end at the beginning of a line + // are treated specially, in order to make the association of line + // widgets and marker elements with the text behave more intuitive. + function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && + (!doc.cm || doc.cm.options.wholeLineUpdateBefore) + } + + // Perform a change on the document data structure. + function updateDoc(doc, change, markedSpans, estimateHeight$$1) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight$$1); + signalLater(line, "change", line, change); + } + function linesFor(start, end) { + var result = []; + for (var i = start; i < end; ++i) + { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); } + return result + } + + var from = change.from, to = change.to, text = change.text; + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; + + // Adjust the line structure + if (change.full) { + doc.insert(0, linesFor(0, text.length)); + doc.remove(text.length, doc.size - text.length); + } else if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = linesFor(0, text.length - 1); + update(lastLine, lastLine.text, lastSpans); + if (nlines) { doc.remove(from.line, nlines); } + if (added.length) { doc.insert(from.line, added); } + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + var added$1 = linesFor(1, text.length - 1); + added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added$1); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + var added$2 = linesFor(1, text.length - 1); + if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); } + doc.insert(from.line + 1, added$2); + } + + signalLater(doc, "change", doc, change); + } + + // Call f for all linked documents. + function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) { continue } + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) { continue } + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } } + } + propagate(doc, null, true); + } + + // Attach a document to an editor. + function attachDoc(cm, doc) { + if (doc.cm) { throw new Error("This document is already in use.") } + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + setDirectionClass(cm); + if (!cm.options.lineWrapping) { findMaxLine(cm); } + cm.options.mode = doc.modeOption; + regChange(cm); + } + + function setDirectionClass(cm) { + (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); + } + + function directionChanged(cm) { + runInOp(cm, function () { + setDirectionClass(cm); + regChange(cm); + }); + } + + function History(startGen) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; this.undone = []; + this.undoDepth = Infinity; + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0; + this.lastOp = this.lastSelOp = null; + this.lastOrigin = this.lastSelOrigin = null; + // Used by the isClean() method + this.generation = this.maxGeneration = startGen || 1; + } + + // Create a history change event from an updateDoc-style change + // object. + function historyChangeFromChange(doc, change) { + var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true); + return histChange + } + + // Pop all selection events off the end of a history array. Stop at + // a change event. + function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array); + if (last.ranges) { array.pop(); } + else { break } + } + } + + // Find the top change event in the history. Pop off selection + // events that are in the way. + function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done); + return lst(hist.done) + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done) + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop(); + return lst(hist.done) + } + } + + // Register a change in the history. Merges changes that are within + // a single operation, or are close together with an origin that + // allows merging (starting with "+") into a single event. + function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date, cur; + var last; + + if ((hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) || + change.origin.charAt(0) == "*")) && + (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + last = lst(cur.changes); + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done); + if (!before || !before.ranges) + { pushSelectionToHistory(doc.sel, hist.done); } + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation}; + hist.done.push(cur); + while (hist.done.length > hist.undoDepth) { + hist.done.shift(); + if (!hist.done[0].ranges) { hist.done.shift(); } + } + } + hist.done.push(selAfter); + hist.generation = ++hist.maxGeneration; + hist.lastModTime = hist.lastSelTime = time; + hist.lastOp = hist.lastSelOp = opId; + hist.lastOrigin = hist.lastSelOrigin = change.origin; + + if (!last) { signal(doc, "historyAdded"); } + } + + function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0); + return ch == "*" || + ch == "+" && + prev.ranges.length == sel.ranges.length && + prev.somethingSelected() == sel.somethingSelected() && + new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500) + } + + // Called whenever the selection changes, sets the new selection as + // the pending selection in the history, and pushes the old pending + // selection into the 'done' array when it was significantly + // different (in number of selected ranges, emptiness, or time). + function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, origin = options && options.origin; + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastSelOp || + (origin && hist.lastSelOrigin == origin && + (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || + selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) + { hist.done[hist.done.length - 1] = sel; } + else + { pushSelectionToHistory(sel, hist.done); } + + hist.lastSelTime = +new Date; + hist.lastSelOrigin = origin; + hist.lastSelOp = opId; + if (options && options.clearRedo !== false) + { clearSelectionEvents(hist.undone); } + } + + function pushSelectionToHistory(sel, dest) { + var top = lst(dest); + if (!(top && top.ranges && top.equals(sel))) + { dest.push(sel); } + } + + // Used to store marked span information in the history. + function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { + if (line.markedSpans) + { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; } + ++n; + }); + } + + // When un/re-doing restores text containing marked spans, those + // that have been explicitly cleared should not be restored. + function removeClearedSpans(spans) { + if (!spans) { return null } + var out; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } } + else if (out) { out.push(spans[i]); } + } + return !out ? spans : out.length ? out : null + } + + // Retrieve and filter the old marked spans stored in a change event. + function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) { return null } + var nw = []; + for (var i = 0; i < change.text.length; ++i) + { nw.push(removeClearedSpans(found[i])); } + return nw + } + + // Used for un/re-doing changes from the history. Combines the + // result of computing the existing spans with the set of spans that + // existed in the history (so that deleting around a span and then + // undoing brings back the span). + function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) { return stretched } + if (!stretched) { return old } + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) + { if (oldCur[k].marker == span.marker) { continue spans } } + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old + } + + // Used both to provide a JSON-safe object in .getHistory, and, when + // detaching a document, to split the history in two + function copyHistoryArray(events, newGroup, instantiateSel) { + var copy = []; + for (var i = 0; i < events.length; ++i) { + var event = events[i]; + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); + continue + } + var changes = event.changes, newChanges = []; + copy.push({changes: newChanges}); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m = (void 0); + newChanges.push({from: change.from, to: change.to, text: change.text}); + if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } } } + } + } + return copy + } + + // The 'scroll' parameter given to many of these indicated whether + // the new cursor position should be scrolled into view after + // modifying the selection. + + // If shift is held or the extend flag is set, extends a range to + // include a given position (and optionally a second position). + // Otherwise, simply returns the range between the given positions. + // Used for cursor motion and such. + function extendRange(range, head, other, extend) { + if (extend) { + var anchor = range.anchor; + if (other) { + var posBefore = cmp(head, anchor) < 0; + if (posBefore != (cmp(other, anchor) < 0)) { + anchor = head; + head = other; + } else if (posBefore != (cmp(head, other) < 0)) { + head = other; + } + } + return new Range(anchor, head) + } else { + return new Range(other || head, head) + } + } + + // Extend the primary selection range, discard the rest. + function extendSelection(doc, head, other, options, extend) { + if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); } + setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options); + } + + // Extend all selections (pos is an array of selections with length + // equal the number of selections) + function extendSelections(doc, heads, options) { + var out = []; + var extend = doc.cm && (doc.cm.display.shift || doc.extend); + for (var i = 0; i < doc.sel.ranges.length; i++) + { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); } + var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex); + setSelection(doc, newSel, options); + } + + // Updates a single range in the selection. + function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0); + ranges[i] = range; + setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options); + } + + // Reset the selection to a single range. + function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options); + } + + // Give beforeSelectionChange handlers a change to influence a + // selection update. + function filterSelectionChange(doc, sel, options) { + var obj = { + ranges: sel.ranges, + update: function(ranges) { + var this$1 = this; + + this.ranges = []; + for (var i = 0; i < ranges.length; i++) + { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), + clipPos(doc, ranges[i].head)); } + }, + origin: options && options.origin + }; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); } + if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) } + else { return sel } + } + + function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, last = lst(done); + if (last && last.ranges) { + done[done.length - 1] = sel; + setSelectionNoUndo(doc, sel, options); + } else { + setSelection(doc, sel, options); + } + } + + // Set a new selection. + function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options); + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); + } + + function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) + { sel = filterSelectionChange(doc, sel, options); } + + var bias = options && options.bias || + (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); + + if (!(options && options.scroll === false) && doc.cm) + { ensureCursorVisible(doc.cm); } + } + + function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) { return } + + doc.sel = sel; + + if (doc.cm) { + doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; + signalCursorActivity(doc.cm); + } + signalLater(doc, "cursorActivity", doc); + } + + // Verify that the selection does not partially select any atomic + // marked ranges. + function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); + } + + // Return a selection that does not partially select any atomic + // ranges. + function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; + var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); + var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) { out = sel.ranges.slice(0, i); } + out[i] = new Range(newAnchor, newHead); + } + } + return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel + } + + function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { + var line = getLine(doc, pos.line); + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker; + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) { break } + else {--i; continue} + } + } + if (!m.atomic) { continue } + + if (oldPos) { + var near = m.find(dir < 0 ? 1 : -1), diff = (void 0); + if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) + { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); } + if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) + { return skipAtomicInner(doc, near, pos, dir, mayClear) } + } + + var far = m.find(dir < 0 ? -1 : 1); + if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) + { far = movePos(doc, far, dir, far.line == pos.line ? line : null); } + return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null + } + } } + return pos + } + + // Ensure a given position is not inside an atomic range. + function skipAtomic(doc, pos, oldPos, bias, mayClear) { + var dir = bias || 1; + var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || + skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); + if (!found) { + doc.cantEdit = true; + return Pos(doc.first, 0) + } + return found + } + + function movePos(doc, pos, dir, line) { + if (dir < 0 && pos.ch == 0) { + if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) } + else { return null } + } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { + if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) } + else { return null } + } else { + return new Pos(pos.line, pos.ch + dir) + } + } + + function selectAll(cm) { + cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); + } + + // UPDATING + + // Allow "beforeChange" event handlers to influence a change + function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function () { return obj.canceled = true; } + }; + if (update) { obj.update = function (from, to, text, origin) { + if (from) { obj.from = clipPos(doc, from); } + if (to) { obj.to = clipPos(doc, to); } + if (text) { obj.text = text; } + if (origin !== undefined) { obj.origin = origin; } + }; } + signal(doc, "beforeChange", doc, obj); + if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); } + + if (obj.canceled) { return null } + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin} + } + + // Apply a change to a document, and add it to the document's + // history, and propagating it to all linked documents. + function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) } + if (doc.cm.state.suppressEdits) { return } + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true); + if (!change) { return } + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 0; --i) + { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); } + } else { + makeChangeInner(doc, change); + } + } + + function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return } + var selAfter = computeSelAfterChange(doc, change); + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); + } + + // Revert a change stored in a document's history. + function makeChangeFromHistory(doc, type, allowSelectionOnly) { + var suppress = doc.cm && doc.cm.state.suppressEdits; + if (suppress && !allowSelectionOnly) { return } + + var hist = doc.history, event, selAfter = doc.sel; + var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + var i = 0; + for (; i < source.length; i++) { + event = source[i]; + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) + { break } + } + if (i == source.length) { return } + hist.lastOrigin = hist.lastSelOrigin = null; + + for (;;) { + event = source.pop(); + if (event.ranges) { + pushSelectionToHistory(event, dest); + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, {clearRedo: false}); + return + } + selAfter = event; + } else if (suppress) { + source.push(event); + return + } else { break } + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = []; + pushSelectionToHistory(selAfter, dest); + dest.push({changes: antiChanges, generation: hist.generation}); + hist.generation = event.generation || ++hist.maxGeneration; + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); + + var loop = function ( i ) { + var change = event.changes[i]; + change.origin = type; + if (filter && !filterChange(doc, change, false)) { + source.length = 0; + return {} + } + + antiChanges.push(historyChangeFromChange(doc, change)); + + var after = i ? computeSelAfterChange(doc, change) : lst(source); + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); } + var rebased = []; + + // Propagate to the linked documents + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + }; + + for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { + var returned = loop( i$1 ); + + if ( returned ) return returned.v; + } + } + + // Sub-views need their line numbers shifted when text is added + // above or below them in the parent document. + function shiftDoc(doc, distance) { + if (distance == 0) { return } + doc.first += distance; + doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range( + Pos(range.anchor.line + distance, range.anchor.ch), + Pos(range.head.line + distance, range.head.ch) + ); }), doc.sel.primIndex); + if (doc.cm) { + regChange(doc.cm, doc.first, doc.first - distance, distance); + for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) + { regLineChange(doc.cm, l, "gutter"); } + } + } + + // More lower-level change function, handling only a single document + // (not linked ones). + function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) } + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return + } + if (change.from.line > doc.lastLine()) { return } + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin}; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin}; + } + + change.removed = getBetween(doc, change.from, change.to); + + if (!selAfter) { selAfter = computeSelAfterChange(doc, change); } + if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); } + else { updateDoc(doc, change, spans); } + setSelectionNoUndo(doc, selAfter, sel_dontScroll); + } + + // Handle the interaction of a change to a document with the editor + // that this document is part of. + function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to; + + var recomputeMaxLength = false, checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function (line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true + } + }); + } + + if (doc.sel.contains(change.from, change.to) > -1) + { signalCursorActivity(cm); } + + updateDoc(doc, change, spans, estimateHeight(cm)); + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function (line) { + var len = lineLength(line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; } + } + + retreatFrontier(doc, from.line); + startWorker(cm, 400); + + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + if (change.full) + { regChange(cm); } + else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) + { regLineChange(cm, from.line, "text"); } + else + { regChange(cm, from.line, to.line + 1, lendiff); } + + var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); + if (changeHandler || changesHandler) { + var obj = { + from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin + }; + if (changeHandler) { signalLater(cm, "change", cm, obj); } + if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } + } + cm.display.selForContextMenu = null; + } + + function replaceRange(doc, code, from, to, origin) { + var assign; + + if (!to) { to = from; } + if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); } + if (typeof code == "string") { code = doc.splitLines(code); } + makeChange(doc, {from: from, to: to, text: code, origin: origin}); + } + + // Rebasing/resetting history to deal with externally-sourced changes + + function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } + } + + // Tries to rebase an array of history events given a change in the + // document. If the change touches the same lines as the event, the + // event, and everything 'behind' it, is discarded. If the change is + // before the event, the event's positions are updated. Uses a + // copy-on-write scheme for the positions, to avoid having to + // reallocate them all on every rebase, but also avoid problems with + // shared position objects being unsafely updated. + function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true; + if (sub.ranges) { + if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); + } + continue + } + for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { + var cur = sub.changes[j$1]; + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch); + cur.to = Pos(cur.to.line + diff, cur.to.ch); + } else if (from <= cur.to.line) { + ok = false; + break + } + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } + } + } + + function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); + } + + // Utility for applying a change to a line by handle or number, + // returning the number and optionally registering the line as + // changed. + function changeLine(doc, handle, changeType, op) { + var no = handle, line = handle; + if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); } + else { no = lineNo(handle); } + if (no == null) { return null } + if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); } + return line + } + + // The document is represented as a BTree consisting of leaves, with + // chunk of lines in them, and branches, with up to ten leaves or + // other branch nodes below them. The top node is always a branch + // node, and is the document object itself (meaning it has + // additional methods and properties). + // + // All nodes have parent links. The tree is used both to go from + // line numbers to line objects, and to go from objects to numbers. + // It also indexes by height, and is used to convert between height + // and line object, and to find the total height of the document. + // + // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + + function LeafChunk(lines) { + var this$1 = this; + + this.lines = lines; + this.parent = null; + var height = 0; + for (var i = 0; i < lines.length; ++i) { + lines[i].parent = this$1; + height += lines[i].height; + } + this.height = height; + } + + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length }, + + // Remove the n lines at offset 'at'. + removeInner: function(at, n) { + var this$1 = this; + + for (var i = at, e = at + n; i < e; ++i) { + var line = this$1.lines[i]; + this$1.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + + // Helper used to collapse a small branch into a single leaf. + collapse: function(lines) { + lines.push.apply(lines, this.lines); + }, + + // Insert the given array of lines at offset 'at', count them as + // having the given height. + insertInner: function(at, lines, height) { + var this$1 = this; + + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; } + }, + + // Used to iterate over a part of the tree. + iterN: function(at, n, op) { + var this$1 = this; + + for (var e = at + n; at < e; ++at) + { if (op(this$1.lines[at])) { return true } } + } + }; + + function BranchChunk(children) { + var this$1 = this; + + this.children = children; + var size = 0, height = 0; + for (var i = 0; i < children.length; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this$1; + } + this.size = size; + this.height = height; + this.parent = null; + } + + BranchChunk.prototype = { + chunkSize: function() { return this.size }, + + removeInner: function(at, n) { + var this$1 = this; + + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.removeInner(at, rm); + this$1.height -= oldHeight - child.height; + if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) { break } + at = 0; + } else { at -= sz; } + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && + (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + + collapse: function(lines) { + var this$1 = this; + + for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); } + }, + + insertInner: function(at, lines, height) { + var this$1 = this; + + this.size += lines.length; + this.height += height; + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. + // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. + var remaining = child.lines.length % 25 + 25; + for (var pos = remaining; pos < child.lines.length;) { + var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); + child.height -= leaf.height; + this$1.children.splice(++i, 0, leaf); + leaf.parent = this$1; + } + child.lines = child.lines.slice(0, remaining); + this$1.maybeSpill(); + } + break + } + at -= sz; + } + }, + + // When a node has grown, check whether it should be split. + maybeSpill: function() { + if (this.children.length <= 10) { return } + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10) + me.parent.maybeSpill(); + }, + + iterN: function(at, n, op) { + var this$1 = this; + + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) { return true } + if ((n -= used) == 0) { break } + at = 0; + } else { at -= sz; } + } + } + }; + + // Line widgets are block elements displayed above or below a line. + + var LineWidget = function(doc, node, options) { + var this$1 = this; + + if (options) { for (var opt in options) { if (options.hasOwnProperty(opt)) + { this$1[opt] = options[opt]; } } } + this.doc = doc; + this.node = node; + }; + + LineWidget.prototype.clear = function () { + var this$1 = this; + + var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); + if (no == null || !ws) { return } + for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } } + if (!ws.length) { line.widgets = null; } + var height = widgetHeight(this); + updateLineHeight(line, Math.max(0, line.height - height)); + if (cm) { + runInOp(cm, function () { + adjustScrollWhenAboveVisible(cm, line, -height); + regLineChange(cm, no, "widget"); + }); + signalLater(cm, "lineWidgetCleared", cm, this, no); + } + }; + + LineWidget.prototype.changed = function () { + var this$1 = this; + + var oldH = this.height, cm = this.doc.cm, line = this.line; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) { return } + if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); } + if (cm) { + runInOp(cm, function () { + cm.curOp.forceUpdate = true; + adjustScrollWhenAboveVisible(cm, line, diff); + signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)); + }); + } + }; + eventMixin(LineWidget); + + function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) + { addToScrollTop(cm, diff); } + } + + function addLineWidget(doc, handle, node, options) { + var widget = new LineWidget(doc, node, options); + var cm = doc.cm; + if (cm && widget.noHScroll) { cm.display.alignWidgets = true; } + changeLine(doc, handle, "widget", function (line) { + var widgets = line.widgets || (line.widgets = []); + if (widget.insertAt == null) { widgets.push(widget); } + else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); } + widget.line = line; + if (cm && !lineIsHidden(doc, line)) { + var aboveVisible = heightAtLine(line) < doc.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) { addToScrollTop(cm, widget.height); } + cm.curOp.forceUpdate = true; + } + return true + }); + if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); } + return widget + } + + // TEXTMARKERS + + // Created with markText and setBookmark methods. A TextMarker is a + // handle that can be used to clear or find a marked position in the + // document. Line objects hold arrays (markedSpans) containing + // {from, to, marker} object pointing to such marker objects, and + // indicating that such a marker is present on that line. Multiple + // lines may point to the same marker when it spans across lines. + // The spans will have null for their from/to properties when the + // marker continues beyond the start/end of the line. Markers have + // links back to the lines they currently touch. + + // Collapsed markers have unique ids, in order to be able to order + // them, which is needed for uniquely determining an outer marker + // when they overlap (they may nest, but not partially overlap). + var nextMarkerId = 0; + + var TextMarker = function(doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + this.id = ++nextMarkerId; + }; + + // Clear the marker. + TextMarker.prototype.clear = function () { + var this$1 = this; + + if (this.explicitlyCleared) { return } + var cm = this.doc.cm, withOp = cm && !cm.curOp; + if (withOp) { startOperation(cm); } + if (hasHandler(this, "clear")) { + var found = this.find(); + if (found) { signalLater(this, "clear", found.from, found.to); } + } + var min = null, max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this$1.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this$1); + if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text"); } + else if (cm) { + if (span.to != null) { max = lineNo(line); } + if (span.from != null) { min = lineNo(line); } + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm) + { updateLineHeight(line, textHeight(cm.display)); } + } + if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { + var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } } + + if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); } + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) { reCheckSelection(cm.doc); } + } + if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); } + if (withOp) { endOperation(cm); } + if (this.parent) { this.parent.clear(); } + }; + + // Find the position of the marker in the document. Returns a {from, + // to} object by default. Side can be passed to get a specific side + // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the + // Pos objects returned contain a line object, rather than a line + // number (used to prevent looking up the same line twice). + TextMarker.prototype.find = function (side, lineObj) { + var this$1 = this; + + if (side == null && this.type == "bookmark") { side = 1; } + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this$1.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this$1); + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from); + if (side == -1) { return from } + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to); + if (side == 1) { return to } + } + } + return from && {from: from, to: to} + }; + + // Signals that the marker's widget changed, and surrounding layout + // should be recomputed. + TextMarker.prototype.changed = function () { + var this$1 = this; + + var pos = this.find(-1, true), widget = this, cm = this.doc.cm; + if (!pos || !cm) { return } + runInOp(cm, function () { + var line = pos.line, lineN = lineNo(pos.line); + var view = findViewForLine(cm, lineN); + if (view) { + clearLineMeasurementCacheFor(view); + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; + } + cm.curOp.updateMaxLine = true; + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height; + widget.height = null; + var dHeight = widgetHeight(widget) - oldHeight; + if (dHeight) + { updateLineHeight(line, line.height + dHeight); } + } + signalLater(cm, "markerChanged", cm, this$1); + }); + }; + + TextMarker.prototype.attachLine = function (line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } + } + this.lines.push(line); + }; + + TextMarker.prototype.detachLine = function (line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp + ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } + }; + eventMixin(TextMarker); + + // Create a marker, wire it up to the right lines, and + function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) { return markTextShared(doc, from, to, options, type) } + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) } + + var marker = new TextMarker(doc, type), diff = cmp(from, to); + if (options) { copyObj(options, marker, false); } + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) + { return marker } + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true; + marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); + if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); } + if (options.insertLeft) { marker.widgetNode.insertLeft = true; } + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || + from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) + { throw new Error("Inserting collapsed marker partially overlapping an existing one") } + seeCollapsedSpans(); + } + + if (marker.addToHistory) + { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); } + + var curLine = from.line, cm = doc.cm, updateMaxLine; + doc.iter(curLine, to.line + 1, function (line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) + { updateMaxLine = true; } + if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); } + addMarkedSpan(line, new MarkedSpan(marker, + curLine == from.line ? from.ch : null, + curLine == to.line ? to.ch : null)); + ++curLine; + }); + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) { + if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); } + }); } + + if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); } + + if (marker.readOnly) { + seeReadOnlySpans(); + if (doc.history.done.length || doc.history.undone.length) + { doc.clearHistory(); } + } + if (marker.collapsed) { + marker.id = ++nextMarkerId; + marker.atomic = true; + } + if (cm) { + // Sync editor state + if (updateMaxLine) { cm.curOp.updateMaxLine = true; } + if (marker.collapsed) + { regChange(cm, from.line, to.line + 1); } + else if (marker.className || marker.startStyle || marker.endStyle || marker.css || + marker.attributes || marker.title) + { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } } + if (marker.atomic) { reCheckSelection(cm.doc); } + signalLater(cm, "markerAdded", cm, marker); + } + return marker + } + + // SHARED TEXTMARKERS + + // A shared marker spans multiple linked documents. It is + // implemented as a meta-marker-object controlling multiple normal + // markers. + var SharedTextMarker = function(markers, primary) { + var this$1 = this; + + this.markers = markers; + this.primary = primary; + for (var i = 0; i < markers.length; ++i) + { markers[i].parent = this$1; } + }; + + SharedTextMarker.prototype.clear = function () { + var this$1 = this; + + if (this.explicitlyCleared) { return } + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) + { this$1.markers[i].clear(); } + signalLater(this, "clear"); + }; + + SharedTextMarker.prototype.find = function (side, lineObj) { + return this.primary.find(side, lineObj) + }; + eventMixin(SharedTextMarker); + + function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], primary = markers[0]; + var widget = options.widgetNode; + linkedDocs(doc, function (doc) { + if (widget) { options.widgetNode = widget.cloneNode(true); } + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) + { if (doc.linked[i].isParent) { return } } + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary) + } + + function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; }) + } + + function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], pos = marker.find(); + var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); + marker.markers.push(subMark); + subMark.parent = marker; + } + } + } + + function detachSharedMarkers(markers) { + var loop = function ( i ) { + var marker = markers[i], linked = [marker.primary.doc]; + linkedDocs(marker.primary.doc, function (d) { return linked.push(d); }); + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j]; + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null; + marker.markers.splice(j--, 1); + } + } + }; + + for (var i = 0; i < markers.length; i++) loop( i ); + } + + var nextDocId = 0; + var Doc = function(text, mode, firstLine, lineSep, direction) { + if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) } + if (firstLine == null) { firstLine = 0; } + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.cleanGeneration = 1; + this.modeFrontier = this.highlightFrontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = simpleSelection(start); + this.history = new History(null); + this.id = ++nextDocId; + this.modeOption = mode; + this.lineSep = lineSep; + this.direction = (direction == "rtl") ? "rtl" : "ltr"; + this.extend = false; + + if (typeof text == "string") { text = this.splitLines(text); } + updateDoc(this, {from: start, to: start, text: text}); + setSelection(this, simpleSelection(start), sel_dontScroll); + }; + + Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function(from, to, op) { + if (op) { this.iterN(from - this.first, to - from, op); } + else { this.iterN(this.first, this.first + this.size, from); } + }, + + // Non-public interface for adding and removing lines. + insert: function(at, lines) { + var height = 0; + for (var i = 0; i < lines.length; ++i) { height += lines[i].height; } + this.insertInner(at - this.first, lines, height); + }, + remove: function(at, n) { this.removeInner(at - this.first, n); }, + + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + setValue: docMethodOp(function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1; + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: this.splitLines(code), origin: "setValue", full: true}, true); + if (this.cm) { scrollToCoords(this.cm, 0, 0); } + setSelection(this, simpleSelection(top), sel_dontScroll); + }), + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text}, + + getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }}, + getLineNumber: function(line) {return lineNo(line)}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") { line = getLine(this, line); } + return visualLine(line) + }, + + lineCount: function() {return this.size}, + firstLine: function() {return this.first}, + lastLine: function() {return this.first + this.size - 1}, + + clipPos: function(pos) {return clipPos(this, pos)}, + + getCursor: function(start) { + var range$$1 = this.sel.primary(), pos; + if (start == null || start == "head") { pos = range$$1.head; } + else if (start == "anchor") { pos = range$$1.anchor; } + else if (start == "end" || start == "to" || start === false) { pos = range$$1.to(); } + else { pos = range$$1.from(); } + return pos + }, + listSelections: function() { return this.sel.ranges }, + somethingSelected: function() {return this.sel.somethingSelected()}, + + setCursor: docMethodOp(function(line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); + }), + setSelection: docMethodOp(function(anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); + }), + extendSelection: docMethodOp(function(head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); + }), + extendSelections: docMethodOp(function(heads, options) { + extendSelections(this, clipPosArray(this, heads), options); + }), + extendSelectionsBy: docMethodOp(function(f, options) { + var heads = map(this.sel.ranges, f); + extendSelections(this, clipPosArray(this, heads), options); + }), + setSelections: docMethodOp(function(ranges, primary, options) { + var this$1 = this; + + if (!ranges.length) { return } + var out = []; + for (var i = 0; i < ranges.length; i++) + { out[i] = new Range(clipPos(this$1, ranges[i].anchor), + clipPos(this$1, ranges[i].head)); } + if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); } + setSelection(this, normalizeSelection(this.cm, out, primary), options); + }), + addSelection: docMethodOp(function(anchor, head, options) { + var ranges = this.sel.ranges.slice(0); + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); + setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options); + }), + + getSelection: function(lineSep) { + var this$1 = this; + + var ranges = this.sel.ranges, lines; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()); + lines = lines ? lines.concat(sel) : sel; + } + if (lineSep === false) { return lines } + else { return lines.join(lineSep || this.lineSeparator()) } + }, + getSelections: function(lineSep) { + var this$1 = this; + + var parts = [], ranges = this.sel.ranges; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()); + if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); } + parts[i] = sel; + } + return parts + }, + replaceSelection: function(code, collapse, origin) { + var dup = []; + for (var i = 0; i < this.sel.ranges.length; i++) + { dup[i] = code; } + this.replaceSelections(dup, collapse, origin || "+input"); + }, + replaceSelections: docMethodOp(function(code, collapse, origin) { + var this$1 = this; + + var changes = [], sel = this.sel; + for (var i = 0; i < sel.ranges.length; i++) { + var range$$1 = sel.ranges[i]; + changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin}; + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); + for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) + { makeChange(this$1, changes[i$1]); } + if (newSel) { setSelectionReplaceHistory(this, newSel); } + else if (this.cm) { ensureCursorVisible(this.cm); } + }), + undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), + redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), + undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), + redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), + + setExtending: function(val) {this.extend = val;}, + getExtending: function() {return this.extend}, + + historySize: function() { + var hist = this.history, done = 0, undone = 0; + for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } } + for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } } + return {undo: done, redo: undone} + }, + clearHistory: function() {this.history = new History(this.history.maxGeneration);}, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(true); + }, + changeGeneration: function(forceSplit) { + if (forceSplit) + { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; } + return this.history.generation + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration) + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)} + }, + setHistory: function(histData) { + var hist = this.history = new History(this.history.maxGeneration); + hist.done = copyHistoryArray(histData.done.slice(0), null, true); + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); + }, + + setGutterMarker: docMethodOp(function(line, gutterID, value) { + return changeLine(this, line, "gutter", function (line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) { line.gutterMarkers = null; } + return true + }) + }), + + clearGutter: docMethodOp(function(gutterID) { + var this$1 = this; + + this.iter(function (line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + changeLine(this$1, line, "gutter", function () { + line.gutterMarkers[gutterID] = null; + if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; } + return true + }); + } + }); + }), + + lineInfo: function(line) { + var n; + if (typeof line == "number") { + if (!isLine(this, line)) { return null } + n = line; + line = getLine(this, line); + if (!line) { return null } + } else { + n = lineNo(line); + if (n == null) { return null } + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets} + }, + + addLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + if (!line[prop]) { line[prop] = cls; } + else if (classTest(cls).test(line[prop])) { return false } + else { line[prop] += " " + cls; } + return true + }) + }), + removeLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) { return false } + else if (cls == null) { line[prop] = null; } + else { + var found = cur.match(classTest(cls)); + if (!found) { return false } + var end = found.index + found[0].length; + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; + } + return true + }) + }), + + addLineWidget: docMethodOp(function(handle, node, options) { + return addLineWidget(this, handle, node, options) + }), + removeLineWidget: function(widget) { widget.clear(); }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range") + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, shared: options && options.shared, + handleMouseEvents: options && options.handleMouseEvents}; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark") + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos); + var markers = [], spans = getLine(this, pos.line).markedSpans; + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + { markers.push(span.marker.parent || span.marker); } + } } + return markers + }, + findMarks: function(from, to, filter) { + from = clipPos(this, from); to = clipPos(this, to); + var found = [], lineNo$$1 = from.line; + this.iter(from.line, to.line + 1, function (line) { + var spans = line.markedSpans; + if (spans) { for (var i = 0; i < spans.length; i++) { + var span = spans[i]; + if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to || + span.from == null && lineNo$$1 != from.line || + span.from != null && lineNo$$1 == to.line && span.from >= to.ch) && + (!filter || filter(span.marker))) + { found.push(span.marker.parent || span.marker); } + } } + ++lineNo$$1; + }); + return found + }, + getAllMarks: function() { + var markers = []; + this.iter(function (line) { + var sps = line.markedSpans; + if (sps) { for (var i = 0; i < sps.length; ++i) + { if (sps[i].from != null) { markers.push(sps[i].marker); } } } + }); + return markers + }, + + posFromIndex: function(off) { + var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length; + this.iter(function (line) { + var sz = line.text.length + sepSize; + if (sz > off) { ch = off; return true } + off -= sz; + ++lineNo$$1; + }); + return clipPos(this, Pos(lineNo$$1, ch)) + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) { return 0 } + var sepSize = this.lineSeparator().length; + this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value + index += line.text.length + sepSize; + }); + return index + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), + this.modeOption, this.first, this.lineSep, this.direction); + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; + doc.sel = this.sel; + doc.extend = false; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc + }, + + linkedDoc: function(options) { + if (!options) { options = {}; } + var from = this.first, to = this.first + this.size; + if (options.from != null && options.from > from) { from = options.from; } + if (options.to != null && options.to < to) { to = options.to; } + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); + if (options.sharedHist) { copy.history = this.history + ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; + copySharedMarkers(copy, findSharedMarkers(this)); + return copy + }, + unlinkDoc: function(other) { + var this$1 = this; + + if (other instanceof CodeMirror) { other = other.doc; } + if (this.linked) { for (var i = 0; i < this.linked.length; ++i) { + var link = this$1.linked[i]; + if (link.doc != other) { continue } + this$1.linked.splice(i, 1); + other.unlinkDoc(this$1); + detachSharedMarkers(findSharedMarkers(this$1)); + break + } } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true); + other.history = new History(null); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f);}, + + getMode: function() {return this.mode}, + getEditor: function() {return this.cm}, + + splitLines: function(str) { + if (this.lineSep) { return str.split(this.lineSep) } + return splitLinesAuto(str) + }, + lineSeparator: function() { return this.lineSep || "\n" }, + + setDirection: docMethodOp(function (dir) { + if (dir != "rtl") { dir = "ltr"; } + if (dir == this.direction) { return } + this.direction = dir; + this.iter(function (line) { return line.order = null; }); + if (this.cm) { directionChanged(this.cm); } + }) + }); + + // Public alias. + Doc.prototype.eachLine = Doc.prototype.iter; + + // Kludge to work around strange IE behavior where it'll sometimes + // re-fire a series of drag-related events right after the drop (#1551) + var lastDrop = 0; + + function onDrop(e) { + var cm = this; + clearDragCursor(cm); + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) + { return } + e_preventDefault(e); + if (ie) { lastDrop = +new Date; } + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; + if (!pos || cm.isReadOnly()) { return } + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var loadFile = function (file, i) { + if (cm.options.allowDropFileTypes && + indexOf(cm.options.allowDropFileTypes, file.type) == -1) + { return } + + var reader = new FileReader; + reader.onload = operation(cm, function () { + var content = reader.result; + if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = ""; } + text[i] = content; + if (++read == n) { + pos = clipPos(cm.doc, pos); + var change = {from: pos, to: pos, + text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), + origin: "paste"}; + makeChange(cm.doc, change); + setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); + } + }); + reader.readAsText(file); + }; + for (var i = 0; i < n; ++i) { loadFile(files[i], i); } + } else { // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(function () { return cm.display.input.focus(); }, 20); + return + } + try { + var text$1 = e.dataTransfer.getData("Text"); + if (text$1) { + var selected; + if (cm.state.draggingText && !cm.state.draggingText.copy) + { selected = cm.listSelections(); } + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); + if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1) + { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } } + cm.replaceSelection(text$1, "around", "paste"); + cm.display.input.focus(); + } + } + catch(e){} + } + } + + function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } + + e.dataTransfer.setData("Text", cm.getSelection()); + e.dataTransfer.effectAllowed = "copyMove"; + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + if (presto) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + e.dataTransfer.setDragImage(img, 0, 0); + if (presto) { img.parentNode.removeChild(img); } + } + } + + function onDragOver(cm, e) { + var pos = posFromMouse(cm, e); + if (!pos) { return } + var frag = document.createDocumentFragment(); + drawSelectionCursor(cm, pos, frag); + if (!cm.display.dragCursor) { + cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); + cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); + } + removeChildrenAndAdd(cm.display.dragCursor, frag); + } + + function clearDragCursor(cm) { + if (cm.display.dragCursor) { + cm.display.lineSpace.removeChild(cm.display.dragCursor); + cm.display.dragCursor = null; + } + } + + // These must be handled carefully, because naively registering a + // handler for each editor will cause the editors to never be + // garbage collected. + + function forEachCodeMirror(f) { + if (!document.getElementsByClassName) { return } + var byClass = document.getElementsByClassName("CodeMirror"), editors = []; + for (var i = 0; i < byClass.length; i++) { + var cm = byClass[i].CodeMirror; + if (cm) { editors.push(cm); } + } + if (editors.length) { editors[0].operation(function () { + for (var i = 0; i < editors.length; i++) { f(editors[i]); } + }); } + } + + var globalsRegistered = false; + function ensureGlobalHandlers() { + if (globalsRegistered) { return } + registerGlobalHandlers(); + globalsRegistered = true; + } + function registerGlobalHandlers() { + // When the window resizes, we need to refresh active editors. + var resizeTimer; + on(window, "resize", function () { + if (resizeTimer == null) { resizeTimer = setTimeout(function () { + resizeTimer = null; + forEachCodeMirror(onResize); + }, 100); } + }); + // When the window loses focus, we want to show the editor as blurred + on(window, "blur", function () { return forEachCodeMirror(onBlur); }); + } + // Called when the window resizes + function onResize(cm) { + var d = cm.display; + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + d.scrollbarsClipped = false; + cm.setSize(); + } + + var keyNames = { + 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", + 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", 145: "ScrollLock", + 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", + 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" + }; + + // Number keys + for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); } + // Alphabetic keys + for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); } + // Function keys + for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; } + + var keyMap = {}; + + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", + "Esc": "singleSelection" + }; + // Note that the save and find-related commands aren't defined by + // default. User code or addons can define them. Unknown commands + // are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", + "fallthrough": "basic" + }; + // Very basic readline/emacs-style bindings, which are standard on Mac. + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", + "Ctrl-O": "openLine" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", + "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", + "fallthrough": ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + + // KEYMAP DISPATCH + + function normalizeKeyName(name) { + var parts = name.split(/-(?!$)/); + name = parts[parts.length - 1]; + var alt, ctrl, shift, cmd; + for (var i = 0; i < parts.length - 1; i++) { + var mod = parts[i]; + if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; } + else if (/^a(lt)?$/i.test(mod)) { alt = true; } + else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; } + else if (/^s(hift)?$/i.test(mod)) { shift = true; } + else { throw new Error("Unrecognized modifier name: " + mod) } + } + if (alt) { name = "Alt-" + name; } + if (ctrl) { name = "Ctrl-" + name; } + if (cmd) { name = "Cmd-" + name; } + if (shift) { name = "Shift-" + name; } + return name + } + + // This is a kludge to keep keymaps mostly working as raw objects + // (backwards compatibility) while at the same time support features + // like normalization and multi-stroke key bindings. It compiles a + // new normalized keymap, and then updates the old object to reflect + // this. + function normalizeKeyMap(keymap) { + var copy = {}; + for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { + var value = keymap[keyname]; + if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } + if (value == "...") { delete keymap[keyname]; continue } + + var keys = map(keyname.split(" "), normalizeKeyName); + for (var i = 0; i < keys.length; i++) { + var val = (void 0), name = (void 0); + if (i == keys.length - 1) { + name = keys.join(" "); + val = value; + } else { + name = keys.slice(0, i + 1).join(" "); + val = "..."; + } + var prev = copy[name]; + if (!prev) { copy[name] = val; } + else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } + } + delete keymap[keyname]; + } } + for (var prop in copy) { keymap[prop] = copy[prop]; } + return keymap + } + + function lookupKey(key, map$$1, handle, context) { + map$$1 = getKeyMap(map$$1); + var found = map$$1.call ? map$$1.call(key, context) : map$$1[key]; + if (found === false) { return "nothing" } + if (found === "...") { return "multi" } + if (found != null && handle(found)) { return "handled" } + + if (map$$1.fallthrough) { + if (Object.prototype.toString.call(map$$1.fallthrough) != "[object Array]") + { return lookupKey(key, map$$1.fallthrough, handle, context) } + for (var i = 0; i < map$$1.fallthrough.length; i++) { + var result = lookupKey(key, map$$1.fallthrough[i], handle, context); + if (result) { return result } + } + } + } + + // Modifier key presses don't count as 'real' key presses for the + // purpose of keymap fallthrough. + function isModifierKey(value) { + var name = typeof value == "string" ? value : keyNames[value.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod" + } + + function addModifierNames(name, event, noShift) { + var base = name; + if (event.altKey && base != "Alt") { name = "Alt-" + name; } + if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; } + if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name; } + if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; } + return name + } + + // Look up the name of a key as indicated by an event object. + function keyName(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) { return false } + var name = keyNames[event.keyCode]; + if (name == null || event.altGraphKey) { return false } + // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause, + // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+) + if (event.keyCode == 3 && event.code) { name = event.code; } + return addModifierNames(name, event, noShift) + } + + function getKeyMap(val) { + return typeof val == "string" ? keyMap[val] : val + } + + // Helper for deleting text near the selection(s), used to implement + // backspace, delete, and similar functionality. + function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, kill = []; + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]); + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop(); + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from; + break + } + } + kill.push(toKill); + } + // Next, remove those actual ranges. + runInOp(cm, function () { + for (var i = kill.length - 1; i >= 0; i--) + { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); } + ensureCursorVisible(cm); + }); + } + + function moveCharLogically(line, ch, dir) { + var target = skipExtendingChars(line.text, ch + dir, dir); + return target < 0 || target > line.text.length ? null : target + } + + function moveLogically(line, start, dir) { + var ch = moveCharLogically(line, start.ch, dir); + return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before") + } + + function endOfLine(visually, cm, lineObj, lineNo, dir) { + if (visually) { + var order = getOrder(lineObj, cm.doc.direction); + if (order) { + var part = dir < 0 ? lst(order) : order[0]; + var moveInStorageOrder = (dir < 0) == (part.level == 1); + var sticky = moveInStorageOrder ? "after" : "before"; + var ch; + // With a wrapped rtl chunk (possibly spanning multiple bidi parts), + // it could be that the last bidi part is not on the last visual line, + // since visual lines contain content order-consecutive chunks. + // Thus, in rtl, we are looking for the first (content-order) character + // in the rtl chunk that is on the last line (that is, the same line + // as the last (content-order) character). + if (part.level > 0 || cm.doc.direction == "rtl") { + var prep = prepareMeasureForLine(cm, lineObj); + ch = dir < 0 ? lineObj.text.length - 1 : 0; + var targetTop = measureCharPrepared(cm, prep, ch).top; + ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch); + if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); } + } else { ch = dir < 0 ? part.to : part.from; } + return new Pos(lineNo, ch, sticky) + } + } + return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after") + } + + function moveVisually(cm, line, start, dir) { + var bidi = getOrder(line, cm.doc.direction); + if (!bidi) { return moveLogically(line, start, dir) } + if (start.ch >= line.text.length) { + start.ch = line.text.length; + start.sticky = "before"; + } else if (start.ch <= 0) { + start.ch = 0; + start.sticky = "after"; + } + var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos]; + if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { + // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, + // nothing interesting happens. + return moveLogically(line, start, dir) + } + + var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); }; + var prep; + var getWrappedLineExtent = function (ch) { + if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} } + prep = prep || prepareMeasureForLine(cm, line); + return wrappedLineExtentChar(cm, line, prep, ch) + }; + var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); + + if (cm.doc.direction == "rtl" || part.level == 1) { + var moveInStorageOrder = (part.level == 1) == (dir < 0); + var ch = mv(start, moveInStorageOrder ? 1 : -1); + if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { + // Case 2: We move within an rtl part or in an rtl editor on the same visual line + var sticky = moveInStorageOrder ? "before" : "after"; + return new Pos(start.line, ch, sticky) + } + } + + // Case 3: Could not move within this bidi part in this visual line, so leave + // the current bidi part + + var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { + var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder + ? new Pos(start.line, mv(ch, 1), "before") + : new Pos(start.line, ch, "after"); }; + + for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { + var part = bidi[partPos]; + var moveInStorageOrder = (dir > 0) == (part.level != 1); + var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1); + if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) } + ch = moveInStorageOrder ? part.from : mv(part.to, -1); + if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) } + } + }; + + // Case 3a: Look for other bidi parts on the same visual line + var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent); + if (res) { return res } + + // Case 3b: Look for other bidi parts on the next visual line + var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1); + if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { + res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); + if (res) { return res } + } + + // Case 4: Nowhere to move + return null + } + + // Commands are parameter-less actions that can be performed on an + // editor, mostly used for keybindings. + var commands = { + selectAll: selectAll, + singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, + killLine: function (cm) { return deleteNearSelection(cm, function (range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length; + if (range.head.ch == len && range.head.line < cm.lastLine()) + { return {from: range.head, to: Pos(range.head.line + 1, 0)} } + else + { return {from: range.head, to: Pos(range.head.line, len)} } + } else { + return {from: range.from(), to: range.to()} + } + }); }, + deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) + }); }); }, + delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), to: range.from() + }); }); }, + delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var leftPos = cm.coordsChar({left: 0, top: top}, "div"); + return {from: leftPos, to: range.from()} + }); }, + delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); + return {from: range.from(), to: rightPos } + }); }, + undo: function (cm) { return cm.undo(); }, + redo: function (cm) { return cm.redo(); }, + undoSelection: function (cm) { return cm.undoSelection(); }, + redoSelection: function (cm) { return cm.redoSelection(); }, + goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, + goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); }, + goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); }, + {origin: "+move", bias: 1} + ); }, + goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); }, + {origin: "+move", bias: 1} + ); }, + goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); }, + {origin: "+move", bias: -1} + ); }, + goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") + }, sel_move); }, + goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({left: 0, top: top}, "div") + }, sel_move); }, + goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + var pos = cm.coordsChar({left: 0, top: top}, "div"); + if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) } + return pos + }, sel_move); }, + goLineUp: function (cm) { return cm.moveV(-1, "line"); }, + goLineDown: function (cm) { return cm.moveV(1, "line"); }, + goPageUp: function (cm) { return cm.moveV(-1, "page"); }, + goPageDown: function (cm) { return cm.moveV(1, "page"); }, + goCharLeft: function (cm) { return cm.moveH(-1, "char"); }, + goCharRight: function (cm) { return cm.moveH(1, "char"); }, + goColumnLeft: function (cm) { return cm.moveH(-1, "column"); }, + goColumnRight: function (cm) { return cm.moveH(1, "column"); }, + goWordLeft: function (cm) { return cm.moveH(-1, "word"); }, + goGroupRight: function (cm) { return cm.moveH(1, "group"); }, + goGroupLeft: function (cm) { return cm.moveH(-1, "group"); }, + goWordRight: function (cm) { return cm.moveH(1, "word"); }, + delCharBefore: function (cm) { return cm.deleteH(-1, "char"); }, + delCharAfter: function (cm) { return cm.deleteH(1, "char"); }, + delWordBefore: function (cm) { return cm.deleteH(-1, "word"); }, + delWordAfter: function (cm) { return cm.deleteH(1, "word"); }, + delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); }, + delGroupAfter: function (cm) { return cm.deleteH(1, "group"); }, + indentAuto: function (cm) { return cm.indentSelection("smart"); }, + indentMore: function (cm) { return cm.indentSelection("add"); }, + indentLess: function (cm) { return cm.indentSelection("subtract"); }, + insertTab: function (cm) { return cm.replaceSelection("\t"); }, + insertSoftTab: function (cm) { + var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from(); + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); + spaces.push(spaceStr(tabSize - col % tabSize)); + } + cm.replaceSelections(spaces); + }, + defaultTab: function (cm) { + if (cm.somethingSelected()) { cm.indentSelection("add"); } + else { cm.execCommand("insertTab"); } + }, + // Swap the two chars left and right of each selection's head. + // Move cursor behind the two swapped characters afterwards. + // + // Doesn't consider line feeds a character. + // Doesn't scan more than one line above to find a character. + // Doesn't do anything on an empty line. + // Doesn't do anything with non-empty selections. + transposeChars: function (cm) { return runInOp(cm, function () { + var ranges = cm.listSelections(), newSel = []; + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) { continue } + var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; + if (line) { + if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); } + if (cur.ch > 0) { + cur = new Pos(cur.line, cur.ch + 1); + cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), + Pos(cur.line, cur.ch - 2), cur, "+transpose"); + } else if (cur.line > cm.doc.first) { + var prev = getLine(cm.doc, cur.line - 1).text; + if (prev) { + cur = new Pos(cur.line, 1); + cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + + prev.charAt(prev.length - 1), + Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); + } + } + } + newSel.push(new Range(cur, cur)); + } + cm.setSelections(newSel); + }); }, + newlineAndIndent: function (cm) { return runInOp(cm, function () { + var sels = cm.listSelections(); + for (var i = sels.length - 1; i >= 0; i--) + { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); } + sels = cm.listSelections(); + for (var i$1 = 0; i$1 < sels.length; i$1++) + { cm.indentLine(sels[i$1].from().line, null, true); } + ensureCursorVisible(cm); + }); }, + openLine: function (cm) { return cm.replaceSelection("\n", "start"); }, + toggleOverwrite: function (cm) { return cm.toggleOverwrite(); } + }; + + + function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(line); + if (visual != line) { lineN = lineNo(visual); } + return endOfLine(true, cm, visual, lineN, 1) + } + function lineEnd(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLineEnd(line); + if (visual != line) { lineN = lineNo(visual); } + return endOfLine(true, cm, line, lineN, -1) + } + function lineStartSmart(cm, pos) { + var start = lineStart(cm, pos.line); + var line = getLine(cm.doc, start.line); + var order = getOrder(line, cm.doc.direction); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)); + var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; + return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky) + } + return start + } + + // Run a handler that was bound to a key. + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) { return false } + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + cm.display.input.ensurePolled(); + var prevShift = cm.display.shift, done = false; + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true; } + if (dropShift) { cm.display.shift = false; } + done = bound(cm) != Pass; + } finally { + cm.display.shift = prevShift; + cm.state.suppressEdits = false; + } + return done + } + + function lookupKeyForEditor(cm, name, handle) { + for (var i = 0; i < cm.state.keyMaps.length; i++) { + var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); + if (result) { return result } + } + return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) + || lookupKey(name, cm.options.keyMap, handle, cm) + } + + // Note that, despite the name, this function is also used to check + // for bound mouse clicks. + + var stopSeq = new Delayed; + + function dispatchKey(cm, name, e, handle) { + var seq = cm.state.keySeq; + if (seq) { + if (isModifierKey(name)) { return "handled" } + if (/\'$/.test(name)) + { cm.state.keySeq = null; } + else + { stopSeq.set(50, function () { + if (cm.state.keySeq == seq) { + cm.state.keySeq = null; + cm.display.input.reset(); + } + }); } + if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true } + } + return dispatchKeyInner(cm, name, e, handle) + } + + function dispatchKeyInner(cm, name, e, handle) { + var result = lookupKeyForEditor(cm, name, handle); + + if (result == "multi") + { cm.state.keySeq = name; } + if (result == "handled") + { signalLater(cm, "keyHandled", cm, name, e); } + + if (result == "handled" || result == "multi") { + e_preventDefault(e); + restartBlink(cm); + } + + return !!result + } + + // Handle a key from the keydown event. + function handleKeyBinding(cm, e) { + var name = keyName(e, true); + if (!name) { return false } + + if (e.shiftKey && !cm.state.keySeq) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); }) + || dispatchKey(cm, name, e, function (b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + { return doHandleBinding(cm, b) } + }) + } else { + return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); }) + } + } + + // Handle a key from the keypress event + function handleCharBinding(cm, e, ch) { + return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); }) + } + + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + cm.curOp.focus = activeElt(); + if (signalDOMEvent(cm, e)) { return } + // IE does strange things with escape. + if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; } + var code = e.keyCode; + cm.display.shift = code == 16 || e.shiftKey; + var handled = handleKeyBinding(cm, e); + if (presto) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + { cm.replaceSelection("", null, "cut"); } + } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) + { showCrossHair(cm); } + } + + function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv; + addClass(lineDiv, "CodeMirror-crosshair"); + + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair"); + off(document, "keyup", up); + off(document, "mouseover", up); + } + } + on(document, "keyup", up); + on(document, "mouseover", up); + } + + function onKeyUp(e) { + if (e.keyCode == 16) { this.doc.sel.shift = false; } + signalDOMEvent(this, e); + } + + function onKeyPress(e) { + var cm = this; + if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return } + var keyCode = e.keyCode, charCode = e.charCode; + if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return} + if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return } + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + // Some browsers fire keypress events for backspace + if (ch == "\x08") { return } + if (handleCharBinding(cm, e, ch)) { return } + cm.display.input.onKeyPress(e); + } + + var DOUBLECLICK_DELAY = 400; + + var PastClick = function(time, pos, button) { + this.time = time; + this.pos = pos; + this.button = button; + }; + + PastClick.prototype.compare = function (time, pos, button) { + return this.time + DOUBLECLICK_DELAY > time && + cmp(pos, this.pos) == 0 && button == this.button + }; + + var lastClick, lastDoubleClick; + function clickRepeat(pos, button) { + var now = +new Date; + if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { + lastClick = lastDoubleClick = null; + return "triple" + } else if (lastClick && lastClick.compare(now, pos, button)) { + lastDoubleClick = new PastClick(now, pos, button); + lastClick = null; + return "double" + } else { + lastClick = new PastClick(now, pos, button); + lastDoubleClick = null; + return "single" + } + } + + // A mouse down can be a single click, double click, triple click, + // start of selection drag, start of text drag, new cursor + // (ctrl-click), rectangle drag (alt-drag), or xwin + // middle-click-paste. Or it might be a click on something we should + // not interfere with, such as a scrollbar or widget. + function onMouseDown(e) { + var cm = this, display = cm.display; + if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return } + display.input.ensurePolled(); + display.shift = e.shiftKey; + + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false; + setTimeout(function () { return display.scroller.draggable = true; }, 100); + } + return + } + if (clickInGutter(cm, e)) { return } + var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single"; + window.focus(); + + // #3261: make sure, that we're not starting a second selection + if (button == 1 && cm.state.selectingText) + { cm.state.selectingText(e); } + + if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return } + + if (button == 1) { + if (pos) { leftButtonDown(cm, pos, repeat, e); } + else if (e_target(e) == display.scroller) { e_preventDefault(e); } + } else if (button == 2) { + if (pos) { extendSelection(cm.doc, pos); } + setTimeout(function () { return display.input.focus(); }, 20); + } else if (button == 3) { + if (captureRightClick) { cm.display.input.onContextMenu(e); } + else { delayBlurEvent(cm); } + } + } + + function handleMappedButton(cm, button, pos, repeat, event) { + var name = "Click"; + if (repeat == "double") { name = "Double" + name; } + else if (repeat == "triple") { name = "Triple" + name; } + name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; + + return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { + if (typeof bound == "string") { bound = commands[bound]; } + if (!bound) { return false } + var done = false; + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true; } + done = bound(cm, pos) != Pass; + } finally { + cm.state.suppressEdits = false; + } + return done + }) + } + + function configureMouse(cm, repeat, event) { + var option = cm.getOption("configureMouse"); + var value = option ? option(cm, repeat, event) : {}; + if (value.unit == null) { + var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; + value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; + } + if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; } + if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; } + if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); } + return value + } + + function leftButtonDown(cm, pos, repeat, event) { + if (ie) { setTimeout(bind(ensureFocus, cm), 0); } + else { cm.curOp.focus = activeElt(); } + + var behavior = configureMouse(cm, repeat, event); + + var sel = cm.doc.sel, contained; + if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && + repeat == "single" && (contained = sel.contains(pos)) > -1 && + (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && + (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) + { leftButtonStartDrag(cm, event, pos, behavior); } + else + { leftButtonSelect(cm, event, pos, behavior); } + } + + // Start a text drag. When it ends, see if any dragging actually + // happen, and treat as a click if it didn't. + function leftButtonStartDrag(cm, event, pos, behavior) { + var display = cm.display, moved = false; + var dragEnd = operation(cm, function (e) { + if (webkit) { display.scroller.draggable = false; } + cm.state.draggingText = false; + off(display.wrapper.ownerDocument, "mouseup", dragEnd); + off(display.wrapper.ownerDocument, "mousemove", mouseMove); + off(display.scroller, "dragstart", dragStart); + off(display.scroller, "drop", dragEnd); + if (!moved) { + e_preventDefault(e); + if (!behavior.addNew) + { extendSelection(cm.doc, pos, null, null, behavior.extend); } + // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) + if (webkit || ie && ie_version == 9) + { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); } + else + { display.input.focus(); } + } + }); + var mouseMove = function(e2) { + moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; + }; + var dragStart = function () { return moved = true; }; + // Let the drag handler handle this. + if (webkit) { display.scroller.draggable = true; } + cm.state.draggingText = dragEnd; + dragEnd.copy = !behavior.moveOnDrag; + // IE's approach to draggable + if (display.scroller.dragDrop) { display.scroller.dragDrop(); } + on(display.wrapper.ownerDocument, "mouseup", dragEnd); + on(display.wrapper.ownerDocument, "mousemove", mouseMove); + on(display.scroller, "dragstart", dragStart); + on(display.scroller, "drop", dragEnd); + + delayBlurEvent(cm); + setTimeout(function () { return display.input.focus(); }, 20); + } + + function rangeForUnit(cm, pos, unit) { + if (unit == "char") { return new Range(pos, pos) } + if (unit == "word") { return cm.findWordAt(pos) } + if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } + var result = unit(cm, pos); + return new Range(result.from, result.to) + } + + // Normal selection, as opposed to text dragging. + function leftButtonSelect(cm, event, start, behavior) { + var display = cm.display, doc = cm.doc; + e_preventDefault(event); + + var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; + if (behavior.addNew && !behavior.extend) { + ourIndex = doc.sel.contains(start); + if (ourIndex > -1) + { ourRange = ranges[ourIndex]; } + else + { ourRange = new Range(start, start); } + } else { + ourRange = doc.sel.primary(); + ourIndex = doc.sel.primIndex; + } + + if (behavior.unit == "rectangle") { + if (!behavior.addNew) { ourRange = new Range(start, start); } + start = posFromMouse(cm, event, true, true); + ourIndex = -1; + } else { + var range$$1 = rangeForUnit(cm, start, behavior.unit); + if (behavior.extend) + { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); } + else + { ourRange = range$$1; } + } + + if (!behavior.addNew) { + ourIndex = 0; + setSelection(doc, new Selection([ourRange], 0), sel_mouse); + startSel = doc.sel; + } else if (ourIndex == -1) { + ourIndex = ranges.length; + setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), + {scroll: false, origin: "*mouse"}); + } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { + setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), + {scroll: false, origin: "*mouse"}); + startSel = doc.sel; + } else { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); + } + + var lastPos = start; + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) { return } + lastPos = pos; + + if (behavior.unit == "rectangle") { + var ranges = [], tabSize = cm.options.tabSize; + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); + var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); + line <= end; line++) { + var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); + if (left == right) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); } + else if (text.length > leftPos) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } + } + if (!ranges.length) { ranges.push(new Range(start, start)); } + setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), + {origin: "*mouse", scroll: false}); + cm.scrollIntoView(pos); + } else { + var oldRange = ourRange; + var range$$1 = rangeForUnit(cm, pos, behavior.unit); + var anchor = oldRange.anchor, head; + if (cmp(range$$1.anchor, anchor) > 0) { + head = range$$1.head; + anchor = minPos(oldRange.from(), range$$1.anchor); + } else { + head = range$$1.anchor; + anchor = maxPos(oldRange.to(), range$$1.head); + } + var ranges$1 = startSel.ranges.slice(0); + ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); + setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse); + } + } + + var editorSize = display.wrapper.getBoundingClientRect(); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); + if (!cur) { return } + if (cmp(cur, lastPos) != 0) { + cm.curOp.focus = activeElt(); + extendTo(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) + { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); } + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) { setTimeout(operation(cm, function () { + if (counter != curCount) { return } + display.scroller.scrollTop += outside; + extend(e); + }), 50); } + } + } + + function done(e) { + cm.state.selectingText = false; + counter = Infinity; + e_preventDefault(e); + display.input.focus(); + off(display.wrapper.ownerDocument, "mousemove", move); + off(display.wrapper.ownerDocument, "mouseup", up); + doc.history.lastSelOrigin = null; + } + + var move = operation(cm, function (e) { + if (e.buttons === 0 || !e_button(e)) { done(e); } + else { extend(e); } + }); + var up = operation(cm, done); + cm.state.selectingText = up; + on(display.wrapper.ownerDocument, "mousemove", move); + on(display.wrapper.ownerDocument, "mouseup", up); + } + + // Used when mouse-selecting to adjust the anchor to the proper side + // of a bidi jump depending on the visual position of the head. + function bidiSimplify(cm, range$$1) { + var anchor = range$$1.anchor; + var head = range$$1.head; + var anchorLine = getLine(cm.doc, anchor.line); + if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 } + var order = getOrder(anchorLine); + if (!order) { return range$$1 } + var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index]; + if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 } + var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1); + if (boundary == 0 || boundary == order.length) { return range$$1 } + + // Compute the relative visual position of the head compared to the + // anchor (<0 is to the left, >0 to the right) + var leftSide; + if (head.line != anchor.line) { + leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; + } else { + var headIndex = getBidiPartAt(order, head.ch, head.sticky); + var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); + if (headIndex == boundary - 1 || headIndex == boundary) + { leftSide = dir < 0; } + else + { leftSide = dir > 0; } + } + + var usePart = order[boundary + (leftSide ? -1 : 0)]; + var from = leftSide == (usePart.level == 1); + var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before"; + return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head) + } + + + // Determines whether an event happened in the gutter, and fires the + // handlers for the corresponding event. + function gutterEvent(cm, e, type, prevent) { + var mX, mY; + if (e.touches) { + mX = e.touches[0].clientX; + mY = e.touches[0].clientY; + } else { + try { mX = e.clientX; mY = e.clientY; } + catch(e) { return false } + } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false } + if (prevent) { e_preventDefault(e); } + + var display = cm.display; + var lineBox = display.lineDiv.getBoundingClientRect(); + + if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) } + mY -= lineBox.top - display.viewOffset; + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.options.gutters[i]; + signal(cm, type, cm, line, gutter, e); + return e_defaultPrevented(e) + } + } + } + + function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true) + } + + // CONTEXT MENU HANDLING + + // To make the context menu work, we need to briefly unhide the + // textarea (making it as unobtrusive as possible) to let the + // right-click take effect on it. + function onContextMenu(cm, e) { + if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return } + if (signalDOMEvent(cm, e, "contextmenu")) { return } + if (!captureRightClick) { cm.display.input.onContextMenu(e); } + } + + function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) { return false } + return gutterEvent(cm, e, "gutterContextMenu", false) + } + + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + + var Init = {toString: function(){return "CodeMirror.Init"}}; + + var defaults = {}; + var optionHandlers = {}; + + function defineOptions(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) { optionHandlers[name] = + notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; } + } + + CodeMirror.defineOption = option; + + // Passed to option handlers when there is no old value. + CodeMirror.Init = Init; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function (cm, val) { return cm.setValue(val); }, true); + option("mode", null, function (cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function (cm) { + resetModeState(cm); + clearCaches(cm); + regChange(cm); + }, true); + + option("lineSeparator", null, function (cm, val) { + cm.doc.lineSep = val; + if (!val) { return } + var newBreaks = [], lineNo = cm.doc.first; + cm.doc.iter(function (line) { + for (var pos = 0;;) { + var found = line.text.indexOf(val, pos); + if (found == -1) { break } + pos = found + val.length; + newBreaks.push(Pos(lineNo, found)); + } + lineNo++; + }); + for (var i = newBreaks.length - 1; i >= 0; i--) + { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); } + }); + option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g, function (cm, val, old) { + cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); + if (old != Init) { cm.refresh(); } + }); + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true); + option("electricChars", true); + option("inputStyle", mobile ? "contenteditable" : "textarea", function () { + throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME + }, true); + option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true); + option("rtlMoveVisually", !windows); + option("wholeLineUpdateBefore", true); + + option("theme", "default", function (cm) { + themeChanged(cm); + guttersChanged(cm); + }, true); + option("keyMap", "default", function (cm, val, old) { + var next = getKeyMap(val); + var prev = old != Init && getKeyMap(old); + if (prev && prev.detach) { prev.detach(cm, next); } + if (next.attach) { next.attach(cm, prev || null); } + }); + option("extraKeys", null); + option("configureMouse", null); + + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function (cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("fixedGutter", true, function (cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true); + option("scrollbarStyle", "native", function (cm) { + initScrollbars(cm); + updateScrollbars(cm); + cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); + cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); + }, true); + option("lineNumbers", false, function (cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("firstLineNumber", 1, guttersChanged, true); + option("lineNumberFormatter", function (integer) { return integer; }, guttersChanged, true); + option("showCursorWhenSelecting", false, updateSelection, true); + + option("resetSelectionOnContextMenu", true); + option("lineWiseCopyCut", true); + option("pasteLinesPerSelection", true); + option("selectionsMayTouch", false); + + option("readOnly", false, function (cm, val) { + if (val == "nocursor") { + onBlur(cm); + cm.display.input.blur(); + } + cm.display.input.readOnlyChanged(val); + }); + option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true); + option("dragDrop", true, dragDropChanged); + option("allowDropFileTypes", null); + + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1, updateSelection, true); + option("singleCursorHeightPerLine", true, updateSelection, true); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true, resetModeState, true); + option("addModeClass", false, resetModeState, true); + option("pollInterval", 100); + option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; }); + option("historyEventDelay", 1250); + option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true); + option("maxHighlightLength", 10000, resetModeState, true); + option("moveInputWithCursor", true, function (cm, val) { + if (!val) { cm.display.input.resetPosition(); } + }); + + option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }); + option("autofocus", null); + option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true); + option("phrases", null); + } + + function guttersChanged(cm) { + updateGutters(cm); + regChange(cm); + alignHorizontally(cm); + } + + function dragDropChanged(cm, value, old) { + var wasOn = old && old != Init; + if (!value != !wasOn) { + var funcs = cm.display.dragFunctions; + var toggle = value ? on : off; + toggle(cm.display.scroller, "dragstart", funcs.start); + toggle(cm.display.scroller, "dragenter", funcs.enter); + toggle(cm.display.scroller, "dragover", funcs.over); + toggle(cm.display.scroller, "dragleave", funcs.leave); + toggle(cm.display.scroller, "drop", funcs.drop); + } + } + + function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap"); + cm.display.sizer.style.minWidth = ""; + cm.display.sizerWidth = null; + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap"); + findMaxLine(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function () { return updateScrollbars(cm); }, 100); + } + + // A CodeMirror instance represents an editor. This is the object + // that user code is usually dealing with. + + function CodeMirror(place, options) { + var this$1 = this; + + if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) } + + this.options = options = options ? copyObj(options) : {}; + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false); + setGuttersForLineNumbers(options); + + var doc = options.value; + if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); } + else if (options.mode) { doc.modeOption = options.mode; } + this.doc = doc; + + var input = new CodeMirror.inputStyles[options.inputStyle](this); + var display = this.display = new Display(place, doc, input); + display.wrapper.CodeMirror = this; + updateGutters(this); + themeChanged(this); + if (options.lineWrapping) + { this.display.wrapper.className += " CodeMirror-wrap"; } + initScrollbars(this); + + this.state = { + keyMaps: [], // stores maps added by addKeyMap + overlays: [], // highlighting overlays, as added by addOverlay + modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, + delayingBlurEvent: false, + focused: false, + suppressEdits: false, // used to disable editing during key handlers when in readOnly mode + pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll + selectingText: false, + draggingText: false, + highlight: new Delayed(), // stores highlight worker timeout + keySeq: null, // Unfinished key sequence + specialChars: null + }; + + if (options.autofocus && !mobile) { display.input.focus(); } + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); } + + registerEventHandlers(this); + ensureGlobalHandlers(); + + startOperation(this); + this.curOp.forceUpdate = true; + attachDoc(this, doc); + + if ((options.autofocus && !mobile) || this.hasFocus()) + { setTimeout(bind(onFocus, this), 20); } + else + { onBlur(this); } + + for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt)) + { optionHandlers[opt](this$1, options[opt], Init); } } + maybeUpdateLineNumberWidth(this); + if (options.finishInit) { options.finishInit(this); } + for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); } + endOperation(this); + // Suppress optimizelegibility in Webkit, since it breaks text + // measuring on line wrapping boundaries. + if (webkit && options.lineWrapping && + getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") + { display.lineDiv.style.textRendering = "auto"; } + } + + // The default configuration options. + CodeMirror.defaults = defaults; + // Functions to run when options are changed. + CodeMirror.optionHandlers = optionHandlers; + + // Attach the necessary event handlers when initializing the editor + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + // Older IE's will not fire a second mousedown for a double click + if (ie && ie_version < 11) + { on(d.scroller, "dblclick", operation(cm, function (e) { + if (signalDOMEvent(cm, e)) { return } + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return } + e_preventDefault(e); + var word = cm.findWordAt(pos); + extendSelection(cm.doc, word.anchor, word.head); + })); } + else + { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); } + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }); + + // Used to suppress mouse event handling when a touch happens + var touchFinished, prevTouch = {end: 0}; + function finishTouch() { + if (d.activeTouch) { + touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000); + prevTouch = d.activeTouch; + prevTouch.end = +new Date; + } + } + function isMouseLikeTouchEvent(e) { + if (e.touches.length != 1) { return false } + var touch = e.touches[0]; + return touch.radiusX <= 1 && touch.radiusY <= 1 + } + function farAway(touch, other) { + if (other.left == null) { return true } + var dx = other.left - touch.left, dy = other.top - touch.top; + return dx * dx + dy * dy > 20 * 20 + } + on(d.scroller, "touchstart", function (e) { + if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { + d.input.ensurePolled(); + clearTimeout(touchFinished); + var now = +new Date; + d.activeTouch = {start: now, moved: false, + prev: now - prevTouch.end <= 300 ? prevTouch : null}; + if (e.touches.length == 1) { + d.activeTouch.left = e.touches[0].pageX; + d.activeTouch.top = e.touches[0].pageY; + } + } + }); + on(d.scroller, "touchmove", function () { + if (d.activeTouch) { d.activeTouch.moved = true; } + }); + on(d.scroller, "touchend", function (e) { + var touch = d.activeTouch; + if (touch && !eventInWidget(d, e) && touch.left != null && + !touch.moved && new Date - touch.start < 300) { + var pos = cm.coordsChar(d.activeTouch, "page"), range; + if (!touch.prev || farAway(touch, touch.prev)) // Single tap + { range = new Range(pos, pos); } + else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap + { range = cm.findWordAt(pos); } + else // Triple tap + { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); } + cm.setSelection(range.anchor, range.head); + cm.focus(); + e_preventDefault(e); + } + finishTouch(); + }); + on(d.scroller, "touchcancel", finishTouch); + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function () { + if (d.scroller.clientHeight) { + updateScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); }); + on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); }); + + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); + + d.dragFunctions = { + enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }}, + over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }}, + start: function (e) { return onDragStart(cm, e); }, + drop: operation(cm, onDrop), + leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }} + }; + + var inp = d.input.getField(); + on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); }); + on(inp, "keydown", operation(cm, onKeyDown)); + on(inp, "keypress", operation(cm, onKeyPress)); + on(inp, "focus", function (e) { return onFocus(cm, e); }); + on(inp, "blur", function (e) { return onBlur(cm, e); }); + } + + var initHooks = []; + CodeMirror.defineInitHook = function (f) { return initHooks.push(f); }; + + // Indent the given line. The how parameter can be "smart", + // "add"/null, "subtract", or "prev". When aggressive is false + // (typically set to true for forced single-line indents), empty + // lines are not indented, and places where the mode returns Pass + // are left alone. + function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, state; + if (how == null) { how = "add"; } + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!doc.mode.indent) { how = "prev"; } + else { state = getContextBefore(cm, n).state; } + } + + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); + if (line.stateAfter) { line.stateAfter = null; } + var curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0; + how = "not"; + } else if (how == "smart") { + indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass || indentation > 150) { + if (!aggressive) { return } + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); } + else { indentation = 0; } + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } else if (typeof how == "number") { + indentation = curSpace + how; + } + indentation = Math.max(0, indentation); + + var indentString = "", pos = 0; + if (cm.options.indentWithTabs) + { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} } + if (pos < indentation) { indentString += spaceStr(indentation - pos); } + + if (indentString != curSpaceString) { + replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + line.stateAfter = null; + return true + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { + var range = doc.sel.ranges[i$1]; + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos$1 = Pos(n, curSpaceString.length); + replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)); + break + } + } + } + } + + // This will be set to a {lineWise: bool, text: [string]} object, so + // that, when pasting, we know what kind of selections the copied + // text was made out of. + var lastCopied = null; + + function setLastCopied(newLastCopied) { + lastCopied = newLastCopied; + } + + function applyTextInput(cm, inserted, deleted, sel, origin) { + var doc = cm.doc; + cm.display.shift = false; + if (!sel) { sel = doc.sel; } + + var paste = cm.state.pasteIncoming || origin == "paste"; + var textLines = splitLinesAuto(inserted), multiPaste = null; + // When pasting N lines into N selections, insert one line per selection + if (paste && sel.ranges.length > 1) { + if (lastCopied && lastCopied.text.join("\n") == inserted) { + if (sel.ranges.length % lastCopied.text.length == 0) { + multiPaste = []; + for (var i = 0; i < lastCopied.text.length; i++) + { multiPaste.push(doc.splitLines(lastCopied.text[i])); } + } + } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { + multiPaste = map(textLines, function (l) { return [l]; }); + } + } + + var updateInput; + // Normal behavior is to insert the new text into every selection + for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { + var range$$1 = sel.ranges[i$1]; + var from = range$$1.from(), to = range$$1.to(); + if (range$$1.empty()) { + if (deleted && deleted > 0) // Handle deletion + { from = Pos(from.line, from.ch - deleted); } + else if (cm.state.overwrite && !paste) // Handle overwrite + { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); } + else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted) + { from = to = Pos(from.line, 0); } + } + updateInput = cm.curOp.updateInput; + var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, + origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")}; + makeChange(cm.doc, changeEvent); + signalLater(cm, "inputRead", cm, changeEvent); + } + if (inserted && !paste) + { triggerElectric(cm, inserted); } + + ensureCursorVisible(cm); + cm.curOp.updateInput = updateInput; + cm.curOp.typing = true; + cm.state.pasteIncoming = cm.state.cutIncoming = false; + } + + function handlePaste(e, cm) { + var pasted = e.clipboardData && e.clipboardData.getData("Text"); + if (pasted) { + e.preventDefault(); + if (!cm.isReadOnly() && !cm.options.disableInput) + { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); } + return true + } + } + + function triggerElectric(cm, inserted) { + // When an 'electric' character is inserted, immediately trigger a reindent + if (!cm.options.electricChars || !cm.options.smartIndent) { return } + var sel = cm.doc.sel; + + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range$$1 = sel.ranges[i]; + if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue } + var mode = cm.getModeAt(range$$1.head); + var indented = false; + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) + { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indented = indentLine(cm, range$$1.head.line, "smart"); + break + } } + } else if (mode.electricInput) { + if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch))) + { indented = indentLine(cm, range$$1.head.line, "smart"); } + } + if (indented) { signalLater(cm, "electricInput", cm, range$$1.head.line); } + } + } + + function copyableRanges(cm) { + var text = [], ranges = []; + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line; + var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; + ranges.push(lineRange); + text.push(cm.getRange(lineRange.anchor, lineRange.head)); + } + return {text: text, ranges: ranges} + } + + function disableBrowserMagic(field, spellcheck) { + field.setAttribute("autocorrect", "off"); + field.setAttribute("autocapitalize", "off"); + field.setAttribute("spellcheck", !!spellcheck); + } + + function hiddenTextarea() { + var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"); + var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) { te.style.width = "1000px"; } + else { te.setAttribute("wrap", "off"); } + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) { te.style.border = "1px solid black"; } + disableBrowserMagic(te); + return div + } + + // The publicly visible API. Note that methodOp(f) means + // 'wrap f in an operation, performed on its `this` parameter'. + + // This is not the complete set of editor methods. Most of the + // methods defined on the Doc type are also injected into + // CodeMirror.prototype, for backwards compatibility and + // convenience. + + function addEditorMethods(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + + var helpers = CodeMirror.helpers = {}; + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); this.display.input.focus();}, + + setOption: function(option, value) { + var options = this.options, old = options[option]; + if (options[option] == value && option != "mode") { return } + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) + { operation(this, optionHandlers[option])(this, value, old); } + signal(this, "optionChange", this, option); + }, + + getOption: function(option) {return this.options[option]}, + getDoc: function() {return this.doc}, + + addKeyMap: function(map$$1, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map$$1)); + }, + removeKeyMap: function(map$$1) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) + { if (maps[i] == map$$1 || maps[i].name == map$$1) { + maps.splice(i, 1); + return true + } } + }, + + addOverlay: methodOp(function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) { throw new Error("Overlays may not be stateful.") } + insertSorted(this.state.overlays, + {mode: mode, modeSpec: spec, opaque: options && options.opaque, + priority: (options && options.priority) || 0}, + function (overlay) { return overlay.priority; }); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: methodOp(function(spec) { + var this$1 = this; + + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec; + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1); + this$1.state.modeGen++; + regChange(this$1); + return + } + } + }), + + indentLine: methodOp(function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; } + else { dir = dir ? "add" : "subtract"; } + } + if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); } + }), + indentSelection: methodOp(function(how) { + var this$1 = this; + + var ranges = this.doc.sel.ranges, end = -1; + for (var i = 0; i < ranges.length; i++) { + var range$$1 = ranges[i]; + if (!range$$1.empty()) { + var from = range$$1.from(), to = range$$1.to(); + var start = Math.max(end, from.line); + end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; + for (var j = start; j < end; ++j) + { indentLine(this$1, j, how); } + var newRanges = this$1.doc.sel.ranges; + if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) + { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); } + } else if (range$$1.head.line > end) { + indentLine(this$1, range$$1.head.line, how, true); + end = range$$1.head.line; + if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); } + } + } + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + return takeToken(this, pos, precise) + }, + + getLineTokens: function(line, precise) { + return takeToken(this, Pos(line), precise, true) + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos); + var styles = getLineStyles(this, getLine(this.doc, pos.line)); + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; + var type; + if (ch == 0) { type = styles[2]; } + else { for (;;) { + var mid = (before + after) >> 1; + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; } + else if (styles[mid * 2 + 1] < ch) { before = mid + 1; } + else { type = styles[mid * 2 + 2]; break } + } } + var cut = type ? type.indexOf("overlay ") : -1; + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1) + }, + + getModeAt: function(pos) { + var mode = this.doc.mode; + if (!mode.innerMode) { return mode } + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode + }, + + getHelper: function(pos, type) { + return this.getHelpers(pos, type)[0] + }, + + getHelpers: function(pos, type) { + var this$1 = this; + + var found = []; + if (!helpers.hasOwnProperty(type)) { return found } + var help = helpers[type], mode = this.getModeAt(pos); + if (typeof mode[type] == "string") { + if (help[mode[type]]) { found.push(help[mode[type]]); } + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]]; + if (val) { found.push(val); } + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]); + } else if (help[mode.name]) { + found.push(help[mode.name]); + } + for (var i$1 = 0; i$1 < help._global.length; i$1++) { + var cur = help._global[i$1]; + if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1) + { found.push(cur.val); } + } + return found + }, + + getStateAfter: function(line, precise) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); + return getContextBefore(this, line + 1, precise).state + }, + + cursorCoords: function(start, mode) { + var pos, range$$1 = this.doc.sel.primary(); + if (start == null) { pos = range$$1.head; } + else if (typeof start == "object") { pos = clipPos(this.doc, start); } + else { pos = start ? range$$1.from() : range$$1.to(); } + return cursorCoords(this, pos, mode || "page") + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page") + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top) + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; + return lineAtHeight(this.doc, height + this.display.viewOffset) + }, + heightAtLine: function(line, mode, includeWidgets) { + var end = false, lineObj; + if (typeof line == "number") { + var last = this.doc.first + this.doc.size - 1; + if (line < this.doc.first) { line = this.doc.first; } + else if (line > last) { line = last; end = true; } + lineObj = getLine(this.doc, line); + } else { + lineObj = line; + } + return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top + + (end ? this.doc.height - heightAtLine(lineObj) : 0) + }, + + defaultTextHeight: function() { return textHeight(this.display) }, + defaultCharWidth: function() { return charWidth(this.display) }, + + getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, left = pos.left; + node.style.position = "absolute"; + node.setAttribute("cm-ignore-events", "true"); + this.display.input.setUneditable(node); + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + { top = pos.top - node.offsetHeight; } + else if (pos.bottom + node.offsetHeight <= vspace) + { top = pos.bottom; } + if (left + node.offsetWidth > hspace) + { left = hspace - node.offsetWidth; } + } + node.style.top = top + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") { left = 0; } + else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; } + node.style.left = left + "px"; + } + if (scroll) + { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); } + }, + + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: onKeyUp, + triggerOnMouseDown: methodOp(onMouseDown), + + execCommand: function(cmd) { + if (commands.hasOwnProperty(cmd)) + { return commands[cmd].call(null, this) } + }, + + triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), + + findPosH: function(from, amount, unit, visually) { + var this$1 = this; + + var dir = 1; + if (amount < 0) { dir = -1; amount = -amount; } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + cur = findPosH(this$1.doc, cur, dir, unit, visually); + if (cur.hitSide) { break } + } + return cur + }, + + moveH: methodOp(function(dir, unit) { + var this$1 = this; + + this.extendSelectionsBy(function (range$$1) { + if (this$1.display.shift || this$1.doc.extend || range$$1.empty()) + { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) } + else + { return dir < 0 ? range$$1.from() : range$$1.to() } + }, sel_move); + }), + + deleteH: methodOp(function(dir, unit) { + var sel = this.doc.sel, doc = this.doc; + if (sel.somethingSelected()) + { doc.replaceSelection("", null, "+delete"); } + else + { deleteNearSelection(this, function (range$$1) { + var other = findPosH(doc, range$$1.head, dir, unit, false); + return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other} + }); } + }), + + findPosV: function(from, amount, unit, goalColumn) { + var this$1 = this; + + var dir = 1, x = goalColumn; + if (amount < 0) { dir = -1; amount = -amount; } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + var coords = cursorCoords(this$1, cur, "div"); + if (x == null) { x = coords.left; } + else { coords.left = x; } + cur = findPosV(this$1, coords, dir, unit); + if (cur.hitSide) { break } + } + return cur + }, + + moveV: methodOp(function(dir, unit) { + var this$1 = this; + + var doc = this.doc, goals = []; + var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected(); + doc.extendSelectionsBy(function (range$$1) { + if (collapse) + { return dir < 0 ? range$$1.from() : range$$1.to() } + var headPos = cursorCoords(this$1, range$$1.head, "div"); + if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; } + goals.push(headPos.left); + var pos = findPosV(this$1, headPos, dir, unit); + if (unit == "page" && range$$1 == doc.sel.primary()) + { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); } + return pos + }, sel_move); + if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++) + { doc.sel.ranges[i].goalColumn = goals[i]; } } + }), + + // Find the word at the given position (as returned by coordsChar). + findWordAt: function(pos) { + var doc = this.doc, line = getLine(doc, pos.line).text; + var start = pos.ch, end = pos.ch; + if (line) { + var helper = this.getHelper(pos, "wordChars"); + if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; } + var startChar = line.charAt(start); + var check = isWordChar(startChar, helper) + ? function (ch) { return isWordChar(ch, helper); } + : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); } + : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); }; + while (start > 0 && check(line.charAt(start - 1))) { --start; } + while (end < line.length && check(line.charAt(end))) { ++end; } + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)) + }, + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) { return } + if (this.state.overwrite = !this.state.overwrite) + { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); } + else + { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); } + + signal(this, "overwriteToggle", this, this.state.overwrite); + }, + hasFocus: function() { return this.display.input.getField() == activeElt() }, + isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, + + scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }), + getScrollInfo: function() { + var scroller = this.display.scroller; + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, + width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, + clientHeight: displayHeight(this), clientWidth: displayWidth(this)} + }, + + scrollIntoView: methodOp(function(range$$1, margin) { + if (range$$1 == null) { + range$$1 = {from: this.doc.sel.primary().head, to: null}; + if (margin == null) { margin = this.options.cursorScrollMargin; } + } else if (typeof range$$1 == "number") { + range$$1 = {from: Pos(range$$1, 0), to: null}; + } else if (range$$1.from == null) { + range$$1 = {from: range$$1, to: null}; + } + if (!range$$1.to) { range$$1.to = range$$1.from; } + range$$1.margin = margin || 0; + + if (range$$1.from.line != null) { + scrollToRange(this, range$$1); + } else { + scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin); + } + }), + + setSize: methodOp(function(width, height) { + var this$1 = this; + + var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; }; + if (width != null) { this.display.wrapper.style.width = interpret(width); } + if (height != null) { this.display.wrapper.style.height = interpret(height); } + if (this.options.lineWrapping) { clearLineMeasurementCache(this); } + var lineNo$$1 = this.display.viewFrom; + this.doc.iter(lineNo$$1, this.display.viewTo, function (line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) + { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, "widget"); break } } } + ++lineNo$$1; + }); + this.curOp.forceUpdate = true; + signal(this, "refresh", this); + }), + + operation: function(f){return runInOp(this, f)}, + startOperation: function(){return startOperation(this)}, + endOperation: function(){return endOperation(this)}, + + refresh: methodOp(function() { + var oldHeight = this.display.cachedTextHeight; + regChange(this); + this.curOp.forceUpdate = true; + clearCaches(this); + scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); + updateGutterSpace(this); + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) + { estimateLineHeights(this); } + signal(this, "refresh", this); + }), + + swapDoc: methodOp(function(doc) { + var old = this.doc; + old.cm = null; + attachDoc(this, doc); + clearCaches(this); + this.display.input.reset(); + scrollToCoords(this, doc.scrollLeft, doc.scrollTop); + this.curOp.forceScroll = true; + signalLater(this, "swapDoc", this, old); + return old + }), + + phrase: function(phraseText) { + var phrases = this.options.phrases; + return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText + }, + + getInputField: function(){return this.display.input.getField()}, + getWrapperElement: function(){return this.display.wrapper}, + getScrollerElement: function(){return this.display.scroller}, + getGutterElement: function(){return this.display.gutters} + }; + eventMixin(CodeMirror); + + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; } + helpers[type][name] = value; + }; + CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value); + helpers[type]._global.push({pred: predicate, val: value}); + }; + } + + // Used for horizontal relative motion. Dir is -1 or 1 (left or + // right), unit can be "char", "column" (like char, but doesn't + // cross line boundaries), "word" (across next word), or "group" (to + // the start of next group of word or non-word-non-whitespace + // chars). The visually param controls whether, in right-to-left + // text, direction 1 means to move towards the next index in the + // string, or towards the character to the right of the current + // position. The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosH(doc, pos, dir, unit, visually) { + var oldPos = pos; + var origDir = dir; + var lineObj = getLine(doc, pos.line); + function findNextLine() { + var l = pos.line + dir; + if (l < doc.first || l >= doc.first + doc.size) { return false } + pos = new Pos(l, pos.ch, pos.sticky); + return lineObj = getLine(doc, l) + } + function moveOnce(boundToLine) { + var next; + if (visually) { + next = moveVisually(doc.cm, lineObj, pos, dir); + } else { + next = moveLogically(lineObj, pos, dir); + } + if (next == null) { + if (!boundToLine && findNextLine()) + { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); } + else + { return false } + } else { + pos = next; + } + return true + } + + if (unit == "char") { + moveOnce(); + } else if (unit == "column") { + moveOnce(true); + } else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group"; + var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) { break } + var cur = lineObj.text.charAt(pos.ch) || "\n"; + var type = isWordChar(cur, helper) ? "w" + : group && cur == "\n" ? "n" + : !group || /\s/.test(cur) ? null + : "p"; + if (group && !first && !type) { type = "s"; } + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";} + break + } + + if (type) { sawType = type; } + if (dir > 0 && !moveOnce(!first)) { break } + } + } + var result = skipAtomic(doc, pos, oldPos, origDir, true); + if (equalCursorPos(oldPos, result)) { result.hitSide = true; } + return result + } + + // For relative vertical movement. Dir may be -1 or 1. Unit can be + // "page" or "line". The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3); + y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; + + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + var target; + for (;;) { + target = coordsChar(cm, x, y); + if (!target.outside) { break } + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break } + y += dir * 5; + } + return target + } + + // CONTENTEDITABLE INPUT STYLE + + var ContentEditableInput = function(cm) { + this.cm = cm; + this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; + this.polling = new Delayed(); + this.composing = null; + this.gracePeriod = false; + this.readDOMTimeout = null; + }; + + ContentEditableInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = input.cm; + var div = input.div = display.lineDiv; + disableBrowserMagic(div, cm.options.spellcheck); + + on(div, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + // IE doesn't fire input events, so we schedule a read for the pasted content in this way + if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); } + }); + + on(div, "compositionstart", function (e) { + this$1.composing = {data: e.data, done: false}; + }); + on(div, "compositionupdate", function (e) { + if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; } + }); + on(div, "compositionend", function (e) { + if (this$1.composing) { + if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); } + this$1.composing.done = true; + } + }); + + on(div, "touchstart", function () { return input.forceCompositionEnd(); }); + + on(div, "input", function () { + if (!this$1.composing) { this$1.readFromDOMSoon(); } + }); + + function onCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}); + if (e.type == "cut") { cm.replaceSelection("", null, "cut"); } + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm); + setLastCopied({lineWise: true, text: ranges.text}); + if (e.type == "cut") { + cm.operation(function () { + cm.setSelections(ranges.ranges, 0, sel_dontScroll); + cm.replaceSelection("", null, "cut"); + }); + } + } + if (e.clipboardData) { + e.clipboardData.clearData(); + var content = lastCopied.text.join("\n"); + // iOS exposes the clipboard API, but seems to discard content inserted into it + e.clipboardData.setData("Text", content); + if (e.clipboardData.getData("Text") == content) { + e.preventDefault(); + return + } + } + // Old-fashioned briefly-focus-a-textarea hack + var kludge = hiddenTextarea(), te = kludge.firstChild; + cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); + te.value = lastCopied.text.join("\n"); + var hadFocus = document.activeElement; + selectInput(te); + setTimeout(function () { + cm.display.lineSpace.removeChild(kludge); + hadFocus.focus(); + if (hadFocus == div) { input.showPrimarySelection(); } + }, 50); + } + on(div, "copy", onCopyCut); + on(div, "cut", onCopyCut); + }; + + ContentEditableInput.prototype.prepareSelection = function () { + var result = prepareSelection(this.cm, false); + result.focus = this.cm.state.focused; + return result + }; + + ContentEditableInput.prototype.showSelection = function (info, takeFocus) { + if (!info || !this.cm.display.view.length) { return } + if (info.focus || takeFocus) { this.showPrimarySelection(); } + this.showMultipleSelections(info); + }; + + ContentEditableInput.prototype.getSelection = function () { + return this.cm.display.wrapper.ownerDocument.getSelection() + }; + + ContentEditableInput.prototype.showPrimarySelection = function () { + var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary(); + var from = prim.from(), to = prim.to(); + + if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { + sel.removeAllRanges(); + return + } + + var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); + if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && + cmp(minPos(curAnchor, curFocus), from) == 0 && + cmp(maxPos(curAnchor, curFocus), to) == 0) + { return } + + var view = cm.display.view; + var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) || + {node: view[0].measure.map[2], offset: 0}; + var end = to.line < cm.display.viewTo && posToDOM(cm, to); + if (!end) { + var measure = view[view.length - 1].measure; + var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; + end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]}; + } + + if (!start || !end) { + sel.removeAllRanges(); + return + } + + var old = sel.rangeCount && sel.getRangeAt(0), rng; + try { rng = range(start.node, start.offset, end.offset, end.node); } + catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible + if (rng) { + if (!gecko && cm.state.focused) { + sel.collapse(start.node, start.offset); + if (!rng.collapsed) { + sel.removeAllRanges(); + sel.addRange(rng); + } + } else { + sel.removeAllRanges(); + sel.addRange(rng); + } + if (old && sel.anchorNode == null) { sel.addRange(old); } + else if (gecko) { this.startGracePeriod(); } + } + this.rememberSelection(); + }; + + ContentEditableInput.prototype.startGracePeriod = function () { + var this$1 = this; + + clearTimeout(this.gracePeriod); + this.gracePeriod = setTimeout(function () { + this$1.gracePeriod = false; + if (this$1.selectionChanged()) + { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); } + }, 20); + }; + + ContentEditableInput.prototype.showMultipleSelections = function (info) { + removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); + removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); + }; + + ContentEditableInput.prototype.rememberSelection = function () { + var sel = this.getSelection(); + this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; + this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; + }; + + ContentEditableInput.prototype.selectionInEditor = function () { + var sel = this.getSelection(); + if (!sel.rangeCount) { return false } + var node = sel.getRangeAt(0).commonAncestorContainer; + return contains(this.div, node) + }; + + ContentEditableInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor") { + if (!this.selectionInEditor()) + { this.showSelection(this.prepareSelection(), true); } + this.div.focus(); + } + }; + ContentEditableInput.prototype.blur = function () { this.div.blur(); }; + ContentEditableInput.prototype.getField = function () { return this.div }; + + ContentEditableInput.prototype.supportsTouch = function () { return true }; + + ContentEditableInput.prototype.receivedFocus = function () { + var input = this; + if (this.selectionInEditor()) + { this.pollSelection(); } + else + { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); } + + function poll() { + if (input.cm.state.focused) { + input.pollSelection(); + input.polling.set(input.cm.options.pollInterval, poll); + } + } + this.polling.set(this.cm.options.pollInterval, poll); + }; + + ContentEditableInput.prototype.selectionChanged = function () { + var sel = this.getSelection(); + return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || + sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset + }; + + ContentEditableInput.prototype.pollSelection = function () { + if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return } + var sel = this.getSelection(), cm = this.cm; + // On Android Chrome (version 56, at least), backspacing into an + // uneditable block element will put the cursor in that element, + // and then, because it's not editable, hide the virtual keyboard. + // Because Android doesn't allow us to actually detect backspace + // presses in a sane way, this code checks for when that happens + // and simulates a backspace press in this case. + if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) { + this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs}); + this.blur(); + this.focus(); + return + } + if (this.composing) { return } + this.rememberSelection(); + var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var head = domToPos(cm, sel.focusNode, sel.focusOffset); + if (anchor && head) { runInOp(cm, function () { + setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); + if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; } + }); } + }; + + ContentEditableInput.prototype.pollContent = function () { + if (this.readDOMTimeout != null) { + clearTimeout(this.readDOMTimeout); + this.readDOMTimeout = null; + } + + var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); + var from = sel.from(), to = sel.to(); + if (from.ch == 0 && from.line > cm.firstLine()) + { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); } + if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) + { to = Pos(to.line + 1, 0); } + if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false } + + var fromIndex, fromLine, fromNode; + if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { + fromLine = lineNo(display.view[0].line); + fromNode = display.view[0].node; + } else { + fromLine = lineNo(display.view[fromIndex].line); + fromNode = display.view[fromIndex - 1].node.nextSibling; + } + var toIndex = findViewIndex(cm, to.line); + var toLine, toNode; + if (toIndex == display.view.length - 1) { + toLine = display.viewTo - 1; + toNode = display.lineDiv.lastChild; + } else { + toLine = lineNo(display.view[toIndex + 1].line) - 1; + toNode = display.view[toIndex + 1].node.previousSibling; + } + + if (!fromNode) { return false } + var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); + var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); + while (newText.length > 1 && oldText.length > 1) { + if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } + else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } + else { break } + } + + var cutFront = 0, cutEnd = 0; + var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); + while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) + { ++cutFront; } + var newBot = lst(newText), oldBot = lst(oldText); + var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), + oldBot.length - (oldText.length == 1 ? cutFront : 0)); + while (cutEnd < maxCutEnd && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) + { ++cutEnd; } + // Try to move start of change to start of selection if ambiguous + if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { + while (cutFront && cutFront > from.ch && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { + cutFront--; + cutEnd++; + } + } + + newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); + newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); + + var chFrom = Pos(fromLine, cutFront); + var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); + if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { + replaceRange(cm.doc, newText, chFrom, chTo, "+input"); + return true + } + }; + + ContentEditableInput.prototype.ensurePolled = function () { + this.forceCompositionEnd(); + }; + ContentEditableInput.prototype.reset = function () { + this.forceCompositionEnd(); + }; + ContentEditableInput.prototype.forceCompositionEnd = function () { + if (!this.composing) { return } + clearTimeout(this.readDOMTimeout); + this.composing = null; + this.updateFromDOM(); + this.div.blur(); + this.div.focus(); + }; + ContentEditableInput.prototype.readFromDOMSoon = function () { + var this$1 = this; + + if (this.readDOMTimeout != null) { return } + this.readDOMTimeout = setTimeout(function () { + this$1.readDOMTimeout = null; + if (this$1.composing) { + if (this$1.composing.done) { this$1.composing = null; } + else { return } + } + this$1.updateFromDOM(); + }, 80); + }; + + ContentEditableInput.prototype.updateFromDOM = function () { + var this$1 = this; + + if (this.cm.isReadOnly() || !this.pollContent()) + { runInOp(this.cm, function () { return regChange(this$1.cm); }); } + }; + + ContentEditableInput.prototype.setUneditable = function (node) { + node.contentEditable = "false"; + }; + + ContentEditableInput.prototype.onKeyPress = function (e) { + if (e.charCode == 0 || this.composing) { return } + e.preventDefault(); + if (!this.cm.isReadOnly()) + { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); } + }; + + ContentEditableInput.prototype.readOnlyChanged = function (val) { + this.div.contentEditable = String(val != "nocursor"); + }; + + ContentEditableInput.prototype.onContextMenu = function () {}; + ContentEditableInput.prototype.resetPosition = function () {}; + + ContentEditableInput.prototype.needsContentAttribute = true; + + function posToDOM(cm, pos) { + var view = findViewForLine(cm, pos.line); + if (!view || view.hidden) { return null } + var line = getLine(cm.doc, pos.line); + var info = mapFromLineView(view, line, pos.line); + + var order = getOrder(line, cm.doc.direction), side = "left"; + if (order) { + var partPos = getBidiPartAt(order, pos.ch); + side = partPos % 2 ? "right" : "left"; + } + var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); + result.offset = result.collapse == "right" ? result.end : result.start; + return result + } + + function isInGutter(node) { + for (var scan = node; scan; scan = scan.parentNode) + { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } } + return false + } + + function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos } + + function domTextBetween(cm, from, to, fromLine, toLine) { + var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false; + function recognizeMarker(id) { return function (marker) { return marker.id == id; } } + function close() { + if (closing) { + text += lineSep; + if (extraLinebreak) { text += lineSep; } + closing = extraLinebreak = false; + } + } + function addText(str) { + if (str) { + close(); + text += str; + } + } + function walk(node) { + if (node.nodeType == 1) { + var cmText = node.getAttribute("cm-text"); + if (cmText) { + addText(cmText); + return + } + var markerID = node.getAttribute("cm-marker"), range$$1; + if (markerID) { + var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); + if (found.length && (range$$1 = found[0].find(0))) + { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); } + return + } + if (node.getAttribute("contenteditable") == "false") { return } + var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); + if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return } + + if (isBlock) { close(); } + for (var i = 0; i < node.childNodes.length; i++) + { walk(node.childNodes[i]); } + + if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; } + if (isBlock) { closing = true; } + } else if (node.nodeType == 3) { + addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); + } + } + for (;;) { + walk(from); + if (from == to) { break } + from = from.nextSibling; + extraLinebreak = false; + } + return text + } + + function domToPos(cm, node, offset) { + var lineNode; + if (node == cm.display.lineDiv) { + lineNode = cm.display.lineDiv.childNodes[offset]; + if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) } + node = null; offset = 0; + } else { + for (lineNode = node;; lineNode = lineNode.parentNode) { + if (!lineNode || lineNode == cm.display.lineDiv) { return null } + if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break } + } + } + for (var i = 0; i < cm.display.view.length; i++) { + var lineView = cm.display.view[i]; + if (lineView.node == lineNode) + { return locateNodeInLineView(lineView, node, offset) } + } + } + + function locateNodeInLineView(lineView, node, offset) { + var wrapper = lineView.text.firstChild, bad = false; + if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) } + if (node == wrapper) { + bad = true; + node = wrapper.childNodes[offset]; + offset = 0; + if (!node) { + var line = lineView.rest ? lst(lineView.rest) : lineView.line; + return badPos(Pos(lineNo(line), line.text.length), bad) + } + } + + var textNode = node.nodeType == 3 ? node : null, topNode = node; + if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { + textNode = node.firstChild; + if (offset) { offset = textNode.nodeValue.length; } + } + while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; } + var measure = lineView.measure, maps = measure.maps; + + function find(textNode, topNode, offset) { + for (var i = -1; i < (maps ? maps.length : 0); i++) { + var map$$1 = i < 0 ? measure.map : maps[i]; + for (var j = 0; j < map$$1.length; j += 3) { + var curNode = map$$1[j + 2]; + if (curNode == textNode || curNode == topNode) { + var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); + var ch = map$$1[j] + offset; + if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; } + return Pos(line, ch) + } + } + } + } + var found = find(textNode, topNode, offset); + if (found) { return badPos(found, bad) } + + // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems + for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { + found = find(after, after.firstChild, 0); + if (found) + { return badPos(Pos(found.line, found.ch - dist), bad) } + else + { dist += after.textContent.length; } + } + for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { + found = find(before, before.firstChild, -1); + if (found) + { return badPos(Pos(found.line, found.ch + dist$1), bad) } + else + { dist$1 += before.textContent.length; } + } + } + + // TEXTAREA INPUT STYLE + + var TextareaInput = function(cm) { + this.cm = cm; + // See input.poll and input.reset + this.prevInput = ""; + + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + this.pollingFast = false; + // Self-resetting timeout for the poller + this.polling = new Delayed(); + // Used to work around IE issue with selection being forgotten when focus moves away from textarea + this.hasSelection = false; + this.composing = null; + }; + + TextareaInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = this.cm; + this.createField(display); + var te = this.textarea; + + display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); + + // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) + if (ios) { te.style.width = "0px"; } + + on(te, "input", function () { + if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; } + input.poll(); + }); + + on(te, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + + cm.state.pasteIncoming = true; + input.fastPoll(); + }); + + function prepareCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}); + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm); + setLastCopied({lineWise: true, text: ranges.text}); + if (e.type == "cut") { + cm.setSelections(ranges.ranges, null, sel_dontScroll); + } else { + input.prevInput = ""; + te.value = ranges.text.join("\n"); + selectInput(te); + } + } + if (e.type == "cut") { cm.state.cutIncoming = true; } + } + on(te, "cut", prepareCopyCut); + on(te, "copy", prepareCopyCut); + + on(display.scroller, "paste", function (e) { + if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return } + cm.state.pasteIncoming = true; + input.focus(); + }); + + // Prevent normal selection in the editor (we handle our own) + on(display.lineSpace, "selectstart", function (e) { + if (!eventInWidget(display, e)) { e_preventDefault(e); } + }); + + on(te, "compositionstart", function () { + var start = cm.getCursor("from"); + if (input.composing) { input.composing.range.clear(); } + input.composing = { + start: start, + range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) + }; + }); + on(te, "compositionend", function () { + if (input.composing) { + input.poll(); + input.composing.range.clear(); + input.composing = null; + } + }); + }; + + TextareaInput.prototype.createField = function (_display) { + // Wraps and hides input textarea + this.wrapper = hiddenTextarea(); + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + this.textarea = this.wrapper.firstChild; + }; + + TextareaInput.prototype.prepareSelection = function () { + // Redraw the selection and/or cursor + var cm = this.cm, display = cm.display, doc = cm.doc; + var result = prepareSelection(cm); + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); + result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)); + result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)); + } + + return result + }; + + TextareaInput.prototype.showSelection = function (drawn) { + var cm = this.cm, display = cm.display; + removeChildrenAndAdd(display.cursorDiv, drawn.cursors); + removeChildrenAndAdd(display.selectionDiv, drawn.selection); + if (drawn.teTop != null) { + this.wrapper.style.top = drawn.teTop + "px"; + this.wrapper.style.left = drawn.teLeft + "px"; + } + }; + + // Reset the input to correspond to the selection (or to be empty, + // when not typing and nothing is selected) + TextareaInput.prototype.reset = function (typing) { + if (this.contextMenuPending || this.composing) { return } + var cm = this.cm; + if (cm.somethingSelected()) { + this.prevInput = ""; + var content = cm.getSelection(); + this.textarea.value = content; + if (cm.state.focused) { selectInput(this.textarea); } + if (ie && ie_version >= 9) { this.hasSelection = content; } + } else if (!typing) { + this.prevInput = this.textarea.value = ""; + if (ie && ie_version >= 9) { this.hasSelection = null; } + } + }; + + TextareaInput.prototype.getField = function () { return this.textarea }; + + TextareaInput.prototype.supportsTouch = function () { return false }; + + TextareaInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { + try { this.textarea.focus(); } + catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM + } + }; + + TextareaInput.prototype.blur = function () { this.textarea.blur(); }; + + TextareaInput.prototype.resetPosition = function () { + this.wrapper.style.top = this.wrapper.style.left = 0; + }; + + TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); }; + + // Poll for input changes, using the normal rate of polling. This + // runs as long as the editor is focused. + TextareaInput.prototype.slowPoll = function () { + var this$1 = this; + + if (this.pollingFast) { return } + this.polling.set(this.cm.options.pollInterval, function () { + this$1.poll(); + if (this$1.cm.state.focused) { this$1.slowPoll(); } + }); + }; + + // When an event has just come in that is likely to add or change + // something in the input textarea, we poll faster, to ensure that + // the change appears on the screen quickly. + TextareaInput.prototype.fastPoll = function () { + var missed = false, input = this; + input.pollingFast = true; + function p() { + var changed = input.poll(); + if (!changed && !missed) {missed = true; input.polling.set(60, p);} + else {input.pollingFast = false; input.slowPoll();} + } + input.polling.set(20, p); + }; + + // Read input from the textarea, and update the document to match. + // When something is selected, it is present in the textarea, and + // selected (unless it is huge, in which case a placeholder is + // used). When nothing is selected, the cursor sits after previously + // seen text (can be empty), which is stored in prevInput (we must + // not reset the textarea when typing, because that breaks IME). + TextareaInput.prototype.poll = function () { + var this$1 = this; + + var cm = this.cm, input = this.textarea, prevInput = this.prevInput; + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (this.contextMenuPending || !cm.state.focused || + (hasSelection(input) && !prevInput && !this.composing) || + cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) + { return false } + + var text = input.value; + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) { return false } + // Work around nonsensical selection resetting in IE9/10, and + // inexplicable appearance of private area unicode characters on + // some key combos in Mac (#2689). + if (ie && ie_version >= 9 && this.hasSelection === text || + mac && /[\uf700-\uf7ff]/.test(text)) { + cm.display.input.reset(); + return false + } + + if (cm.doc.sel == cm.display.selForContextMenu) { + var first = text.charCodeAt(0); + if (first == 0x200b && !prevInput) { prevInput = "\u200b"; } + if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") } + } + // Find the part of the input that is actually new + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; } + + runInOp(cm, function () { + applyTextInput(cm, text.slice(same), prevInput.length - same, + null, this$1.composing ? "*compose" : null); + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; } + else { this$1.prevInput = text; } + + if (this$1.composing) { + this$1.composing.range.clear(); + this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), + {className: "CodeMirror-composing"}); + } + }); + return true + }; + + TextareaInput.prototype.ensurePolled = function () { + if (this.pollingFast && this.poll()) { this.pollingFast = false; } + }; + + TextareaInput.prototype.onKeyPress = function () { + if (ie && ie_version >= 9) { this.hasSelection = null; } + this.fastPoll(); + }; + + TextareaInput.prototype.onContextMenu = function (e) { + var input = this, cm = input.cm, display = cm.display, te = input.textarea; + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; + if (!pos || presto) { return } // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu; + if (reset && cm.doc.sel.contains(pos) == -1) + { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); } + + var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; + input.wrapper.style.cssText = "position: absolute"; + var wrapperBox = input.wrapper.getBoundingClientRect(); + te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + var oldScrollY; + if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712) + display.input.focus(); + if (webkit) { window.scrollTo(null, oldScrollY); } + display.input.reset(); + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) { te.value = input.prevInput = " "; } + input.contextMenuPending = true; + display.selForContextMenu = cm.doc.sel; + clearTimeout(display.detectingSelectAll); + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (te.selectionStart != null) { + var selected = cm.somethingSelected(); + var extval = "\u200b" + (selected ? te.value : ""); + te.value = "\u21da"; // Used to catch context-menu undo + te.value = extval; + input.prevInput = selected ? "" : "\u200b"; + te.selectionStart = 1; te.selectionEnd = extval.length; + // Re-set this, in case some other handler touched the + // selection in the meantime. + display.selForContextMenu = cm.doc.sel; + } + } + function rehide() { + input.contextMenuPending = false; + input.wrapper.style.cssText = oldWrapperCSS; + te.style.cssText = oldCSS; + if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); } + + // Try to detect the user choosing select-all + if (te.selectionStart != null) { + if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); } + var i = 0, poll = function () { + if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && + te.selectionEnd > 0 && input.prevInput == "\u200b") { + operation(cm, selectAll)(cm); + } else if (i++ < 10) { + display.detectingSelectAll = setTimeout(poll, 500); + } else { + display.selForContextMenu = null; + display.input.reset(); + } + }; + display.detectingSelectAll = setTimeout(poll, 200); + } + } + + if (ie && ie_version >= 9) { prepareSelectAllHack(); } + if (captureRightClick) { + e_stop(e); + var mouseup = function () { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } + }; + + TextareaInput.prototype.readOnlyChanged = function (val) { + if (!val) { this.reset(); } + this.textarea.disabled = val == "nocursor"; + }; + + TextareaInput.prototype.setUneditable = function () {}; + + TextareaInput.prototype.needsContentAttribute = false; + + function fromTextArea(textarea, options) { + options = options ? copyObj(options) : {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabIndex) + { options.tabindex = textarea.tabIndex; } + if (!options.placeholder && textarea.placeholder) + { options.placeholder = textarea.placeholder; } + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt(); + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = cm.getValue();} + + var realSubmit; + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form; + realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function () { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch(e) {} + } + } + + options.finishInit = function (cm) { + cm.save = save; + cm.getTextArea = function () { return textarea; }; + cm.toTextArea = function () { + cm.toTextArea = isNaN; // Prevent this from being ran twice + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (typeof textarea.form.submit == "function") + { textarea.form.submit = realSubmit; } + } + }; + }; + + textarea.style.display = "none"; + var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, + options); + return cm + } + + function addLegacyProps(CodeMirror) { + CodeMirror.off = off; + CodeMirror.on = on; + CodeMirror.wheelEventPixels = wheelEventPixels; + CodeMirror.Doc = Doc; + CodeMirror.splitLines = splitLinesAuto; + CodeMirror.countColumn = countColumn; + CodeMirror.findColumn = findColumn; + CodeMirror.isWordChar = isWordCharBasic; + CodeMirror.Pass = Pass; + CodeMirror.signal = signal; + CodeMirror.Line = Line; + CodeMirror.changeEnd = changeEnd; + CodeMirror.scrollbarModel = scrollbarModel; + CodeMirror.Pos = Pos; + CodeMirror.cmpPos = cmp; + CodeMirror.modes = modes; + CodeMirror.mimeModes = mimeModes; + CodeMirror.resolveMode = resolveMode; + CodeMirror.getMode = getMode; + CodeMirror.modeExtensions = modeExtensions; + CodeMirror.extendMode = extendMode; + CodeMirror.copyState = copyState; + CodeMirror.startState = startState; + CodeMirror.innerMode = innerMode; + CodeMirror.commands = commands; + CodeMirror.keyMap = keyMap; + CodeMirror.keyName = keyName; + CodeMirror.isModifierKey = isModifierKey; + CodeMirror.lookupKey = lookupKey; + CodeMirror.normalizeKeyMap = normalizeKeyMap; + CodeMirror.StringStream = StringStream; + CodeMirror.SharedTextMarker = SharedTextMarker; + CodeMirror.TextMarker = TextMarker; + CodeMirror.LineWidget = LineWidget; + CodeMirror.e_preventDefault = e_preventDefault; + CodeMirror.e_stopPropagation = e_stopPropagation; + CodeMirror.e_stop = e_stop; + CodeMirror.addClass = addClass; + CodeMirror.contains = contains; + CodeMirror.rmClass = rmClass; + CodeMirror.keyNames = keyNames; + } + + // EDITOR CONSTRUCTOR + + defineOptions(CodeMirror); + + addEditorMethods(CodeMirror); + + // Set up methods on CodeMirror's prototype to redirect to the editor's document. + var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); + for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + { CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments)} + })(Doc.prototype[prop]); } } + + eventMixin(Doc); + CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + CodeMirror.defineMode = function(name/*, mode, …*/) { + if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name; } + defineMode.apply(this, arguments); + }; + + CodeMirror.defineMIME = defineMIME; + + // Minimal default mode. + CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); }); + CodeMirror.defineMIME("text/plain", "null"); + + // EXTENSIONS + + CodeMirror.defineExtension = function (name, func) { + CodeMirror.prototype[name] = func; + }; + CodeMirror.defineDocExtension = function (name, func) { + Doc.prototype[name] = func; + }; + + CodeMirror.fromTextArea = fromTextArea; + + addLegacyProps(CodeMirror); + + CodeMirror.version = "5.42.0"; + + return CodeMirror; + +}))); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("css", function(config, parserConfig) { + var inline = parserConfig.inline + if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); + + var indentUnit = config.indentUnit, + tokenHooks = parserConfig.tokenHooks, + documentTypes = parserConfig.documentTypes || {}, + mediaTypes = parserConfig.mediaTypes || {}, + mediaFeatures = parserConfig.mediaFeatures || {}, + mediaValueKeywords = parserConfig.mediaValueKeywords || {}, + propertyKeywords = parserConfig.propertyKeywords || {}, + nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, + fontProperties = parserConfig.fontProperties || {}, + counterDescriptors = parserConfig.counterDescriptors || {}, + colorKeywords = parserConfig.colorKeywords || {}, + valueKeywords = parserConfig.valueKeywords || {}, + allowNested = parserConfig.allowNested, + lineComment = parserConfig.lineComment, + supportsAtComponent = parserConfig.supportsAtComponent === true; + + var type, override; + function ret(style, tp) { type = tp; return style; } + + // Tokenizers + + function tokenBase(stream, state) { + var ch = stream.next(); + if (tokenHooks[ch]) { + var result = tokenHooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == "@") { + stream.eatWhile(/[\w\\\-]/); + return ret("def", stream.current()); + } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { + return ret(null, "compare"); + } else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "#") { + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "hash"); + } else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (ch === "-") { + if (/[\d.]/.test(stream.peek())) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (stream.match(/^-[\w\\\-]+/)) { + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ret("variable-2", "variable-definition"); + return ret("variable-2", "variable"); + } else if (stream.match(/^\w+-/)) { + return ret("meta", "meta"); + } + } else if (/[,+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { + return ret("qualifier", "qualifier"); + } else if (/[:;{}\[\]\(\)]/.test(ch)) { + return ret(null, ch); + } else if (((ch == "u" || ch == "U") && stream.match(/rl(-prefix)?\(/i)) || + ((ch == "d" || ch == "D") && stream.match("omain(", true, true)) || + ((ch == "r" || ch == "R") && stream.match("egexp(", true, true))) { + stream.backUp(1); + state.tokenize = tokenParenthesized; + return ret("property", "word"); + } else if (/[\w\\\-]/.test(ch)) { + stream.eatWhile(/[\w\\\-]/); + return ret("property", "word"); + } else { + return ret(null, null); + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + if (quote == ")") stream.backUp(1); + break; + } + escaped = !escaped && ch == "\\"; + } + if (ch == quote || !escaped && quote != ")") state.tokenize = null; + return ret("string", "string"); + }; + } + + function tokenParenthesized(stream, state) { + stream.next(); // Must be '(' + if (!stream.match(/\s*[\"\')]/, false)) + state.tokenize = tokenString(")"); + else + state.tokenize = null; + return ret(null, "("); + } + + // Context management + + function Context(type, indent, prev) { + this.type = type; + this.indent = indent; + this.prev = prev; + } + + function pushContext(state, stream, type, indent) { + state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context); + return type; + } + + function popContext(state) { + if (state.context.prev) + state.context = state.context.prev; + return state.context.type; + } + + function pass(type, stream, state) { + return states[state.context.type](type, stream, state); + } + function popAndPass(type, stream, state, n) { + for (var i = n || 1; i > 0; i--) + state.context = state.context.prev; + return pass(type, stream, state); + } + + // Parser + + function wordAsValue(stream) { + var word = stream.current().toLowerCase(); + if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "variable"; + } + + var states = {}; + + states.top = function(type, stream, state) { + if (type == "{") { + return pushContext(state, stream, "block"); + } else if (type == "}" && state.context.prev) { + return popContext(state); + } else if (supportsAtComponent && /@component/i.test(type)) { + return pushContext(state, stream, "atComponentBlock"); + } else if (/^@(-moz-)?document$/i.test(type)) { + return pushContext(state, stream, "documentTypes"); + } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) { + return pushContext(state, stream, "atBlock"); + } else if (/^@(font-face|counter-style)/i.test(type)) { + state.stateArg = type; + return "restricted_atBlock_before"; + } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) { + return "keyframes"; + } else if (type && type.charAt(0) == "@") { + return pushContext(state, stream, "at"); + } else if (type == "hash") { + override = "builtin"; + } else if (type == "word") { + override = "tag"; + } else if (type == "variable-definition") { + return "maybeprop"; + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } else if (type == ":") { + return "pseudo"; + } else if (allowNested && type == "(") { + return pushContext(state, stream, "parens"); + } + return state.context.type; + }; + + states.block = function(type, stream, state) { + if (type == "word") { + var word = stream.current().toLowerCase(); + if (propertyKeywords.hasOwnProperty(word)) { + override = "property"; + return "maybeprop"; + } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { + override = "string-2"; + return "maybeprop"; + } else if (allowNested) { + override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; + return "block"; + } else { + override += " error"; + return "maybeprop"; + } + } else if (type == "meta") { + return "block"; + } else if (!allowNested && (type == "hash" || type == "qualifier")) { + override = "error"; + return "block"; + } else { + return states.top(type, stream, state); + } + }; + + states.maybeprop = function(type, stream, state) { + if (type == ":") return pushContext(state, stream, "prop"); + return pass(type, stream, state); + }; + + states.prop = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); + if (type == "}" || type == "{") return popAndPass(type, stream, state); + if (type == "(") return pushContext(state, stream, "parens"); + + if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) { + override += " error"; + } else if (type == "word") { + wordAsValue(stream); + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } + return "prop"; + }; + + states.propBlock = function(type, _stream, state) { + if (type == "}") return popContext(state); + if (type == "word") { override = "property"; return "maybeprop"; } + return state.context.type; + }; + + states.parens = function(type, stream, state) { + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == ")") return popContext(state); + if (type == "(") return pushContext(state, stream, "parens"); + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + if (type == "word") wordAsValue(stream); + return "parens"; + }; + + states.pseudo = function(type, stream, state) { + if (type == "meta") return "pseudo"; + + if (type == "word") { + override = "variable-3"; + return state.context.type; + } + return pass(type, stream, state); + }; + + states.documentTypes = function(type, stream, state) { + if (type == "word" && documentTypes.hasOwnProperty(stream.current())) { + override = "tag"; + return state.context.type; + } else { + return states.atBlock(type, stream, state); + } + }; + + states.atBlock = function(type, stream, state) { + if (type == "(") return pushContext(state, stream, "atBlock_parens"); + if (type == "}" || type == ";") return popAndPass(type, stream, state); + if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); + + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + + if (type == "word") { + var word = stream.current().toLowerCase(); + if (word == "only" || word == "not" || word == "and" || word == "or") + override = "keyword"; + else if (mediaTypes.hasOwnProperty(word)) + override = "attribute"; + else if (mediaFeatures.hasOwnProperty(word)) + override = "property"; + else if (mediaValueKeywords.hasOwnProperty(word)) + override = "keyword"; + else if (propertyKeywords.hasOwnProperty(word)) + override = "property"; + else if (nonStandardPropertyKeywords.hasOwnProperty(word)) + override = "string-2"; + else if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "error"; + } + return state.context.type; + }; + + states.atComponentBlock = function(type, stream, state) { + if (type == "}") + return popAndPass(type, stream, state); + if (type == "{") + return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false); + if (type == "word") + override = "error"; + return state.context.type; + }; + + states.atBlock_parens = function(type, stream, state) { + if (type == ")") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); + return states.atBlock(type, stream, state); + }; + + states.restricted_atBlock_before = function(type, stream, state) { + if (type == "{") + return pushContext(state, stream, "restricted_atBlock"); + if (type == "word" && state.stateArg == "@counter-style") { + override = "variable"; + return "restricted_atBlock_before"; + } + return pass(type, stream, state); + }; + + states.restricted_atBlock = function(type, stream, state) { + if (type == "}") { + state.stateArg = null; + return popContext(state); + } + if (type == "word") { + if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) || + (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase()))) + override = "error"; + else + override = "property"; + return "maybeprop"; + } + return "restricted_atBlock"; + }; + + states.keyframes = function(type, stream, state) { + if (type == "word") { override = "variable"; return "keyframes"; } + if (type == "{") return pushContext(state, stream, "top"); + return pass(type, stream, state); + }; + + states.at = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == "word") override = "tag"; + else if (type == "hash") override = "builtin"; + return "at"; + }; + + states.interpolation = function(type, stream, state) { + if (type == "}") return popContext(state); + if (type == "{" || type == ";") return popAndPass(type, stream, state); + if (type == "word") override = "variable"; + else if (type != "variable" && type != "(" && type != ")") override = "error"; + return "interpolation"; + }; + + return { + startState: function(base) { + return {tokenize: null, + state: inline ? "block" : "top", + stateArg: null, + context: new Context(inline ? "block" : "top", base || 0, null)}; + }, + + token: function(stream, state) { + if (!state.tokenize && stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style && typeof style == "object") { + type = style[1]; + style = style[0]; + } + override = style; + if (type != "comment") + state.state = states[state.state](type, stream, state); + return override; + }, + + indent: function(state, textAfter) { + var cx = state.context, ch = textAfter && textAfter.charAt(0); + var indent = cx.indent; + if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; + if (cx.prev) { + if (ch == "}" && (cx.type == "block" || cx.type == "top" || + cx.type == "interpolation" || cx.type == "restricted_atBlock")) { + // Resume indentation from parent context. + cx = cx.prev; + indent = cx.indent; + } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || + ch == "{" && (cx.type == "at" || cx.type == "atBlock")) { + // Dedent relative to current context. + indent = Math.max(0, cx.indent - indentUnit); + } + } + return indent; + }, + + electricChars: "}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + blockCommentContinue: " * ", + lineComment: lineComment, + fold: "brace" + }; +}); + + function keySet(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) { + keys[array[i].toLowerCase()] = true; + } + return keys; + } + + var documentTypes_ = [ + "domain", "regexp", "url", "url-prefix" + ], documentTypes = keySet(documentTypes_); + + var mediaTypes_ = [ + "all", "aural", "braille", "handheld", "print", "projection", "screen", + "tty", "tv", "embossed" + ], mediaTypes = keySet(mediaTypes_); + + var mediaFeatures_ = [ + "width", "min-width", "max-width", "height", "min-height", "max-height", + "device-width", "min-device-width", "max-device-width", "device-height", + "min-device-height", "max-device-height", "aspect-ratio", + "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", + "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", + "max-color", "color-index", "min-color-index", "max-color-index", + "monochrome", "min-monochrome", "max-monochrome", "resolution", + "min-resolution", "max-resolution", "scan", "grid", "orientation", + "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", + "pointer", "any-pointer", "hover", "any-hover" + ], mediaFeatures = keySet(mediaFeatures_); + + var mediaValueKeywords_ = [ + "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", + "interlace", "progressive" + ], mediaValueKeywords = keySet(mediaValueKeywords_); + + var propertyKeywords_ = [ + "align-content", "align-items", "align-self", "alignment-adjust", + "alignment-baseline", "anchor-point", "animation", "animation-delay", + "animation-direction", "animation-duration", "animation-fill-mode", + "animation-iteration-count", "animation-name", "animation-play-state", + "animation-timing-function", "appearance", "azimuth", "backface-visibility", + "background", "background-attachment", "background-blend-mode", "background-clip", + "background-color", "background-image", "background-origin", "background-position", + "background-repeat", "background-size", "baseline-shift", "binding", + "bleed", "bookmark-label", "bookmark-level", "bookmark-state", + "bookmark-target", "border", "border-bottom", "border-bottom-color", + "border-bottom-left-radius", "border-bottom-right-radius", + "border-bottom-style", "border-bottom-width", "border-collapse", + "border-color", "border-image", "border-image-outset", + "border-image-repeat", "border-image-slice", "border-image-source", + "border-image-width", "border-left", "border-left-color", + "border-left-style", "border-left-width", "border-radius", "border-right", + "border-right-color", "border-right-style", "border-right-width", + "border-spacing", "border-style", "border-top", "border-top-color", + "border-top-left-radius", "border-top-right-radius", "border-top-style", + "border-top-width", "border-width", "bottom", "box-decoration-break", + "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", + "caption-side", "caret-color", "clear", "clip", "color", "color-profile", "column-count", + "column-fill", "column-gap", "column-rule", "column-rule-color", + "column-rule-style", "column-rule-width", "column-span", "column-width", + "columns", "content", "counter-increment", "counter-reset", "crop", "cue", + "cue-after", "cue-before", "cursor", "direction", "display", + "dominant-baseline", "drop-initial-after-adjust", + "drop-initial-after-align", "drop-initial-before-adjust", + "drop-initial-before-align", "drop-initial-size", "drop-initial-value", + "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", + "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", + "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", + "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", + "font-stretch", "font-style", "font-synthesis", "font-variant", + "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", + "font-variant-ligatures", "font-variant-numeric", "font-variant-position", + "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", + "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap", + "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", + "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", + "grid-template-rows", "hanging-punctuation", "height", "hyphens", + "icon", "image-orientation", "image-rendering", "image-resolution", + "inline-box-align", "justify-content", "justify-items", "justify-self", "left", "letter-spacing", + "line-break", "line-height", "line-stacking", "line-stacking-ruby", + "line-stacking-shift", "line-stacking-strategy", "list-style", + "list-style-image", "list-style-position", "list-style-type", "margin", + "margin-bottom", "margin-left", "margin-right", "margin-top", + "marks", "marquee-direction", "marquee-loop", + "marquee-play-count", "marquee-speed", "marquee-style", "max-height", + "max-width", "min-height", "min-width", "mix-blend-mode", "move-to", "nav-down", "nav-index", + "nav-left", "nav-right", "nav-up", "object-fit", "object-position", + "opacity", "order", "orphans", "outline", + "outline-color", "outline-offset", "outline-style", "outline-width", + "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", + "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", + "page", "page-break-after", "page-break-before", "page-break-inside", + "page-policy", "pause", "pause-after", "pause-before", "perspective", + "perspective-origin", "pitch", "pitch-range", "place-content", "place-items", "place-self", "play-during", "position", + "presentation-level", "punctuation-trim", "quotes", "region-break-after", + "region-break-before", "region-break-inside", "region-fragment", + "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", + "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", + "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin", + "shape-outside", "size", "speak", "speak-as", "speak-header", + "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", + "tab-size", "table-layout", "target", "target-name", "target-new", + "target-position", "text-align", "text-align-last", "text-decoration", + "text-decoration-color", "text-decoration-line", "text-decoration-skip", + "text-decoration-style", "text-emphasis", "text-emphasis-color", + "text-emphasis-position", "text-emphasis-style", "text-height", + "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", + "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", + "text-wrap", "top", "transform", "transform-origin", "transform-style", + "transition", "transition-delay", "transition-duration", + "transition-property", "transition-timing-function", "unicode-bidi", + "user-select", "vertical-align", "visibility", "voice-balance", "voice-duration", + "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", + "voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break", + "word-spacing", "word-wrap", "z-index", + // SVG-specific + "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", + "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", + "color-interpolation", "color-interpolation-filters", + "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", + "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", + "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", + "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", + "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", + "glyph-orientation-vertical", "text-anchor", "writing-mode" + ], propertyKeywords = keySet(propertyKeywords_); + + var nonStandardPropertyKeywords_ = [ + "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", + "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", + "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside", + "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", + "searchfield-results-decoration", "zoom" + ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); + + var fontProperties_ = [ + "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", + "font-stretch", "font-weight", "font-style" + ], fontProperties = keySet(fontProperties_); + + var counterDescriptors_ = [ + "additive-symbols", "fallback", "negative", "pad", "prefix", "range", + "speak-as", "suffix", "symbols", "system" + ], counterDescriptors = keySet(counterDescriptors_); + + var colorKeywords_ = [ + "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", + "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", + "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", + "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", + "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", + "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", + "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", + "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", + "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", + "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", + "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", + "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", + "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", + "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", + "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", + "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", + "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", + "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", + "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", + "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", + "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", + "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", + "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", + "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", + "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", + "whitesmoke", "yellow", "yellowgreen" + ], colorKeywords = keySet(colorKeywords_); + + var valueKeywords_ = [ + "above", "absolute", "activeborder", "additive", "activecaption", "afar", + "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", + "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", + "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", + "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", + "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", + "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", + "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", + "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", + "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", + "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", + "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", + "compact", "condensed", "contain", "content", "contents", + "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", + "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", + "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", + "destination-in", "destination-out", "destination-over", "devanagari", "difference", + "disc", "discard", "disclosure-closed", "disclosure-open", "document", + "dot-dash", "dot-dot-dash", + "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", + "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", + "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", + "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", + "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", + "ethiopic-halehame-gez", "ethiopic-halehame-om-et", + "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", + "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", + "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", + "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", + "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove", + "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", + "help", "hidden", "hide", "higher", "highlight", "highlighttext", + "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", + "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", + "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", + "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", + "italic", "japanese-formal", "japanese-informal", "justify", "kannada", + "katakana", "katakana-iroha", "keep-all", "khmer", + "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", + "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", + "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", + "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", + "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", + "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d", + "media-controls-background", "media-current-time-display", + "media-fullscreen-button", "media-mute-button", "media-play-button", + "media-return-to-realtime-button", "media-rewind-button", + "media-seek-back-button", "media-seek-forward-button", "media-slider", + "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", + "media-volume-slider-container", "media-volume-sliderthumb", "medium", + "menu", "menulist", "menulist-button", "menulist-text", + "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", + "mix", "mongolian", "monospace", "move", "multiple", "multiply", "myanmar", "n-resize", + "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", + "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", + "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote", + "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", + "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", + "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter", + "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", + "progress", "push-button", "radial-gradient", "radio", "read-only", + "read-write", "read-write-plaintext-only", "rectangle", "region", + "relative", "repeat", "repeating-linear-gradient", + "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", + "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", + "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", + "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", + "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", + "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end", + "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", + "simp-chinese-formal", "simp-chinese-informal", "single", + "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", + "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", + "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", + "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", + "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub", + "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", + "table-caption", "table-cell", "table-column", "table-column-group", + "table-footer-group", "table-header-group", "table-row", "table-row-group", + "tamil", + "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", + "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", + "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", + "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", + "trad-chinese-formal", "trad-chinese-informal", "transform", + "translate", "translate3d", "translateX", "translateY", "translateZ", + "transparent", "ultra-condensed", "ultra-expanded", "underline", "unset", "up", + "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", + "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", + "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", + "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", + "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", + "xx-large", "xx-small" + ], valueKeywords = keySet(valueKeywords_); + + var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_) + .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_) + .concat(valueKeywords_); + CodeMirror.registerHelper("hintWords", "css", allWords); + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return ["comment", "comment"]; + } + + CodeMirror.defineMIME("text/css", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css" + }); + + CodeMirror.defineMIME("text/x-scss", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + lineComment: "//", + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + ":": function(stream) { + if (stream.match(/\s*\{/, false)) + return [null, null] + return false; + }, + "$": function(stream) { + stream.match(/^[\w-]+/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "#": function(stream) { + if (!stream.eat("{")) return false; + return [null, "interpolation"]; + } + }, + name: "css", + helperType: "scss" + }); + + CodeMirror.defineMIME("text/x-less", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + lineComment: "//", + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + "@": function(stream) { + if (stream.eat("{")) return [null, "interpolation"]; + if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false; + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "&": function() { + return ["atom", "atom"]; + } + }, + name: "css", + helperType: "less" + }); + + CodeMirror.defineMIME("text/x-gss", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + supportsAtComponent: true, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css", + helperType: "gss" + }); + +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("javascript", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var statementIndent = parserConfig.statementIndent; + var jsonldMode = parserConfig.jsonld; + var jsonMode = parserConfig.json || jsonldMode; + var isTS = parserConfig.typescript; + var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; + + // Tokenizer + + var keywords = function(){ + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"), D = kw("keyword d"); + var operator = kw("operator"), atom = {type: "atom", style: "atom"}; + + return { + "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, + "return": D, "break": D, "continue": D, "new": kw("new"), "delete": C, "void": C, "throw": C, + "debugger": kw("debugger"), "var": kw("var"), "const": kw("var"), "let": kw("var"), + "function": kw("function"), "catch": kw("catch"), + "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), + "in": operator, "typeof": operator, "instanceof": operator, + "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, + "this": kw("this"), "class": kw("class"), "super": kw("atom"), + "yield": C, "export": kw("export"), "import": kw("import"), "extends": C, + "await": C + }; + }(); + + var isOperatorChar = /[+\-*&%=<>!?|~^@]/; + var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; + + function readRegexp(stream) { + var escaped = false, next, inSet = false; + while ((next = stream.next()) != null) { + if (!escaped) { + if (next == "/" && !inSet) return; + if (next == "[") inSet = true; + else if (inSet && next == "]") inSet = false; + } + escaped = !escaped && next == "\\"; + } + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) { + return ret("number", "number"); + } else if (ch == "." && stream.match("..")) { + return ret("spread", "meta"); + } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return ret(ch); + } else if (ch == "=" && stream.eat(">")) { + return ret("=>", "operator"); + } else if (ch == "0" && stream.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i)) { + return ret("number", "number"); + } else if (/\d/.test(ch)) { + stream.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/); + return ret("number", "number"); + } else if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else if (expressionAllowed(stream, state, 1)) { + readRegexp(stream); + stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/); + return ret("regexp", "string-2"); + } else { + stream.eat("="); + return ret("operator", "operator", stream.current()); + } + } else if (ch == "`") { + state.tokenize = tokenQuasi; + return tokenQuasi(stream, state); + } else if (ch == "#") { + stream.skipToEnd(); + return ret("error", "error"); + } else if (isOperatorChar.test(ch)) { + if (ch != ">" || !state.lexical || state.lexical.type != ">") { + if (stream.eat("=")) { + if (ch == "!" || ch == "=") stream.eat("=") + } else if (/[<>*+\-]/.test(ch)) { + stream.eat(ch) + if (ch == ">") stream.eat(ch) + } + } + return ret("operator", "operator", stream.current()); + } else if (wordRE.test(ch)) { + stream.eatWhile(wordRE); + var word = stream.current() + if (state.lastType != ".") { + if (keywords.propertyIsEnumerable(word)) { + var kw = keywords[word] + return ret(kw.type, kw.style, word) + } + if (word == "async" && stream.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/, false)) + return ret("async", "keyword", word) + } + return ret("variable", "variable", word) + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next; + if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ + state.tokenize = tokenBase; + return ret("jsonld-keyword", "meta"); + } + while ((next = stream.next()) != null) { + if (next == quote && !escaped) break; + escaped = !escaped && next == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenQuasi(stream, state) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && next == "\\"; + } + return ret("quasi", "string-2", stream.current()); + } + + var brackets = "([{}])"; + // This is a crude lookahead trick to try and notice that we're + // parsing the argument patterns for a fat-arrow function before we + // actually hit the arrow token. It only works if the arrow is on + // the same line as the arguments and there's no strange noise + // (comments) in between. Fallback is to only notice when we hit the + // arrow, and not declare the arguments as locals for the arrow + // body. + function findFatArrow(stream, state) { + if (state.fatArrowAt) state.fatArrowAt = null; + var arrow = stream.string.indexOf("=>", stream.start); + if (arrow < 0) return; + + if (isTS) { // Try to skip TypeScript return type declarations after the arguments + var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow)) + if (m) arrow = m.index + } + + var depth = 0, sawSomething = false; + for (var pos = arrow - 1; pos >= 0; --pos) { + var ch = stream.string.charAt(pos); + var bracket = brackets.indexOf(ch); + if (bracket >= 0 && bracket < 3) { + if (!depth) { ++pos; break; } + if (--depth == 0) { if (ch == "(") sawSomething = true; break; } + } else if (bracket >= 3 && bracket < 6) { + ++depth; + } else if (wordRE.test(ch)) { + sawSomething = true; + } else if (/["'\/]/.test(ch)) { + return; + } else if (sawSomething && !depth) { + ++pos; + break; + } + } + if (sawSomething && !depth) state.fatArrowAt = pos; + } + + // Parser + + var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; + + function JSLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + + function inScope(state, varname) { + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return true; + for (var cx = state.context; cx; cx = cx.prev) { + for (var v = cx.vars; v; v = v.next) + if (v.name == varname) return true; + } + } + + function parseJS(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; + + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + + while(true) { + var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; + if (combinator(type, content)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + return style; + } + } + } + + // Combinator utils + + var cx = {state: null, column: null, marked: null, cc: null}; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function inList(name, list) { + for (var v = list; v; v = v.next) if (v.name == name) return true + return false; + } + function register(varname) { + var state = cx.state; + cx.marked = "def"; + if (state.context) { + if (state.lexical.info == "var" && state.context && state.context.block) { + // FIXME function decls are also not block scoped + var newContext = registerVarScoped(varname, state.context) + if (newContext != null) { + state.context = newContext + return + } + } else if (!inList(varname, state.localVars)) { + state.localVars = new Var(varname, state.localVars) + return + } + } + // Fall through means this is global + if (parserConfig.globalVars && !inList(varname, state.globalVars)) + state.globalVars = new Var(varname, state.globalVars) + } + function registerVarScoped(varname, context) { + if (!context) { + return null + } else if (context.block) { + var inner = registerVarScoped(varname, context.prev) + if (!inner) return null + if (inner == context.prev) return context + return new Context(inner, context.vars, true) + } else if (inList(varname, context.vars)) { + return context + } else { + return new Context(context.prev, new Var(varname, context.vars), false) + } + } + + function isModifier(name) { + return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly" + } + + // Combinators + + function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block } + function Var(name, next) { this.name = name; this.next = next } + + var defaultVars = new Var("this", new Var("arguments", null)) + function pushcontext() { + cx.state.context = new Context(cx.state.context, cx.state.localVars, false) + cx.state.localVars = defaultVars + } + function pushblockcontext() { + cx.state.context = new Context(cx.state.context, cx.state.localVars, true) + cx.state.localVars = null + } + function popcontext() { + cx.state.localVars = cx.state.context.vars + cx.state.context = cx.state.context.prev + } + popcontext.lex = true + function pushlex(type, info) { + var result = function() { + var state = cx.state, indent = state.indented; + if (state.lexical.type == "stat") indent = state.lexical.indented; + else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) + indent = outer.indented; + state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + + function expect(wanted) { + function exp(type) { + if (type == wanted) return cont(); + else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass(); + else return cont(exp); + }; + return exp; + } + + function statement(type, value) { + if (type == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex); + if (type == "debugger") return cont(expect(";")); + if (type == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext); + if (type == ";") return cont(); + if (type == "if") { + if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) + cx.state.cc.pop()(); + return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse); + } + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); + if (type == "class" || (isTS && value == "interface")) { cx.marked = "keyword"; return cont(pushlex("form"), className, poplex); } + if (type == "variable") { + if (isTS && value == "declare") { + cx.marked = "keyword" + return cont(statement) + } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) { + cx.marked = "keyword" + if (value == "enum") return cont(enumdef); + else if (value == "type") return cont(typeexpr, expect("operator"), typeexpr, expect(";")); + else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex) + } else if (isTS && value == "namespace") { + cx.marked = "keyword" + return cont(pushlex("form"), expression, block, poplex) + } else if (isTS && value == "abstract") { + cx.marked = "keyword" + return cont(statement) + } else { + return cont(pushlex("stat"), maybelabel); + } + } + if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext, + block, poplex, poplex, popcontext); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext); + if (type == "export") return cont(pushlex("stat"), afterExport, poplex); + if (type == "import") return cont(pushlex("stat"), afterImport, poplex); + if (type == "async") return cont(statement) + if (value == "@") return cont(expression, statement) + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function maybeCatchBinding(type) { + if (type == "(") return cont(funarg, expect(")")) + } + function expression(type, value) { + return expressionInner(type, value, false); + } + function expressionNoComma(type, value) { + return expressionInner(type, value, true); + } + function parenExpr(type) { + if (type != "(") return pass() + return cont(pushlex(")"), expression, expect(")"), poplex) + } + function expressionInner(type, value, noComma) { + if (cx.state.fatArrowAt == cx.stream.start) { + var body = noComma ? arrowBodyNoComma : arrowBody; + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext); + else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); + } + + var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; + if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); + if (type == "function") return cont(functiondef, maybeop); + if (type == "class" || (isTS && value == "interface")) { cx.marked = "keyword"; return cont(pushlex("form"), classExpression, poplex); } + if (type == "keyword c" || type == "async") return cont(noComma ? expressionNoComma : expression); + if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); + if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); + if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); + if (type == "{") return contCommasep(objprop, "}", null, maybeop); + if (type == "quasi") return pass(quasi, maybeop); + if (type == "new") return cont(maybeTarget(noComma)); + if (type == "import") return cont(expression); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + + function maybeoperatorComma(type, value) { + if (type == ",") return cont(expression); + return maybeoperatorNoComma(type, value, false); + } + function maybeoperatorNoComma(type, value, noComma) { + var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; + var expr = noComma == false ? expression : expressionNoComma; + if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); + if (type == "operator") { + if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me); + if (isTS && value == "<" && cx.stream.match(/^([^>]|<.*?>)*>\s*\(/, false)) + return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me); + if (value == "?") return cont(expression, expect(":"), expr); + return cont(expr); + } + if (type == "quasi") { return pass(quasi, me); } + if (type == ";") return; + if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); + if (type == ".") return cont(property, me); + if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); + if (isTS && value == "as") { cx.marked = "keyword"; return cont(typeexpr, me) } + if (type == "regexp") { + cx.state.lastType = cx.marked = "operator" + cx.stream.backUp(cx.stream.pos - cx.stream.start - 1) + return cont(expr) + } + } + function quasi(type, value) { + if (type != "quasi") return pass(); + if (value.slice(value.length - 2) != "${") return cont(quasi); + return cont(expression, continueQuasi); + } + function continueQuasi(type) { + if (type == "}") { + cx.marked = "string-2"; + cx.state.tokenize = tokenQuasi; + return cont(quasi); + } + } + function arrowBody(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expression); + } + function arrowBodyNoComma(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expressionNoComma); + } + function maybeTarget(noComma) { + return function(type) { + if (type == ".") return cont(noComma ? targetNoComma : target); + else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma) + else return pass(noComma ? expressionNoComma : expression); + }; + } + function target(_, value) { + if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); } + } + function targetNoComma(_, value) { + if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); } + } + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperatorComma, expect(";"), poplex); + } + function property(type) { + if (type == "variable") {cx.marked = "property"; return cont();} + } + function objprop(type, value) { + if (type == "async") { + cx.marked = "property"; + return cont(objprop); + } else if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + if (value == "get" || value == "set") return cont(getterSetter); + var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params + if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false))) + cx.state.fatArrowAt = cx.stream.pos + m[0].length + return cont(afterprop); + } else if (type == "number" || type == "string") { + cx.marked = jsonldMode ? "property" : (cx.style + " property"); + return cont(afterprop); + } else if (type == "jsonld-keyword") { + return cont(afterprop); + } else if (isTS && isModifier(value)) { + cx.marked = "keyword" + return cont(objprop) + } else if (type == "[") { + return cont(expression, maybetype, expect("]"), afterprop); + } else if (type == "spread") { + return cont(expressionNoComma, afterprop); + } else if (value == "*") { + cx.marked = "keyword"; + return cont(objprop); + } else if (type == ":") { + return pass(afterprop) + } + } + function getterSetter(type) { + if (type != "variable") return pass(afterprop); + cx.marked = "property"; + return cont(functiondef); + } + function afterprop(type) { + if (type == ":") return cont(expressionNoComma); + if (type == "(") return pass(functiondef); + } + function commasep(what, end, sep) { + function proceed(type, value) { + if (sep ? sep.indexOf(type) > -1 : type == ",") { + var lex = cx.state.lexical; + if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; + return cont(function(type, value) { + if (type == end || value == end) return pass() + return pass(what) + }, proceed); + } + if (type == end || value == end) return cont(); + return cont(expect(end)); + } + return function(type, value) { + if (type == end || value == end) return cont(); + return pass(what, proceed); + }; + } + function contCommasep(what, end, info) { + for (var i = 3; i < arguments.length; i++) + cx.cc.push(arguments[i]); + return cont(pushlex(end, info), commasep(what, end), poplex); + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function maybetype(type, value) { + if (isTS) { + if (type == ":") return cont(typeexpr); + if (value == "?") return cont(maybetype); + } + } + function mayberettype(type) { + if (isTS && type == ":") { + if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr) + else return cont(typeexpr) + } + } + function isKW(_, value) { + if (value == "is") { + cx.marked = "keyword" + return cont() + } + } + function typeexpr(type, value) { + if (value == "keyof" || value == "typeof") { + cx.marked = "keyword" + return cont(value == "keyof" ? typeexpr : expressionNoComma) + } + if (type == "variable" || value == "void") { + cx.marked = "type" + return cont(afterType) + } + if (type == "string" || type == "number" || type == "atom") return cont(afterType); + if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType) + if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex, afterType) + if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType) + if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr) + } + function maybeReturnType(type) { + if (type == "=>") return cont(typeexpr) + } + function typeprop(type, value) { + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property" + return cont(typeprop) + } else if (value == "?") { + return cont(typeprop) + } else if (type == ":") { + return cont(typeexpr) + } else if (type == "[") { + return cont(expression, maybetype, expect("]"), typeprop) + } + } + function typearg(type, value) { + if (type == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg) + if (type == ":") return cont(typeexpr) + return pass(typeexpr) + } + function afterType(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType) + if (value == "|" || type == "." || value == "&") return cont(typeexpr) + if (type == "[") return cont(expect("]"), afterType) + if (value == "extends" || value == "implements") { cx.marked = "keyword"; return cont(typeexpr) } + } + function maybeTypeArgs(_, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType) + } + function typeparam() { + return pass(typeexpr, maybeTypeDefault) + } + function maybeTypeDefault(_, value) { + if (value == "=") return cont(typeexpr) + } + function vardef(_, value) { + if (value == "enum") {cx.marked = "keyword"; return cont(enumdef)} + return pass(pattern, maybetype, maybeAssign, vardefCont); + } + function pattern(type, value) { + if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(pattern) } + if (type == "variable") { register(value); return cont(); } + if (type == "spread") return cont(pattern); + if (type == "[") return contCommasep(eltpattern, "]"); + if (type == "{") return contCommasep(proppattern, "}"); + } + function proppattern(type, value) { + if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { + register(value); + return cont(maybeAssign); + } + if (type == "variable") cx.marked = "property"; + if (type == "spread") return cont(pattern); + if (type == "}") return pass(); + if (type == "[") return cont(expression, expect(']'), expect(':'), proppattern); + return cont(expect(":"), pattern, maybeAssign); + } + function eltpattern() { + return pass(pattern, maybeAssign) + } + function maybeAssign(_type, value) { + if (value == "=") return cont(expressionNoComma); + } + function vardefCont(type) { + if (type == ",") return cont(vardef); + } + function maybeelse(type, value) { + if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); + } + function forspec(type, value) { + if (value == "await") return cont(forspec); + if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex); + } + function forspec1(type) { + if (type == "var") return cont(vardef, expect(";"), forspec2); + if (type == ";") return cont(forspec2); + if (type == "variable") return cont(formaybeinof); + return pass(expression, expect(";"), forspec2); + } + function formaybeinof(_type, value) { + if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } + return cont(maybeoperatorComma, forspec2); + } + function forspec2(type, value) { + if (type == ";") return cont(forspec3); + if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } + return pass(expression, expect(";"), forspec3); + } + function forspec3(type) { + if (type != ")") cont(expression); + } + function functiondef(type, value) { + if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} + if (type == "variable") {register(value); return cont(functiondef);} + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext); + if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef) + } + function funarg(type, value) { + if (value == "@") cont(expression, funarg) + if (type == "spread") return cont(funarg); + if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(funarg); } + return pass(pattern, maybetype, maybeAssign); + } + function classExpression(type, value) { + // Class expressions may have an optional name. + if (type == "variable") return className(type, value); + return classNameAfter(type, value); + } + function className(type, value) { + if (type == "variable") {register(value); return cont(classNameAfter);} + } + function classNameAfter(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter) + if (value == "extends" || value == "implements" || (isTS && type == ",")) { + if (value == "implements") cx.marked = "keyword"; + return cont(isTS ? typeexpr : expression, classNameAfter); + } + if (type == "{") return cont(pushlex("}"), classBody, poplex); + } + function classBody(type, value) { + if (type == "async" || + (type == "variable" && + (value == "static" || value == "get" || value == "set" || (isTS && isModifier(value))) && + cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false))) { + cx.marked = "keyword"; + return cont(classBody); + } + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + return cont(isTS ? classfield : functiondef, classBody); + } + if (type == "[") + return cont(expression, maybetype, expect("]"), isTS ? classfield : functiondef, classBody) + if (value == "*") { + cx.marked = "keyword"; + return cont(classBody); + } + if (type == ";") return cont(classBody); + if (type == "}") return cont(); + if (value == "@") return cont(expression, classBody) + } + function classfield(type, value) { + if (value == "?") return cont(classfield) + if (type == ":") return cont(typeexpr, maybeAssign) + if (value == "=") return cont(expressionNoComma) + return pass(functiondef) + } + function afterExport(type, value) { + if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } + if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } + if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";")); + return pass(statement); + } + function exportField(type, value) { + if (value == "as") { cx.marked = "keyword"; return cont(expect("variable")); } + if (type == "variable") return pass(expressionNoComma, exportField); + } + function afterImport(type) { + if (type == "string") return cont(); + if (type == "(") return pass(expression); + return pass(importSpec, maybeMoreImports, maybeFrom); + } + function importSpec(type, value) { + if (type == "{") return contCommasep(importSpec, "}"); + if (type == "variable") register(value); + if (value == "*") cx.marked = "keyword"; + return cont(maybeAs); + } + function maybeMoreImports(type) { + if (type == ",") return cont(importSpec, maybeMoreImports) + } + function maybeAs(_type, value) { + if (value == "as") { cx.marked = "keyword"; return cont(importSpec); } + } + function maybeFrom(_type, value) { + if (value == "from") { cx.marked = "keyword"; return cont(expression); } + } + function arrayLiteral(type) { + if (type == "]") return cont(); + return pass(commasep(expressionNoComma, "]")); + } + function enumdef() { + return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex) + } + function enummember() { + return pass(pattern, maybeAssign); + } + + function isContinuedStatement(state, textAfter) { + return state.lastType == "operator" || state.lastType == "," || + isOperatorChar.test(textAfter.charAt(0)) || + /[,.]/.test(textAfter.charAt(0)); + } + + function expressionAllowed(stream, state, backUp) { + return state.tokenize == tokenBase && + /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) || + (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0)))) + } + + // Interface + + return { + startState: function(basecolumn) { + var state = { + tokenize: tokenBase, + lastType: "sof", + cc: [], + lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + context: parserConfig.localVars && new Context(null, null, false), + indented: basecolumn || 0 + }; + if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") + state.globalVars = parserConfig.globalVars; + return state; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + findFatArrow(stream, state); + } + if (state.tokenize != tokenComment && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; + return parseJS(state, style, type, content, stream); + }, + + indent: function(state, textAfter) { + if (state.tokenize == tokenComment) return CodeMirror.Pass; + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top + // Kludge to prevent 'maybelse' from blocking lexical scope pops + if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { + var c = state.cc[i]; + if (c == poplex) lexical = lexical.prev; + else if (c != maybeelse) break; + } + while ((lexical.type == "stat" || lexical.type == "form") && + (firstChar == "}" || ((top = state.cc[state.cc.length - 1]) && + (top == maybeoperatorComma || top == maybeoperatorNoComma) && + !/^[,\.=+\-*:?[\(]/.test(textAfter)))) + lexical = lexical.prev; + if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") + lexical = lexical.prev; + var type = lexical.type, closing = firstChar == type; + + if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0); + else if (type == "form" && firstChar == "{") return lexical.indented; + else if (type == "form") return lexical.indented + indentUnit; + else if (type == "stat") + return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); + else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) + return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); + else if (lexical.align) return lexical.column + (closing ? 0 : 1); + else return lexical.indented + (closing ? 0 : indentUnit); + }, + + electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, + blockCommentStart: jsonMode ? null : "/*", + blockCommentEnd: jsonMode ? null : "*/", + blockCommentContinue: jsonMode ? null : " * ", + lineComment: jsonMode ? null : "//", + fold: "brace", + closeBrackets: "()[]{}''\"\"``", + + helperType: jsonMode ? "json" : "javascript", + jsonldMode: jsonldMode, + jsonMode: jsonMode, + + expressionAllowed: expressionAllowed, + + skipExpression: function(state) { + var top = state.cc[state.cc.length - 1] + if (top == expression || top == expressionNoComma) state.cc.pop() + } + }; +}); + +CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); + +CodeMirror.defineMIME("text/javascript", "javascript"); +CodeMirror.defineMIME("text/ecmascript", "javascript"); +CodeMirror.defineMIME("application/javascript", "javascript"); +CodeMirror.defineMIME("application/x-javascript", "javascript"); +CodeMirror.defineMIME("application/ecmascript", "javascript"); +CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); +CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); +CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); + +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +var htmlConfig = { + autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, + 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, + 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, + 'track': true, 'wbr': true, 'menuitem': true}, + implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, + 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, + 'th': true, 'tr': true}, + contextGrabbers: { + 'dd': {'dd': true, 'dt': true}, + 'dt': {'dd': true, 'dt': true}, + 'li': {'li': true}, + 'option': {'option': true, 'optgroup': true}, + 'optgroup': {'optgroup': true}, + 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, + 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, + 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, + 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, + 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, + 'rp': {'rp': true, 'rt': true}, + 'rt': {'rp': true, 'rt': true}, + 'tbody': {'tbody': true, 'tfoot': true}, + 'td': {'td': true, 'th': true}, + 'tfoot': {'tbody': true}, + 'th': {'td': true, 'th': true}, + 'thead': {'tbody': true, 'tfoot': true}, + 'tr': {'tr': true} + }, + doNotIndent: {"pre": true}, + allowUnquoted: true, + allowMissing: true, + caseFold: true +} + +var xmlConfig = { + autoSelfClosers: {}, + implicitlyClosed: {}, + contextGrabbers: {}, + doNotIndent: {}, + allowUnquoted: false, + allowMissing: false, + allowMissingTagName: false, + caseFold: false +} + +CodeMirror.defineMode("xml", function(editorConf, config_) { + var indentUnit = editorConf.indentUnit + var config = {} + var defaults = config_.htmlMode ? htmlConfig : xmlConfig + for (var prop in defaults) config[prop] = defaults[prop] + for (var prop in config_) config[prop] = config_[prop] + + // Return variables for tokenizers + var type, setStyle; + + function inText(stream, state) { + function chain(parser) { + state.tokenize = parser; + return parser(stream, state); + } + + var ch = stream.next(); + if (ch == "<") { + if (stream.eat("!")) { + if (stream.eat("[")) { + if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); + else return null; + } else if (stream.match("--")) { + return chain(inBlock("comment", "-->")); + } else if (stream.match("DOCTYPE", true, true)) { + stream.eatWhile(/[\w\._\-]/); + return chain(doctype(1)); + } else { + return null; + } + } else if (stream.eat("?")) { + stream.eatWhile(/[\w\._\-]/); + state.tokenize = inBlock("meta", "?>"); + return "meta"; + } else { + type = stream.eat("/") ? "closeTag" : "openTag"; + state.tokenize = inTag; + return "tag bracket"; + } + } else if (ch == "&") { + var ok; + if (stream.eat("#")) { + if (stream.eat("x")) { + ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); + } else { + ok = stream.eatWhile(/[\d]/) && stream.eat(";"); + } + } else { + ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); + } + return ok ? "atom" : "error"; + } else { + stream.eatWhile(/[^&<]/); + return null; + } + } + inText.isInText = true; + + function inTag(stream, state) { + var ch = stream.next(); + if (ch == ">" || (ch == "/" && stream.eat(">"))) { + state.tokenize = inText; + type = ch == ">" ? "endTag" : "selfcloseTag"; + return "tag bracket"; + } else if (ch == "=") { + type = "equals"; + return null; + } else if (ch == "<") { + state.tokenize = inText; + state.state = baseState; + state.tagName = state.tagStart = null; + var next = state.tokenize(stream, state); + return next ? next + " tag error" : "tag error"; + } else if (/[\'\"]/.test(ch)) { + state.tokenize = inAttribute(ch); + state.stringStartCol = stream.column(); + return state.tokenize(stream, state); + } else { + stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/); + return "word"; + } + } + + function inAttribute(quote) { + var closure = function(stream, state) { + while (!stream.eol()) { + if (stream.next() == quote) { + state.tokenize = inTag; + break; + } + } + return "string"; + }; + closure.isInAttribute = true; + return closure; + } + + function inBlock(style, terminator) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = inText; + break; + } + stream.next(); + } + return style; + } + } + + function doctype(depth) { + return function(stream, state) { + var ch; + while ((ch = stream.next()) != null) { + if (ch == "<") { + state.tokenize = doctype(depth + 1); + return state.tokenize(stream, state); + } else if (ch == ">") { + if (depth == 1) { + state.tokenize = inText; + break; + } else { + state.tokenize = doctype(depth - 1); + return state.tokenize(stream, state); + } + } + } + return "meta"; + }; + } + + function Context(state, tagName, startOfLine) { + this.prev = state.context; + this.tagName = tagName; + this.indent = state.indented; + this.startOfLine = startOfLine; + if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent)) + this.noIndent = true; + } + function popContext(state) { + if (state.context) state.context = state.context.prev; + } + function maybePopContext(state, nextTagName) { + var parentTagName; + while (true) { + if (!state.context) { + return; + } + parentTagName = state.context.tagName; + if (!config.contextGrabbers.hasOwnProperty(parentTagName) || + !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { + return; + } + popContext(state); + } + } + + function baseState(type, stream, state) { + if (type == "openTag") { + state.tagStart = stream.column(); + return tagNameState; + } else if (type == "closeTag") { + return closeTagNameState; + } else { + return baseState; + } + } + function tagNameState(type, stream, state) { + if (type == "word") { + state.tagName = stream.current(); + setStyle = "tag"; + return attrState; + } else if (config.allowMissingTagName && type == "endTag") { + setStyle = "tag bracket"; + return attrState(type, stream, state); + } else { + setStyle = "error"; + return tagNameState; + } + } + function closeTagNameState(type, stream, state) { + if (type == "word") { + var tagName = stream.current(); + if (state.context && state.context.tagName != tagName && + config.implicitlyClosed.hasOwnProperty(state.context.tagName)) + popContext(state); + if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) { + setStyle = "tag"; + return closeState; + } else { + setStyle = "tag error"; + return closeStateErr; + } + } else if (config.allowMissingTagName && type == "endTag") { + setStyle = "tag bracket"; + return closeState(type, stream, state); + } else { + setStyle = "error"; + return closeStateErr; + } + } + + function closeState(type, _stream, state) { + if (type != "endTag") { + setStyle = "error"; + return closeState; + } + popContext(state); + return baseState; + } + function closeStateErr(type, stream, state) { + setStyle = "error"; + return closeState(type, stream, state); + } + + function attrState(type, _stream, state) { + if (type == "word") { + setStyle = "attribute"; + return attrEqState; + } else if (type == "endTag" || type == "selfcloseTag") { + var tagName = state.tagName, tagStart = state.tagStart; + state.tagName = state.tagStart = null; + if (type == "selfcloseTag" || + config.autoSelfClosers.hasOwnProperty(tagName)) { + maybePopContext(state, tagName); + } else { + maybePopContext(state, tagName); + state.context = new Context(state, tagName, tagStart == state.indented); + } + return baseState; + } + setStyle = "error"; + return attrState; + } + function attrEqState(type, stream, state) { + if (type == "equals") return attrValueState; + if (!config.allowMissing) setStyle = "error"; + return attrState(type, stream, state); + } + function attrValueState(type, stream, state) { + if (type == "string") return attrContinuedState; + if (type == "word" && config.allowUnquoted) {setStyle = "string"; return attrState;} + setStyle = "error"; + return attrState(type, stream, state); + } + function attrContinuedState(type, stream, state) { + if (type == "string") return attrContinuedState; + return attrState(type, stream, state); + } + + return { + startState: function(baseIndent) { + var state = {tokenize: inText, + state: baseState, + indented: baseIndent || 0, + tagName: null, tagStart: null, + context: null} + if (baseIndent != null) state.baseIndent = baseIndent + return state + }, + + token: function(stream, state) { + if (!state.tagName && stream.sol()) + state.indented = stream.indentation(); + + if (stream.eatSpace()) return null; + type = null; + var style = state.tokenize(stream, state); + if ((style || type) && style != "comment") { + setStyle = null; + state.state = state.state(type || style, stream, state); + if (setStyle) + style = setStyle == "error" ? style + " error" : setStyle; + } + return style; + }, + + indent: function(state, textAfter, fullLine) { + var context = state.context; + // Indent multi-line strings (e.g. css). + if (state.tokenize.isInAttribute) { + if (state.tagStart == state.indented) + return state.stringStartCol + 1; + else + return state.indented + indentUnit; + } + if (context && context.noIndent) return CodeMirror.Pass; + if (state.tokenize != inTag && state.tokenize != inText) + return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; + // Indent the starts of attribute names. + if (state.tagName) { + if (config.multilineTagIndentPastTag !== false) + return state.tagStart + state.tagName.length + 2; + else + return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1); + } + if (config.alignCDATA && /$/, + blockCommentStart: "", + + configuration: config.htmlMode ? "html" : "xml", + helperType: config.htmlMode ? "html" : "xml", + + skipAttribute: function(state) { + if (state.state == attrValueState) + state.state = attrState + } + }; +}); + +CodeMirror.defineMIME("text/xml", "xml"); +CodeMirror.defineMIME("application/xml", "xml"); +if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) + CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); + +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var defaultTags = { + script: [ + ["lang", /(javascript|babel)/i, "javascript"], + ["type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, "javascript"], + ["type", /./, "text/plain"], + [null, null, "javascript"] + ], + style: [ + ["lang", /^css$/i, "css"], + ["type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css"], + ["type", /./, "text/plain"], + [null, null, "css"] + ] + }; + + function maybeBackup(stream, pat, style) { + var cur = stream.current(), close = cur.search(pat); + if (close > -1) { + stream.backUp(cur.length - close); + } else if (cur.match(/<\/?$/)) { + stream.backUp(cur.length); + if (!stream.match(pat, false)) stream.match(cur); + } + return style; + } + + var attrRegexpCache = {}; + function getAttrRegexp(attr) { + var regexp = attrRegexpCache[attr]; + if (regexp) return regexp; + return attrRegexpCache[attr] = new RegExp("\\s+" + attr + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"); + } + + function getAttrValue(text, attr) { + var match = text.match(getAttrRegexp(attr)) + return match ? /^\s*(.*?)\s*$/.exec(match[2])[1] : "" + } + + function getTagRegexp(tagName, anchored) { + return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i"); + } + + function addTags(from, to) { + for (var tag in from) { + var dest = to[tag] || (to[tag] = []); + var source = from[tag]; + for (var i = source.length - 1; i >= 0; i--) + dest.unshift(source[i]) + } + } + + function findMatchingMode(tagInfo, tagText) { + for (var i = 0; i < tagInfo.length; i++) { + var spec = tagInfo[i]; + if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2]; + } + } + + CodeMirror.defineMode("htmlmixed", function (config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, { + name: "xml", + htmlMode: true, + multilineTagIndentFactor: parserConfig.multilineTagIndentFactor, + multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag + }); + + var tags = {}; + var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes; + addTags(defaultTags, tags); + if (configTags) addTags(configTags, tags); + if (configScript) for (var i = configScript.length - 1; i >= 0; i--) + tags.script.unshift(["type", configScript[i].matches, configScript[i].mode]) + + function html(stream, state) { + var style = htmlMode.token(stream, state.htmlState), tag = /\btag\b/.test(style), tagName + if (tag && !/[<>\s\/]/.test(stream.current()) && + (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) && + tags.hasOwnProperty(tagName)) { + state.inTag = tagName + " " + } else if (state.inTag && tag && />$/.test(stream.current())) { + var inTag = /^([\S]+) (.*)/.exec(state.inTag) + state.inTag = null + var modeSpec = stream.current() == ">" && findMatchingMode(tags[inTag[1]], inTag[2]) + var mode = CodeMirror.getMode(config, modeSpec) + var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false); + state.token = function (stream, state) { + if (stream.match(endTagA, false)) { + state.token = html; + state.localState = state.localMode = null; + return null; + } + return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState)); + }; + state.localMode = mode; + state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, "")); + } else if (state.inTag) { + state.inTag += stream.current() + if (stream.eol()) state.inTag += " " + } + return style; + }; + + return { + startState: function () { + var state = CodeMirror.startState(htmlMode); + return {token: html, inTag: null, localMode: null, localState: null, htmlState: state}; + }, + + copyState: function (state) { + var local; + if (state.localState) { + local = CodeMirror.copyState(state.localMode, state.localState); + } + return {token: state.token, inTag: state.inTag, + localMode: state.localMode, localState: local, + htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; + }, + + token: function (stream, state) { + return state.token(stream, state); + }, + + indent: function (state, textAfter, line) { + if (!state.localMode || /^\s*<\//.test(textAfter)) + return htmlMode.indent(state.htmlState, textAfter); + else if (state.localMode.indent) + return state.localMode.indent(state.localState, textAfter, line); + else + return CodeMirror.Pass; + }, + + innerMode: function (state) { + return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; + } + }; + }, "xml", "javascript", "css"); + + CodeMirror.defineMIME("text/html", "htmlmixed"); +}); diff --git a/apps/module-ts/src/spine-ts/player/example/generator/embedding-generator.html b/apps/module-ts/src/spine-ts/player/example/generator/embedding-generator.html new file mode 100755 index 0000000..53a2d3a --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/generator/embedding-generator.html @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + +
              + Choose .skel/.json, .atlas, and .png files, or drop them here. + +
              +
              +
              +
              +
              +
              + General + Animations + Viewports + Skins + Debug +
              +
              + + + + + + + + + + + + + + + + + + + + + + + + + + +
              Show controls
              Premultiplied alpha
              Canvas alpha
              Background color
              Fullscreen background color
              Background image + + + + + + + + + + + + + + + + + + + +
              X
              Y
              Width
              Height
              +
              +
              +
              + Animations +
              +
              + Viewports +
              +
              + Skins +
              +
              + Debug +
              +
              +
              + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/player/example/generator/embedding-generator.js b/apps/module-ts/src/spine-ts/player/example/generator/embedding-generator.js new file mode 100755 index 0000000..c64f240 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/generator/embedding-generator.js @@ -0,0 +1,436 @@ +window.addEventListener("load", function(event) { + setupDropZone(); +}); + +if (!String.prototype.endsWith) { + String.prototype.endsWith = function(search, this_len) { + if (this_len === undefined || this_len > this.length) { + this_len = this.length; + } + return this.substring(this_len - search.length, this_len) === search; + }; +} + +var appState = { + dataUrls: null, + jsonFile: null, + skelFile: null, + atlasFile: null, + minorVersion: null, + majorVersion: null, + player: null +} + +function loadFiles(files) { + var skels = 0; + var skelFile = null; + var jsons = 0; + var jsonFile = null; + var atlases = 0; + var atlasFile = null; + var pngs = 0; + + for (var i = 0; i < files.length; i++) { + var file = files[i].name.toLowerCase(); + if (file.endsWith(".skel")) { + skels++; + skelFile = file; + } + if (file.endsWith(".json")) { + jsons++; + jsonFile = file; + } + if (file.endsWith(".atlas")) { + atlases++; + atlasFile = file; + } + if (file.endsWith(".png")) pngs++; + } + + if ((skels == 0 && jsons == 0) || (skels != 0 && jsons != 0) || skels > 1 || jsons > 1) { + showError("Please specify a single .skel or .json file."); + return; + } + + if (atlases != 1) { + showError("Please specify a single .atlas file."); + return; + } + + var filesToLoad = files.length; + var dataUrls = {}; + for (var i = 0; i < files.length; i++) { + var file = files[i]; + var reader = new FileReader(); + reader.onload = function(file) { + return function(dataUrl) { + console.log("Loaded " + file.name); + dataUrls[file.name] = dataUrl.target.result; + filesToLoad--; + if (filesToLoad == 0) { + setupPlayer(dataUrls, jsonFile, skelFile, atlasFile); + } + }; + }(file); + reader.onerror = function () { + showError("Sorry, couldn't load all files."); + } + reader.readAsDataURL(file); + } +} + +function setupPlayer(dataUrls, jsonFile, skelFile, atlasFile) { + var version = getSkeletonVersion(dataUrls, jsonFile, skelFile); + var major = parseInt(version.split("\.")[0]); + var minor = parseInt(version.split("\.")[1]); + + appState.dataUrls = dataUrls; + appState.jsonFile = jsonFile; + appState.skelFile = skelFile; + appState.atlasFile = atlasFile; + appState.majorVersion = major; + appState.minorVersion = minor; + + if (major == 3 && minor < 8) { + showError("Couldn't load script for Spine version " + version + ". Only skeletons with version >= 3.8 are supported."); + return; + } + + var cssUrl = "https://esotericsoftware.com/files/spine-player/" + major + "." + minor + "/spine-player.css"; + spine = null; + loadCSS(cssUrl, function () { + var playerUrl = "https://esotericsoftware.com/files/spine-player/" + major + "." + minor + "/spine-player.js"; + loadJavaScript(playerUrl, function() { + document.getElementById("sp_generator_editor").classList.remove("sp_generator_hidden"); + document.getElementById("sp_generator_drop_zone").classList.add("sp_generator_hidden"); + var player = document.getElementById("sp_generator_player"); + player.innerHTML = ""; + + var config = { + jsonUrl: jsonFile, + skelUrl: skelFile, + atlasUrl: atlasFile, + rawDataURIs: dataUrls, + success: setupConfigUI, + alpha: true, // needed so we can emulate shizzle + viewport: { // needed so we can see viewport bounds + debugRender: true + } + }; + + appState.player = new spine.SpinePlayer(player, config); + + }, function() { + showError("Couldn't load script for Spine version " + version + ". Only skeletons with version 3.8+ are supported."); + }); + }, function () { + showError("Couldn't load CSS for Spine version " + version + ". Only skeletons with version 3.8+ are supported."); + }); +} + +function setupConfigUI() { + // Setup tabs + var tabs = document.getElementsByClassName("sp_generator_tabs")[0]; + var children = tabs.getElementsByTagName("span"); + for (var i = 0; i < children.length; i++) { + (function (tab) { + tab.onclick = function () { + var panelId = tab.getAttribute("data-tab"); + var panels = document.getElementById("sp_generator_config").getElementsByClassName("sp_generator_panel"); + for (var i = 0; i < panels.length; i++) { + var panel = panels[i]; + if (panelId == panel.getAttribute("id")) { + tab.classList.add("sp_generator_selected_tab"); + panel.classList.remove("sp_generator_hidden"); + } else { + tab.classList.remove("sp_generator_selected_tab"); + panel.classList.add("sp_generator_hidden"); + } + } + } + })(children[i]); + } + + // Fill general tab + var showControls = document.getElementById("sp_generator_show_controls"); + showControls.onchange = function () { + appState.player.config.showControls = showControls.checked; + }; + var canvasAlpha = document.getElementById("sp_generator_canvas_alpha"); + canvasAlpha.onchange = function () { + var re = /[0-9A-Fa-f]{2}/g; + if (canvasAlpha.value.length > 2 || !re.test(canvasAlpha.value)) + canvasAlpha.value = "FF"; + else + canvasAlpha.value = canvasAlpha.value.toUpperCase(); + var alpha = Number.parseInt(canvasAlpha.value, 16); + appState.player.config.alpha = alpha != 0xff; + appState.player.config.backgroundColor = document.getElementById("sp_generator_background").value + canvasAlpha.value; + } + var premultipliedAlpha = document.getElementById("sp_generator_premultiplied_alpha"); + var premultipliedAlpha = document.getElementById("sp_generator_premultiplied_alpha"); + premultipliedAlpha.onchange = function () { + appState.player.config.premultipliedAlpha = premultipliedAlpha.checked; + } + var backgroundImage = document.getElementById("sp_generator_background_image"); + backgroundImage.innerHTML = ""; + var noneImage = document.createElement("option"); + noneImage.value = "none"; + noneImage.innerText = "None"; + noneImage.selected = true; + backgroundImage.append(noneImage); + for(var data in appState.dataUrls) { + if (data.toLowerCase().endsWith(".png")) { + var image = document.createElement("option"); + image.value = data; + image.innerText = data; + backgroundImage.append(image); + } + } + backgroundImage.onchange = function() { + var imageUrl = backgroundImage.value; + if (imageUrl != "none" && !appState.player.assetManager.get(imageUrl)) { + appState.player.assetManager.loadTexture(imageUrl); + } + + var boundsTable = document.getElementById("sp_generator_background_bounds"); + if (imageUrl == "none") + boundsTable.classList.add("sp_generator_hidden"); + else + boundsTable.classList.remove("sp_generator_hidden"); + + if (appState.player.config.backgroundImage) { + appState.player.config.backgroundImage.url = imageUrl != "none" ? imageUrl: null; + } else { + appState.player.config.backgroundImage = { + url: imageUrl != "none" ? imageUrl : null + } + } + } + var backgroundX = document.getElementById("sp_generator_background_x"); + backgroundX.onkeyup = backgroundX.onchange = function () { + var value = Number.parseFloat(backgroundX.value); + if (Number.isNaN(value)) return; + appState.player.config.backgroundImage.x = value; + }; + + var backgroundY = document.getElementById("sp_generator_background_y"); + backgroundY.onkeyup = backgroundY.onchange = function () { + var value = Number.parseFloat(backgroundY.value); + if (Number.isNaN(value)) return; + appState.player.config.backgroundImage.y = value; + }; + var backgroundWidth = document.getElementById("sp_generator_background_width"); + backgroundWidth.onkeyup = backgroundWidth.onchange = function () { + var value = Number.parseFloat(backgroundWidth.value); + if (Number.isNaN(value)) return; + appState.player.config.backgroundImage.width = value; + }; + var backgroundHeight = document.getElementById("sp_generator_background_height"); + backgroundHeight.onkeyup = backgroundHeight.onchange = function () { + var value = Number.parseFloat(backgroundHeight.value); + if (Number.isNaN(value)) return; + appState.player.config.backgroundImage.height = value; + }; + + + // Fill animations tab + + // Fill viewports tab + + // Fill skins tab + + // Fill debug tab +} + +function changeBackgroundColor(background) { + appState.player.config.backgroundColor = background.valueElement.value + document.getElementById("sp_generator_canvas_alpha").value; +} + +function changeFullscreenBackgroundColor(background) { + appState.player.config.fullScreenBackgroundColor = background.valueElement.value; +} + +function getSkeletonVersion(dataUrls, jsonFile, skelFile) { + if (jsonFile) { + var json = JSON.parse(atob(dataUrls[jsonFile].split(',')[1])); + return json.skeleton.spine; + } else { + var bytes = atob(dataUrls[skelFile].split(',')[1]); + var array = new Uint8Array(new ArrayBuffer(bytes.length)); + for (var i = 0; i < bytes.length; i++) { + array[i] = bytes.charCodeAt(i); + } + + var input = new BinaryInput(array); + input.readString(); + var version = input.readString(); + return version;x + } +} + +function loadJavaScript(url, success, error) { + var script = document.createElement('script'); + script.setAttribute('src', url); + script.setAttribute('type', 'text/javascript'); + script.onload = success; + script.onerror = error; + document.getElementsByTagName("head")[0].appendChild(script); +}; + +function loadCSS(url, success, error) { + var script = document.createElement('link'); + script.setAttribute('href', url); + script.setAttribute('rel', 'stylesheet'); + script.onload = success; + script.onerror = error; + document.getElementsByTagName("head")[0].appendChild(script); + }; + +function showError(error) { + alert(error); +} + +function setupDropZone() { + var fileButton = document.getElementById("sp_generator_file_button"); + var dropZone = document.getElementById("sp_generator_drop_zone"); + dropZone.onclick = function() { + fileButton.click(); + }; + dropZone.addEventListener("dragenter", function (event) { + event.stopPropagation(); + event.preventDefault(); + }, false); + dropZone.addEventListener("dragover", function (event) { + event.stopPropagation(); + event.preventDefault(); + }, false); + dropZone.addEventListener("drop", function (event) { + event.stopPropagation(); + event.preventDefault(); + + loadFiles(event.dataTransfer.files); + }, false); + + + fileButton.onchange = function () { + loadFiles(fileButton.files); + fileButton.value = ""; + }; +} + +function generateScript(jsonFile, skelFile, atlasFile, dataUrls) { + var shortVersion = major + "." + minor; + var scriptCode = + ' + + + + + + + + +
              + Click to choose .skel/.json, .atlas, and .png files, or drop them here. +
              + + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/player/example/generator/jscolor.js b/apps/module-ts/src/spine-ts/player/example/generator/jscolor.js new file mode 100755 index 0000000..e650a69 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/generator/jscolor.js @@ -0,0 +1,1855 @@ +/** + * jscolor - JavaScript Color Picker + * + * @link http://jscolor.com + * @license For open source use: GPLv3 + * For commercial use: JSColor Commercial License + * @author Jan Odvarko + * @version 2.0.5 + * + * See usage examples at http://jscolor.com/examples/ + */ + + +"use strict"; + + +if (!window.jscolor) { window.jscolor = (function () { + + +var jsc = { + + + register : function () { + jsc.attachDOMReadyEvent(jsc.init); + jsc.attachEvent(document, 'mousedown', jsc.onDocumentMouseDown); + jsc.attachEvent(document, 'touchstart', jsc.onDocumentTouchStart); + jsc.attachEvent(window, 'resize', jsc.onWindowResize); + }, + + + init : function () { + if (jsc.jscolor.lookupClass) { + jsc.jscolor.installByClassName(jsc.jscolor.lookupClass); + } + }, + + + tryInstallOnElements : function (elms, className) { + var matchClass = new RegExp('(^|\\s)(' + className + ')(\\s*(\\{[^}]*\\})|\\s|$)', 'i'); + + for (var i = 0; i < elms.length; i += 1) { + if (elms[i].type !== undefined && elms[i].type.toLowerCase() == 'color') { + if (jsc.isColorAttrSupported) { + // skip inputs of type 'color' if supported by the browser + continue; + } + } + var m; + if (!elms[i].jscolor && elms[i].className && (m = elms[i].className.match(matchClass))) { + var targetElm = elms[i]; + var optsStr = null; + + var dataOptions = jsc.getDataAttr(targetElm, 'jscolor'); + if (dataOptions !== null) { + optsStr = dataOptions; + } else if (m[4]) { + optsStr = m[4]; + } + + var opts = {}; + if (optsStr) { + try { + opts = (new Function ('return (' + optsStr + ')'))(); + } catch(eParseError) { + jsc.warn('Error parsing jscolor options: ' + eParseError + ':\n' + optsStr); + } + } + targetElm.jscolor = new jsc.jscolor(targetElm, opts); + } + } + }, + + + isColorAttrSupported : (function () { + var elm = document.createElement('input'); + if (elm.setAttribute) { + elm.setAttribute('type', 'color'); + if (elm.type.toLowerCase() == 'color') { + return true; + } + } + return false; + })(), + + + isCanvasSupported : (function () { + var elm = document.createElement('canvas'); + return !!(elm.getContext && elm.getContext('2d')); + })(), + + + fetchElement : function (mixed) { + return typeof mixed === 'string' ? document.getElementById(mixed) : mixed; + }, + + + isElementType : function (elm, type) { + return elm.nodeName.toLowerCase() === type.toLowerCase(); + }, + + + getDataAttr : function (el, name) { + var attrName = 'data-' + name; + var attrValue = el.getAttribute(attrName); + if (attrValue !== null) { + return attrValue; + } + return null; + }, + + + attachEvent : function (el, evnt, func) { + if (el.addEventListener) { + el.addEventListener(evnt, func, false); + } else if (el.attachEvent) { + el.attachEvent('on' + evnt, func); + } + }, + + + detachEvent : function (el, evnt, func) { + if (el.removeEventListener) { + el.removeEventListener(evnt, func, false); + } else if (el.detachEvent) { + el.detachEvent('on' + evnt, func); + } + }, + + + _attachedGroupEvents : {}, + + + attachGroupEvent : function (groupName, el, evnt, func) { + if (!jsc._attachedGroupEvents.hasOwnProperty(groupName)) { + jsc._attachedGroupEvents[groupName] = []; + } + jsc._attachedGroupEvents[groupName].push([el, evnt, func]); + jsc.attachEvent(el, evnt, func); + }, + + + detachGroupEvents : function (groupName) { + if (jsc._attachedGroupEvents.hasOwnProperty(groupName)) { + for (var i = 0; i < jsc._attachedGroupEvents[groupName].length; i += 1) { + var evt = jsc._attachedGroupEvents[groupName][i]; + jsc.detachEvent(evt[0], evt[1], evt[2]); + } + delete jsc._attachedGroupEvents[groupName]; + } + }, + + + attachDOMReadyEvent : function (func) { + var fired = false; + var fireOnce = function () { + if (!fired) { + fired = true; + func(); + } + }; + + if (document.readyState === 'complete') { + setTimeout(fireOnce, 1); // async + return; + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireOnce, false); + + // Fallback + window.addEventListener('load', fireOnce, false); + + } else if (document.attachEvent) { + // IE + document.attachEvent('onreadystatechange', function () { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', arguments.callee); + fireOnce(); + } + }) + + // Fallback + window.attachEvent('onload', fireOnce); + + // IE7/8 + if (document.documentElement.doScroll && window == window.top) { + var tryScroll = function () { + if (!document.body) { return; } + try { + document.documentElement.doScroll('left'); + fireOnce(); + } catch (e) { + setTimeout(tryScroll, 1); + } + }; + tryScroll(); + } + } + }, + + + warn : function (msg) { + if (window.console && window.console.warn) { + window.console.warn(msg); + } + }, + + + preventDefault : function (e) { + if (e.preventDefault) { e.preventDefault(); } + e.returnValue = false; + }, + + + captureTarget : function (target) { + // IE + if (target.setCapture) { + jsc._capturedTarget = target; + jsc._capturedTarget.setCapture(); + } + }, + + + releaseTarget : function () { + // IE + if (jsc._capturedTarget) { + jsc._capturedTarget.releaseCapture(); + jsc._capturedTarget = null; + } + }, + + + fireEvent : function (el, evnt) { + if (!el) { + return; + } + if (document.createEvent) { + var ev = document.createEvent('HTMLEvents'); + ev.initEvent(evnt, true, true); + el.dispatchEvent(ev); + } else if (document.createEventObject) { + var ev = document.createEventObject(); + el.fireEvent('on' + evnt, ev); + } else if (el['on' + evnt]) { // alternatively use the traditional event model + el['on' + evnt](); + } + }, + + + classNameToList : function (className) { + return className.replace(/^\s+|\s+$/g, '').split(/\s+/); + }, + + + // The className parameter (str) can only contain a single class name + hasClass : function (elm, className) { + if (!className) { + return false; + } + return -1 != (' ' + elm.className.replace(/\s+/g, ' ') + ' ').indexOf(' ' + className + ' '); + }, + + + // The className parameter (str) can contain multiple class names separated by whitespace + setClass : function (elm, className) { + var classList = jsc.classNameToList(className); + for (var i = 0; i < classList.length; i += 1) { + if (!jsc.hasClass(elm, classList[i])) { + elm.className += (elm.className ? ' ' : '') + classList[i]; + } + } + }, + + + // The className parameter (str) can contain multiple class names separated by whitespace + unsetClass : function (elm, className) { + var classList = jsc.classNameToList(className); + for (var i = 0; i < classList.length; i += 1) { + var repl = new RegExp( + '^\\s*' + classList[i] + '\\s*|' + + '\\s*' + classList[i] + '\\s*$|' + + '\\s+' + classList[i] + '(\\s+)', + 'g' + ); + elm.className = elm.className.replace(repl, '$1'); + } + }, + + + getStyle : function (elm) { + return window.getComputedStyle ? window.getComputedStyle(elm) : elm.currentStyle; + }, + + + setStyle : (function () { + var helper = document.createElement('div'); + var getSupportedProp = function (names) { + for (var i = 0; i < names.length; i += 1) { + if (names[i] in helper.style) { + return names[i]; + } + } + }; + var props = { + borderRadius: getSupportedProp(['borderRadius', 'MozBorderRadius', 'webkitBorderRadius']), + boxShadow: getSupportedProp(['boxShadow', 'MozBoxShadow', 'webkitBoxShadow']) + }; + return function (elm, prop, value) { + switch (prop.toLowerCase()) { + case 'opacity': + var alphaOpacity = Math.round(parseFloat(value) * 100); + elm.style.opacity = value; + elm.style.filter = 'alpha(opacity=' + alphaOpacity + ')'; + break; + default: + elm.style[props[prop]] = value; + break; + } + }; + })(), + + + setBorderRadius : function (elm, value) { + jsc.setStyle(elm, 'borderRadius', value || '0'); + }, + + + setBoxShadow : function (elm, value) { + jsc.setStyle(elm, 'boxShadow', value || 'none'); + }, + + + getElementPos : function (e, relativeToViewport) { + var x=0, y=0; + var rect = e.getBoundingClientRect(); + x = rect.left; + y = rect.top; + if (!relativeToViewport) { + var viewPos = jsc.getViewPos(); + x += viewPos[0]; + y += viewPos[1]; + } + return [x, y]; + }, + + + getElementSize : function (e) { + return [e.offsetWidth, e.offsetHeight]; + }, + + + // get pointer's X/Y coordinates relative to viewport + getAbsPointerPos : function (e) { + if (!e) { e = window.event; } + var x = 0, y = 0; + if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) { + // touch devices + x = e.changedTouches[0].clientX; + y = e.changedTouches[0].clientY; + } else if (typeof e.clientX === 'number') { + x = e.clientX; + y = e.clientY; + } + return { x: x, y: y }; + }, + + + // get pointer's X/Y coordinates relative to target element + getRelPointerPos : function (e) { + if (!e) { e = window.event; } + var target = e.target || e.srcElement; + var targetRect = target.getBoundingClientRect(); + + var x = 0, y = 0; + + var clientX = 0, clientY = 0; + if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) { + // touch devices + clientX = e.changedTouches[0].clientX; + clientY = e.changedTouches[0].clientY; + } else if (typeof e.clientX === 'number') { + clientX = e.clientX; + clientY = e.clientY; + } + + x = clientX - targetRect.left; + y = clientY - targetRect.top; + return { x: x, y: y }; + }, + + + getViewPos : function () { + var doc = document.documentElement; + return [ + (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0), + (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0) + ]; + }, + + + getViewSize : function () { + var doc = document.documentElement; + return [ + (window.innerWidth || doc.clientWidth), + (window.innerHeight || doc.clientHeight), + ]; + }, + + + redrawPosition : function () { + + if (jsc.picker && jsc.picker.owner) { + var thisObj = jsc.picker.owner; + + var tp, vp; + + if (thisObj.fixed) { + // Fixed elements are positioned relative to viewport, + // therefore we can ignore the scroll offset + tp = jsc.getElementPos(thisObj.targetElement, true); // target pos + vp = [0, 0]; // view pos + } else { + tp = jsc.getElementPos(thisObj.targetElement); // target pos + vp = jsc.getViewPos(); // view pos + } + + var ts = jsc.getElementSize(thisObj.targetElement); // target size + var vs = jsc.getViewSize(); // view size + var ps = jsc.getPickerOuterDims(thisObj); // picker size + var a, b, c; + switch (thisObj.position.toLowerCase()) { + case 'left': a=1; b=0; c=-1; break; + case 'right':a=1; b=0; c=1; break; + case 'top': a=0; b=1; c=-1; break; + default: a=0; b=1; c=1; break; + } + var l = (ts[b]+ps[b])/2; + + // compute picker position + if (!thisObj.smartPosition) { + var pp = [ + tp[a], + tp[b]+ts[b]-l+l*c + ]; + } else { + var pp = [ + -vp[a]+tp[a]+ps[a] > vs[a] ? + (-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) : + tp[a], + -vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ? + (-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) : + (tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c) + ]; + } + + var x = pp[a]; + var y = pp[b]; + var positionValue = thisObj.fixed ? 'fixed' : 'absolute'; + var contractShadow = + (pp[0] + ps[0] > tp[0] || pp[0] < tp[0] + ts[0]) && + (pp[1] + ps[1] < tp[1] + ts[1]); + + jsc._drawPosition(thisObj, x, y, positionValue, contractShadow); + } + }, + + + _drawPosition : function (thisObj, x, y, positionValue, contractShadow) { + var vShadow = contractShadow ? 0 : thisObj.shadowBlur; // px + + jsc.picker.wrap.style.position = positionValue; + jsc.picker.wrap.style.left = x + 'px'; + jsc.picker.wrap.style.top = y + 'px'; + + jsc.setBoxShadow( + jsc.picker.boxS, + thisObj.shadow ? + new jsc.BoxShadow(0, vShadow, thisObj.shadowBlur, 0, thisObj.shadowColor) : + null); + }, + + + getPickerDims : function (thisObj) { + var displaySlider = !!jsc.getSliderComponent(thisObj); + var dims = [ + 2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.width + + (displaySlider ? 2 * thisObj.insetWidth + jsc.getPadToSliderPadding(thisObj) + thisObj.sliderSize : 0), + 2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.height + + (thisObj.closable ? 2 * thisObj.insetWidth + thisObj.padding + thisObj.buttonHeight : 0) + ]; + return dims; + }, + + + getPickerOuterDims : function (thisObj) { + var dims = jsc.getPickerDims(thisObj); + return [ + dims[0] + 2 * thisObj.borderWidth, + dims[1] + 2 * thisObj.borderWidth + ]; + }, + + + getPadToSliderPadding : function (thisObj) { + return Math.max(thisObj.padding, 1.5 * (2 * thisObj.pointerBorderWidth + thisObj.pointerThickness)); + }, + + + getPadYComponent : function (thisObj) { + switch (thisObj.mode.charAt(1).toLowerCase()) { + case 'v': return 'v'; break; + } + return 's'; + }, + + + getSliderComponent : function (thisObj) { + if (thisObj.mode.length > 2) { + switch (thisObj.mode.charAt(2).toLowerCase()) { + case 's': return 's'; break; + case 'v': return 'v'; break; + } + } + return null; + }, + + + onDocumentMouseDown : function (e) { + if (!e) { e = window.event; } + var target = e.target || e.srcElement; + + if (target._jscLinkedInstance) { + if (target._jscLinkedInstance.showOnClick) { + target._jscLinkedInstance.show(); + } + } else if (target._jscControlName) { + jsc.onControlPointerStart(e, target, target._jscControlName, 'mouse'); + } else { + // Mouse is outside the picker controls -> hide the color picker! + if (jsc.picker && jsc.picker.owner) { + jsc.picker.owner.hide(); + } + } + }, + + + onDocumentTouchStart : function (e) { + if (!e) { e = window.event; } + var target = e.target || e.srcElement; + + if (target._jscLinkedInstance) { + if (target._jscLinkedInstance.showOnClick) { + target._jscLinkedInstance.show(); + } + } else if (target._jscControlName) { + jsc.onControlPointerStart(e, target, target._jscControlName, 'touch'); + } else { + if (jsc.picker && jsc.picker.owner) { + jsc.picker.owner.hide(); + } + } + }, + + + onWindowResize : function (e) { + jsc.redrawPosition(); + }, + + + onParentScroll : function (e) { + // hide the picker when one of the parent elements is scrolled + if (jsc.picker && jsc.picker.owner) { + jsc.picker.owner.hide(); + } + }, + + + _pointerMoveEvent : { + mouse: 'mousemove', + touch: 'touchmove' + }, + _pointerEndEvent : { + mouse: 'mouseup', + touch: 'touchend' + }, + + + _pointerOrigin : null, + _capturedTarget : null, + + + onControlPointerStart : function (e, target, controlName, pointerType) { + var thisObj = target._jscInstance; + + jsc.preventDefault(e); + jsc.captureTarget(target); + + var registerDragEvents = function (doc, offset) { + jsc.attachGroupEvent('drag', doc, jsc._pointerMoveEvent[pointerType], + jsc.onDocumentPointerMove(e, target, controlName, pointerType, offset)); + jsc.attachGroupEvent('drag', doc, jsc._pointerEndEvent[pointerType], + jsc.onDocumentPointerEnd(e, target, controlName, pointerType)); + }; + + registerDragEvents(document, [0, 0]); + + if (window.parent && window.frameElement) { + var rect = window.frameElement.getBoundingClientRect(); + var ofs = [-rect.left, -rect.top]; + registerDragEvents(window.parent.window.document, ofs); + } + + var abs = jsc.getAbsPointerPos(e); + var rel = jsc.getRelPointerPos(e); + jsc._pointerOrigin = { + x: abs.x - rel.x, + y: abs.y - rel.y + }; + + switch (controlName) { + case 'pad': + // if the slider is at the bottom, move it up + switch (jsc.getSliderComponent(thisObj)) { + case 's': if (thisObj.hsv[1] === 0) { thisObj.fromHSV(null, 100, null); }; break; + case 'v': if (thisObj.hsv[2] === 0) { thisObj.fromHSV(null, null, 100); }; break; + } + jsc.setPad(thisObj, e, 0, 0); + break; + + case 'sld': + jsc.setSld(thisObj, e, 0); + break; + } + + jsc.dispatchFineChange(thisObj); + }, + + + onDocumentPointerMove : function (e, target, controlName, pointerType, offset) { + return function (e) { + var thisObj = target._jscInstance; + switch (controlName) { + case 'pad': + if (!e) { e = window.event; } + jsc.setPad(thisObj, e, offset[0], offset[1]); + jsc.dispatchFineChange(thisObj); + break; + + case 'sld': + if (!e) { e = window.event; } + jsc.setSld(thisObj, e, offset[1]); + jsc.dispatchFineChange(thisObj); + break; + } + } + }, + + + onDocumentPointerEnd : function (e, target, controlName, pointerType) { + return function (e) { + var thisObj = target._jscInstance; + jsc.detachGroupEvents('drag'); + jsc.releaseTarget(); + // Always dispatch changes after detaching outstanding mouse handlers, + // in case some user interaction will occur in user's onchange callback + // that would intrude with current mouse events + jsc.dispatchChange(thisObj); + }; + }, + + + dispatchChange : function (thisObj) { + if (thisObj.valueElement) { + if (jsc.isElementType(thisObj.valueElement, 'input')) { + jsc.fireEvent(thisObj.valueElement, 'change'); + } + } + }, + + + dispatchFineChange : function (thisObj) { + if (thisObj.onFineChange) { + var callback; + if (typeof thisObj.onFineChange === 'string') { + callback = new Function (thisObj.onFineChange); + } else { + callback = thisObj.onFineChange; + } + callback.call(thisObj); + } + }, + + + setPad : function (thisObj, e, ofsX, ofsY) { + var pointerAbs = jsc.getAbsPointerPos(e); + var x = ofsX + pointerAbs.x - jsc._pointerOrigin.x - thisObj.padding - thisObj.insetWidth; + var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth; + + var xVal = x * (360 / (thisObj.width - 1)); + var yVal = 100 - (y * (100 / (thisObj.height - 1))); + + switch (jsc.getPadYComponent(thisObj)) { + case 's': thisObj.fromHSV(xVal, yVal, null, jsc.leaveSld); break; + case 'v': thisObj.fromHSV(xVal, null, yVal, jsc.leaveSld); break; + } + }, + + + setSld : function (thisObj, e, ofsY) { + var pointerAbs = jsc.getAbsPointerPos(e); + var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth; + + var yVal = 100 - (y * (100 / (thisObj.height - 1))); + + switch (jsc.getSliderComponent(thisObj)) { + case 's': thisObj.fromHSV(null, yVal, null, jsc.leavePad); break; + case 'v': thisObj.fromHSV(null, null, yVal, jsc.leavePad); break; + } + }, + + + _vmlNS : 'jsc_vml_', + _vmlCSS : 'jsc_vml_css_', + _vmlReady : false, + + + initVML : function () { + if (!jsc._vmlReady) { + // init VML namespace + var doc = document; + if (!doc.namespaces[jsc._vmlNS]) { + doc.namespaces.add(jsc._vmlNS, 'urn:schemas-microsoft-com:vml'); + } + if (!doc.styleSheets[jsc._vmlCSS]) { + var tags = ['shape', 'shapetype', 'group', 'background', 'path', 'formulas', 'handles', 'fill', 'stroke', 'shadow', 'textbox', 'textpath', 'imagedata', 'line', 'polyline', 'curve', 'rect', 'roundrect', 'oval', 'arc', 'image']; + var ss = doc.createStyleSheet(); + ss.owningElement.id = jsc._vmlCSS; + for (var i = 0; i < tags.length; i += 1) { + ss.addRule(jsc._vmlNS + '\\:' + tags[i], 'behavior:url(#default#VML);'); + } + } + jsc._vmlReady = true; + } + }, + + + createPalette : function () { + + var paletteObj = { + elm: null, + draw: null + }; + + if (jsc.isCanvasSupported) { + // Canvas implementation for modern browsers + + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + + var drawFunc = function (width, height, type) { + canvas.width = width; + canvas.height = height; + + ctx.clearRect(0, 0, canvas.width, canvas.height); + + var hGrad = ctx.createLinearGradient(0, 0, canvas.width, 0); + hGrad.addColorStop(0 / 6, '#F00'); + hGrad.addColorStop(1 / 6, '#FF0'); + hGrad.addColorStop(2 / 6, '#0F0'); + hGrad.addColorStop(3 / 6, '#0FF'); + hGrad.addColorStop(4 / 6, '#00F'); + hGrad.addColorStop(5 / 6, '#F0F'); + hGrad.addColorStop(6 / 6, '#F00'); + + ctx.fillStyle = hGrad; + ctx.fillRect(0, 0, canvas.width, canvas.height); + + var vGrad = ctx.createLinearGradient(0, 0, 0, canvas.height); + switch (type.toLowerCase()) { + case 's': + vGrad.addColorStop(0, 'rgba(255,255,255,0)'); + vGrad.addColorStop(1, 'rgba(255,255,255,1)'); + break; + case 'v': + vGrad.addColorStop(0, 'rgba(0,0,0,0)'); + vGrad.addColorStop(1, 'rgba(0,0,0,1)'); + break; + } + ctx.fillStyle = vGrad; + ctx.fillRect(0, 0, canvas.width, canvas.height); + }; + + paletteObj.elm = canvas; + paletteObj.draw = drawFunc; + + } else { + // VML fallback for IE 7 and 8 + + jsc.initVML(); + + var vmlContainer = document.createElement('div'); + vmlContainer.style.position = 'relative'; + vmlContainer.style.overflow = 'hidden'; + + var hGrad = document.createElement(jsc._vmlNS + ':fill'); + hGrad.type = 'gradient'; + hGrad.method = 'linear'; + hGrad.angle = '90'; + hGrad.colors = '16.67% #F0F, 33.33% #00F, 50% #0FF, 66.67% #0F0, 83.33% #FF0' + + var hRect = document.createElement(jsc._vmlNS + ':rect'); + hRect.style.position = 'absolute'; + hRect.style.left = -1 + 'px'; + hRect.style.top = -1 + 'px'; + hRect.stroked = false; + hRect.appendChild(hGrad); + vmlContainer.appendChild(hRect); + + var vGrad = document.createElement(jsc._vmlNS + ':fill'); + vGrad.type = 'gradient'; + vGrad.method = 'linear'; + vGrad.angle = '180'; + vGrad.opacity = '0'; + + var vRect = document.createElement(jsc._vmlNS + ':rect'); + vRect.style.position = 'absolute'; + vRect.style.left = -1 + 'px'; + vRect.style.top = -1 + 'px'; + vRect.stroked = false; + vRect.appendChild(vGrad); + vmlContainer.appendChild(vRect); + + var drawFunc = function (width, height, type) { + vmlContainer.style.width = width + 'px'; + vmlContainer.style.height = height + 'px'; + + hRect.style.width = + vRect.style.width = + (width + 1) + 'px'; + hRect.style.height = + vRect.style.height = + (height + 1) + 'px'; + + // Colors must be specified during every redraw, otherwise IE won't display + // a full gradient during a subsequential redraw + hGrad.color = '#F00'; + hGrad.color2 = '#F00'; + + switch (type.toLowerCase()) { + case 's': + vGrad.color = vGrad.color2 = '#FFF'; + break; + case 'v': + vGrad.color = vGrad.color2 = '#000'; + break; + } + }; + + paletteObj.elm = vmlContainer; + paletteObj.draw = drawFunc; + } + + return paletteObj; + }, + + + createSliderGradient : function () { + + var sliderObj = { + elm: null, + draw: null + }; + + if (jsc.isCanvasSupported) { + // Canvas implementation for modern browsers + + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + + var drawFunc = function (width, height, color1, color2) { + canvas.width = width; + canvas.height = height; + + ctx.clearRect(0, 0, canvas.width, canvas.height); + + var grad = ctx.createLinearGradient(0, 0, 0, canvas.height); + grad.addColorStop(0, color1); + grad.addColorStop(1, color2); + + ctx.fillStyle = grad; + ctx.fillRect(0, 0, canvas.width, canvas.height); + }; + + sliderObj.elm = canvas; + sliderObj.draw = drawFunc; + + } else { + // VML fallback for IE 7 and 8 + + jsc.initVML(); + + var vmlContainer = document.createElement('div'); + vmlContainer.style.position = 'relative'; + vmlContainer.style.overflow = 'hidden'; + + var grad = document.createElement(jsc._vmlNS + ':fill'); + grad.type = 'gradient'; + grad.method = 'linear'; + grad.angle = '180'; + + var rect = document.createElement(jsc._vmlNS + ':rect'); + rect.style.position = 'absolute'; + rect.style.left = -1 + 'px'; + rect.style.top = -1 + 'px'; + rect.stroked = false; + rect.appendChild(grad); + vmlContainer.appendChild(rect); + + var drawFunc = function (width, height, color1, color2) { + vmlContainer.style.width = width + 'px'; + vmlContainer.style.height = height + 'px'; + + rect.style.width = (width + 1) + 'px'; + rect.style.height = (height + 1) + 'px'; + + grad.color = color1; + grad.color2 = color2; + }; + + sliderObj.elm = vmlContainer; + sliderObj.draw = drawFunc; + } + + return sliderObj; + }, + + + leaveValue : 1<<0, + leaveStyle : 1<<1, + leavePad : 1<<2, + leaveSld : 1<<3, + + + BoxShadow : (function () { + var BoxShadow = function (hShadow, vShadow, blur, spread, color, inset) { + this.hShadow = hShadow; + this.vShadow = vShadow; + this.blur = blur; + this.spread = spread; + this.color = color; + this.inset = !!inset; + }; + + BoxShadow.prototype.toString = function () { + var vals = [ + Math.round(this.hShadow) + 'px', + Math.round(this.vShadow) + 'px', + Math.round(this.blur) + 'px', + Math.round(this.spread) + 'px', + this.color + ]; + if (this.inset) { + vals.push('inset'); + } + return vals.join(' '); + }; + + return BoxShadow; + })(), + + + // + // Usage: + // var myColor = new jscolor( [, ]) + // + + jscolor : function (targetElement, options) { + + // General options + // + this.value = null; // initial HEX color. To change it later, use methods fromString(), fromHSV() and fromRGB() + this.valueElement = targetElement; // element that will be used to display and input the color code + this.styleElement = targetElement; // element that will preview the picked color using CSS backgroundColor + this.required = true; // whether the associated text can be left empty + this.refine = true; // whether to refine the entered color code (e.g. uppercase it and remove whitespace) + this.hash = false; // whether to prefix the HEX color code with # symbol + this.uppercase = true; // whether to show the color code in upper case + this.onFineChange = null; // called instantly every time the color changes (value can be either a function or a string with javascript code) + this.activeClass = 'jscolor-active'; // class to be set to the target element when a picker window is open on it + this.overwriteImportant = false; // whether to overwrite colors of styleElement using !important + this.minS = 0; // min allowed saturation (0 - 100) + this.maxS = 100; // max allowed saturation (0 - 100) + this.minV = 0; // min allowed value (brightness) (0 - 100) + this.maxV = 100; // max allowed value (brightness) (0 - 100) + + // Accessing the picked color + // + this.hsv = [0, 0, 100]; // read-only [0-360, 0-100, 0-100] + this.rgb = [255, 255, 255]; // read-only [0-255, 0-255, 0-255] + + // Color Picker options + // + this.width = 181; // width of color palette (in px) + this.height = 101; // height of color palette (in px) + this.showOnClick = true; // whether to display the color picker when user clicks on its target element + this.mode = 'HSV'; // HSV | HVS | HS | HV - layout of the color picker controls + this.position = 'bottom'; // left | right | top | bottom - position relative to the target element + this.smartPosition = true; // automatically change picker position when there is not enough space for it + this.sliderSize = 16; // px + this.crossSize = 8; // px + this.closable = false; // whether to display the Close button + this.closeText = 'Close'; + this.buttonColor = '#000000'; // CSS color + this.buttonHeight = 18; // px + this.padding = 12; // px + this.backgroundColor = '#FFFFFF'; // CSS color + this.borderWidth = 1; // px + this.borderColor = '#BBBBBB'; // CSS color + this.borderRadius = 8; // px + this.insetWidth = 1; // px + this.insetColor = '#BBBBBB'; // CSS color + this.shadow = true; // whether to display shadow + this.shadowBlur = 15; // px + this.shadowColor = 'rgba(0,0,0,0.2)'; // CSS color + this.pointerColor = '#4C4C4C'; // px + this.pointerBorderColor = '#FFFFFF'; // px + this.pointerBorderWidth = 1; // px + this.pointerThickness = 2; // px + this.zIndex = 1000; + this.container = null; // where to append the color picker (BODY element by default) + + + for (var opt in options) { + if (options.hasOwnProperty(opt)) { + this[opt] = options[opt]; + } + } + + + this.hide = function () { + if (isPickerOwner()) { + detachPicker(); + } + }; + + + this.show = function () { + drawPicker(); + }; + + + this.redraw = function () { + if (isPickerOwner()) { + drawPicker(); + } + }; + + + this.importColor = function () { + if (!this.valueElement) { + this.exportColor(); + } else { + if (jsc.isElementType(this.valueElement, 'input')) { + if (!this.refine) { + if (!this.fromString(this.valueElement.value, jsc.leaveValue)) { + if (this.styleElement) { + this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage; + this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor; + this.styleElement.style.color = this.styleElement._jscOrigStyle.color; + } + this.exportColor(jsc.leaveValue | jsc.leaveStyle); + } + } else if (!this.required && /^\s*$/.test(this.valueElement.value)) { + this.valueElement.value = ''; + if (this.styleElement) { + this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage; + this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor; + this.styleElement.style.color = this.styleElement._jscOrigStyle.color; + } + this.exportColor(jsc.leaveValue | jsc.leaveStyle); + + } else if (this.fromString(this.valueElement.value)) { + // managed to import color successfully from the value -> OK, don't do anything + } else { + this.exportColor(); + } + } else { + // not an input element -> doesn't have any value + this.exportColor(); + } + } + }; + + + this.exportColor = function (flags) { + if (!(flags & jsc.leaveValue) && this.valueElement) { + var value = this.toString(); + if (this.uppercase) { value = value.toUpperCase(); } + if (this.hash) { value = '#' + value; } + + if (jsc.isElementType(this.valueElement, 'input')) { + this.valueElement.value = value; + } else { + this.valueElement.innerHTML = value; + } + } + if (!(flags & jsc.leaveStyle)) { + if (this.styleElement) { + var bgColor = '#' + this.toString(); + var fgColor = this.isLight() ? '#000' : '#FFF'; + + this.styleElement.style.backgroundImage = 'none'; + this.styleElement.style.backgroundColor = bgColor; + this.styleElement.style.color = fgColor; + + if (this.overwriteImportant) { + this.styleElement.setAttribute('style', + 'background: ' + bgColor + ' !important; ' + + 'color: ' + fgColor + ' !important;' + ); + } + } + } + if (!(flags & jsc.leavePad) && isPickerOwner()) { + redrawPad(); + } + if (!(flags & jsc.leaveSld) && isPickerOwner()) { + redrawSld(); + } + }; + + + // h: 0-360 + // s: 0-100 + // v: 0-100 + // + this.fromHSV = function (h, s, v, flags) { // null = don't change + if (h !== null) { + if (isNaN(h)) { return false; } + h = Math.max(0, Math.min(360, h)); + } + if (s !== null) { + if (isNaN(s)) { return false; } + s = Math.max(0, Math.min(100, this.maxS, s), this.minS); + } + if (v !== null) { + if (isNaN(v)) { return false; } + v = Math.max(0, Math.min(100, this.maxV, v), this.minV); + } + + this.rgb = HSV_RGB( + h===null ? this.hsv[0] : (this.hsv[0]=h), + s===null ? this.hsv[1] : (this.hsv[1]=s), + v===null ? this.hsv[2] : (this.hsv[2]=v) + ); + + this.exportColor(flags); + }; + + + // r: 0-255 + // g: 0-255 + // b: 0-255 + // + this.fromRGB = function (r, g, b, flags) { // null = don't change + if (r !== null) { + if (isNaN(r)) { return false; } + r = Math.max(0, Math.min(255, r)); + } + if (g !== null) { + if (isNaN(g)) { return false; } + g = Math.max(0, Math.min(255, g)); + } + if (b !== null) { + if (isNaN(b)) { return false; } + b = Math.max(0, Math.min(255, b)); + } + + var hsv = RGB_HSV( + r===null ? this.rgb[0] : r, + g===null ? this.rgb[1] : g, + b===null ? this.rgb[2] : b + ); + if (hsv[0] !== null) { + this.hsv[0] = Math.max(0, Math.min(360, hsv[0])); + } + if (hsv[2] !== 0) { + this.hsv[1] = hsv[1]===null ? null : Math.max(0, this.minS, Math.min(100, this.maxS, hsv[1])); + } + this.hsv[2] = hsv[2]===null ? null : Math.max(0, this.minV, Math.min(100, this.maxV, hsv[2])); + + // update RGB according to final HSV, as some values might be trimmed + var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]); + this.rgb[0] = rgb[0]; + this.rgb[1] = rgb[1]; + this.rgb[2] = rgb[2]; + + this.exportColor(flags); + }; + + + this.fromString = function (str, flags) { + var m; + if (m = str.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i)) { + // HEX notation + // + + if (m[1].length === 6) { + // 6-char notation + this.fromRGB( + parseInt(m[1].substr(0,2),16), + parseInt(m[1].substr(2,2),16), + parseInt(m[1].substr(4,2),16), + flags + ); + } else { + // 3-char notation + this.fromRGB( + parseInt(m[1].charAt(0) + m[1].charAt(0),16), + parseInt(m[1].charAt(1) + m[1].charAt(1),16), + parseInt(m[1].charAt(2) + m[1].charAt(2),16), + flags + ); + } + return true; + + } else if (m = str.match(/^\W*rgba?\(([^)]*)\)\W*$/i)) { + var params = m[1].split(','); + var re = /^\s*(\d*)(\.\d+)?\s*$/; + var mR, mG, mB; + if ( + params.length >= 3 && + (mR = params[0].match(re)) && + (mG = params[1].match(re)) && + (mB = params[2].match(re)) + ) { + var r = parseFloat((mR[1] || '0') + (mR[2] || '')); + var g = parseFloat((mG[1] || '0') + (mG[2] || '')); + var b = parseFloat((mB[1] || '0') + (mB[2] || '')); + this.fromRGB(r, g, b, flags); + return true; + } + } + return false; + }; + + + this.toString = function () { + return ( + (0x100 | Math.round(this.rgb[0])).toString(16).substr(1) + + (0x100 | Math.round(this.rgb[1])).toString(16).substr(1) + + (0x100 | Math.round(this.rgb[2])).toString(16).substr(1) + ); + }; + + + this.toHEXString = function () { + return '#' + this.toString().toUpperCase(); + }; + + + this.toRGBString = function () { + return ('rgb(' + + Math.round(this.rgb[0]) + ',' + + Math.round(this.rgb[1]) + ',' + + Math.round(this.rgb[2]) + ')' + ); + }; + + + this.isLight = function () { + return ( + 0.213 * this.rgb[0] + + 0.715 * this.rgb[1] + + 0.072 * this.rgb[2] > + 255 / 2 + ); + }; + + + this._processParentElementsInDOM = function () { + if (this._linkedElementsProcessed) { return; } + this._linkedElementsProcessed = true; + + var elm = this.targetElement; + do { + // If the target element or one of its parent nodes has fixed position, + // then use fixed positioning instead + // + // Note: In Firefox, getComputedStyle returns null in a hidden iframe, + // that's why we need to check if the returned style object is non-empty + var currStyle = jsc.getStyle(elm); + if (currStyle && currStyle.position.toLowerCase() === 'fixed') { + this.fixed = true; + } + + if (elm !== this.targetElement) { + // Ensure to attach onParentScroll only once to each parent element + // (multiple targetElements can share the same parent nodes) + // + // Note: It's not just offsetParents that can be scrollable, + // that's why we loop through all parent nodes + if (!elm._jscEventsAttached) { + jsc.attachEvent(elm, 'scroll', jsc.onParentScroll); + elm._jscEventsAttached = true; + } + } + } while ((elm = elm.parentNode) && !jsc.isElementType(elm, 'body')); + }; + + + // r: 0-255 + // g: 0-255 + // b: 0-255 + // + // returns: [ 0-360, 0-100, 0-100 ] + // + function RGB_HSV (r, g, b) { + r /= 255; + g /= 255; + b /= 255; + var n = Math.min(Math.min(r,g),b); + var v = Math.max(Math.max(r,g),b); + var m = v - n; + if (m === 0) { return [ null, 0, 100 * v ]; } + var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m); + return [ + 60 * (h===6?0:h), + 100 * (m/v), + 100 * v + ]; + } + + + // h: 0-360 + // s: 0-100 + // v: 0-100 + // + // returns: [ 0-255, 0-255, 0-255 ] + // + function HSV_RGB (h, s, v) { + var u = 255 * (v / 100); + + if (h === null) { + return [ u, u, u ]; + } + + h /= 60; + s /= 100; + + var i = Math.floor(h); + var f = i%2 ? h-i : 1-(h-i); + var m = u * (1 - s); + var n = u * (1 - s * f); + switch (i) { + case 6: + case 0: return [u,n,m]; + case 1: return [n,u,m]; + case 2: return [m,u,n]; + case 3: return [m,n,u]; + case 4: return [n,m,u]; + case 5: return [u,m,n]; + } + } + + + function detachPicker () { + jsc.unsetClass(THIS.targetElement, THIS.activeClass); + jsc.picker.wrap.parentNode.removeChild(jsc.picker.wrap); + delete jsc.picker.owner; + } + + + function drawPicker () { + + // At this point, when drawing the picker, we know what the parent elements are + // and we can do all related DOM operations, such as registering events on them + // or checking their positioning + THIS._processParentElementsInDOM(); + + if (!jsc.picker) { + jsc.picker = { + owner: null, + wrap : document.createElement('div'), + box : document.createElement('div'), + boxS : document.createElement('div'), // shadow area + boxB : document.createElement('div'), // border + pad : document.createElement('div'), + padB : document.createElement('div'), // border + padM : document.createElement('div'), // mouse/touch area + padPal : jsc.createPalette(), + cross : document.createElement('div'), + crossBY : document.createElement('div'), // border Y + crossBX : document.createElement('div'), // border X + crossLY : document.createElement('div'), // line Y + crossLX : document.createElement('div'), // line X + sld : document.createElement('div'), + sldB : document.createElement('div'), // border + sldM : document.createElement('div'), // mouse/touch area + sldGrad : jsc.createSliderGradient(), + sldPtrS : document.createElement('div'), // slider pointer spacer + sldPtrIB : document.createElement('div'), // slider pointer inner border + sldPtrMB : document.createElement('div'), // slider pointer middle border + sldPtrOB : document.createElement('div'), // slider pointer outer border + btn : document.createElement('div'), + btnT : document.createElement('span') // text + }; + + jsc.picker.pad.appendChild(jsc.picker.padPal.elm); + jsc.picker.padB.appendChild(jsc.picker.pad); + jsc.picker.cross.appendChild(jsc.picker.crossBY); + jsc.picker.cross.appendChild(jsc.picker.crossBX); + jsc.picker.cross.appendChild(jsc.picker.crossLY); + jsc.picker.cross.appendChild(jsc.picker.crossLX); + jsc.picker.padB.appendChild(jsc.picker.cross); + jsc.picker.box.appendChild(jsc.picker.padB); + jsc.picker.box.appendChild(jsc.picker.padM); + + jsc.picker.sld.appendChild(jsc.picker.sldGrad.elm); + jsc.picker.sldB.appendChild(jsc.picker.sld); + jsc.picker.sldB.appendChild(jsc.picker.sldPtrOB); + jsc.picker.sldPtrOB.appendChild(jsc.picker.sldPtrMB); + jsc.picker.sldPtrMB.appendChild(jsc.picker.sldPtrIB); + jsc.picker.sldPtrIB.appendChild(jsc.picker.sldPtrS); + jsc.picker.box.appendChild(jsc.picker.sldB); + jsc.picker.box.appendChild(jsc.picker.sldM); + + jsc.picker.btn.appendChild(jsc.picker.btnT); + jsc.picker.box.appendChild(jsc.picker.btn); + + jsc.picker.boxB.appendChild(jsc.picker.box); + jsc.picker.wrap.appendChild(jsc.picker.boxS); + jsc.picker.wrap.appendChild(jsc.picker.boxB); + } + + var p = jsc.picker; + + var displaySlider = !!jsc.getSliderComponent(THIS); + var dims = jsc.getPickerDims(THIS); + var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize); + var padToSliderPadding = jsc.getPadToSliderPadding(THIS); + var borderRadius = Math.min( + THIS.borderRadius, + Math.round(THIS.padding * Math.PI)); // px + var padCursor = 'crosshair'; + + // wrap + p.wrap.style.clear = 'both'; + p.wrap.style.width = (dims[0] + 2 * THIS.borderWidth) + 'px'; + p.wrap.style.height = (dims[1] + 2 * THIS.borderWidth) + 'px'; + p.wrap.style.zIndex = THIS.zIndex; + + // picker + p.box.style.width = dims[0] + 'px'; + p.box.style.height = dims[1] + 'px'; + + p.boxS.style.position = 'absolute'; + p.boxS.style.left = '0'; + p.boxS.style.top = '0'; + p.boxS.style.width = '100%'; + p.boxS.style.height = '100%'; + jsc.setBorderRadius(p.boxS, borderRadius + 'px'); + + // picker border + p.boxB.style.position = 'relative'; + p.boxB.style.border = THIS.borderWidth + 'px solid'; + p.boxB.style.borderColor = THIS.borderColor; + p.boxB.style.background = THIS.backgroundColor; + jsc.setBorderRadius(p.boxB, borderRadius + 'px'); + + // IE hack: + // If the element is transparent, IE will trigger the event on the elements under it, + // e.g. on Canvas or on elements with border + p.padM.style.background = + p.sldM.style.background = + '#FFF'; + jsc.setStyle(p.padM, 'opacity', '0'); + jsc.setStyle(p.sldM, 'opacity', '0'); + + // pad + p.pad.style.position = 'relative'; + p.pad.style.width = THIS.width + 'px'; + p.pad.style.height = THIS.height + 'px'; + + // pad palettes (HSV and HVS) + p.padPal.draw(THIS.width, THIS.height, jsc.getPadYComponent(THIS)); + + // pad border + p.padB.style.position = 'absolute'; + p.padB.style.left = THIS.padding + 'px'; + p.padB.style.top = THIS.padding + 'px'; + p.padB.style.border = THIS.insetWidth + 'px solid'; + p.padB.style.borderColor = THIS.insetColor; + + // pad mouse area + p.padM._jscInstance = THIS; + p.padM._jscControlName = 'pad'; + p.padM.style.position = 'absolute'; + p.padM.style.left = '0'; + p.padM.style.top = '0'; + p.padM.style.width = (THIS.padding + 2 * THIS.insetWidth + THIS.width + padToSliderPadding / 2) + 'px'; + p.padM.style.height = dims[1] + 'px'; + p.padM.style.cursor = padCursor; + + // pad cross + p.cross.style.position = 'absolute'; + p.cross.style.left = + p.cross.style.top = + '0'; + p.cross.style.width = + p.cross.style.height = + crossOuterSize + 'px'; + + // pad cross border Y and X + p.crossBY.style.position = + p.crossBX.style.position = + 'absolute'; + p.crossBY.style.background = + p.crossBX.style.background = + THIS.pointerBorderColor; + p.crossBY.style.width = + p.crossBX.style.height = + (2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px'; + p.crossBY.style.height = + p.crossBX.style.width = + crossOuterSize + 'px'; + p.crossBY.style.left = + p.crossBX.style.top = + (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2) - THIS.pointerBorderWidth) + 'px'; + p.crossBY.style.top = + p.crossBX.style.left = + '0'; + + // pad cross line Y and X + p.crossLY.style.position = + p.crossLX.style.position = + 'absolute'; + p.crossLY.style.background = + p.crossLX.style.background = + THIS.pointerColor; + p.crossLY.style.height = + p.crossLX.style.width = + (crossOuterSize - 2 * THIS.pointerBorderWidth) + 'px'; + p.crossLY.style.width = + p.crossLX.style.height = + THIS.pointerThickness + 'px'; + p.crossLY.style.left = + p.crossLX.style.top = + (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2)) + 'px'; + p.crossLY.style.top = + p.crossLX.style.left = + THIS.pointerBorderWidth + 'px'; + + // slider + p.sld.style.overflow = 'hidden'; + p.sld.style.width = THIS.sliderSize + 'px'; + p.sld.style.height = THIS.height + 'px'; + + // slider gradient + p.sldGrad.draw(THIS.sliderSize, THIS.height, '#000', '#000'); + + // slider border + p.sldB.style.display = displaySlider ? 'block' : 'none'; + p.sldB.style.position = 'absolute'; + p.sldB.style.right = THIS.padding + 'px'; + p.sldB.style.top = THIS.padding + 'px'; + p.sldB.style.border = THIS.insetWidth + 'px solid'; + p.sldB.style.borderColor = THIS.insetColor; + + // slider mouse area + p.sldM._jscInstance = THIS; + p.sldM._jscControlName = 'sld'; + p.sldM.style.display = displaySlider ? 'block' : 'none'; + p.sldM.style.position = 'absolute'; + p.sldM.style.right = '0'; + p.sldM.style.top = '0'; + p.sldM.style.width = (THIS.sliderSize + padToSliderPadding / 2 + THIS.padding + 2 * THIS.insetWidth) + 'px'; + p.sldM.style.height = dims[1] + 'px'; + p.sldM.style.cursor = 'default'; + + // slider pointer inner and outer border + p.sldPtrIB.style.border = + p.sldPtrOB.style.border = + THIS.pointerBorderWidth + 'px solid ' + THIS.pointerBorderColor; + + // slider pointer outer border + p.sldPtrOB.style.position = 'absolute'; + p.sldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px'; + p.sldPtrOB.style.top = '0'; + + // slider pointer middle border + p.sldPtrMB.style.border = THIS.pointerThickness + 'px solid ' + THIS.pointerColor; + + // slider pointer spacer + p.sldPtrS.style.width = THIS.sliderSize + 'px'; + p.sldPtrS.style.height = sliderPtrSpace + 'px'; + + // the Close button + function setBtnBorder () { + var insetColors = THIS.insetColor.split(/\s+/); + var outsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1]; + p.btn.style.borderColor = outsetColor; + } + p.btn.style.display = THIS.closable ? 'block' : 'none'; + p.btn.style.position = 'absolute'; + p.btn.style.left = THIS.padding + 'px'; + p.btn.style.bottom = THIS.padding + 'px'; + p.btn.style.padding = '0 15px'; + p.btn.style.height = THIS.buttonHeight + 'px'; + p.btn.style.border = THIS.insetWidth + 'px solid'; + setBtnBorder(); + p.btn.style.color = THIS.buttonColor; + p.btn.style.font = '12px sans-serif'; + p.btn.style.textAlign = 'center'; + try { + p.btn.style.cursor = 'pointer'; + } catch(eOldIE) { + p.btn.style.cursor = 'hand'; + } + p.btn.onmousedown = function () { + THIS.hide(); + }; + p.btnT.style.lineHeight = THIS.buttonHeight + 'px'; + p.btnT.innerHTML = ''; + p.btnT.appendChild(document.createTextNode(THIS.closeText)); + + // place pointers + redrawPad(); + redrawSld(); + + // If we are changing the owner without first closing the picker, + // make sure to first deal with the old owner + if (jsc.picker.owner && jsc.picker.owner !== THIS) { + jsc.unsetClass(jsc.picker.owner.targetElement, THIS.activeClass); + } + + // Set the new picker owner + jsc.picker.owner = THIS; + + // The redrawPosition() method needs picker.owner to be set, that's why we call it here, + // after setting the owner + if (jsc.isElementType(container, 'body')) { + jsc.redrawPosition(); + } else { + jsc._drawPosition(THIS, 0, 0, 'relative', false); + } + + if (p.wrap.parentNode != container) { + container.appendChild(p.wrap); + } + + jsc.setClass(THIS.targetElement, THIS.activeClass); + } + + + function redrawPad () { + // redraw the pad pointer + switch (jsc.getPadYComponent(THIS)) { + case 's': var yComponent = 1; break; + case 'v': var yComponent = 2; break; + } + var x = Math.round((THIS.hsv[0] / 360) * (THIS.width - 1)); + var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1)); + var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize); + var ofs = -Math.floor(crossOuterSize / 2); + jsc.picker.cross.style.left = (x + ofs) + 'px'; + jsc.picker.cross.style.top = (y + ofs) + 'px'; + + // redraw the slider + switch (jsc.getSliderComponent(THIS)) { + case 's': + var rgb1 = HSV_RGB(THIS.hsv[0], 100, THIS.hsv[2]); + var rgb2 = HSV_RGB(THIS.hsv[0], 0, THIS.hsv[2]); + var color1 = 'rgb(' + + Math.round(rgb1[0]) + ',' + + Math.round(rgb1[1]) + ',' + + Math.round(rgb1[2]) + ')'; + var color2 = 'rgb(' + + Math.round(rgb2[0]) + ',' + + Math.round(rgb2[1]) + ',' + + Math.round(rgb2[2]) + ')'; + jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2); + break; + case 'v': + var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 100); + var color1 = 'rgb(' + + Math.round(rgb[0]) + ',' + + Math.round(rgb[1]) + ',' + + Math.round(rgb[2]) + ')'; + var color2 = '#000'; + jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2); + break; + } + } + + + function redrawSld () { + var sldComponent = jsc.getSliderComponent(THIS); + if (sldComponent) { + // redraw the slider pointer + switch (sldComponent) { + case 's': var yComponent = 1; break; + case 'v': var yComponent = 2; break; + } + var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1)); + jsc.picker.sldPtrOB.style.top = (y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(sliderPtrSpace / 2)) + 'px'; + } + } + + + function isPickerOwner () { + return jsc.picker && jsc.picker.owner === THIS; + } + + + function blurValue () { + THIS.importColor(); + } + + + // Find the target element + if (typeof targetElement === 'string') { + var id = targetElement; + var elm = document.getElementById(id); + if (elm) { + this.targetElement = elm; + } else { + jsc.warn('Could not find target element with ID \'' + id + '\''); + } + } else if (targetElement) { + this.targetElement = targetElement; + } else { + jsc.warn('Invalid target element: \'' + targetElement + '\''); + } + + if (this.targetElement._jscLinkedInstance) { + jsc.warn('Cannot link jscolor twice to the same element. Skipping.'); + return; + } + this.targetElement._jscLinkedInstance = this; + + // Find the value element + this.valueElement = jsc.fetchElement(this.valueElement); + // Find the style element + this.styleElement = jsc.fetchElement(this.styleElement); + + var THIS = this; + var container = + this.container ? + jsc.fetchElement(this.container) : + document.getElementsByTagName('body')[0]; + var sliderPtrSpace = 3; // px + + // For BUTTON elements it's important to stop them from sending the form when clicked + // (e.g. in Safari) + if (jsc.isElementType(this.targetElement, 'button')) { + if (this.targetElement.onclick) { + var origCallback = this.targetElement.onclick; + this.targetElement.onclick = function (evt) { + origCallback.call(this, evt); + return false; + }; + } else { + this.targetElement.onclick = function () { return false; }; + } + } + + /* + var elm = this.targetElement; + do { + // If the target element or one of its offsetParents has fixed position, + // then use fixed positioning instead + // + // Note: In Firefox, getComputedStyle returns null in a hidden iframe, + // that's why we need to check if the returned style object is non-empty + var currStyle = jsc.getStyle(elm); + if (currStyle && currStyle.position.toLowerCase() === 'fixed') { + this.fixed = true; + } + + if (elm !== this.targetElement) { + // attach onParentScroll so that we can recompute the picker position + // when one of the offsetParents is scrolled + if (!elm._jscEventsAttached) { + jsc.attachEvent(elm, 'scroll', jsc.onParentScroll); + elm._jscEventsAttached = true; + } + } + } while ((elm = elm.offsetParent) && !jsc.isElementType(elm, 'body')); + */ + + // valueElement + if (this.valueElement) { + if (jsc.isElementType(this.valueElement, 'input')) { + var updateField = function () { + THIS.fromString(THIS.valueElement.value, jsc.leaveValue); + jsc.dispatchFineChange(THIS); + }; + jsc.attachEvent(this.valueElement, 'keyup', updateField); + jsc.attachEvent(this.valueElement, 'input', updateField); + jsc.attachEvent(this.valueElement, 'blur', blurValue); + this.valueElement.setAttribute('autocomplete', 'off'); + } + } + + // styleElement + if (this.styleElement) { + this.styleElement._jscOrigStyle = { + backgroundImage : this.styleElement.style.backgroundImage, + backgroundColor : this.styleElement.style.backgroundColor, + color : this.styleElement.style.color + }; + } + + if (this.value) { + // Try to set the color from the .value option and if unsuccessful, + // export the current color + this.fromString(this.value) || this.exportColor(); + } else { + this.importColor(); + } + } + +}; + + +//================================ +// Public properties and methods +//================================ + + +// By default, search for all elements with class="jscolor" and install a color picker on them. +// +// You can change what class name will be looked for by setting the property jscolor.lookupClass +// anywhere in your HTML document. To completely disable the automatic lookup, set it to null. +// +jsc.jscolor.lookupClass = 'jscolor'; + + +jsc.jscolor.installByClassName = function (className) { + var inputElms = document.getElementsByTagName('input'); + var buttonElms = document.getElementsByTagName('button'); + + jsc.tryInstallOnElements(inputElms, className); + jsc.tryInstallOnElements(buttonElms, className); +}; + + +jsc.register(); + + +return jsc.jscolor; + + +})(); } diff --git a/apps/module-ts/src/spine-ts/player/example/generator/loader.js b/apps/module-ts/src/spine-ts/player/example/generator/loader.js new file mode 100755 index 0000000..d6c3119 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/generator/loader.js @@ -0,0 +1,186 @@ +var spineGenerator; + +(function (spineGenerator) { + var Loader = (function () { + function Loader() { + } + + Loader.loadSkeletonFiles = function(files, success, error) { + var skels = 0; + var skelFile = null; + var jsons = 0; + var jsonFile = null; + var atlases = 0; + var atlasFile = null; + var pngs = 0; + + for (var i = 0; i < files.length; i++) { + var file = files[i].name.toLowerCase(); + if (file.endsWith(".skel")) { + skels++; + skelFile = file; + } + if (file.endsWith(".json")) { + jsons++; + jsonFile = file; + } + if (file.endsWith(".atlas")) { + atlases++; + atlasFile = file; + } + if (file.endsWith(".png")) pngs++; + } + + if ((skels == 0 && jsons == 0) || (skels != 0 && jsons != 0) || skels > 1 || jsons > 1) { + error("Please specify a single .skel or .json file."); + return; + } + + if (atlases != 1) { + error("Please specify a single .atlas file."); + return; + } + + var filesToLoad = files.length; + var dataUrls = {}; + for (var i = 0; i < files.length; i++) { + var file = files[i]; + var reader = new FileReader(); + reader.onload = function(file) { + return function(dataUrl) { + console.log("Loaded " + file.name); + dataUrls[file.name] = dataUrl.target.result; + filesToLoad--; + if (filesToLoad == 0) { + var data = { + dataUrls: dataUrls, + jsonFile: jsonFile, + skelFile: skelFile, + atlasFile: atlasFile + }; + var version = data.version = Loader.getSkeletonVersion(data); + data.majorVersion = parseInt(version.split("\.")[0]); + data.minorVersion = parseInt(version.split("\.")[1]); + data.patchVersion = parseInt(version.split("\.")[2]); + success(data); + } + }; + }(file); + reader.onerror = function () { + error("Sorry, couldn't load all files."); + } + reader.readAsDataURL(file); + } + } + + Loader.getSkeletonVersion = function (data) { + var jsonFile = data.jsonFile; + var skelFile = data.skelFile; + var dataUrls = data.dataUrls; + if (jsonFile) { + var json = JSON.parse(atob(dataUrls[jsonFile].split(',')[1])); + return json.skeleton.spine; + } else { + var bytes = atob(dataUrls[skelFile].split(',')[1]); + var array = new Uint8Array(new ArrayBuffer(bytes.length)); + for (var i = 0; i < bytes.length; i++) { + array[i] = bytes.charCodeAt(i); + } + + var input = new BinaryInput(array); + input.readString(); + var version = input.readString(); + return version; + } + } + + Loader.loadJavaScript = function (url, success, error) { + var script = document.createElement('script'); + script.setAttribute('src', url); + script.setAttribute('type', 'text/javascript'); + script.onload = success; + script.onerror = error; + document.getElementsByTagName("head")[0].appendChild(script); + }; + + Loader.loadStyle = function(url, success, error) { + var style = document.createElement('link'); + style.setAttribute('href', url); + style.setAttribute('rel', 'stylesheet'); + style.onload = success; + style.onerror = error; + document.getElementsByTagName("head")[0].appendChild(style); + }; + + var BinaryInput = (function () { + function BinaryInput(data, strings, index, buffer) { + if (strings === void 0) { strings = new Array(); } + if (index === void 0) { index = 0; } + if (buffer === void 0) { buffer = new DataView(data.buffer); } + this.index = index; + this.buffer = buffer; + } + + BinaryInput.prototype.readByte = function () { + return this.buffer.getInt8(this.index++); + }; + + BinaryInput.prototype.readInt = function (optimizePositive) { + var b = this.readByte(); + var result = b & 0x7F; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 7; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 14; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 21; + if ((b & 0x80) != 0) { + b = this.readByte(); + result |= (b & 0x7F) << 28; + } + } + } + } + return optimizePositive ? result : ((result >>> 1) ^ -(result & 1)); + }; + + BinaryInput.prototype.readString = function () { + var byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + case 1: + return ""; + } + byteCount--; + var chars = ""; + var charCount = 0; + for (var i = 0; i < byteCount;) { + var b = this.readByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F)); + i += 2; + break; + case 14: + chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F)); + i += 3; + break; + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + }; + return BinaryInput; + }()); + + return Loader; + }()); + spineGenerator.Loader = Loader; +}(spineGenerator || (spineGenerator = {}))); \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/player/example/generator/ui.js b/apps/module-ts/src/spine-ts/player/example/generator/ui.js new file mode 100755 index 0000000..c382825 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/generator/ui.js @@ -0,0 +1,66 @@ +var spineGenerator; + +(function (spineGenerator) { + var UI = (function () { + function UI(dropZone, multiple, acceptedExtensions, callback) { + } + + UI.createElement = function (parent, html) { + parent.insertAdjacentHTML("beforeend", html); + return parent.lastElementChild; + } + + UI.clear = function(element) { + element.innerHTML = ""; + } + + UI.hide = function(element) { + element.__oldDisplay = element.style.display; + element.style.display = "none"; + } + + UI.show = function(element, display) { + if (display) element.style.display = display; + else if (element.__oldDisplay) element.style.display = element.__oldDisplay; + else element.style.display = "block"; + } + + return UI; + }()); + spineGenerator.UI = UI; +}(spineGenerator || (spineGenerator = {}))); + +(function (spineGenerator) { + var UI = spineGenerator.UI; + var DropZone = (function () { + function DropZone(dropZone, multiple, acceptedExtensions, callback) { + var fileButton = this.fileButton = UI.createElement(dropZone, + ``); + + dropZone.onclick = function() { + fileButton.click(); + }; + dropZone.addEventListener("dragenter", function (event) { + event.stopPropagation(); + event.preventDefault(); + }, false); + dropZone.addEventListener("dragover", function (event) { + event.stopPropagation(); + event.preventDefault(); + }, false); + dropZone.addEventListener("drop", function (event) { + event.stopPropagation(); + event.preventDefault(); + + loadFiles(event.dataTransfer.files); + }, false); + + fileButton.onchange = function () { + callback(fileButton.files); + fileButton.value = ""; + }; + } + return DropZone; + }()); + spineGenerator.UI.DropZone = DropZone; +}(spineGenerator || (spineGenerator = {}))); \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/player/example/index.html b/apps/module-ts/src/spine-ts/player/example/index.html new file mode 100755 index 0000000..646d7d2 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/example/index.html @@ -0,0 +1,71 @@ + + + + + + + + + + + + +
              +
              +
              + + + +
              + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/player/src/Player.ts b/apps/module-ts/src/spine-ts/player/src/Player.ts new file mode 100755 index 0000000..9161e23 --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/src/Player.ts @@ -0,0 +1,1310 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine { + export interface Viewport { + x: number, + y: number, + width: number, + height: number, + padLeft: string | number + padRight: string | number + padTop: string | number + padBottom: string | number + } + + export interface SpinePlayerConfig { + /* the URL of the skeleton .json file */ + jsonUrl: string + + /* the URL of the skeleton .skel file */ + skelUrl: string + + /* the URL of the skeleton .atlas file. Atlas page images are automatically resolved. */ + atlasUrl: string + + /* Raw data URIs, mapping from a path to base 64 encoded raw data. When the player + resolves a path of the `jsonUrl`, `skelUrl`, `atlasUrl`, or the image paths + referenced in the atlas, it will first look for that path in this array of + raw data URIs. This allows embedding of resources directly in HTML/JS. */ + rawDataURIs: Map + + /* Optional: the name of the animation to be played. Default: first animation in the skeleton. */ + animation: string + + /* Optional: list of animation names from which the user can choose. */ + animations: string[] + + /* Optional: the default mix time used to switch between two animations. */ + defaultMix: number + + /* Optional: the name of the skin to be set. Default: the default skin. */ + skin: string + + /* Optional: list of skin names from which the user can choose. */ + skins: string[] + + /* Optional: whether the skeleton uses premultiplied alpha. Default: true. */ + premultipliedAlpha: boolean + + /* Optional: whether to show the player controls. Default: true. */ + showControls: boolean + + /* Optional: which debugging visualizations should be one. Default: none. */ + debug: { + bones: boolean + regions: boolean + meshes: boolean + bounds: boolean + paths: boolean + clipping: boolean + points: boolean + hulls: boolean; + }, + + /* Optional: the position and size of the viewport in world coordinates of the skeleton. Default: the setup pose bounding box. */ + viewport: { + x: number + y: number + width: number + height: number + padLeft: string | number + padRight: string | number + padTop: string | number + padBottom: string | number + animations: Map + debugRender: boolean, + transitionTime: number + } + + /* Optional: whether the canvas should be transparent. Default: false. */ + alpha: boolean + + /* Optional: the background color. Must be given in the format #rrggbbaa. Default: #000000ff. */ + backgroundColor: string + + /* Optional: the background image. Default: none. */ + backgroundImage: { + /* The URL of the background image */ + url: string + + /* Optional: the position and size of the background image in world coordinates. Default: viewport. */ + x: number + y: number + width: number + height: number + } + + /* Optional: the background color used in fullscreen mode. Must be given in the format #rrggbbaa. Default: backgroundColor. */ + fullScreenBackgroundColor: string + + /* Optional: list of bone names that the user can control by dragging. */ + controlBones: string[] + + /* Optional: callback when the widget and its assets have been successfully loaded. */ + success: (widget: SpinePlayer) => void + + /* Optional: callback when the widget could not be loaded. */ + error: (widget: SpinePlayer, msg: string) => void + } + + class Popup { + public dom: HTMLElement; + + constructor(private player: HTMLElement, parent: HTMLElement, htmlContent: string) { + this.dom = createElement(/*html*/` +
              +
              + `); + this.dom.innerHTML = htmlContent; + parent.appendChild(this.dom); + } + + show (dismissedListener: () => void) { + this.dom.classList.remove("spine-player-hidden"); + + // Make sure the popup isn't bigger than the player. + var dismissed = false; + let resize = () => { + if (!dismissed) requestAnimationFrame(resize); + let bottomOffset = Math.abs(this.dom.getBoundingClientRect().bottom - this.player.getBoundingClientRect().bottom); + let rightOffset = Math.abs(this.dom.getBoundingClientRect().right - this.player.getBoundingClientRect().right); + let maxHeight = this.player.clientHeight - bottomOffset - rightOffset; + this.dom.style.maxHeight = maxHeight + "px"; + } + requestAnimationFrame(resize); + + // Dismiss when clicking somewhere else outside + // the popup + var justClicked = true; + let windowClickListener = (event: any) => { + if (justClicked) { + justClicked = false; + return; + } + if (!isContained(this.dom, event.target)) { + this.dom.remove(); + window.removeEventListener("click", windowClickListener); + dismissedListener(); + dismissed = true; + } + } + window.addEventListener("click", windowClickListener); + } + } + + class Switch { + private switch: HTMLElement; + private enabled = false; + public change: (value: boolean) => void; + + constructor(private text: string) {} + + render(): HTMLElement { + this.switch = createElement(/*html*/` +
              + ${this.text} +
              +
              +
              +
              + `); + this.switch.addEventListener("click", () => { + this.setEnabled(!this.enabled); + if (this.change) this.change(this.enabled); + }) + return this.switch; + } + + setEnabled(enabled: boolean) { + if (enabled) this.switch.classList.add("active"); + else this.switch.classList.remove("active"); + this.enabled = enabled; + } + + isEnabled(): boolean { + return this.enabled; + } + } + + class Slider { + private slider: HTMLElement; + private value: HTMLElement; + private knob: HTMLElement; + public change: (percentage: number) => void; + + constructor(public snaps = 0, public snapPercentage = 0.1, public big = false) { } + + render(): HTMLElement { + this.slider = createElement(/*html*/` +
              +
              + +
              + `); + this.value = findWithClass(this.slider, "spine-player-slider-value")[0]; + // this.knob = findWithClass(this.slider, "spine-player-slider-knob")[0]; + this.setValue(0); + + let input = new spine.webgl.Input(this.slider); + var dragging = false; + input.addListener({ + down: (x, y) => { + dragging = true; + this.value.classList.add("hovering"); + }, + up: (x, y) => { + dragging = false; + let percentage = x / this.slider.clientWidth; + percentage = percentage = Math.max(0, Math.min(percentage, 1)); + this.setValue(x / this.slider.clientWidth); + if (this.change) this.change(percentage); + this.value.classList.remove("hovering"); + }, + moved: (x, y) => { + if (dragging) { + let percentage = x / this.slider.clientWidth; + percentage = Math.max(0, Math.min(percentage, 1)); + percentage = this.setValue(x / this.slider.clientWidth); + if (this.change) this.change(percentage); + } + }, + dragged: (x, y) => { + let percentage = x / this.slider.clientWidth; + percentage = Math.max(0, Math.min(percentage, 1)); + percentage = this.setValue(x / this.slider.clientWidth); + if (this.change) this.change(percentage); + } + }); + + + return this.slider; + } + + setValue(percentage: number): number { + percentage = Math.max(0, Math.min(1, percentage)); + if (this.snaps > 0) { + let modulo = percentage % (1 / this.snaps); + // floor + if (modulo < (1 / this.snaps) * this.snapPercentage) { + percentage = percentage - modulo; + } else if (modulo > (1 / this.snaps) - (1 / this.snaps) * this.snapPercentage) { + percentage = percentage - modulo + (1 / this.snaps); + } + percentage = Math.max(0, Math.min(1, percentage)); + } + this.value.style.width = "" + (percentage * 100) + "%"; + // this.knob.style.left = "" + (-8 + percentage * this.slider.clientWidth) + "px"; + return percentage; + } + } + + export class SpinePlayer { + static HOVER_COLOR_INNER = new spine.Color(0.478, 0, 0, 0.25); + static HOVER_COLOR_OUTER = new spine.Color(1, 1, 1, 1); + static NON_HOVER_COLOR_INNER = new spine.Color(0.478, 0, 0, 0.5); + static NON_HOVER_COLOR_OUTER = new spine.Color(1, 0, 0, 0.8); + + private sceneRenderer: spine.webgl.SceneRenderer; + private dom: HTMLElement; + private playerControls: HTMLElement; + private canvas: HTMLCanvasElement; + private timelineSlider: Slider; + private playButton: HTMLElement; + private skinButton: HTMLElement; + private animationButton: HTMLElement; + + private context: spine.webgl.ManagedWebGLRenderingContext; + private loadingScreen: spine.webgl.LoadingScreen; + private assetManager: spine.webgl.AssetManager; + + // Whether the skeleton was loaded + public loaded: boolean; + // The loaded skeleton + public skeleton: Skeleton; + // The animation state controlling the skeleton + public animationState: AnimationState; + + private paused = true; + private playTime = 0; + private speed = 1; + private time = new TimeKeeper(); + private animationViewports: Map = {} + private currentViewport: Viewport = null; + private previousViewport: Viewport = null; + private viewportTransitionStart = 0; + + private selectedBones: Bone[]; + private parent: HTMLElement; + + private stopRequestAnimationFrame = false; + + constructor(parent: HTMLElement | string, private config: SpinePlayerConfig) { + if (typeof parent === "string") this.parent = document.getElementById(parent); + else this.parent = parent; + this.parent.appendChild(this.render()); + } + + validateConfig(config: SpinePlayerConfig): SpinePlayerConfig { + if (!config) throw new Error("Please pass a configuration to new.spine.SpinePlayer()."); + if (!config.jsonUrl && !config.skelUrl) throw new Error("Please specify the URL of the skeleton JSON or .skel file."); + if (!config.atlasUrl) throw new Error("Please specify the URL of the atlas file."); + if (!config.alpha) config.alpha = false; + if (!config.backgroundColor) config.backgroundColor = "#000000"; + if (!config.fullScreenBackgroundColor) config.fullScreenBackgroundColor = config.backgroundColor; + if (typeof config.premultipliedAlpha === "undefined") config.premultipliedAlpha = true; + if (!config.success) config.success = (widget) => {}; + if (!config.error) config.error = (widget, msg) => {}; + if (!config.debug) config.debug = { + bones: false, + regions: false, + meshes: false, + bounds: false, + clipping: false, + paths: false, + points: false, + hulls: false + } + if (typeof config.debug.bones === "undefined") config.debug.bones = false; + if (typeof config.debug.bounds === "undefined") config.debug.bounds = false; + if (typeof config.debug.clipping === "undefined") config.debug.clipping = false; + if (typeof config.debug.hulls === "undefined") config.debug.hulls = false; + if (typeof config.debug.paths === "undefined") config.debug.paths = false; + if (typeof config.debug.points === "undefined") config.debug.points = false; + if (typeof config.debug.regions === "undefined") config.debug.regions = false; + if (typeof config.debug.meshes === "undefined") config.debug.meshes = false; + + if (config.animations && config.animation) { + if (config.animations.indexOf(config.animation) < 0) throw new Error("Default animation '" + config.animation + "' is not contained in the list of selectable animations " + escapeHtml(JSON.stringify(this.config.animations)) + "."); + } + + if (config.skins && config.skin) { + if (config.skins.indexOf(config.skin) < 0) throw new Error("Default skin '" + config.skin + "' is not contained in the list of selectable skins " + escapeHtml(JSON.stringify(this.config.skins)) + "."); + } + + if (!config.controlBones) config.controlBones = []; + + if (typeof config.showControls === "undefined") + config.showControls = true; + + if (typeof config.defaultMix === "undefined") + config.defaultMix = 0.25; + + return config; + } + + showError(error: string) { + let errorDom = findWithClass(this.dom, "spine-player-error")[0]; + errorDom.classList.remove("spine-player-hidden"); + errorDom.innerHTML = `

              ${error}

              `; + this.config.error(this, error); + } + + render(): HTMLElement { + let config = this.config; + let dom = this.dom = createElement(/*html*/` +
              + +
              +
              +
              +
              +
              + +
              + + + + + + +
              +
              +
              + `) + + try { + // Validate the configuration + this.config = this.validateConfig(config); + } catch (e) { + this.showError(e); + return dom + } + + try { + // Setup the scene renderer and OpenGL context + this.canvas = findWithClass(dom, "spine-player-canvas")[0] as HTMLCanvasElement; + var webglConfig = { alpha: config.alpha }; + this.context = new spine.webgl.ManagedWebGLRenderingContext(this.canvas, webglConfig); + // Setup the scene renderer and loading screen + this.sceneRenderer = new spine.webgl.SceneRenderer(this.canvas, this.context, true); + this.loadingScreen = new spine.webgl.LoadingScreen(this.sceneRenderer); + } catch (e) { + this.showError("Sorry, your browser does not support WebGL.

              Please use the latest version of Firefox, Chrome, Edge, or Safari."); + return dom; + } + + // Load the assets + this.assetManager = new spine.webgl.AssetManager(this.context); + if (config.rawDataURIs) { + for (let path in config.rawDataURIs) { + let data = config.rawDataURIs[path]; + this.assetManager.setRawDataURI(path, data); + } + } + if (config.jsonUrl) this.assetManager.loadText(config.jsonUrl); + else this.assetManager.loadBinary(config.skelUrl); + this.assetManager.loadTextureAtlas(config.atlasUrl); + if (config.backgroundImage && config.backgroundImage.url) + this.assetManager.loadTexture(config.backgroundImage.url); + + // Setup rendering loop + requestAnimationFrame(() => this.drawFrame()); + + // Setup the event listeners for UI elements + this.playerControls = findWithClass(dom, "spine-player-controls")[0]; + let timeline = findWithClass(dom, "spine-player-timeline")[0]; + this.timelineSlider = new Slider(); + timeline.appendChild(this.timelineSlider.render()); + this.playButton = findWithId(dom, "spine-player-button-play-pause")[0]; + let speedButton = findWithId(dom, "spine-player-button-speed")[0]; + this.animationButton = findWithId(dom, "spine-player-button-animation")[0]; + this.skinButton = findWithId(dom, "spine-player-button-skin")[0]; + let settingsButton = findWithId(dom, "spine-player-button-settings")[0]; + let fullscreenButton = findWithId(dom, "spine-player-button-fullscreen")[0]; + let logoButton = findWithId(dom, "spine-player-button-logo")[0]; + + this.playButton.onclick = () => { + if (this.paused) this.play() + else this.pause(); + } + + speedButton.onclick = () => { + this.showSpeedDialog(speedButton); + } + + this.animationButton.onclick = () => { + this.showAnimationsDialog(this.animationButton); + } + + this.skinButton.onclick = () => { + this.showSkinsDialog(this.skinButton); + } + + settingsButton.onclick = () => { + this.showSettingsDialog(settingsButton); + } + + let oldWidth = this.canvas.clientWidth; + let oldHeight = this.canvas.clientHeight; + let oldStyleWidth = this.canvas.style.width; + let oldStyleHeight = this.canvas.style.height; + var isFullscreen = false; + fullscreenButton.onclick = () => { + let fullscreenChanged = () => { + isFullscreen = !isFullscreen; + if (!isFullscreen) { + this.canvas.style.width = "" + oldWidth + "px"; + this.canvas.style.height = "" + oldHeight + "px"; + this.drawFrame(false); + // Got to reset the style to whatever the user set + // after the next layouting. + requestAnimationFrame(() => { + this.canvas.style.width = oldStyleWidth; + this.canvas.style.height = oldStyleHeight; + }); + } + }; + + let doc = document as any; + (dom as any).onfullscreenchange = fullscreenChanged; + (dom as any).onwebkitfullscreenchange = fullscreenChanged; + + if(doc.fullscreenElement || doc.webkitFullscreenElement || doc.mozFullScreenElement || doc.msFullscreenElement) { + if (doc.exitFullscreen) doc.exitFullscreen(); + else if (doc.mozCancelFullScreen) doc.mozCancelFullScreen(); + else if (doc.webkitExitFullscreen) doc.webkitExitFullscreen() + else if (doc.msExitFullscreen) doc.msExitFullscreen(); + } else { + oldWidth = this.canvas.clientWidth; + oldHeight = this.canvas.clientHeight; + oldStyleWidth = this.canvas.style.width; + oldStyleHeight = this.canvas.style.height; + let player = dom as any; + if (player.requestFullscreen) player.requestFullscreen(); + else if (player.webkitRequestFullScreen) player.webkitRequestFullScreen(); + else if (player.mozRequestFullScreen) player.mozRequestFullScreen(); + else if (player.msRequestFullscreen) player.msRequestFullscreen(); + } + }; + + logoButton.onclick = () => { + window.open("http://esotericsoftware.com"); + }; + + // Register a global resize handler to redraw and avoid flicker + window.onresize = () => { + this.drawFrame(false); + } + + return dom; + } + + private lastPopup: Popup; + showSpeedDialog (speedButton: HTMLElement) { + if (this.lastPopup) this.lastPopup.dom.remove() + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Speed") { + this.lastPopup = null; + speedButton.classList.remove("spine-player-button-icon-speed-selected") + return; + } + let popup = new Popup(this.dom, this.playerControls, /*html*/` +
              Speed
              +
              +
              +
              +
              +
              +
              0.1x
              +
              1x
              +
              2x
              +
              +
              +
              + `); + let sliderParent = findWithClass(popup.dom, "spine-player-speed-slider")[0]; + let slider = new Slider(2, 0.1, true); + sliderParent.appendChild(slider.render()); + slider.setValue(this.speed / 2); + slider.change = (percentage) => { + this.speed = percentage * 2; + } + speedButton.classList.add("spine-player-button-icon-speed-selected") + popup.show(() => { + speedButton.classList.remove("spine-player-button-icon-speed-selected") + popup.dom.remove(); + this.lastPopup = null; + }); + this.lastPopup = popup; + } + + showAnimationsDialog (animationsButton: HTMLElement) { + if (this.lastPopup) this.lastPopup.dom.remove() + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Animations") { + this.lastPopup = null; + animationsButton.classList.remove("spine-player-button-icon-animations-selected") + return; + } + if (!this.skeleton || this.skeleton.data.animations.length == 0) return; + + let popup = new Popup(this.dom, this.playerControls, /*html*/` +
              Animations
              +
              +
                + `); + + let rows = findWithClass(popup.dom, "spine-player-list")[0]; + this.skeleton.data.animations.forEach((animation) => { + // skip animations not whitelisted if a whitelist is given + if (this.config.animations && this.config.animations.indexOf(animation.name) < 0) { + return; + } + + let row = createElement(/*html*/` +
              • +
                +
                +
                +
                +
              • + `); + if (animation.name == this.config.animation) row.classList.add("selected"); + findWithClass(row, "selectable-text")[0].innerText = animation.name; + rows.appendChild(row); + row.onclick = () => { + removeClass(rows.children, "selected"); + row.classList.add("selected"); + this.config.animation = animation.name; + this.playTime = 0; + this.setAnimation(animation.name); + } + }); + animationsButton.classList.add("spine-player-button-icon-animations-selected") + popup.show(() => { + animationsButton.classList.remove("spine-player-button-icon-animations-selected") + popup.dom.remove(); + this.lastPopup = null; + }); + this.lastPopup = popup; + } + + showSkinsDialog (skinButton: HTMLElement) { + if (this.lastPopup) this.lastPopup.dom.remove() + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Skins") { + this.lastPopup = null; + skinButton.classList.remove("spine-player-button-icon-skins-selected") + return; + } + if (!this.skeleton || this.skeleton.data.animations.length == 0) return; + + let popup = new Popup(this.dom, this.playerControls, /*html*/` +
                Skins
                +
                +
                  + `); + + let rows = findWithClass(popup.dom, "spine-player-list")[0]; + this.skeleton.data.skins.forEach((skin) => { + // skip skins not whitelisted if a whitelist is given + if (this.config.skins && this.config.skins.indexOf(skin.name) < 0) { + return; + } + + let row = createElement(/*html*/` +
                • +
                  +
                  +
                  +
                  +
                • + `); + if (skin.name == this.config.skin) row.classList.add("selected"); + findWithClass(row, "selectable-text")[0].innerText = skin.name; + rows.appendChild(row); + row.onclick = () => { + removeClass(rows.children, "selected"); + row.classList.add("selected"); + this.config.skin = skin.name; + this.skeleton.setSkinByName(this.config.skin); + this.skeleton.setSlotsToSetupPose(); + } + }); + + skinButton.classList.add("spine-player-button-icon-skins-selected") + popup.show(() => { + skinButton.classList.remove("spine-player-button-icon-skins-selected") + popup.dom.remove(); + this.lastPopup = null; + }); + this.lastPopup = popup; + } + + showSettingsDialog (settingsButton: HTMLElement) { + if (this.lastPopup) this.lastPopup.dom.remove() + if (this.lastPopup && findWithClass(this.lastPopup.dom, "spine-player-popup-title")[0].textContent == "Debug") { + this.lastPopup = null; + settingsButton.classList.remove("spine-player-button-icon-settings-selected") + return; + } + if (!this.skeleton || this.skeleton.data.animations.length == 0) return; + + let popup = new Popup(this.dom, this.playerControls, /*html*/` +
                  Debug
                  +
                  +
                    + + `); + + let rows = findWithClass(popup.dom, "spine-player-list")[0]; + let makeItem = (label: string, name: string) => { + let row = createElement(/*html*/`
                  • `); + let s = new Switch(label); + row.appendChild(s.render()); + s.setEnabled((this.config.debug as any)[name]); + s.change = (value) => { + (this.config.debug as any)[name] = value; + } + rows.appendChild(row); + }; + + makeItem("Bones", "bones"); + makeItem("Regions", "regions"); + makeItem("Meshes", "meshes"); + makeItem("Bounds", "bounds"); + makeItem("Paths", "paths"); + makeItem("Clipping", "clipping"); + makeItem("Points", "points"); + makeItem("Hulls", "hulls"); + + settingsButton.classList.add("spine-player-button-icon-settings-selected") + popup.show(() => { + settingsButton.classList.remove("spine-player-button-icon-settings-selected") + popup.dom.remove(); + this.lastPopup = null; + }); + this.lastPopup = popup; + } + + drawFrame (requestNextFrame = true) { + if (requestNextFrame && !this.stopRequestAnimationFrame) requestAnimationFrame(() => this.drawFrame()); + let ctx = this.context; + let gl = ctx.gl; + + // Clear the viewport + var doc = document as any; + var isFullscreen = doc.fullscreenElement || doc.webkitFullscreenElement || doc.mozFullScreenElement || doc.msFullscreenElement; + let bg = new Color().setFromString(isFullscreen ? this.config.fullScreenBackgroundColor : this.config.backgroundColor); + gl.clearColor(bg.r, bg.g, bg.b, bg.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + // Display loading screen + this.loadingScreen.backgroundColor.setFromColor(bg); + this.loadingScreen.draw(this.assetManager.isLoadingComplete()); + + // Have we finished loading the asset? Then set things up + if (this.assetManager.isLoadingComplete() && this.skeleton == null) this.loadSkeleton(); + + // Resize the canvas + this.sceneRenderer.resize(webgl.ResizeMode.Expand); + + // Update and draw the skeleton + if (this.loaded) { + // Update animation and skeleton based on user selections + if (!this.paused && this.config.animation) { + this.time.update(); + let delta = this.time.delta * this.speed; + + let animationDuration = this.animationState.getCurrent(0).animation.duration; + this.playTime += delta; + while (this.playTime >= animationDuration && animationDuration != 0) { + this.playTime -= animationDuration; + } + this.playTime = Math.max(0, Math.min(this.playTime, animationDuration)); + this.timelineSlider.setValue(this.playTime / animationDuration); + + this.animationState.update(delta); + this.animationState.apply(this.skeleton); + } + + this.skeleton.updateWorldTransform(); + + let viewport = { + x: this.currentViewport.x - (this.currentViewport.padLeft as number), + y: this.currentViewport.y - (this.currentViewport.padBottom as number), + width: this.currentViewport.width + (this.currentViewport.padLeft as number) + (this.currentViewport.padRight as number), + height: this.currentViewport.height + (this.currentViewport.padBottom as number) + (this.currentViewport.padTop as number) + } + + let transitionAlpha = ((performance.now() - this.viewportTransitionStart) / 1000) / this.config.viewport.transitionTime; + if (this.previousViewport && transitionAlpha < 1) { + let oldViewport = { + x: this.previousViewport.x - (this.previousViewport.padLeft as number), + y: this.previousViewport.y - (this.previousViewport.padBottom as number), + width: this.previousViewport.width + (this.previousViewport.padLeft as number) + (this.previousViewport.padRight as number), + height: this.previousViewport.height + (this.previousViewport.padBottom as number) + (this.previousViewport.padTop as number) + } + + viewport = { + x: oldViewport.x + (viewport.x - oldViewport.x) * transitionAlpha, + y: oldViewport.y + (viewport.y - oldViewport.y) * transitionAlpha, + width: oldViewport.width + (viewport.width - oldViewport.width) * transitionAlpha, + height: oldViewport.height + (viewport.height - oldViewport.height) * transitionAlpha + } + } + + let viewportSize = this.scale(viewport.width, viewport.height, this.canvas.width, this.canvas.height); + + this.sceneRenderer.camera.zoom = viewport.width / viewportSize.x; + this.sceneRenderer.camera.position.x = viewport.x + viewport.width / 2; + this.sceneRenderer.camera.position.y = viewport.y + viewport.height / 2; + + this.sceneRenderer.begin(); + + // Draw background image if given + if (this.config.backgroundImage && this.config.backgroundImage.url) { + let bgImage = this.assetManager.get(this.config.backgroundImage.url); + if (!(this.config.backgroundImage.hasOwnProperty("x") && this.config.backgroundImage.hasOwnProperty("y") && this.config.backgroundImage.hasOwnProperty("width") && this.config.backgroundImage.hasOwnProperty("height"))) { + this.sceneRenderer.drawTexture(bgImage, viewport.x, viewport.y, viewport.width, viewport.height); + } else { + this.sceneRenderer.drawTexture(bgImage, this.config.backgroundImage.x, this.config.backgroundImage.y, this.config.backgroundImage.width, this.config.backgroundImage.height); + } + } + + // Draw skeleton and debug output + this.sceneRenderer.drawSkeleton(this.skeleton, this.config.premultipliedAlpha); + this.sceneRenderer.skeletonDebugRenderer.drawBones = this.config.debug.bones; + this.sceneRenderer.skeletonDebugRenderer.drawBoundingBoxes = this.config.debug.bounds; + this.sceneRenderer.skeletonDebugRenderer.drawClipping = this.config.debug.clipping; + this.sceneRenderer.skeletonDebugRenderer.drawMeshHull = this.config.debug.hulls; + this.sceneRenderer.skeletonDebugRenderer.drawPaths = this.config.debug.paths; + this.sceneRenderer.skeletonDebugRenderer.drawRegionAttachments = this.config.debug.regions; + this.sceneRenderer.skeletonDebugRenderer.drawMeshTriangles = this.config.debug.meshes; + this.sceneRenderer.drawSkeletonDebug(this.skeleton, this.config.premultipliedAlpha); + + // Render the selected bones + let controlBones = this.config.controlBones; + let selectedBones = this.selectedBones; + let skeleton = this.skeleton; + gl.lineWidth(2); + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + if (!bone) continue; + var colorInner = selectedBones[i] !== null ? SpinePlayer.HOVER_COLOR_INNER : SpinePlayer.NON_HOVER_COLOR_INNER; + var colorOuter = selectedBones[i] !== null ? SpinePlayer.HOVER_COLOR_OUTER : SpinePlayer.NON_HOVER_COLOR_OUTER; + this.sceneRenderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner); + this.sceneRenderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter); + } + gl.lineWidth(1); + + // Render the viewport bounds + if (this.config.viewport.debugRender) { + this.sceneRenderer.rect(false, this.currentViewport.x, this.currentViewport.y, this.currentViewport.width, this.currentViewport.height, Color.GREEN); + this.sceneRenderer.rect(false, viewport.x, viewport.y, viewport.width, viewport.height, Color.RED); + } + + this.sceneRenderer.end(); + + this.sceneRenderer.camera.zoom = 0; + } + } + + scale(sourceWidth: number, sourceHeight: number, targetWidth: number, targetHeight: number): Vector2 { + let targetRatio = targetHeight / targetWidth; + let sourceRatio = sourceHeight / sourceWidth; + let scale = targetRatio > sourceRatio ? targetWidth / sourceWidth : targetHeight / sourceHeight; + let temp = new spine.Vector2(); + temp.x = sourceWidth * scale; + temp.y = sourceHeight * scale; + return temp; + } + + loadSkeleton () { + if (this.loaded) return; + + if (this.assetManager.hasErrors()) { + this.showError("Error: assets could not be loaded.

                    " + escapeHtml(JSON.stringify(this.assetManager.getErrors()))); + return; + } + + let atlas = this.assetManager.get(this.config.atlasUrl); + let skeletonData: SkeletonData; + if (this.config.jsonUrl) { + let jsonText = this.assetManager.get(this.config.jsonUrl); + let json = new SkeletonJson(new AtlasAttachmentLoader(atlas)); + try { + skeletonData = json.readSkeletonData(jsonText); + } catch (e) { + this.showError("Error: could not load skeleton .json.

                    " + e.toString()); + return; + } + } else { + let binaryData = this.assetManager.get(this.config.skelUrl); + let binary = new SkeletonBinary(new AtlasAttachmentLoader(atlas)); + try { + skeletonData = binary.readSkeletonData(binaryData); + } catch (e) { + this.showError("Error: could not load skeleton .skel.

                    " + e.toString()); + return; + } + } + this.skeleton = new Skeleton(skeletonData); + let stateData = new AnimationStateData(skeletonData); + stateData.defaultMix = this.config.defaultMix; + this.animationState = new AnimationState(stateData); + + // Check if all controllable bones are in the skeleton + if (this.config.controlBones) { + this.config.controlBones.forEach(bone => { + if (!skeletonData.findBone(bone)) { + this.showError(`Error: control bone '${bone}' does not exist in skeleton.`); + } + }) + } + + // Setup skin + if (!this.config.skin) { + if (skeletonData.skins.length > 0) { + this.config.skin = skeletonData.skins[0].name; + } + } + + if (this.config.skins && this.config.skin.length > 0) { + this.config.skins.forEach(skin => { + if (!this.skeleton.data.findSkin(skin)) { + this.showError(`Error: skin '${skin}' in selectable skin list does not exist in skeleton.`); + return; + } + }); + } + + if (this.config.skin) { + if (!this.skeleton.data.findSkin(this.config.skin)) { + this.showError(`Error: skin '${this.config.skin}' does not exist in skeleton.`); + return; + } + this.skeleton.setSkinByName(this.config.skin); + this.skeleton.setSlotsToSetupPose(); + } + + // Setup empty viewport if none is given and check + // if all animations for which viewports where given + // exist. + if (!this.config.viewport) { + (this.config.viewport as any) = { + animations: {}, + debugRender: false, + transitionTime: 0.2 + } + } + if (typeof this.config.viewport.debugRender === "undefined") this.config.viewport.debugRender = false; + if (typeof this.config.viewport.transitionTime === "undefined") this.config.viewport.transitionTime = 0.2; + if (!this.config.viewport.animations) { + this.config.viewport.animations = {}; + } else { + Object.getOwnPropertyNames(this.config.viewport.animations).forEach((animation: string) => { + if (!skeletonData.findAnimation(animation)) { + this.showError(`Error: animation '${animation}' for which a viewport was specified does not exist in skeleton.`); + return; + } + }); + } + + // Setup the animations after viewport, so default bounds don't get messed up. + if (this.config.animations && this.config.animations.length > 0) { + this.config.animations.forEach(animation => { + if (!this.skeleton.data.findAnimation(animation)) { + this.showError(`Error: animation '${animation}' in selectable animation list does not exist in skeleton.`); + return; + } + }); + + if (!this.config.animation) { + this.config.animation = this.config.animations[0]; + } + } + + if (!this.config.animation) { + if (skeletonData.animations.length > 0) { + this.config.animation = skeletonData.animations[0].name; + } + } + + if(this.config.animation) { + if (!skeletonData.findAnimation(this.config.animation)) { + this.showError(`Error: animation '${this.config.animation}' does not exist in skeleton.`); + return; + } + this.play() + this.timelineSlider.change = (percentage) => { + this.pause(); + var animationDuration = this.animationState.getCurrent(0).animation.duration; + var time = animationDuration * percentage; + this.animationState.update(time - this.playTime); + this.animationState.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + this.playTime = time; + } + } + + // Setup the input processor and controllable bones + this.setupInput(); + + // Hide skin and animation if there's only the default skin / no animation + if (skeletonData.skins.length == 1 || (this.config.skins && this.config.skins.length == 1)) this.skinButton.classList.add("spine-player-hidden"); + if (skeletonData.animations.length == 1 || (this.config.animations && this.config.animations.length == 1)) this.animationButton.classList.add("spine-player-hidden"); + + this.config.success(this); + this.loaded = true; + } + + private cancelId = 0; + setupInput () { + let controlBones = this.config.controlBones; + let selectedBones = this.selectedBones = new Array(this.config.controlBones.length); + let canvas = this.canvas; + let input = new spine.webgl.Input(canvas); + var target:Bone = null; + let coords = new spine.webgl.Vector3(); + let temp = new spine.webgl.Vector3(); + let temp2 = new spine.Vector2(); + let skeleton = this.skeleton + let renderer = this.sceneRenderer; + input.addListener({ + down: (x, y) => { + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + if (!bone) continue; + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + target = bone; + } + } + }, + up: (x, y) => { + if (target) { + target = null; + } else { + if (!this.config.showControls) return; + if (this.paused) + this.play() + else + this.pause(); + } + }, + dragged: (x, y) => { + if (target != null) { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (target.parent !== null) { + target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y)); + target.x = temp2.x; + target.y = temp2.y; + } else { + target.x = coords.x - skeleton.x; + target.y = coords.y - skeleton.y; + } + } + }, + moved: (x, y) => { + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + if (!bone) continue; + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + selectedBones[i] = bone; + } else { + selectedBones[i] = null; + } + } + } + }); + + // For the manual hover to work, we need to disable + // hidding the controls if the mouse/touch entered + // the clickable area of a child of the controls. + // For this we need to register a mouse handler on + // the document and see if we are within the canvas + // area :/ + var mouseOverControls = true; + var mouseOverCanvas = false; + document.addEventListener("mousemove", (ev: UIEvent) => { + if (ev instanceof MouseEvent) { + handleHover(ev.clientX, ev.clientY); + } + }); + document.addEventListener("touchmove", (ev: UIEvent) => { + if (ev instanceof TouchEvent) { + var touches = ev.changedTouches; + if (touches.length > 0) { + var touch = touches[0]; + handleHover(touch.clientX, touch.clientY); + } + } + }); + + let handleHover = (mouseX: number, mouseY: number) => { + if (!this.config.showControls) return; + + let popup = findWithClass(this.dom, "spine-player-popup"); + mouseOverControls = overlap(mouseX, mouseY, this.playerControls.getBoundingClientRect()); + mouseOverCanvas = overlap(mouseX, mouseY, this.canvas.getBoundingClientRect()); + clearTimeout(this.cancelId); + let hide = popup.length == 0 && !mouseOverControls && !mouseOverCanvas && !this.paused; + if (hide) { + this.playerControls.classList.add("spine-player-controls-hidden"); + } else { + this.playerControls.classList.remove("spine-player-controls-hidden"); + } + if (!mouseOverControls && popup.length == 0 && !this.paused) { + let remove = () => { + if (!this.paused) this.playerControls.classList.add("spine-player-controls-hidden"); + }; + this.cancelId = setTimeout(remove, 1000); + } + } + + let overlap = (mouseX: number, mouseY: number, rect: DOMRect | ClientRect): boolean => { + let x = mouseX - rect.left; + let y = mouseY - rect.top; + return x >= 0 && x <= rect.width && y >= 0 && y <= rect.height; + } + } + + private play () { + this.paused = false; + let remove = () => { + if (!this.paused) this.playerControls.classList.add("spine-player-controls-hidden"); + }; + this.cancelId = setTimeout(remove, 1000); + this.playButton.classList.remove("spine-player-button-icon-play"); + this.playButton.classList.add("spine-player-button-icon-pause"); + + if (this.config.animation) { + if (!this.animationState.getCurrent(0)) { + this.setAnimation(this.config.animation); + } + } + } + + private pause () { + this.paused = true; + this.playerControls.classList.remove("spine-player-controls-hidden"); + clearTimeout(this.cancelId); + + this.playButton.classList.remove("spine-player-button-icon-pause"); + this.playButton.classList.add("spine-player-button-icon-play"); + } + + public setAnimation (animation: string, loop: boolean = true) { + // Determine viewport + this.previousViewport = this.currentViewport; + let animViewport = this.calculateAnimationViewport(animation); + + // The calculated animation viewport is the base + let viewport: Viewport = { + x: animViewport.x, + y: animViewport.y, + width: animViewport.width, + height: animViewport.height, + padLeft: "10%", + padRight: "10%", + padTop: "10%", + padBottom: "10%" + } + + // Override with global viewport settings if they exist + let globalViewport = this.config.viewport; + if (typeof globalViewport.x !== "undefined" && typeof globalViewport.y !== "undefined" && typeof globalViewport.width !== "undefined" && typeof globalViewport.height !== "undefined") { + viewport.x = globalViewport.x; + viewport.y = globalViewport.y; + viewport.width = globalViewport.width; + viewport.height = globalViewport.height; + } + if (typeof globalViewport.padLeft !== "undefined") viewport.padLeft = globalViewport.padLeft; + if (typeof globalViewport.padRight !== "undefined") viewport.padRight = globalViewport.padRight; + if (typeof globalViewport.padTop !== "undefined") viewport.padTop = globalViewport.padTop; + if (typeof globalViewport.padBottom !== "undefined") viewport.padBottom = globalViewport.padBottom; + + // Override with animation viewport settings given by user for final result. + let userAnimViewport = this.config.viewport.animations[animation]; + if (userAnimViewport) { + if (typeof userAnimViewport.x !== "undefined" && typeof userAnimViewport.y !== "undefined" && typeof userAnimViewport.width !== "undefined" && typeof userAnimViewport.height !== "undefined") { + viewport.x = userAnimViewport.x; + viewport.y = userAnimViewport.y; + viewport.width = userAnimViewport.width; + viewport.height = userAnimViewport.height; + } + if (typeof userAnimViewport.padLeft !== "undefined") viewport.padLeft = userAnimViewport.padLeft; + if (typeof userAnimViewport.padRight !== "undefined") viewport.padRight = userAnimViewport.padRight; + if (typeof userAnimViewport.padTop !== "undefined") viewport.padTop = userAnimViewport.padTop; + if (typeof userAnimViewport.padBottom !== "undefined") viewport.padBottom = userAnimViewport.padBottom; + } + + // Translate percentage paddings to world units + viewport.padLeft = this.percentageToWorldUnit(viewport.width, viewport.padLeft); + viewport.padRight = this.percentageToWorldUnit(viewport.width, viewport.padRight); + viewport.padBottom = this.percentageToWorldUnit(viewport.height, viewport.padBottom); + viewport.padTop = this.percentageToWorldUnit(viewport.height, viewport.padTop); + + // Adjust x, y, width, and height by padding. + this.currentViewport = viewport; + this.viewportTransitionStart = performance.now(); + + this.animationState.clearTracks(); + this.skeleton.setToSetupPose(); + this.animationState.setAnimation(0, animation, loop); + } + + private percentageToWorldUnit(size: number, percentageOrAbsolute: string | number): number { + if (typeof percentageOrAbsolute === "string") { + return size * parseFloat(percentageOrAbsolute.substr(0, percentageOrAbsolute.length - 1)) / 100; + } else { + return percentageOrAbsolute; + } + } + + private calculateAnimationViewport (animationName: string) { + let animation = this.skeleton.data.findAnimation(animationName); + this.animationState.clearTracks(); + this.skeleton.setToSetupPose() + this.animationState.setAnimationWith(0, animation, true); + + let steps = 100; + let stepTime = animation.duration > 0 ? animation.duration / steps : 0; + let minX = 100000000; + let maxX = -100000000; + let minY = 100000000; + let maxY = -100000000; + let offset = new spine.Vector2(); + let size = new spine.Vector2(); + + for (var i = 0; i < steps; i++) { + this.animationState.update(stepTime); + this.animationState.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + this.skeleton.getBounds(offset, size); + + if (!isNaN(offset.x) && !isNaN(offset.y) && !isNaN(size.x) && !isNaN(size.y)) { + minX = Math.min(offset.x, minX); + maxX = Math.max(offset.x + size.x, maxX); + minY = Math.min(offset.y, minY); + maxY = Math.max(offset.y + size.y, maxY); + } else { + console.log("Bounds of animation " + animationName + " are NaN"); + } + } + + offset.x = minX; + offset.y = minY; + size.x = maxX - minX; + size.y = maxY - minY; + + return { + x: offset.x, + y: offset.y, + width: size.x, + height: size.y + }; + } + + public stopRendering() { + this.stopRequestAnimationFrame = true; + } + } + + function isContained(dom: HTMLElement, needle: HTMLElement): boolean { + if (dom === needle) return true; + let findRecursive = (dom: HTMLElement, needle: HTMLElement) => { + for(var i = 0; i < dom.children.length; i++) { + let child = dom.children[i] as HTMLElement; + if (child === needle) return true; + if (findRecursive(child, needle)) return true; + } + return false; + }; + return findRecursive(dom, needle); + } + + function findWithId(dom: HTMLElement, id: string): HTMLElement[] { + let found = new Array() + let findRecursive = (dom: HTMLElement, id: string, found: HTMLElement[]) => { + for(var i = 0; i < dom.children.length; i++) { + let child = dom.children[i] as HTMLElement; + if (child.id === id) found.push(child); + findRecursive(child, id, found); + } + }; + findRecursive(dom, id, found); + return found; + } + + function findWithClass(dom: HTMLElement, className: string): HTMLElement[] { + let found = new Array() + let findRecursive = (dom: HTMLElement, className: string, found: HTMLElement[]) => { + for(var i = 0; i < dom.children.length; i++) { + let child = dom.children[i] as HTMLElement; + if (child.classList.contains(className)) found.push(child); + findRecursive(child, className, found); + } + }; + findRecursive(dom, className, found); + return found; + } + + function createElement(html: string): HTMLElement { + let dom = document.createElement("div"); + dom.innerHTML = html; + return dom.children[0] as HTMLElement; + } + + function removeClass(elements: HTMLCollection, clazz: string) { + for (var i = 0; i < elements.length; i++) { + elements[i].classList.remove(clazz); + } + } + + function escapeHtml(str: string) { + if (!str) return ""; + return str + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + } + } diff --git a/apps/module-ts/src/spine-ts/player/src/PlayerEditor.ts b/apps/module-ts/src/spine-ts/player/src/PlayerEditor.ts new file mode 100755 index 0000000..91713bd --- /dev/null +++ b/apps/module-ts/src/spine-ts/player/src/PlayerEditor.ts @@ -0,0 +1,119 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +declare function CodeMirror(el: Element, config: any): void; + +module spine { + export class SpinePlayerEditor { + private static DEFAULT_CODE = + ` + + + +
                    + + + `.trim(); + + private prefix: string = +` + + + +`.trim() + private postfix: string = ``; + private code: any; + private player: HTMLIFrameElement; + + constructor(parent: HTMLElement) { + this.render(parent); + } + + private render (parent: HTMLElement) { + let dom = /*html*/` +
                    +
                    + +
                    + `; + parent.innerHTML = dom; + let codeElement = parent.getElementsByClassName("spine-player-editor-code")[0]; + this.player = parent.getElementsByClassName("spine-player-editor-player")[0] as HTMLIFrameElement; + + requestAnimationFrame(() => { + this.code = CodeMirror(codeElement, { + lineNumbers: true, + tabSize: 3, + indentUnit: 3, + indentWithTabs: true, + scrollBarStyle: "native", + mode: "htmlmixed", + theme: "monokai" + }); + this.code.on("change", () => { + this.startPlayer(); + }); + + this.setCode(SpinePlayerEditor.DEFAULT_CODE); + }) + } + + setPreAndPostfix(prefix: string, postfix: string) { + this.prefix = prefix; + this.postfix = postfix; + this.startPlayer() + } + + setCode(code: string) { + this.code.setValue(code); + this.startPlayer(); + } + + private timerId = 0; + startPlayer() { + clearTimeout(this.timerId); + this.timerId = setTimeout( () => { + let code = this.code.getDoc().getValue(); + code = this.prefix + code + this.postfix; + code = window.btoa(code); + this.player.src = ""; + this.player.src = "data:text/html;base64," + code; + }, 500); + } + } +} diff --git a/apps/module-ts/src/spine-ts/threejs/example/assets/raptor-pro.json b/apps/module-ts/src/spine-ts/threejs/example/assets/raptor-pro.json new file mode 100755 index 0000000..23920f0 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/example/assets/raptor-pro.json @@ -0,0 +1,3444 @@ +{ +"skeleton": { + "hash": "JHJJgNYXlhOA6Mx224y3i9qDC5M", + "spine": "3.8.99", + "x": -809.16, + "y": -73.54, + "width": 1280.26, + "height": 1039.44, + "images": "./images/", + "audio": "" +}, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "rotation": 8.96, "x": -122.52, "y": 392.65, "color": "fbff00ff" }, + { + "name": "torso1", + "parent": "hip", + "length": 126.26, + "rotation": -4.98, + "x": 30.04, + "y": -0.4, + "color": "eaff00ff" + }, + { + "name": "saddle", + "parent": "torso1", + "length": 50.92, + "rotation": 91.8, + "x": 25.31, + "y": 70.65, + "color": "ff7300ff" + }, + { + "name": "spineboy-hip", + "parent": "saddle", + "length": 0.53, + "rotation": 90.02, + "x": 81.88, + "y": 2.69, + "color": "e8ff00ff" + }, + { + "name": "spineboy-torso", + "parent": "spineboy-hip", + "length": 122.45, + "rotation": -75.86, + "x": 1.05, + "y": -2.11, + "color": "e8ff00ff" + }, + { + "name": "torso2", + "parent": "torso1", + "length": 121.2, + "rotation": 39.85, + "x": 126.26, + "y": -0.38, + "color": "e9ff00ff" + }, + { + "name": "neck", + "parent": "torso2", + "length": 70.6, + "rotation": 41.38, + "x": 121.2, + "y": 0.35, + "color": "eaff00ff" + }, + { + "name": "head", + "parent": "neck", + "length": 105.51, + "rotation": 9.83, + "x": 70.6, + "y": 0.04, + "color": "eaff00ff" + }, + { + "name": "horn-back", + "parent": "head", + "length": 73.78, + "rotation": 44.32, + "x": 104.76, + "y": -242.01, + "color": "e07800ff" + }, + { "name": "spineboy-back-arm-target", "parent": "horn-back", "rotation": -133.55, "x": 232.68, "y": 245.85, "color": "ff3f00ff" }, + { + "name": "back-arm", + "parent": "spineboy-torso", + "length": 67.21, + "rotation": -120.9, + "x": 96.33, + "y": -38.47, + "color": "e07800ff" + }, + { + "name": "back-bracer", + "parent": "back-arm", + "length": 43.69, + "rotation": 17.48, + "x": 67.22, + "y": -0.32, + "color": "e07800ff" + }, + { + "name": "back-arm1", + "parent": "torso2", + "length": 109.56, + "rotation": -124.72, + "x": 83.68, + "y": -83.24, + "color": "e07800ff" + }, + { + "name": "back-arm2", + "parent": "back-arm1", + "length": 85.8, + "rotation": 123.56, + "x": 109.57, + "y": -0.01, + "color": "e07800ff" + }, + { "name": "back-foot-target", "parent": "root", "x": 33.44, "y": 30.82, "color": "ff3f00ff" }, + { "name": "back-leg-target", "parent": "back-foot-target", "x": -127.51, "y": 75.99, "color": "ff3f00ff" }, + { + "name": "back-leg1", + "parent": "hip", + "length": 226.28, + "rotation": -54.76, + "x": 55.19, + "y": -71.25, + "color": "e07800ff" + }, + { + "name": "back-leg2", + "parent": "back-leg1", + "length": 172.59, + "rotation": -92.25, + "x": 226.32, + "y": 0.23, + "color": "e07800ff" + }, + { + "name": "back-leg3", + "parent": "back-leg2", + "length": 103.05, + "rotation": 82.82, + "x": 172.32, + "y": 2.21, + "color": "e07800ff" + }, + { + "name": "back-foot1", + "parent": "back-leg3", + "length": 84.51, + "rotation": 75.43, + "x": 102.38, + "y": -0.03, + "color": "e07800ff" + }, + { + "name": "back-foot2", + "parent": "back-foot1", + "length": 102.31, + "rotation": -6.14, + "x": 84.5, + "y": -0.35, + "transform": "noRotationOrReflection", + "color": "e07800ff" + }, + { + "name": "back-hand", + "parent": "back-arm2", + "length": 45.81, + "rotation": -76.28, + "x": 85.8, + "y": 0.11, + "color": "e07800ff" + }, + { + "name": "back-hand2", + "parent": "spineboy-back-arm-target", + "length": 41.98, + "rotation": 27.78, + "x": -0.03, + "y": 0.05, + "transform": "noRotationOrReflection", + "color": "e07800ff" + }, + { "name": "spineboy-back-foot-target", "parent": "saddle", "x": -30.44, "y": -100.08, "color": "ff3f00ff" }, + { + "name": "back-thigh", + "parent": "spineboy-hip", + "length": 71.16, + "rotation": 160.75, + "x": -9.57, + "y": 2.32, + "color": "e07800ff" + }, + { + "name": "back-knee", + "parent": "back-thigh", + "length": 97.17, + "rotation": -54.98, + "x": 71.16, + "y": -0.28, + "color": "e07800ff" + }, + { + "name": "neck2", + "parent": "spineboy-torso", + "length": 32.05, + "rotation": -45.23, + "x": 113.44, + "y": -15.22, + "color": "e8ff00ff" + }, + { + "name": "head2", + "parent": "neck2", + "length": 167.19, + "rotation": 11.66, + "x": 25.68, + "y": -0.77, + "color": "e7ff00ff" + }, + { + "name": "bone", + "parent": "head2", + "length": 39.92, + "rotation": -35.23, + "x": 166.09, + "y": -79.27, + "color": "e7ff00ff" + }, + { "name": "bone2", "parent": "bone", "length": 47.42, "rotation": 51.8, "x": 39.92, "color": "e7ff00ff" }, + { + "name": "bone3", + "parent": "head2", + "length": 45.41, + "rotation": -12.34, + "x": 179.8, + "y": -20.91, + "color": "e7ff00ff" + }, + { + "name": "bone4", + "parent": "bone3", + "length": 43.31, + "rotation": 42.01, + "x": 44.64, + "y": 0.3, + "color": "e7ff00ff" + }, + { "name": "bone5", "parent": "bone4", "length": 44.88, "rotation": 48.8, "x": 43.31, "color": "e7ff00ff" }, + { + "name": "horn-front", + "parent": "head", + "length": 87.48, + "rotation": 49.36, + "x": 87.97, + "y": -235.15, + "color": "15ff00ff" + }, + { "name": "spineboy-front-arm-target", "parent": "horn-front", "rotation": -138.6, "x": 294.58, "y": 234.18, "color": "ff3f00ff" }, + { + "name": "front-arm", + "parent": "spineboy-torso", + "length": 74.52, + "rotation": -118.17, + "x": 101.38, + "y": 9.79, + "color": "14ff00ff" + }, + { + "name": "front-bracer", + "parent": "front-arm", + "length": 39.85, + "rotation": 20.31, + "x": 74.52, + "y": -0.42, + "color": "14ff00ff" + }, + { + "name": "front-arm1", + "parent": "torso2", + "length": 109.99, + "rotation": 224.54, + "x": 73, + "y": -72.46, + "color": "15ff00ff" + }, + { + "name": "front-arm2", + "parent": "front-arm1", + "length": 86.33, + "rotation": 105.24, + "x": 109.99, + "y": 0.2, + "color": "15ff00ff" + }, + { "name": "front-foot-target", "parent": "root", "rotation": -6.96, "x": -45.8, "y": -28.67, "color": "ff3f00ff" }, + { "name": "front-leg-target", "parent": "front-foot-target", "x": -106.06, "y": 115.58, "color": "ff3f00ff" }, + { + "name": "front-leg1", + "parent": "hip", + "length": 251.75, + "rotation": -51.51, + "x": 27.36, + "y": -28.28, + "color": "15ff00ff" + }, + { + "name": "front-leg2", + "parent": "front-leg1", + "length": 208.55, + "rotation": 261.94, + "x": 251.04, + "y": 0.16, + "color": "15ff00ff" + }, + { + "name": "front-leg3", + "parent": "front-leg2", + "length": 118.18, + "rotation": 85.46, + "x": 208.5, + "y": -1.64, + "color": "15ff00ff" + }, + { + "name": "front-foot1", + "parent": "front-leg3", + "length": 57.79, + "rotation": 54.46, + "x": 118.2, + "y": -0.79, + "color": "15ff00ff" + }, + { + "name": "front-foot2", + "parent": "front-foot1", + "length": 56.19, + "rotation": -2.16, + "x": 57.79, + "y": -0.02, + "scaleX": 0.731, + "scaleY": 0.823, + "transform": "onlyTranslation", + "color": "15ff00ff" + }, + { + "name": "front-foot3", + "parent": "front-foot2", + "length": 129.88, + "rotation": -2.7, + "x": 49.71, + "y": 20.66, + "scaleX": 1.155, + "color": "15ff00ff" + }, + { + "name": "front-hand", + "parent": "front-arm2", + "length": 47.56, + "rotation": -56.83, + "x": 86.33, + "y": 0.06, + "color": "15ff00ff" + }, + { + "name": "front-hand2", + "parent": "front-bracer", + "length": 58.19, + "rotation": 17.31, + "x": 42.72, + "y": -2.77, + "transform": "noRotationOrReflection", + "color": "14ff00ff" + }, + { "name": "spineboy-front-foot-target", "parent": "saddle", "x": -50.71, "y": -96.93, "color": "ff3f00ff" }, + { + "name": "front-thigh", + "parent": "spineboy-hip", + "length": 77.79, + "rotation": 163.34, + "x": 15.52, + "y": 17.02, + "color": "14ff00ff" + }, + { + "name": "lower-leg", + "parent": "front-thigh", + "length": 111.5, + "rotation": -49.62, + "x": 77.93, + "y": -0.11, + "color": "14ff00ff" + }, + { + "name": "gun", + "parent": "spineboy-hip", + "length": 181.35, + "rotation": 107.12, + "x": 16.86, + "y": -7.89, + "scaleX": 0.816, + "scaleY": 0.816, + "color": "ffffffff" + }, + { + "name": "jaw", + "parent": "head", + "length": 203.76, + "rotation": -129.48, + "x": 49.11, + "y": -68.46, + "color": "ffff00ff" + }, + { "name": "jaw-inside", "parent": "jaw", "x": 94.7, "y": 33.64, "color": "ffff00ff" }, + { + "name": "saddle-strap-back", + "parent": "saddle", + "length": 74.6, + "rotation": 151.14, + "x": -33.34, + "y": 87.33, + "color": "ff7300ff" + }, + { + "name": "saddle-strap-front", + "parent": "saddle", + "length": 154.29, + "rotation": -148.12, + "x": -27.36, + "y": -73.39, + "color": "ff7300ff" + }, + { + "name": "stirrup", + "parent": "saddle", + "length": 78.17, + "rotation": -68.86, + "x": -81.94, + "y": -103.38, + "color": "ff3f00ff" + }, + { + "name": "stirrup-strap1", + "parent": "saddle", + "length": 43.7, + "rotation": -135, + "x": -20.38, + "y": -29.37, + "color": "ff7300ff" + }, + { "name": "stirrup-strap2", "parent": "stirrup-strap1", "length": 51.62, "rotation": 9.39, "x": 43.71, "color": "ff7300ff" }, + { + "name": "tail1", + "parent": "hip", + "length": 81.26, + "rotation": 153.61, + "x": -20.87, + "y": 6.87, + "color": "eaff00ff" + }, + { "name": "tail2", "parent": "tail1", "length": 81.26, "rotation": 10.42, "x": 81.26, "color": "eaff00ff" }, + { "name": "tail3", "parent": "tail2", "length": 65.01, "rotation": 12.18, "x": 81.26, "color": "eaff00ff" }, + { "name": "tail4", "parent": "tail3", "length": 65.01, "x": 65.01, "color": "eaff00ff" }, + { "name": "tail5", "parent": "tail4", "length": 70.53, "rotation": 4.36, "x": 65.01, "color": "eaff00ff" }, + { "name": "tail6", "parent": "tail5", "length": 70.53, "x": 70.53, "color": "eaff00ff" }, + { "name": "tail7", "parent": "tail6", "length": 63.13, "rotation": 2.35, "x": 70.53, "color": "eaff00ff" }, + { "name": "tail8", "parent": "tail7", "length": 54.46, "rotation": 0.97, "x": 63.13, "color": "eaff00ff" }, + { "name": "tail9", "parent": "tail8", "length": 49.21, "rotation": -1.29, "x": 54.46, "color": "eaff00ff" }, + { "name": "tail10", "parent": "tail9", "length": 45.53, "rotation": 0.36, "x": 49.21, "color": "eaff00ff" }, + { + "name": "tongue1", + "parent": "head", + "length": 55.12, + "rotation": -129.04, + "x": 20.82, + "y": -104.75, + "color": "ffff00ff" + }, + { + "name": "tongue2", + "parent": "tongue1", + "length": 44.67, + "rotation": 8.93, + "x": 55.6, + "y": 0.93, + "color": "fff200ff" + }, + { + "name": "tongue3", + "parent": "tongue2", + "length": 43.65, + "rotation": 12.86, + "x": 44.27, + "y": -0.21, + "color": "fff200ff" + } +], +"slots": [ + { "name": "back-hand", "bone": "back-hand2", "attachment": "back-hand" }, + { "name": "back-arm", "bone": "back-arm", "attachment": "back-arm" }, + { "name": "back-bracer", "bone": "back-bracer", "attachment": "back-bracer" }, + { "name": "back-knee", "bone": "back-knee", "attachment": "back-knee" }, + { "name": "raptor-jaw-inside", "bone": "jaw-inside", "color": "646464ff", "attachment": "raptor-jaw2" }, + { "name": "raptor-mouth-inside", "bone": "jaw", "attachment": "raptor-mouth-inside" }, + { "name": "raptor-horn-back", "bone": "horn-back", "attachment": "raptor-horn-back" }, + { "name": "raptow-jaw-tooth", "bone": "jaw", "attachment": "raptor-jaw-tooth" }, + { "name": "raptor-tongue", "bone": "tongue1", "attachment": "raptor-tongue" }, + { "name": "raptor-hindleg-back", "bone": "back-leg1", "attachment": "raptor-hindleg-back" }, + { "name": "raptor-back-arm", "bone": "back-arm1", "attachment": "raptor-back-arm" }, + { "name": "back-thigh", "bone": "back-thigh", "attachment": "back-thigh" }, + { "name": "raptor-body", "bone": "torso1", "attachment": "raptor-body" }, + { "name": "raptor-saddle-strap-front", "bone": "saddle-strap-front", "attachment": "raptor-saddle-strap-front" }, + { "name": "raptor-saddle-strap-back", "bone": "saddle-strap-back", "attachment": "raptor-saddle-strap-back" }, + { "name": "raptor-saddle", "bone": "saddle", "attachment": "raptor-saddle-w-shadow" }, + { "name": "raptor-jaw", "bone": "jaw", "attachment": "raptor-jaw" }, + { "name": "raptor-front-arm", "bone": "front-arm1", "attachment": "raptor-front-arm" }, + { "name": "raptor-front-leg", "bone": "front-leg1", "attachment": "raptor-front-leg" }, + { "name": "neck", "bone": "neck2", "attachment": "neck" }, + { "name": "spineboy-torso", "bone": "spineboy-torso", "attachment": "torso" }, + { "name": "head", "bone": "head2", "attachment": "head" }, + { "name": "eyes-open", "bone": "head2", "attachment": "eyes-open" }, + { "name": "mouth-smile", "bone": "head2", "attachment": "mouth-smile" }, + { "name": "visor", "bone": "head2", "attachment": "visor" }, + { "name": "raptor-horn", "bone": "horn-front", "attachment": "raptor-horn" }, + { "name": "front-thigh", "bone": "front-thigh", "attachment": "front-thigh" }, + { "name": "stirrup-back", "bone": "stirrup", "attachment": "stirrup-back" }, + { "name": "lower-leg", "bone": "lower-leg", "attachment": "lower-leg" }, + { "name": "stirrup-strap", "bone": "stirrup", "attachment": "stirrup-strap" }, + { "name": "stirrup-front", "bone": "stirrup", "attachment": "stirrup-front" }, + { "name": "gun", "bone": "gun", "attachment": "gun-nohand" }, + { "name": "front-arm", "bone": "front-arm", "attachment": "front-arm" }, + { "name": "front-bracer", "bone": "front-bracer", "attachment": "front-bracer" }, + { "name": "front-hand", "bone": "front-hand2", "attachment": "front-hand" }, + { "name": "tail-shadow", "bone": "torso1", "color": "00000000" } +], +"ik": [ + { + "name": "back-foot-ik", + "order": 3, + "bones": [ "back-leg3", "back-foot1" ], + "target": "back-foot-target" + }, + { + "name": "back-leg-ik", + "order": 2, + "bones": [ "back-leg1", "back-leg2" ], + "target": "back-leg-target", + "bendPositive": false + }, + { + "name": "front-foot-ik", + "order": 1, + "bones": [ "front-leg3", "front-foot1" ], + "target": "front-foot-target" + }, + { + "name": "front-leg-ik", + "bones": [ "front-leg1", "front-leg2" ], + "target": "front-leg-target", + "bendPositive": false + }, + { + "name": "spineboy-back-arm-ik", + "order": 8, + "bones": [ "back-arm", "back-bracer" ], + "target": "spineboy-back-arm-target" + }, + { + "name": "spineboy-back-leg-ik", + "order": 5, + "bones": [ "back-thigh", "back-knee" ], + "target": "spineboy-back-foot-target", + "bendPositive": false + }, + { + "name": "spineboy-front-arm-ik", + "order": 7, + "bones": [ "front-arm", "front-bracer" ], + "target": "spineboy-front-arm-target" + }, + { + "name": "spineboy-front-leg-ik", + "order": 4, + "bones": [ "front-thigh", "lower-leg" ], + "target": "spineboy-front-foot-target", + "bendPositive": false + }, + { + "name": "stirrup", + "order": 6, + "bones": [ "stirrup-strap1", "stirrup-strap2" ], + "target": "stirrup" + } +], +"skins": [ + { + "name": "default", + "attachments": { + "back-arm": { + "back-arm": { "x": 28.57, "y": -12.03, "rotation": 16.76, "width": 91, "height": 49 } + }, + "back-bracer": { + "back-bracer": { "x": 13.2, "y": -4.28, "rotation": -0.73, "width": 77, "height": 55 } + }, + "back-hand": { + "back-hand": { "x": 18.61, "y": 4.24, "rotation": -10.99, "width": 72, "height": 68 } + }, + "back-knee": { + "back-knee": { "x": 45.77, "y": 20.47, "rotation": 74.23, "width": 97, "height": 134 } + }, + "back-thigh": { + "back-thigh": { "x": 37.85, "y": -4.37, "rotation": 19.25, "width": 78, "height": 47 } + }, + "eyes-open": { + "eyes-open": { "x": 93.24, "y": -25.45, "rotation": -70.58, "width": 93, "height": 89 } + }, + "front-arm": { + "front-arm": { "x": 33.68, "y": -1.53, "rotation": 14.02, "width": 96, "height": 51 } + }, + "front-bracer": { + "front-bracer": { "x": 11.68, "y": -1.37, "rotation": -6.28, "width": 81, "height": 58 } + }, + "front-hand": { + "front-hand": { "x": 35.7, "y": 7.84, "rotation": -13.97, "width": 82, "height": 75 }, + "front-open-hand": { "x": 42.55, "y": 4.62, "rotation": 62.19, "width": 86, "height": 87 }, + "gun": { "x": 98.91, "y": 22.98, "rotation": 56.35, "width": 213, "height": 206 } + }, + "front-thigh": { + "front-thigh": { "x": 45.7, "y": -3.1, "rotation": 16.66, "width": 114, "height": 58 } + }, + "gun": { + "gun-nohand": { "x": 54.65, "y": -24.93, "rotation": 55.2, "width": 210, "height": 203 } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.73461, 0.04542, 0.88414, 0.17033, 0.88955, 0.31976, 0.91126, 0.27463, 0.9461, 0.20217, 1, 0.29892, 1, 0.34554, 1, 0.4508, 0.91249, 0.51206, 0.84514, 0.51207, 0.8209, 0.59663, 0.77915, 0.67257, 0.73605, 0.75464, 0.83571, 0.73994, 0.84784, 0.84528, 0.7549, 0.93101, 0.63773, 1, 0.39394, 1, 0.14747, 0.82935, 0, 0.59419, 0, 0.36645, 0.09623, 0.20353, 0.21474, 0.14594, 0.45179, 0.15693, 0.51509, 0.1263, 0.507, 0.07853, 0.42079, 0, 0.56221, 0, 0.19055, 0.39949, 0.27942, 0.31373, 0.79396, 0.479, 0.76029, 0.85997, 0.53421, 0.16964, 0.53207, 0.04286, 0.61949, 0.08784, 0.70424, 0.16685, 0.69053, 0.432, 0.85592, 0.37861, 0.45844, 0.34997, 0.48658, 0.30193, 0.66307, 0.35065, 0.58439, 0.39448, 0.70468, 0.26242, 0.51985, 0.21924 ], + "triangles": [ 23, 24, 32, 32, 24, 34, 35, 34, 0, 34, 25, 33, 34, 24, 25, 33, 27, 34, 34, 27, 0, 25, 26, 33, 33, 26, 27, 32, 35, 42, 35, 0, 1, 32, 34, 35, 36, 40, 37, 40, 42, 37, 37, 42, 2, 40, 43, 42, 2, 42, 1, 43, 32, 42, 42, 35, 1, 7, 37, 6, 37, 2, 6, 6, 2, 5, 2, 3, 5, 3, 4, 5, 8, 37, 7, 10, 36, 30, 10, 11, 36, 15, 16, 31, 18, 12, 17, 38, 18, 28, 12, 31, 16, 12, 41, 36, 41, 12, 18, 41, 18, 38, 38, 28, 29, 15, 31, 14, 12, 16, 17, 14, 31, 13, 31, 12, 13, 18, 19, 28, 12, 36, 11, 19, 20, 28, 29, 28, 21, 38, 39, 41, 28, 20, 21, 39, 43, 40, 38, 29, 39, 21, 22, 29, 29, 22, 39, 22, 23, 39, 39, 23, 43, 43, 23, 32, 41, 39, 40, 10, 30, 9, 41, 40, 36, 8, 9, 37, 9, 30, 37, 30, 36, 37 ], + "vertices": [ 2, 32, 58.33, -14.31, 0.30205, 33, -0.88, -20.72, 0.69795, 3, 30, 69.21, 19.04, 0.07711, 31, 87.24, -25.34, 0.8077, 32, 14.49, -47.57, 0.11518, 3, 29, 43.19, 28.99, 0.10855, 30, 24.81, 15.35, 0.61823, 31, 50.15, -50.03, 0.27322, 1, 30, 38.53, 10.15, 1, 1, 30, 60.57, 1.79, 1, 1, 30, 32.5, -14.23, 1, 1, 30, 18.62, -14.92, 1, 2, 29, 45.01, -20.18, 0.76042, 30, -12.71, -16.48, 0.23958, 1, 28, 166.12, -105.42, 1, 1, 28, 160.05, -88.21, 1, 1, 28, 134.1, -90.39, 1, 1, 28, 108.99, -87.24, 1, 1, 28, 82.04, -84.36, 1, 1, 28, 95.16, -108.38, 1, 1, 28, 66.64, -121.91, 1, 1, 28, 34.17, -106.65, 1, 1, 28, 4.23, -83.54, 1, 1, 28, -17.74, -21.23, 1, 1, 28, 8.01, 58.67, 1, 1, 28, 60.82, 119.66, 1, 1, 28, 124.82, 142.22, 1, 1, 28, 179.28, 133.77, 1, 1, 28, 206.14, 109.19, 1, 3, 28, 224.42, 47.51, 0.55599, 32, 39.26, 67.02, 0.19527, 33, 47.76, 47.19, 0.24873, 3, 28, 238.73, 34.37, 0.20521, 32, 45.19, 48.52, 0.20866, 33, 37.74, 30.54, 0.58612, 2, 32, 59.59, 48.14, 0.05508, 33, 46.95, 19.46, 0.94492, 1, 33, 79.02, 11.41, 1, 1, 33, 46.15, -8.3, 1, 1, 28, 132.71, 90.25, 1, 1, 28, 164.81, 76.03, 1, 1, 28, 164.73, -71.85, 1, 1, 28, 54.62, -100.99, 1, 3, 28, 228.27, 25.19, 0.29316, 32, 31.56, 45.72, 0.3088, 33, 26.66, 38.96, 0.39805, 1, 33, 46.59, 6.85, 1, 2, 32, 51.44, 18.64, 0.07922, 33, 19.38, 6.16, 0.92078, 1, 32, 24.18, 0.23, 1, 1, 28, 168.62, -40.76, 1, 3, 29, 25.61, 19.96, 0.50536, 30, 6.84, 23.59, 0.2645, 31, 30.44, -51.51, 0.23014, 1, 28, 170.76, 26.69, 1, 4, 28, 186.8, 24.26, 0.75057, 31, -2.82, 45.62, 0.07609, 32, -4.94, 65.43, 0.10488, 33, 17.45, 79.4, 0.06845, 1, 31, 10.01, -2.69, 1, 1, 28, 169.6, -9.91, 1, 1, 31, 38.3, 1.56, 1, 4, 28, 213.04, 23.94, 0.43153, 31, 22.88, 50.92, 0.09832, 32, 17.71, 52.17, 0.26174, 33, 22.39, 53.63, 0.20841 ], + "hull": 28, + "edges": [ 10, 8, 4, 2, 2, 0, 0, 54, 52, 54, 52, 50, 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 56, 56, 58, 60, 18, 18, 16, 16, 14, 38, 40, 38, 36, 36, 34, 32, 34, 32, 30, 30, 62, 62, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, 18, 28, 30, 48, 64, 50, 66, 66, 54, 0, 68, 68, 48, 66, 68, 2, 70, 70, 64, 68, 70, 72, 60, 10, 12, 12, 14, 4, 12, 4, 6, 6, 8, 10, 6, 14, 74, 4, 74, 74, 72, 58, 76, 78, 76, 78, 44, 80, 78, 72, 82, 82, 76, 80, 82, 80, 74, 70, 84, 84, 80, 4, 84, 64, 86, 86, 78, 84, 86 ], + "width": 271, + "height": 298 + } + }, + "lower-leg": { + "lower-leg": { "x": 76.2, "y": 22.21, "rotation": 66.28, "width": 146, "height": 195 } + }, + "mouth-smile": { + "mouth-grind": { "x": 27.66, "y": -31.33, "rotation": -70.58, "width": 93, "height": 59 }, + "mouth-smile": { "x": 27.66, "y": -31.33, "rotation": -70.58, "width": 93, "height": 59 } + }, + "neck": { + "neck": { "x": 15.1, "y": -1.67, "rotation": -58.92, "width": 36, "height": 41 } + }, + "raptor-back-arm": { + "raptor-back-arm": { + "type": "mesh", + "uvs": [ 0.38712, 0.29362, 0.31383, 0.46513, 0.29243, 0.51522, 0.32476, 0.49311, 0.57587, 0.32139, 0.63255, 0.28263, 0.71632, 0.34508, 0.94948, 0.51888, 0.94948, 0.60129, 1, 0.65257, 1, 0.90624, 0.95463, 0.99934, 0.88957, 0.83205, 0.80295, 0.99999, 0.75236, 0.75696, 0.6654, 0.71301, 0.62289, 0.63243, 0.58195, 0.65032, 0.22479, 0.80641, 0.07792, 0.73315, 0.07825, 0.6655, 0.07985, 0.34307, 0, 0.29728, 0, 0, 0.32335, 0 ], + "triangles": [ 6, 15, 16, 5, 6, 16, 5, 16, 4, 6, 7, 15, 16, 17, 4, 8, 15, 7, 14, 15, 8, 12, 14, 8, 12, 8, 9, 12, 9, 10, 11, 12, 10, 13, 14, 12, 17, 3, 4, 19, 20, 2, 18, 19, 2, 18, 2, 3, 18, 3, 17, 21, 22, 23, 24, 21, 23, 0, 21, 24, 1, 21, 0, 1, 20, 21, 2, 20, 1 ], + "vertices": [ 2, 13, 36.95, 33.31, 0.91667, 14, 68.54, 41.05, 0.08333, 2, 13, 66.02, 20.36, 0.76814, 14, 41.42, 24.4, 0.23186, 2, 13, 74.51, 16.58, 0.64468, 14, 33.5, 19.53, 0.35532, 2, 13, 70.89, 21.97, 0.29072, 14, 40, 19.47, 0.70928, 3, 13, 42.78, 63.9, 0.11484, 14, 90.47, 18.95, 0.60855, 22, -17.2, 9.01, 0.27661, 2, 14, 101.86, 18.84, 0.45956, 22, -14.39, 20.05, 0.54044, 2, 14, 106.48, 2.09, 0.0625, 22, 2.98, 20.56, 0.9375, 1, 22, 51.32, 21.99, 1, 1, 22, 60.41, 11.11, 1, 1, 22, 72.39, 9.62, 1, 1, 22, 100.37, -23.87, 1, 1, 22, 104.96, -40.9, 1, 1, 22, 78.37, -25.62, 1, 1, 22, 86.06, -56.84, 1, 1, 22, 52.92, -30.05, 1, 2, 14, 62.25, -43.93, 0.0625, 22, 37.19, -33.34, 0.9375, 2, 14, 64.89, -28.66, 0.3125, 22, 22.99, -27.14, 0.6875, 2, 14, 57.7, -27.17, 0.30612, 22, 19.84, -33.78, 0.69388, 2, 13, 124.19, 3.84, 0.19395, 14, -5.1, -14.24, 0.80605, 2, 13, 110.78, -19.65, 0.3125, 14, -16.89, 10.11, 0.6875, 2, 13, 99.15, -19.2, 0.51614, 14, -9.94, 19.44, 0.48386, 2, 13, 43.73, -17.04, 0.9375, 14, 23.18, 63.93, 0.0625, 1, 13, 35.41, -29.78, 1, 1, 13, -15.69, -28.02, 1, 1, 13, -13.88, 24.65, 1 ], + "hull": 25, + "edges": [ 44, 46, 44, 42, 38, 36, 32, 30, 30, 28, 28, 26, 24, 22, 18, 16, 16, 14, 46, 48, 38, 4, 6, 4, 6, 36, 42, 40, 40, 38, 4, 2, 2, 0, 40, 2, 10, 32, 36, 34, 34, 32, 10, 8, 8, 6, 34, 8, 14, 12, 12, 10, 12, 30, 18, 20, 22, 20, 26, 24, 48, 0 ], + "width": 163, + "height": 172 + } + }, + "raptor-body": { + "raptor-body": { + "type": "mesh", + "uvs": [ 0.88305, 0.02794, 0.91758, 0.05592, 0.9497, 0.09133, 0.97573, 0.13213, 0.99055, 0.17339, 0.99759, 0.22987, 0.99678, 0.27226, 0.99353, 0.31287, 0.9839, 0.38477, 0.97956, 0.35307, 0.96687, 0.38782, 0.96442, 0.34841, 0.94742, 0.38391, 0.94489, 0.33238, 0.9386, 0.34808, 0.93784, 0.32559, 0.92667, 0.34333, 0.92539, 0.31538, 0.91182, 0.34989, 0.90925, 0.28963, 0.89984, 0.27929, 0.87514, 0.33979, 0.86225, 0.40838, 0.87429, 0.45818, 0.84272, 0.50226, 0.81998, 0.59622, 0.81697, 0.68641, 0.81951, 0.7069, 0.78696, 0.82183, 0.74283, 0.91135, 0.68699, 0.97585, 0.6244, 1, 0.58849, 1, 0.51466, 1, 0.49121, 0.8368, 0.4727, 0.78488, 0.44707, 0.74644, 0.42472, 0.72176, 0.3966, 0.70938, 0.37043, 0.69548, 0.34684, 0.68416, 0.32377, 0.6759, 0.29877, 0.66711, 0.26827, 0.65566, 0.24021, 0.64447, 0.2154, 0.63308, 0.18745, 0.62026, 0.163, 0.61056, 0.13948, 0.60123, 0.11931, 0.59392, 0.09945, 0.58672, 0.08097, 0.5824, 0.06076, 0.58225, 0.04257, 0.58149, 0.02388, 0.58253, 0, 0.58455, 0, 0.56298, 0.0209, 0.55046, 0.03794, 0.53974, 0.05634, 0.52692, 0.0746, 0.51306, 0.09507, 0.49881, 0.11728, 0.48334, 0.1375, 0.46924, 0.16277, 0.45174, 0.18782, 0.43439, 0.21308, 0.4189, 0.23873, 0.40318, 0.26735, 0.38578, 0.2969, 0.36723, 0.32579, 0.35014, 0.35725, 0.33294, 0.37992, 0.3207, 0.41103, 0.31696, 0.44145, 0.29137, 0.47584, 0.28483, 0.49453, 0.31832, 0.5288, 0.35569, 0.60144, 0.41756, 0.65116, 0.41078, 0.70843, 0.42446, 0.7118, 0.2925, 0.70946, 0.19468, 0.70683, 0.08348, 0.76023, 0.01941, 0.79301, 0, 0.83875, 0, 0.02258, 0.5679, 0.04005, 0.56141, 0.05877, 0.55312, 0.07877, 0.54786, 0.09747, 0.5401, 0.12059, 0.53086, 0.14233, 0.52663, 0.16642, 0.52304, 0.19163, 0.52137, 0.2177, 0.51241, 0.24501, 0.50218, 0.27577, 0.49505, 0.30141, 0.49242, 0.3286, 0.49077, 0.3541, 0.49188, 0.38137, 0.49347, 0.40824, 0.49495, 0.44136, 0.50946, 0.47122, 0.53169, 0.49886, 0.56568, 0.53162, 0.60054, 0.60671, 0.67484, 0.6857, 0.67243, 0.7506, 0.59437, 0.76886, 0.46557, 0.7773, 0.34161, 0.77355, 0.22842, 0.8056, 0.09401, 0.86736, 0.07427, 0.90484, 0.17059, 0.9096, 0.19933, 0.91959, 0.21397, 0.93193, 0.20183, 0.93608, 0.17463, 0.92873, 0.1403, 0.91672, 0.13455, 0.90667, 0.14854, 0.91663, 0.09795, 0.89868, 0.09514, 0.88034, 0.09404, 0.9309, 0.11529, 0.93998, 0.15741, 0.94213, 0.17477, 0.94345, 0.19647, 0.94192, 0.20763, 0.92187, 0.22801, 0.9048, 0.23489, 0.8899, 0.19847, 0.8874, 0.16914, 0.87831, 0.12122, 0.585, 0.84243, 0.63024, 0.8646, 0.68284, 0.85192, 0.72923, 0.80453, 0.75898, 0.76323, 0.78513, 0.70347, 0.78536, 0.6783, 0.78141, 0.59277, 0.94721, 0.11131, 0.96236, 0.1618, 0.96367, 0.19318, 0.95806, 0.21052, 0.976, 0.16763, 0.98026, 0.22172, 0.98039, 0.26467, 0.97933, 0.31612, 0.96394, 0.25896, 0.95648, 0.31982, 0.9432, 0.24678, 0.93886, 0.28792 ], + "triangles": [ 110, 107, 78, 76, 106, 105, 76, 77, 106, 77, 107, 106, 78, 107, 77, 37, 105, 36, 105, 106, 36, 106, 35, 36, 106, 107, 35, 107, 34, 35, 108, 34, 107, 115, 86, 0, 115, 0, 1, 114, 85, 86, 114, 86, 115, 84, 85, 114, 83, 84, 114, 125, 126, 115, 1, 125, 115, 1, 124, 125, 2, 124, 1, 2, 127, 124, 145, 127, 2, 126, 114, 115, 136, 114, 126, 145, 2, 3, 122, 124, 127, 121, 122, 127, 125, 122, 126, 122, 125, 124, 127, 128, 121, 127, 145, 128, 145, 3, 128, 146, 128, 3, 4, 149, 3, 146, 3, 149, 126, 123, 136, 122, 123, 126, 135, 136, 123, 116, 135, 123, 120, 121, 128, 129, 128, 146, 120, 128, 129, 147, 146, 149, 129, 146, 147, 82, 83, 114, 130, 129, 147, 134, 135, 116, 123, 122, 121, 123, 121, 120, 116, 123, 120, 117, 116, 120, 134, 116, 117, 119, 117, 120, 130, 119, 120, 130, 120, 129, 131, 119, 130, 148, 130, 147, 131, 130, 148, 147, 149, 4, 118, 117, 119, 150, 147, 4, 148, 147, 150, 131, 132, 118, 131, 118, 119, 113, 82, 114, 135, 113, 114, 135, 114, 136, 113, 135, 134, 150, 4, 5, 133, 134, 117, 133, 117, 118, 133, 118, 132, 155, 131, 148, 155, 148, 150, 132, 131, 155, 153, 155, 150, 151, 153, 150, 5, 151, 150, 6, 151, 5, 133, 113, 134, 20, 113, 133, 155, 133, 132, 156, 155, 153, 155, 20, 133, 156, 20, 155, 19, 20, 156, 81, 82, 113, 6, 152, 151, 17, 19, 156, 151, 156, 153, 7, 152, 6, 152, 156, 151, 154, 17, 156, 152, 154, 156, 15, 17, 154, 13, 15, 154, 20, 112, 113, 112, 81, 113, 20, 21, 112, 16, 17, 15, 17, 18, 19, 13, 14, 15, 11, 154, 152, 13, 154, 11, 9, 152, 7, 11, 152, 9, 11, 12, 13, 8, 9, 7, 10, 11, 9, 22, 112, 21, 111, 22, 23, 112, 80, 81, 111, 80, 112, 111, 112, 22, 24, 111, 23, 144, 111, 24, 110, 80, 111, 110, 111, 144, 25, 144, 24, 79, 110, 78, 110, 79, 80, 109, 108, 110, 143, 144, 25, 110, 144, 143, 109, 110, 143, 26, 143, 25, 142, 109, 143, 142, 143, 26, 142, 26, 27, 141, 109, 142, 140, 109, 141, 27, 141, 142, 28, 141, 27, 140, 141, 28, 140, 108, 109, 29, 140, 28, 139, 140, 29, 30, 139, 29, 110, 108, 107, 137, 34, 108, 108, 140, 137, 139, 137, 140, 138, 137, 139, 138, 139, 30, 33, 34, 137, 32, 33, 137, 138, 32, 137, 138, 31, 32, 30, 31, 138, 75, 104, 74, 104, 73, 74, 103, 73, 104, 105, 104, 75, 76, 105, 75, 38, 103, 104, 104, 37, 38, 104, 105, 37, 72, 102, 71, 72, 103, 102, 101, 71, 102, 73, 103, 72, 101, 102, 40, 40, 102, 39, 39, 102, 103, 38, 39, 103, 101, 100, 70, 69, 70, 100, 71, 101, 70, 69, 100, 99, 100, 42, 99, 100, 41, 42, 100, 101, 41, 101, 40, 41, 99, 68, 69, 68, 98, 67, 99, 98, 68, 98, 97, 67, 98, 44, 97, 43, 44, 98, 99, 43, 98, 42, 43, 99, 97, 66, 67, 96, 65, 66, 97, 96, 66, 96, 95, 65, 96, 46, 95, 45, 46, 96, 97, 45, 96, 44, 45, 97, 95, 64, 65, 94, 63, 64, 95, 94, 64, 94, 93, 63, 94, 48, 93, 47, 48, 94, 95, 47, 94, 46, 47, 95, 93, 62, 63, 92, 61, 62, 93, 92, 62, 91, 61, 92, 49, 50, 91, 92, 49, 91, 93, 49, 92, 48, 49, 93, 60, 61, 91, 90, 60, 91, 59, 60, 90, 89, 59, 90, 51, 52, 89, 50, 51, 90, 51, 89, 90, 50, 90, 91, 58, 59, 89, 88, 58, 89, 57, 58, 88, 87, 57, 88, 56, 57, 87, 52, 53, 88, 87, 88, 53, 52, 88, 89, 54, 87, 53, 55, 56, 87, 55, 87, 54 ], + "vertices": [ 1, 8, 142.31, -163.1, 1, 1, 8, 129.87, -206.92, 1, 1, 8, 113.94, -247.72, 1, 1, 8, 95.41, -280.88, 1, 1, 8, 76.47, -299.85, 1, 1, 8, 50.32, -309.1, 1, 1, 8, 30.6, -308.34, 1, 1, 8, 11.66, -304.47, 1, 1, 8, -21.93, -292.74, 1, 1, 8, -7.26, -287.07, 1, 1, 8, -23.63, -271.23, 1, 1, 8, -5.35, -267.89, 1, 1, 8, -22.13, -246.63, 1, 1, 8, 1.79, -243.11, 1, 1, 8, -5.62, -235.26, 1, 1, 8, 4.82, -234.16, 1, 1, 8, -3.61, -220.15, 1, 1, 8, 9.36, -218.37, 1, 1, 8, -6.91, -201.42, 1, 1, 8, 21.07, -197.82, 1, 1, 8, 25.72, -185.86, 1, 2, 8, -2.82, -155.01, 0.648, 54, 99.81, 14.95, 0.352, 2, 8, -34.92, -139.14, 0.536, 54, 107.98, -19.92, 0.464, 2, 8, -57.88, -154.65, 0.552, 54, 134.55, -27.77, 0.448, 4, 6, 214.38, -86.5, 0.416, 7, 12.5, -126.76, 0.24294, 8, -78.89, -115.02, 0.17462, 54, 117.33, -69.19, 0.16644, 3, 6, 164.81, -103.2, 0.46938, 7, -35.73, -106.53, 0.34058, 54, 123.6, -121.11, 0.19004, 3, 6, 135.98, -133.89, 0.80096, 7, -77.65, -110.49, 0.11639, 54, 147.79, -155.59, 0.08264, 3, 6, 132.63, -143.37, 0.82428, 7, -86.43, -115.4, 0.10285, 54, 156.4, -160.78, 0.07287, 1, 6, 67.3, -160.11, 1, 2, 2, 226.09, -123.55, 0.23474, 6, -2.28, -158.53, 0.76526, 3, 2, 156.49, -155.76, 0.52831, 6, -76.36, -138.65, 0.37693, 1, 172.42, -169.15, 0.09477, 3, 2, 77.76, -169.48, 0.67731, 6, -145.59, -98.75, 0.09201, 1, 92.8, -175.99, 0.23068, 3, 2, 32.4, -170.91, 0.60686, 61, -141.38, 131.19, 0.07586, 1, 47.48, -173.48, 0.31728, 3, 2, -60.88, -173.87, 0.38324, 61, -55.62, 167.98, 0.21887, 1, -45.7, -168.32, 0.39789, 3, 2, -92.91, -98.95, 0.1876, 61, 1.54, 109.92, 0.4859, 1, -71.11, -90.91, 0.3265, 4, 62, -30.38, 104.17, 0.11817, 2, -117.05, -75.56, 0.05927, 61, 32.55, 96.96, 0.64839, 1, -93.12, -65.52, 0.17416, 3, 63, -54.56, 107.85, 0.06735, 62, 5.17, 93.91, 0.36034, 61, 69.37, 93.3, 0.57231, 3, 63, -26.17, 96.68, 0.19082, 62, 35.28, 88.98, 0.51174, 61, 99.87, 93.89, 0.29744, 4, 64, -55.58, 91.31, 0.07799, 63, 9.43, 91.31, 0.41358, 62, 71.21, 91.24, 0.42326, 61, 134.8, 102.61, 0.08518, 3, 64, -22.44, 85.2, 0.26281, 63, 42.57, 85.2, 0.51956, 62, 104.89, 92.27, 0.21763, 4, 65, -51.3, 84.41, 0.0571, 64, 7.44, 80.26, 0.49907, 63, 72.45, 80.26, 0.37109, 62, 135.14, 93.74, 0.07275, 3, 65, -22.46, 78.67, 0.21618, 64, 36.63, 76.74, 0.61839, 63, 101.64, 76.74, 0.16543, 2, 65, 8.81, 72.53, 0.54611, 64, 68.28, 72.99, 0.45389, 3, 66, -23.6, 64.7, 0.19291, 65, 46.93, 64.7, 0.70982, 64, 106.89, 68.09, 0.09727, 2, 66, 11.45, 57.2, 0.627, 65, 81.98, 57.2, 0.373, 2, 66, 42.4, 49.87, 0.91827, 65, 112.93, 49.87, 0.08173, 2, 67, 8.43, 41.3, 0.57837, 66, 77.27, 41.61, 0.42163, 1, 67, 38.69, 33.54, 1, 2, 68, 5.1, 25.99, 0.53675, 67, 67.79, 26.07, 0.46325, 1, 68, 29.98, 19.49, 1, 2, 69, -0.28, 13.08, 0.45935, 68, 54.48, 13.08, 0.54065, 1, 69, 22.77, 8.73, 1, 2, 70, -1, 6.11, 0.43721, 69, 48.17, 6.1, 0.56279, 1, 70, 21.83, 3.3, 1, 1, 70, 45.36, 1.27, 1, 1, 70, 75.48, -1.02, 1, 1, 70, 74.41, -10.99, 1, 1, 70, 47.53, -13.96, 1, 1, 70, 25.58, -16.62, 1, 2, 70, 1.81, -20.07, 0.53626, 69, 51.15, -20.06, 0.46374, 1, 69, 27.54, -24.16, 1, 2, 69, 1.14, -28.15, 0.51508, 68, 54.96, -28.17, 0.48492, 2, 68, 26.21, -31.86, 0.90506, 67, 89.88, -31.41, 0.09494, 2, 68, 0.04, -35.22, 0.44307, 67, 63.76, -35.22, 0.55693, 2, 67, 31.14, -39.93, 0.94421, 66, 103.28, -38.62, 0.05579, 2, 67, -1.2, -44.59, 0.49116, 66, 71.16, -44.6, 0.50884, 3, 67, -33.71, -48.36, 0.07828, 66, 38.83, -49.7, 0.85291, 65, 109.36, -49.7, 0.06881, 2, 66, 6, -54.89, 0.55934, 65, 76.53, -54.89, 0.44066, 3, 66, -30.62, -60.6, 0.1151, 65, 39.91, -60.6, 0.77179, 64, 109.41, -57.39, 0.11311, 2, 65, 2.07, -66.77, 0.55035, 64, 72.15, -66.42, 0.44965, 3, 65, -34.88, -72.32, 0.18232, 64, 35.73, -74.76, 0.57653, 63, 100.73, -74.76, 0.24115, 3, 64, -3.96, -83.19, 0.3735, 63, 61.05, -83.19, 0.55244, 62, 158.49, -68.43, 0.07406, 3, 64, -32.54, -89.19, 0.18318, 63, 32.47, -89.19, 0.60103, 62, 131.82, -80.33, 0.21578, 2, 63, -6.84, -91.35, 0.45056, 62, 93.85, -90.74, 0.54944, 3, 63, -45.16, -103.67, 0.18109, 62, 58.99, -110.86, 0.64678, 61, 159.33, -98.37, 0.17213, 3, 63, -88.59, -107.18, 0.06648, 62, 17.28, -123.46, 0.59371, 61, 120.58, -118.3, 0.33982, 3, 62, -9.21, -113.51, 0.47579, 2, -96.32, 142.15, 0.06216, 61, 92.73, -113.3, 0.46205, 3, 62, -55.3, -106.16, 0.18947, 2, -52.49, 126.15, 0.211, 61, 46.08, -114.41, 0.59953, 3, 2, 40.2, 100.3, 0.70054, 6, -1.56, 132.44, 0.1247, 61, -49.65, -124.17, 0.17476, 2, 2, 102.91, 105.44, 0.48476, 6, 49.88, 96.2, 0.51524, 2, 6, 102.97, 46.59, 0.55391, 7, 16.89, 46.74, 0.44609, 2, 7, 77.99, 53.82, 0.34839, 8, 16.46, 51.73, 0.65161, 1, 8, 61.91, 55.28, 1, 1, 8, 113.57, 59.28, 1, 1, 8, 144.24, -7.82, 1, 1, 8, 153.81, -49.13, 1, 1, 8, 154.57, -106.94, 1, 1, 70, 46.28, -5.67, 1, 1, 70, 24, -6.32, 1, 2, 70, 0.06, -7.63, 0.51043, 69, 49.31, -7.63, 0.48957, 1, 69, 23.92, -7.52, 1, 2, 69, 0.04, -8.74, 0.50854, 68, 54.3, -8.74, 0.49146, 1, 68, 24.78, -9.42, 1, 2, 68, -2.74, -7.99, 0.3706, 67, 60.53, -8.04, 0.6294, 1, 67, 30.07, -6.47, 1, 2, 67, -1.7, -3.86, 0.44024, 66, 68.99, -3.93, 0.55976, 1, 66, 35.83, -5.93, 1, 2, 66, 1.08, -8.43, 0.54293, 65, 71.61, -8.43, 0.45707, 1, 65, 32.59, -9.2, 1, 2, 65, 0.17, -8.31, 0.51547, 64, 65.82, -8.27, 0.48453, 1, 64, 31.46, -9.41, 1, 2, 64, -0.78, -9.24, 0.46357, 63, 64.23, -9.24, 0.53643, 1, 63, 29.76, -8.87, 1, 2, 63, -4.21, -8.55, 0.36579, 62, 78.95, -9.25, 0.63421, 1, 62, 36.63, -11.94, 1, 2, 62, -2.46, -10.23, 0.43368, 61, 80.69, -10.51, 0.56632, 1, 61, 42.35, -9.75, 1, 2, 61, -2.09, -11.18, 0.90336, 1, -14.03, 15.96, 0.09664, 1, 2, 50.64, -19.06, 1, 2, 2, 150.39, -14.78, 0.14978, 6, 9.3, -26.52, 0.85022, 2, 6, 96.28, -48.49, 0.94283, 7, -50.98, -20.17, 0.05717, 3, 6, 151.36, -15.54, 0.20351, 7, 12.13, -31.86, 0.68534, 54, 35.04, -116.47, 0.11116, 3, 7, 70.75, -31.76, 0.49957, 8, -5.28, -31.36, 0.22959, 54, 5.95, -65.58, 0.27084, 2, 8, 47.28, -25.92, 0.69253, 54, -31.67, -28.46, 0.30747, 2, 8, 110.31, -65.62, 0.816, 54, -41.11, 45.43, 0.184, 1, 8, 120.51, -143.55, 1, 1, 8, 76.35, -191.51, 1, 1, 8, 63.06, -197.7, 1, 1, 8, 56.42, -210.42, 1, 1, 8, 62.27, -225.94, 1, 1, 8, 74.99, -231.02, 1, 1, 8, 90.83, -221.52, 1, 1, 8, 93.3, -206.31, 1, 1, 8, 86.63, -193.69, 1, 1, 8, 110.32, -205.97, 1, 1, 8, 111.33, -183.27, 1, 1, 8, 111.53, -160.07, 1, 1, 8, 102.49, -224.1, 1, 1, 8, 83.06, -235.84, 1, 1, 8, 75.02, -238.67, 1, 1, 8, 64.95, -240.47, 1, 1, 8, 59.74, -238.59, 1, 1, 8, 49.93, -213.38, 1, 1, 8, 46.45, -191.85, 1, 1, 8, 63.13, -172.79, 1, 1, 8, 76.73, -169.46, 1, 1, 8, 98.86, -157.68, 1, 3, 2, 25.68, -97.82, 0.63735, 61, -108.45, 65.59, 0.06216, 1, 47.13, -100.08, 0.30049, 3, 2, 83.15, -106.32, 0.72603, 6, -100.98, -53.7, 0.09811, 1, 103.65, -113.53, 0.17585, 3, 2, 149.42, -98.32, 0.50192, 6, -44.98, -90.03, 0.42892, 1, 170.36, -111.32, 0.06917, 2, 2, 207.34, -74.44, 0.18186, 6, 14.79, -108.81, 0.81814, 2, 2, 244.31, -54.06, 0.05649, 6, 56.23, -116.86, 0.94351, 2, 6, 99.39, -115.34, 0.92692, 7, -92.84, -72.39, 0.07308, 3, 6, 106.83, -106.29, 0.84981, 7, -81.28, -70.52, 0.08915, 54, 114.85, -178.52, 0.06104, 3, 6, 127.4, -71.89, 0.69944, 7, -43.11, -58.31, 0.19328, 54, 85.35, -151.38, 0.10728, 1, 8, 104.61, -244.7, 1, 1, 8, 81.39, -264.16, 1, 1, 8, 66.82, -266.01, 1, 1, 8, 58.66, -259.02, 1, 1, 8, 78.9, -281.43, 1, 1, 8, 53.83, -287.14, 1, 1, 8, 33.86, -287.57, 1, 1, 8, 9.92, -286.55, 1, 1, 8, 36.24, -266.75, 1, 1, 8, 7.82, -257.69, 1, 1, 8, 41.56, -240.46, 1, 1, 8, 22.36, -235.22, 1 ], + "hull": 87, + "edges": [ 110, 108, 108, 106, 106, 104, 104, 102, 102, 100, 88, 86, 86, 84, 84, 82, 82, 80, 80, 78, 78, 76, 76, 74, 74, 72, 72, 70, 70, 68, 68, 66, 110, 112, 112, 114, 114, 116, 116, 118, 118, 120, 120, 122, 96, 98, 98, 100, 92, 94, 94, 96, 88, 90, 90, 92, 126, 128, 128, 130, 130, 132, 132, 134, 134, 136, 136, 138, 138, 140, 140, 142, 142, 144, 144, 146, 146, 148, 148, 150, 150, 152, 152, 154, 122, 124, 124, 126, 174, 176, 176, 178, 178, 180, 180, 182, 182, 184, 184, 186, 186, 188, 188, 190, 190, 192, 192, 194, 194, 196, 196, 198, 198, 200, 200, 202, 202, 204, 130, 190, 132, 192, 128, 188, 126, 186, 124, 184, 122, 182, 120, 180, 118, 178, 116, 176, 90, 192, 92, 190, 94, 188, 96, 186, 98, 184, 100, 182, 102, 180, 104, 178, 106, 176, 134, 194, 136, 196, 88, 194, 86, 196, 198, 84, 82, 200, 202, 80, 78, 204, 206, 76, 74, 208, 72, 210, 212, 70, 68, 214, 198, 138, 140, 200, 142, 202, 144, 204, 146, 206, 208, 148, 150, 210, 152, 212, 154, 214, 64, 66, 62, 64, 62, 60, 60, 58, 58, 56, 56, 54, 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 44, 42, 42, 40, 40, 38, 38, 36, 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 22, 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 172, 170, 172, 170, 168, 168, 166, 166, 164, 164, 162, 162, 160, 160, 158, 158, 156, 156, 154, 232, 234, 234, 236, 236, 238, 238, 240, 240, 242, 242, 244, 244, 246, 246, 232, 248, 250, 250, 252, 248, 254, 254, 256, 256, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, 270, 270, 272 ], + "width": 1264, + "height": 465 + } + }, + "raptor-front-arm": { + "raptor-front-arm": { + "type": "mesh", + "uvs": [ 0.39563, 0.1396, 0.38771, 0.30213, 0.31231, 0.41784, 0.27287, 0.47836, 0.33389, 0.4507, 0.5488, 0.35329, 0.64093, 0.31153, 0.73024, 0.3653, 1, 0.5277, 1, 0.86607, 0.93243, 1, 0.86176, 0.80967, 0.75576, 0.99765, 0.71748, 1, 0.70276, 0.77443, 0.62032, 0.73448, 0.58793, 0.64519, 0.53561, 0.6582, 0.13449, 0.75798, 0, 0.69219, 0.01846, 0.56358, 0.05499, 0.30918, 0, 0.27863, 0, 0.12423, 0, 0, 0.19596, 0, 0.40243, 0, 0.24536, 0.19241, 0.21679, 0.0811 ], + "triangles": [ 6, 7, 16, 6, 16, 5, 15, 16, 7, 7, 14, 15, 8, 14, 7, 11, 14, 8, 11, 8, 9, 12, 14, 11, 13, 14, 12, 10, 11, 9, 17, 4, 5, 16, 17, 5, 18, 19, 3, 18, 3, 4, 18, 4, 17, 0, 28, 26, 23, 25, 28, 23, 24, 25, 27, 28, 0, 27, 23, 28, 1, 27, 0, 21, 22, 27, 21, 27, 1, 2, 21, 1, 2, 20, 21, 3, 20, 2, 19, 20, 3, 27, 22, 23, 28, 25, 26 ], + "vertices": [ 2, 38, 9.24, 26.77, 0.808, 6, 85.19, -98.03, 0.192, 1, 38, 35.87, 35.63, 1, 2, 38, 61.98, 28.62, 0.84641, 39, 40.04, 38.85, 0.15359, 2, 38, 77.67, 27.28, 0.34921, 39, 34.62, 24.06, 0.65079, 3, 38, 73.77, 39.05, 0.10938, 39, 47.01, 24.74, 0.78124, 48, -42.17, -19.42, 0.10938, 2, 39, 86.98, 31.25, 0.65079, 48, -25.75, 17.61, 0.34921, 2, 39, 103.84, 34.49, 0.34375, 48, -19.24, 33.5, 0.65625, 2, 39, 114.05, 19.51, 0.10938, 48, -1.12, 33.84, 0.89062, 1, 48, 53.62, 34.88, 1, 1, 48, 96.03, -19.16, 1, 1, 48, 104.2, -47.32, 1, 1, 48, 71.34, -23.98, 1, 1, 48, 81.39, -64.61, 1, 1, 48, 76.81, -68.82, 1, 1, 48, 46.66, -34.26, 1, 2, 39, 73.14, -45.77, 0.10938, 48, 31.14, -36.12, 0.89062, 2, 39, 73.98, -26.91, 0.34375, 48, 15.82, -25.1, 0.65625, 2, 39, 65.11, -26.69, 0.65079, 48, 10.78, -32.4, 0.34921, 3, 38, 134.76, 4.51, 0.10938, 39, -2.35, -25.03, 0.78124, 48, -27.52, -87.96, 0.10938, 2, 38, 121.45, -16.1, 0.34921, 39, -18.74, -6.77, 0.65079, 2, 38, 96.94, -14.98, 0.84641, 39, -11.21, 16.58, 0.15359, 1, 38, 45.47, -17.43, 1, 1, 38, 47.64, -32.91, 1, 2, 38, 12.11, -34.27, 0.536, 6, 40.33, -56.53, 0.464, 2, 38, -2.57, -46.21, 0.536, 6, 42.42, -37.73, 0.464, 2, 38, -7.4, -14.83, 0.472, 6, 67.87, -56.7, 0.528, 2, 38, -12.49, 18.22, 0.664, 6, 94.68, -76.69, 0.336, 1, 38, 18.79, 4.26, 1, 2, 38, 0.95, -1.4, 0.512, 6, 71.34, -72.13, 0.488 ], + "hull": 27, + "edges": [ 38, 36, 32, 30, 30, 28, 28, 26, 24, 26, 24, 22, 22, 20, 20, 18, 18, 16, 44, 42, 38, 6, 38, 40, 40, 42, 6, 4, 4, 2, 40, 4, 8, 6, 36, 8, 32, 12, 42, 2, 52, 0, 0, 2, 16, 14, 14, 12, 30, 14, 36, 34, 34, 32, 12, 10, 10, 8, 34, 10, 48, 50, 50, 52, 44, 46, 46, 48, 50, 56, 56, 54 ], + "width": 162, + "height": 203 + } + }, + "raptor-front-leg": { + "raptor-front-leg": { + "type": "mesh", + "uvs": [ 0.55117, 0.17818, 0.6279, 0.36027, 0.66711, 0.4533, 0.6488, 0.51528, 0.53554, 0.56894, 0.32335, 0.66947, 0.28674, 0.72087, 0.32539, 0.80401, 0.36258, 0.80144, 0.42056, 0.79744, 0.61015, 0.78436, 0.73352, 0.81335, 0.84813, 0.84029, 1, 0.93855, 0.732, 0.92345, 0.62439, 0.91738, 0.72813, 1, 0.58574, 1, 0.47086, 0.98249, 0.36708, 0.96668, 0.26307, 0.95082, 0.16267, 0.93552, 0.03859, 0.72238, 0, 0.66947, 0.0374, 0.62999, 0.1647, 0.49563, 0.23732, 0.45681, 0.2702, 0.43923, 0.28064, 0.43365, 0.223, 0.40571, 0.12565, 0.35851, 0, 0.2976, 0, 0.1524, 0, 0, 0.32132, 0, 0.32222, 0.22778, 0.44931, 0.38031, 0.47664, 0.44362, 0.4615, 0.47375, 0.35106, 0.53247, 0.20091, 0.65257, 0.18528, 0.72148, 0.25222, 0.86314, 0.30942, 0.88124, 0.55694, 0.89613, 0.55858, 0.89208, 0.47493, 0.8534, 0.6059, 0.91526, 0.39706, 0.8913, 0.1323, 0.09352, 0.36997, 0.45346, 0.37163, 0.43828, 0.32516, 0.39424, 0.2376, 0.34426, 0.34066, 0.47415, 0.51677, 0.90503, 0.07821, 0.26333, 0.05796, 0.13086, 0.09601, 0.05963, 0.29303, 0.03825 ], + "triangles": [ 48, 8, 9, 48, 9, 46, 46, 9, 10, 45, 46, 10, 44, 46, 45, 55, 46, 44, 15, 47, 45, 10, 15, 45, 44, 45, 47, 55, 44, 47, 11, 15, 10, 14, 15, 11, 14, 11, 12, 14, 12, 13, 48, 43, 8, 48, 46, 55, 19, 43, 48, 20, 43, 19, 18, 48, 55, 19, 48, 18, 17, 55, 47, 18, 55, 17, 17, 47, 15, 16, 17, 15, 22, 24, 41, 23, 24, 22, 42, 41, 6, 42, 6, 7, 43, 42, 7, 43, 7, 8, 21, 22, 41, 21, 41, 42, 20, 42, 43, 21, 42, 20, 50, 28, 51, 27, 28, 50, 38, 51, 37, 50, 51, 38, 54, 27, 50, 26, 27, 54, 3, 37, 2, 38, 37, 3, 39, 54, 50, 39, 50, 38, 4, 38, 3, 39, 38, 4, 40, 25, 26, 24, 25, 40, 39, 40, 26, 39, 26, 54, 5, 40, 39, 5, 39, 4, 6, 40, 5, 41, 24, 40, 41, 40, 6, 59, 34, 0, 34, 58, 33, 59, 58, 34, 49, 58, 59, 57, 33, 58, 57, 58, 49, 32, 33, 57, 56, 57, 49, 32, 57, 56, 35, 59, 0, 49, 59, 35, 56, 49, 35, 31, 32, 56, 53, 56, 35, 30, 56, 53, 31, 56, 30, 36, 35, 0, 36, 0, 1, 52, 53, 35, 36, 52, 35, 29, 30, 53, 29, 53, 52, 28, 29, 52, 51, 52, 36, 28, 52, 51, 37, 36, 1, 51, 36, 37, 37, 1, 2 ], + "vertices": [ 2, 42, 128.03, 88.47, 0.85041, 1, 158.83, -71.92, 0.14959, 2, 42, 219.55, 53.15, 0.77988, 43, -48.05, -38.59, 0.22012, 2, 42, 266.31, 35.11, 0.53545, 43, -36.73, 10.22, 0.46455, 2, 42, 286.89, 9.8, 0.35167, 43, -14.56, 34.15, 0.64833, 2, 42, 281.55, -41.24, 0.09228, 43, 36.71, 36, 0.90772, 3, 42, 271.54, -136.86, 0.05787, 43, 132.77, 39.48, 0.71426, 44, 35, 78.76, 0.22788, 3, 43, 158.22, 55.17, 0.5308, 44, 52.66, 54.64, 0.38143, 45, 7.02, 85.54, 0.08776, 4, 43, 167.14, 99.49, 0.22977, 44, 97.55, 49.25, 0.37788, 45, 28.72, 45.88, 0.15198, 46, -21.26, 49.99, 0.24037, 4, 44, 102.57, 62.61, 0.26558, 45, 42.51, 49.56, 0.17568, 46, -7.07, 51.4, 0.22874, 47, -58.17, 28.03, 0.33001, 4, 44, 109.72, 83.4, 0.11934, 45, 64.09, 55.24, 0.13984, 46, 15.13, 53.52, 0.16668, 47, -36.1, 31.19, 0.57414, 1, 47, 35.81, 41.81, 1, 1, 47, 83.66, 29.43, 1, 1, 47, 128.11, 17.93, 1, 1, 47, 188.73, -29.42, 1, 2, 46, 145.37, -10.99, 0.34248, 47, 84.02, -27.11, 0.65752, 2, 46, 93.3, -7.6, 0.48, 47, 44.87, -26.18, 0.52, 2, 46, 133.18, -49.83, 0.776, 47, 86.69, -66.48, 0.224, 2, 46, 78.79, -50.15, 0.768, 47, 32.38, -69.36, 0.232, 2, 46, 35.36, -41.46, 0.88989, 47, -9.88, -62.73, 0.11011, 1, 46, -4.92, -33.56, 1, 3, 44, 155.05, -5.14, 0.35918, 45, 17.88, -32.51, 0.30633, 46, -44.62, -25.61, 0.3345, 4, 43, 254.98, 126.28, 0.10155, 44, 131.22, -36.21, 0.54212, 45, -21.25, -31.18, 0.20873, 46, -83.02, -17.98, 0.1476, 3, 43, 240.34, 7.81, 0.25587, 44, 11.94, -30.99, 0.61615, 45, -86.32, 68.91, 0.12798, 2, 43, 239.27, -23.1, 0.45486, 44, -18.96, -32.37, 0.54514, 3, 42, 187.65, -209.74, 0.09777, 43, 216.67, -33.36, 0.58893, 44, -30.98, -10.65, 0.3133, 2, 42, 163.86, -128.68, 0.19603, 43, 139.75, -68.26, 0.80397, 2, 42, 165.75, -94.49, 0.31963, 43, 105.59, -71.26, 0.68037, 2, 42, 166.4, -79.07, 0.46225, 43, 90.23, -72.77, 0.53775, 2, 42, 166.49, -74.17, 0.53786, 43, 85.43, -73.29, 0.46214, 2, 42, 141.54, -82.47, 0.73138, 43, 97.13, -96.82, 0.26862, 2, 42, 99.76, -97.08, 0.85324, 43, 117.34, -136.23, 0.14676, 2, 42, 45.01, -114.56, 0.83615, 1, -51.09, -135.29, 0.16385, 1, 1, -42.95, -58.39, 1, 1, 1, -52.66, 17.56, 1, 1, 1, 70.07, 18.78, 1, 1, 42, 93.55, 4.14, 1, 2, 42, 185.14, -6.67, 0.75462, 43, 15.99, -64.28, 0.24539, 2, 42, 217.11, -18.75, 0.50845, 43, 23.47, -30.93, 0.49155, 2, 42, 225.64, -32.92, 0.32528, 43, 36.31, -20.51, 0.67472, 2, 42, 223, -84.74, 0.20193, 43, 87.97, -15.86, 0.79807, 3, 42, 235.62, -168.07, 0.08091, 43, 168.7, 8.29, 0.57148, 44, 6.75, 40.47, 0.34761, 3, 43, 191.8, 35.81, 0.32545, 44, 36.01, 19.63, 0.57243, 45, -31.15, 78.74, 0.10211, 4, 43, 206.64, 111.54, 0.10808, 44, 112.69, 10.83, 0.52068, 45, 6.26, 11.23, 0.23518, 46, -49.03, 19.43, 0.13606, 3, 44, 130.61, 26.42, 0.35068, 45, 29.36, 5.72, 0.28241, 46, -27.13, 10.26, 0.36691, 2, 46, 67.47, 3.17, 0.384, 47, 18.56, -16.63, 0.616, 1, 47, 19.07, -14.52, 1, 2, 46, 36.01, 24.95, 0.384, 47, -13.89, 3.64, 0.616, 2, 46, 86.23, -6.55, 0.488, 47, 37.76, -25.46, 0.512, 4, 44, 151.19, 56, 0.22879, 45, 65.44, 5.56, 0.18425, 46, 8.45, 4.28, 0.45492, 47, 0, 0, 0.13205, 2, 42, -9.28, -17.51, 0.22806, 1, 7.72, -30.86, 0.77194, 2, 42, 195.91, -53.82, 0.42369, 43, 61.12, -47.06, 0.57631, 2, 42, 190.1, -48.45, 0.53231, 43, 56.62, -53.56, 0.46769, 2, 42, 161.27, -48.26, 0.79874, 43, 60.44, -82.13, 0.20126, 2, 42, 120.38, -58.54, 0.85455, 43, 76.31, -121.19, 0.14545, 2, 42, 197.37, -69.23, 0.3355, 43, 76.18, -43.47, 0.6645, 4, 44, 167.22, 97.41, 0.10303, 45, 97.38, 0.84, 0.08297, 46, 54.09, -2.79, 0.51764, 47, 4.74, -23.22, 0.29636, 2, 42, 49.5, -83.17, 0.71382, 1, -17.26, -114.16, 0.28617, 2, 42, -9.83, -51.31, 0.41882, 1, -21.43, -46.95, 0.58118, 2, 42, -31.44, -20.43, 0.27617, 1, -6.57, -12.31, 0.72383, 2, 42, 0.92, 47.46, 0.41417, 1, 68.18, -4.06, 0.58583 ], + "hull": 35, + "edges": [ 46, 44, 44, 42, 32, 34, 32, 30, 26, 24, 14, 12, 12, 10, 6, 4, 66, 68, 0, 68, 46, 48, 48, 50, 40, 42, 16, 14, 58, 56, 4, 2, 2, 0, 10, 8, 8, 6, 78, 80, 80, 82, 82, 84, 84, 86, 86, 96, 16, 18, 18, 20, 38, 40, 62, 64, 64, 66, 100, 102, 102, 104, 58, 60, 60, 62, 106, 104, 54, 56, 50, 52, 52, 54, 108, 100, 78, 76, 76, 74, 72, 74, 72, 70, 70, 98, 92, 90, 56, 102, 100, 54, 52, 108, 58, 104, 60, 106, 76, 6, 74, 4, 72, 2, 78, 8, 92, 20, 92, 88, 88, 94, 90, 30, 94, 30, 26, 28, 28, 30, 20, 22, 22, 24, 28, 22, 34, 36, 36, 38, 94, 110, 110, 96, 36, 110, 110, 88, 60, 112, 112, 114, 114, 116, 116, 118, 118, 0 ], + "width": 382, + "height": 514 + } + }, + "raptor-hindleg-back": { + "raptor-hindleg-back": { + "type": "mesh", + "uvs": [ 0.45041, 0.09352, 0.56934, 0.23361, 0.65294, 0.47297, 0.66354, 0.50822, 0.63175, 0.54255, 0.32384, 0.69723, 0.30069, 0.73876, 0.27934, 0.77704, 0.30417, 0.83513, 0.31059, 0.85014, 0.34101, 0.85047, 0.45165, 0.85164, 0.59556, 0.81882, 0.91177, 0.92548, 1, 1, 0.56337, 0.96427, 0.4835, 0.98261, 0.29879, 0.98027, 0.22808, 0.98389, 0.15998, 0.98738, 0.15424, 0.95547, 0.13895, 0.87048, 0.07371, 0.78726, 0, 0.753, 0, 0.7049, 0, 0.671, 0.11876, 0.64653, 0.16535, 0.5266, 0.28496, 0.47398, 0.29011, 0.45774, 0.29427, 0.4446, 0.20635, 0.40396, 0.06129, 0.33691, 0, 0.25247, 0, 0, 0.30793, 0, 0.276, 0.20262, 0.40398, 0.31122, 0.48439, 0.45964, 0.48318, 0.48384, 0.47029, 0.51062, 0.22698, 0.67328, 0.17142, 0.7242, 0.17122, 0.78242, 0.22996, 0.89469, 0.24677, 0.90829, 0.28672, 0.9146, 0.46583, 0.91414 ], + "triangles": [ 15, 13, 14, 16, 47, 15, 15, 12, 13, 15, 47, 12, 18, 46, 17, 18, 45, 46, 17, 47, 16, 17, 46, 47, 47, 10, 11, 47, 46, 10, 47, 11, 12, 45, 18, 19, 44, 45, 20, 20, 45, 19, 20, 21, 44, 46, 9, 10, 46, 45, 9, 45, 44, 9, 21, 43, 44, 44, 8, 9, 44, 7, 8, 44, 43, 7, 21, 22, 43, 43, 22, 42, 43, 42, 7, 22, 23, 24, 24, 42, 22, 7, 42, 6, 42, 41, 6, 6, 41, 5, 24, 26, 42, 42, 26, 41, 24, 25, 26, 5, 40, 4, 5, 41, 40, 41, 28, 40, 26, 27, 41, 41, 27, 28, 40, 39, 4, 28, 29, 40, 40, 29, 39, 4, 39, 3, 39, 2, 3, 29, 30, 39, 39, 38, 2, 39, 30, 38, 38, 1, 2, 30, 37, 38, 38, 37, 1, 30, 31, 37, 31, 36, 37, 31, 32, 36, 32, 33, 36, 37, 0, 1, 37, 36, 0, 33, 34, 36, 36, 35, 0, 36, 34, 35 ], + "vertices": [ 1, 17, 53.94, 69.16, 1, 1, 17, 126.23, 67.31, 1, 2, 17, 226.42, 31.14, 0.9375, 18, -30.88, -1.11, 0.0625, 2, 17, 240.84, 25.33, 0.7, 18, -25.65, 13.52, 0.3, 2, 17, 246.67, 8.06, 0.3, 18, -8.61, 20.02, 0.7, 3, 17, 240.82, -115.25, 0.0625, 18, 114.81, 19.01, 0.875, 19, 9.48, 59.16, 0.0625, 2, 18, 131.07, 29.69, 0.7, 19, 22.12, 44.36, 0.3, 2, 18, 146.07, 39.54, 0.3, 19, 33.76, 30.71, 0.7, 3, 18, 152.6, 65.01, 0.12567, 19, 59.85, 27.41, 0.75203, 20, 15.86, 48.05, 0.1223, 2, 19, 66.6, 26.56, 0.82916, 20, 16.73, 41.31, 0.17084, 3, 19, 71.2, 35.76, 0.64716, 20, 26.79, 39.17, 0.1317, 21, -67.33, 18.96, 0.22114, 3, 19, 87.93, 69.21, 0.0625, 20, 63.37, 31.39, 0.675, 21, -30.18, 23.3, 0.2625, 2, 20, 113.82, 35.72, 0.10381, 21, 16.23, 43.56, 0.89619, 1, 21, 128.14, 12.02, 1, 1, 21, 161.85, -15.82, 1, 1, 21, 13.52, -19.72, 1, 2, 20, 62.98, -25.82, 0.7, 21, -12.23, -31.02, 0.3, 3, 19, 115.12, -1.34, 0.08333, 20, 1.94, -12.66, 0.83333, 21, -74.27, -38.11, 0.08333, 2, 19, 106.11, -23.53, 0.3, 20, -21.81, -9.53, 0.7, 2, 19, 97.44, -44.91, 0.7, 20, -44.67, -6.51, 0.3, 2, 19, 84.26, -40.69, 0.9375, 20, -43.91, 7.3, 0.0625, 1, 19, 49.19, -29.47, 1, 2, 18, 206.75, 5.37, 0.13333, 19, 7.44, -33.78, 0.86667, 2, 18, 219.64, -20.52, 0.36111, 19, -16.64, -49.81, 0.63889, 2, 18, 208.41, -37.83, 0.72083, 19, -35.22, -40.82, 0.27917, 2, 18, 200.49, -50.03, 0.91667, 19, -48.31, -34.49, 0.08333, 1, 18, 161.11, -36.98, 1, 2, 17, 150.1, -116.77, 0.08333, 18, 119.88, -71.55, 0.91667, 2, 17, 154.99, -70.72, 0.42846, 18, 73.68, -68.48, 0.57154, 2, 17, 150.31, -65.27, 0.35605, 18, 68.43, -73.37, 0.64395, 2, 17, 146.52, -60.87, 0.59148, 18, 64.18, -77.33, 0.40852, 2, 17, 115.13, -75.09, 0.8446, 18, 79.61, -108.13, 0.1554, 1, 17, 63.33, -98.54, 1, 1, 17, 21.78, -94.56, 1, 1, 17, -66.69, -32.05, 1, 1, 17, -6.63, 52.97, 1, 1, 17, 58.15, -6.01, 1, 1, 17, 121.17, 2.44, 1, 1, 17, 188.87, -12.1, 1, 2, 17, 197.12, -18.43, 0.7, 18, 19.79, -28.44, 0.3, 2, 17, 203.99, -28.62, 0.3, 18, 29.7, -21.18, 0.7, 1, 18, 136.67, -7.43, 1, 2, 18, 164.32, 0.67, 0.7, 19, -2.53, 7.74, 0.3, 2, 18, 177.98, 21.58, 0.25, 19, 19.92, -3.2, 0.75, 1, 19, 71.94, -6.3, 1, 2, 19, 79.66, -3.72, 0.7, 20, -9.29, 21.05, 0.3, 2, 19, 87.98, 7.26, 0.3125, 20, 3.43, 15.76, 0.6875, 2, 20, 62.84, 4.16, 0.72917, 21, -21.96, -2.67, 0.27083 ], + "hull": 36, + "edges": [ 66, 68, 66, 64, 56, 54, 54, 52, 52, 50, 46, 44, 44, 42, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 68, 70, 0, 70, 46, 48, 48, 50, 14, 12, 12, 10, 60, 58, 58, 56, 42, 40, 40, 38, 18, 16, 16, 14, 22, 20, 20, 18, 38, 36, 36, 34, 60, 62, 62, 64, 68, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 84, 86, 16, 88, 86, 88, 18, 90, 90, 38, 88, 90, 20, 92, 92, 36, 90, 92, 92, 94, 94, 22, 94, 32, 30, 24, 88, 40, 86, 14, 84, 12, 82, 10, 82, 52, 48, 84, 44, 86, 78, 6, 4, 76, 80, 8, 80, 56, 58, 78, 76, 60 ], + "width": 338, + "height": 429 + } + }, + "raptor-horn": { + "raptor-horn": { "x": 156.21, "y": 74.11, "rotation": -137.26, "width": 363, "height": 159 } + }, + "raptor-horn-back": { + "raptor-horn-back": { "x": 121.43, "y": 83.01, "rotation": -132.22, "width": 351, "height": 153 } + }, + "raptor-jaw": { + "raptor-jaw": { + "type": "mesh", + "uvs": [ 0.43611, 0.10281, 0.50457, 0.26446, 0.59673, 0.37777, 0.69416, 0.49754, 0.79771, 0.54917, 0.91149, 0.59812, 1, 0.63619, 0.99305, 0.85625, 0.67606, 1, 0.39521, 1, 0.19457, 0.89404, 0.2161, 0.6497, 0, 0.46112, 0, 0, 0.26125, 1.0E-5, 0.19457, 0.29385, 0.60678, 0.81243, 0.42896, 0.88938, 0.86006, 0.80271, 0.64788, 0.93008, 0.58349, 0.62419, 0.41196, 0.69752, 0.46153, 0.51921, 0.35989, 0.3664, 0.32564, 0.54238 ], + "triangles": [ 12, 13, 15, 15, 13, 14, 8, 18, 7, 8, 9, 19, 9, 17, 19, 8, 19, 18, 9, 10, 17, 17, 16, 19, 19, 16, 18, 10, 21, 17, 10, 11, 21, 17, 21, 16, 7, 18, 6, 21, 20, 16, 4, 16, 20, 4, 20, 3, 16, 4, 18, 18, 5, 6, 18, 4, 5, 11, 24, 21, 21, 22, 20, 21, 24, 22, 11, 12, 24, 20, 22, 3, 12, 15, 24, 24, 23, 22, 24, 15, 23, 22, 2, 3, 2, 23, 1, 2, 22, 23, 1, 23, 0, 23, 15, 0, 15, 14, 0 ], + "vertices": [ 1, 54, 28.47, 75.44, 1, 1, 54, 66.98, 65.83, 1, 1, 54, 98.09, 68.86, 1, 1, 54, 130.98, 72.06, 1, 1, 54, 159.14, 77.75, 1, 1, 54, 184.6, 91.13, 1, 1, 54, 204.41, 101.54, 1, 1, 54, 239.23, 68.91, 1, 1, 54, 229.24, 2.68, 1, 1, 54, 173.67, -58.3, 1, 1, 54, 125.49, -79.1, 1, 1, 54, 87.8, -40.51, 1, 2, 54, -5.59, -78.2, 0.32267, 8, -21.32, -18.84, 0.67733, 1, 8, 106.45, -6.22, 1, 1, 8, 95.42, -85.63, 1, 1, 54, 24.89, 6.25, 1, 1, 54, 174.32, 6.19, 1, 1, 54, 160.25, -36.54, 1, 1, 54, 210.56, 52.8, 1, 1, 54, 208.35, 3.52, 1, 1, 54, 137.3, 31.58, 1, 1, 54, 124.75, -11.2, 1, 1, 54, 102.54, 22.8, 1, 1, 54, 61.9, 25.79, 1, 1, 54, 86.18, -5.32, 1 ], + "hull": 15, + "edges": [ 24, 26, 24, 22, 22, 20, 20, 18, 18, 16, 8, 6, 2, 0, 26, 28, 0, 28, 26, 30, 24, 30, 30, 0, 14, 16, 14, 12, 8, 32, 32, 34, 8, 10, 10, 12, 2, 4, 4, 6 ], + "width": 252, + "height": 275 + } + }, + "raptor-jaw-inside": { + "raptor-jaw2": { + "type": "mesh", + "path": "raptor-jaw", + "uvs": [ 0.43611, 0.10281, 0.50457, 0.26446, 0.69416, 0.49754, 0.79771, 0.54917, 1, 0.63619, 0.99305, 0.85625, 0.67606, 1, 0.39521, 1, 0.19457, 0.89404, 0.2161, 0.6497, 0, 0.46112, 0, 0, 0.26125, 1.0E-5, 0.19457, 0.29385, 0.60678, 0.81243, 0.42896, 0.88938 ], + "triangles": [ 10, 11, 13, 13, 11, 12, 7, 15, 6, 15, 14, 6, 6, 14, 5, 7, 8, 15, 8, 9, 15, 15, 9, 14, 14, 3, 5, 5, 3, 4, 14, 2, 3, 14, 9, 2, 10, 13, 9, 9, 1, 2, 9, 13, 1, 13, 0, 1, 13, 12, 0 ], + "vertices": [ 1, 54, 28.9, 96.24, 1, 1, 54, 65.84, 86.82, 1, 1, 54, 125.41, 92.66, 1, 1, 54, 151.38, 98.09, 1, 1, 54, 191.91, 121, 1, 1, 54, 227.3, 89.29, 1, 1, 54, 223.4, 25.16, 1, 1, 54, 176.27, -33.76, 1, 1, 54, 132.75, -53.77, 1, 1, 54, 94.17, -16.26, 1, 2, 54, 19.52, -38.44, 0.32267, 8, -3.76, -62.46, 0.67733, 1, 8, 98.59, -46.15, 1, 1, 8, 110.02, -102.65, 1, 1, 54, 31.25, 29.22, 1, 1, 54, 171.54, 28.72, 1, 1, 54, 161.87, -12.64, 1 ], + "hull": 13, + "edges": [ 20, 22, 20, 18, 18, 16, 16, 14, 14, 12, 6, 4, 4, 2, 2, 0, 22, 24, 0, 24, 22, 26, 20, 26, 26, 0, 10, 12, 6, 8, 10, 8, 6, 28, 28, 30 ], + "width": 252, + "height": 275 + } + }, + "raptor-mouth-inside": { + "raptor-mouth-inside": { + "type": "mesh", + "uvs": [ 1, 0.29017, 0.37217, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 0, 1, 3, 3, 4, 0 ], + "vertices": [ 1, 8, 26.56, -211.68, 1, 1, 54, 130.45, -7.83, 1, 1, 54, 109.72, -24.21, 1, 1, 8, 47.22, -139.7, 1, 1, 8, 50.33, -210.63, 1 ], + "hull": 5, + "edges": [ 4, 6, 6, 8, 2, 4, 0, 8, 2, 0 ], + "width": 71, + "height": 82 + } + }, + "raptor-saddle": { + "raptor-saddle-w-shadow": { + "type": "mesh", + "uvs": [ 0.28517, 0.09749, 0.26891, 0.14719, 0.32431, 0.28893, 0.45069, 0.52793, 0.56076, 0.56219, 0.69936, 0.53502, 0.71567, 0.44878, 0.83797, 0.36373, 0.91271, 0.34719, 1, 0.53622, 1, 0.61771, 0.93479, 0.82943, 0.87524, 0.96013, 0.74099, 1, 0.28984, 0.9496, 0.12982, 0.85304, 0.10295, 0.69443, 0.10449, 0.63657, 0.20499, 0.6452, 0.0954, 0.41741, 0.00133, 0.37841, 0, 0.27026, 0.11186, 0, 0.17021, 0, 0.24413, 0, 0.46313, 0.92332, 0.56755, 0.84415, 0.94056, 0.67906, 0.9263, 0.43106, 0.2137, 0.18682, 0.18239, 0.28963, 0.21653, 0.33824, 0.32307, 0.44535, 0.38606, 0.52911, 0.39069, 0.55971, 0.36568, 0.6032, 0.38235, 0.62414, 0.43979, 0.69174, 0.53891, 0.71429, 0.62321, 0.7159, 0.70381, 0.69254, 0.74827, 0.66355, 0.78996, 0.62087, 0.80571, 0.56933, 0.79737, 0.54033, 0.75661, 0.51215, 0.72789, 0.51537, 0.20634, 0.08376, 0.17577, 0.12886, 0.13686, 0.18765, 0.11185, 0.28751, 0.17762, 0.36321, 0.26192, 0.46066, 0.30546, 0.50012, 0.31565, 0.55488, 0.81026, 0.7038, 0.86992, 0.65976, 0.89927, 0.54517, 0.84925, 0.47993, 0.81868, 0.43161 ], + "triangles": [ 47, 23, 24, 47, 24, 0, 47, 22, 23, 1, 47, 0, 48, 47, 1, 29, 48, 1, 48, 49, 22, 47, 48, 22, 49, 48, 29, 21, 22, 49, 50, 21, 49, 29, 1, 2, 30, 49, 29, 30, 29, 2, 50, 49, 30, 31, 30, 2, 51, 50, 30, 51, 30, 31, 20, 21, 50, 19, 20, 50, 19, 50, 51, 8, 9, 28, 7, 8, 28, 59, 7, 28, 32, 31, 2, 2, 3, 32, 7, 59, 6, 52, 31, 32, 51, 31, 52, 58, 59, 28, 53, 52, 32, 45, 6, 59, 45, 59, 58, 46, 6, 45, 33, 53, 32, 3, 33, 32, 46, 5, 6, 44, 45, 58, 57, 58, 28, 57, 28, 9, 44, 58, 57, 54, 53, 33, 34, 33, 3, 54, 33, 34, 43, 44, 57, 35, 54, 34, 57, 9, 10, 46, 44, 43, 44, 46, 45, 36, 35, 34, 52, 19, 51, 19, 52, 18, 54, 52, 53, 54, 18, 52, 56, 43, 57, 27, 56, 57, 42, 43, 56, 46, 42, 5, 43, 42, 46, 41, 5, 42, 10, 27, 57, 3, 36, 34, 37, 3, 4, 37, 36, 3, 40, 5, 41, 4, 5, 40, 16, 17, 18, 55, 42, 56, 41, 42, 55, 38, 37, 4, 39, 38, 4, 40, 39, 4, 27, 55, 56, 11, 55, 27, 11, 27, 10, 26, 38, 39, 15, 16, 18, 26, 25, 37, 26, 37, 38, 14, 18, 37, 35, 18, 54, 36, 18, 35, 37, 18, 36, 14, 37, 25, 15, 18, 14, 12, 55, 11, 55, 13, 40, 55, 40, 41, 13, 55, 12, 26, 39, 40, 13, 26, 40, 25, 26, 13, 14, 25, 13 ], + "vertices": [ 262.59, 79.92, 244.74, 92.82, 188.83, 69.76, 114.07, 26.79, 102.07, -9.38, 113.32, -54.32, 145.78, -58.87, 178.6, -97.98, 185.38, -122.19, 120.06, -152.19, 84.63, -153.03, 15.94, -134.16, -24.77, -117.84, -45.38, -70.46, -59.12, 75.16, -24.15, 128.17, 35.11, 138.33, 56.81, 138.33, 54.35, 105.5, 138.9, 143.23, 152.8, 174.24, 193.34, 175.62, 295.51, 141.56, 295.96, 122.54, 296.53, 98.45, -47.94, 18.91, -17.46, -14.42, 67.83, -136.04, 154.04, -127.36, 226.26, 106.71, 187.47, 116.01, 169.51, 104.45, 130.18, 68.79, 99.26, 47.52, 87.82, 45.74, 71.33, 53.5, 63.61, 47.89, 52.57, 28.9, 44.88, -3.61, 44.93, -31.1, 54.3, -57.16, 65.51, -71.39, 81.83, -84.6, 101.28, -89.28, 112.08, -86.31, 122.33, -72.77, 120.91, -63.44, 264.84, 110.02, 247.7, 119.59, 225.36, 131.75, 187.73, 139.02, 159.85, 116.91, 123.97, 88.58, 109.51, 74.04, 89.06, 70.23, 41.99, -86.15, 68.62, -111.21, 111.05, -119.56, 135.12, -102.68, 153, -92.29 ], + "hull": 25, + "edges": [ 44, 42, 40, 42, 40, 38, 38, 36, 36, 34, 34, 32, 32, 30, 30, 28, 28, 50, 50, 52, 52, 26, 26, 24, 24, 22, 22, 54, 54, 20, 20, 18, 18, 56, 56, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 26, 28, 20, 22, 16, 18, 2, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 92, 10, 44, 46, 46, 48, 46, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 108, 36, 110, 112, 112, 114, 114, 116, 116, 118, 118, 14 ], + "width": 324, + "height": 341 + } + }, + "raptor-saddle-strap-back": { + "raptor-saddle-strap-back": { "x": 78.45, "y": -4.2, "rotation": 120.24, "width": 108, "height": 148 } + }, + "raptor-saddle-strap-front": { + "raptor-saddle-strap-front": { "x": 128.83, "y": -4.72, "rotation": 61.29, "width": 114, "height": 189 } + }, + "raptor-tongue": { + "raptor-tongue": { + "type": "mesh", + "uvs": [ 0.35242, 0.21561, 0.4794, 0.44246, 0.62072, 0.61177, 0.80563, 0.75374, 1, 0.90297, 1, 1, 0.8971, 1, 0.72055, 0.92255, 0.50668, 0.82872, 0.30402, 0.70725, 0.10537, 0.57889, 0, 0.50622, 0, 0, 0.26225, 0 ], + "triangles": [ 7, 8, 3, 6, 7, 3, 4, 6, 3, 6, 4, 5, 8, 7, 6, 9, 1, 2, 8, 9, 2, 9, 10, 1, 8, 2, 3, 0, 11, 12, 0, 12, 13, 10, 11, 0, 1, 10, 0 ], + "vertices": [ 2, 71, 3.64, 27.05, 0.6875, 72, -47.27, 33.88, 0.3125, 3, 71, 39.1, 19.46, 0.3125, 72, -13.42, 20.87, 0.625, 73, -51.54, 33.38, 0.0625, 3, 71, 71.56, 19.03, 0.0625, 72, 18.59, 15.4, 0.625, 73, -21.56, 20.92, 0.3125, 2, 72, 55.03, 16.86, 0.3125, 73, 14.29, 14.24, 0.6875, 2, 72, 93.34, 18.4, 0.08333, 73, 51.98, 7.21, 0.91667, 1, 73, 56.09, -4.51, 1, 2, 72, 85.07, -1.49, 0.08333, 73, 39.49, -10.33, 0.91667, 2, 72, 54.23, -9.18, 0.3125, 73, 7.71, -10.97, 0.6875, 3, 71, 75.14, -14.72, 0.0625, 72, 16.87, -18.5, 0.625, 73, -30.77, -11.74, 0.3125, 3, 71, 38.8, -25.81, 0.3125, 72, -20.75, -23.8, 0.625, 73, -68.63, -8.54, 0.0625, 2, 71, 2.4, -35.78, 0.6875, 72, -58.25, -27.99, 0.3125, 2, 71, -17.29, -40.63, 0.91667, 72, -78.46, -29.72, 0.08333, 1, 71, -59.92, 8.19, 1, 2, 71, -26.14, 37.69, 0.91667, 72, -75.02, 49.02, 0.08333 ], + "hull": 14, + "edges": [ 22, 24, 10, 12, 10, 8, 24, 26, 16, 4, 18, 16, 2, 4, 18, 2, 22, 20, 0, 26, 20, 0, 0, 2, 12, 14, 14, 16, 4, 6, 6, 8, 14, 6, 20, 18 ], + "width": 171, + "height": 128 + } + }, + "raptow-jaw-tooth": { + "raptor-jaw-tooth": { + "x": 215.7, + "y": 103.86, + "scaleX": 0.8674, + "scaleY": 0.8317, + "rotation": 56.5, + "width": 73, + "height": 96 + } + }, + "spineboy-torso": { + "torso": { "x": 55.88, "y": 4.87, "rotation": -104.14, "width": 108, "height": 182 } + }, + "stirrup-back": { + "stirrup-back": { "x": 53.2, "y": 31.34, "rotation": -21.13, "width": 87, "height": 69 } + }, + "stirrup-front": { + "stirrup-front": { "x": 36.14, "y": 20.39, "rotation": -21.13, "width": 89, "height": 100 } + }, + "stirrup-strap": { + "stirrup-strap": { + "type": "mesh", + "uvs": [ 0.36823, 0.27894, 0.45738, 0.38897, 0.54452, 0.49652, 0.67872, 0.59135, 0.81977, 0.69102, 1, 0.77344, 1, 1, 0.77957, 1, 0.6373, 0.8163, 0.53364, 0.72349, 0.40534, 0.60861, 0.30886, 0.52535, 0.2105, 0.44048, 0, 0.26245, 0, 0, 0.30637, 0, 0.20242, 0.23001 ], + "triangles": [ 2, 10, 1, 9, 10, 2, 9, 2, 3, 8, 9, 3, 8, 3, 4, 7, 8, 4, 7, 4, 5, 7, 5, 6, 16, 14, 15, 13, 14, 16, 16, 15, 0, 12, 16, 0, 12, 0, 1, 13, 16, 12, 11, 12, 1, 10, 11, 1 ], + "vertices": [ 2, 59, 24.72, 8.04, 0.80345, 60, -17.42, 11.02, 0.19655, 2, 59, 37.95, 8.04, 0.59979, 60, -4.37, 8.87, 0.40021, 2, 59, 50.88, 8.05, 0.36895, 60, 8.39, 6.77, 0.63105, 2, 59, 65.92, 12.27, 0.17748, 60, 23.92, 8.48, 0.82252, 2, 59, 81.73, 16.71, 0.05943, 60, 40.24, 10.28, 0.94057, 2, 59, 98.83, 25.04, 0.0121, 60, 58.47, 15.72, 0.9879, 2, 59, 114.44, 11.58, 0.00191, 60, 71.67, -0.11, 0.99809, 2, 59, 100.47, -4.61, 0.01818, 60, 55.25, -13.81, 0.98182, 2, 59, 78.8, -4.14, 0.07488, 60, 33.95, -9.81, 0.92512, 2, 59, 65.83, -6.24, 0.2028, 60, 20.81, -9.77, 0.7972, 2, 59, 49.79, -8.84, 0.39972, 60, 4.56, -9.71, 0.60028, 2, 59, 37.94, -10.97, 0.62658, 60, -7.48, -9.89, 0.37342, 2, 59, 25.86, -13.15, 0.82035, 60, -19.76, -10.07, 0.17965, 2, 59, 0.25, -18.03, 0.95289, 60, -45.82, -10.7, 0.04711, 2, 59, -17.84, -2.43, 0.9771, 60, -61.11, 7.64, 0.0229, 2, 59, 1.58, 20.07, 0.94775, 60, -38.29, 26.68, 0.05225, 2, 59, 10.84, -1.24, 0.9771, 60, -32.63, 4.14, 0.0229 ], + "hull": 16, + "edges": [ 28, 30, 30, 0, 12, 10, 8, 10, 12, 14, 14, 16, 26, 28, 24, 26, 26, 32, 32, 30, 20, 22, 22, 24, 0, 2, 2, 4, 4, 6, 6, 8, 16, 18, 18, 20 ], + "width": 97, + "height": 91 + } + }, + "tail-shadow": { + "raptor-tail-shadow": { + "type": "mesh", + "uvs": [ 1, 0.50387, 0.89276, 1, 0.82069, 0.96993, 0.72927, 0.92231, 0.64083, 0.87624, 0.54988, 0.83667, 0.47106, 0.80022, 0.40123, 0.7783, 0.32238, 0.75321, 0.25301, 0.73107, 0.20375, 0.71883, 0.11753, 0.71414, 0, 0.72519, 0, 0.66338, 0.10358, 0.57282, 0.18201, 0.5128, 0.23534, 0.47512, 0.30555, 0.4281, 0.37968, 0.37769, 0.44858, 0.3281, 0.51987, 0.2798, 0.61007, 0.21367, 0.70725, 0.14608, 0.80109, 0.08082, 0.90134, 0 ], + "triangles": [ 10, 11, 14, 13, 14, 11, 10, 14, 15, 12, 13, 11, 9, 10, 15, 8, 9, 16, 9, 15, 16, 8, 16, 17, 7, 8, 17, 6, 7, 18, 7, 17, 18, 6, 18, 19, 5, 6, 19, 4, 20, 21, 4, 5, 20, 5, 19, 20, 2, 22, 23, 3, 21, 22, 4, 21, 3, 3, 22, 2, 23, 24, 0, 23, 0, 2, 1, 2, 0 ], + "vertices": [ 1, 65, -0.16, 6.41, 1, 2, 65, 42.4, 61.67, 0.7548, 66, -28.13, 61.67, 0.2452, 2, 65, 69.28, 56.16, 0.53679, 66, -1.25, 56.16, 0.46321, 3, 65, 103.42, 48.48, 0.13235, 66, 32.89, 48.48, 0.82952, 67, -35.63, 49.98, 0.03813, 3, 65, 136.1, 39.06, 0.00439, 66, 65.57, 39.06, 0.62467, 67, -3.36, 39.23, 0.37094, 3, 66, 99.5, 32, 0.0995, 67, 30.26, 30.79, 0.87982, 68, -32.35, 31.34, 0.02068, 3, 66, 129.1, 26.76, 4.6E-4, 67, 59.61, 24.34, 0.57172, 68, -3.11, 24.4, 0.42782, 2, 67, 85.42, 18.44, 0.04275, 68, 22.59, 18.06, 0.95725, 2, 68, 51.63, 10.96, 0.64526, 69, -3.07, 10.89, 0.35474, 2, 68, 77.16, 4.61, 0.00246, 69, 22.59, 5.12, 0.99754, 2, 69, 40.97, 2.02, 0.84959, 70, -8.23, 2.08, 0.15041, 1, 70, 23.84, -2.64, 1, 1, 70, 68.09, -5.25, 1, 1, 70, 68.64, -7.05, 1, 1, 70, 29.23, -12.51, 1, 2, 69, 48.26, -18.17, 0.57427, 70, -1.07, -18.16, 0.42573, 1, 69, 27.9, -20.81, 1, 2, 68, 55.03, -24.11, 0.40024, 69, 1.11, -24.1, 0.59976, 3, 67, 90.24, -26.6, 0.00715, 68, 26.65, -27.06, 0.98709, 69, -27.19, -27.68, 0.00576, 2, 67, 63.89, -30.1, 0.5083, 68, 0.25, -30.11, 0.4917, 3, 66, 108.32, -33.03, 0.01005, 67, 36.41, -34.55, 0.9784, 68, -27.3, -34.09, 0.01155, 2, 66, 74.22, -38.09, 0.50429, 67, 2.13, -38.21, 0.49571, 3, 65, 107.88, -44.01, 0.04245, 66, 37.35, -44.01, 0.94684, 67, -34.96, -42.61, 0.01071, 2, 65, 72.14, -50.49, 0.52154, 66, 1.61, -50.49, 0.47846, 2, 65, 33.89, -58.82, 0.93522, 66, -36.64, -58.82, 0.06478 ], + "hull": 25, + "edges": [ 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 20, 30, 32, 18, 20, 32, 18, 34, 32, 16, 18, 34, 16, 14, 36, 16, 14, 34, 36, 38, 36, 12, 14, 38, 12, 40, 38, 10, 12, 40, 10, 2, 4, 46, 4, 42, 8, 8, 10, 40, 42, 46, 44, 44, 42, 4, 6, 6, 8, 44, 6, 2, 0, 0, 48, 46, 48 ], + "width": 377, + "height": 126 + } + }, + "visor": { + "visor": { "x": 99.13, "y": 6.51, "rotation": -70.58, "width": 261, "height": 168 } + } + } + } +], +"animations": { + "gun-grab": { + "slots": { + "front-hand": { + "attachment": [ + { "name": "front-open-hand" }, + { "time": 0.2333, "name": "gun" } + ] + }, + "gun": { + "attachment": [ + { "time": 0.2333, "name": null } + ] + } + }, + "bones": { + "front-hand2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 12.34 }, + { "time": 0.2333, "angle": -89.55, "curve": "stepped" }, + { "time": 0.2667, "angle": -89.55 }, + { "time": 0.3333, "angle": -79.79 }, + { "time": 0.6667, "angle": -10.18 } + ], + "scale": [ + {}, + { "time": 0.2333, "x": 0.938, "y": 0.938 }, + { "time": 0.6667 } + ] + }, + "front-arm": { + "rotate": [ + {}, + { "time": 0.1, "angle": -32 }, + { "time": 0.2333, "angle": 223.11, "curve": 0.25, "c3": 0.75 }, + { "time": 0.3333, "angle": 155.19, "curve": 0.25, "c3": 0.75 }, + { "time": 0.5333, "angle": 246.14, "curve": 0.184, "c2": 0.34, "c3": 0.75 }, + { "time": 0.6667, "angle": -56.75 } + ], + "translate": [ + {}, + { "time": 0.2333, "x": 6.5, "y": -2.66 }, + { "time": 0.3333, "x": 6.84, "y": 4.8 }, + { "time": 0.6667 } + ] + }, + "front-bracer": { + "rotate": [ + {}, + { "time": 0.2333, "angle": 86.02, "curve": "stepped" }, + { "time": 0.2667, "angle": 86.02 }, + { "time": 0.3333, "angle": 114.95 }, + { "time": 0.5333, "angle": 81.86, "curve": 0.25, "c3": 0.75 }, + { "time": 0.6667, "angle": 34.74 } + ] + } + }, + "ik": { + "spineboy-front-arm-ik": [ + { "mix": 0 } + ] + } + }, + "gun-holster": { + "slots": { + "front-hand": { + "attachment": [ + { "name": "gun" }, + { "time": 0.3, "name": "front-open-hand" }, + { "time": 0.6667, "name": "front-hand" } + ] + }, + "gun": { + "attachment": [ + { "name": null }, + { "time": 0.3, "name": "gun-nohand" } + ] + } + }, + "bones": { + "front-hand2": { + "rotate": [ + { "angle": -10.18 }, + { "time": 0.1667, "angle": -88.65 }, + { "time": 0.3, "angle": -89.52 }, + { "time": 0.4667, "angle": -35.36 }, + { "time": 0.6667, "angle": 0.18 } + ], + "scale": [ + {}, + { "time": 0.3, "x": 0.888, "y": 0.888 } + ] + }, + "front-arm": { + "rotate": [ + { "angle": -56.75 }, + { "time": 0.1667, "angle": 162.12 }, + { "time": 0.3, "angle": 216.91 }, + { "time": 0.4667, "angle": 200.21 }, + { "time": 0.6667, "angle": -25.24 } + ] + }, + "front-bracer": { + "rotate": [ + { "angle": 34.74 }, + { "time": 0.1667, "angle": 97.01 }, + { "time": 0.3, "angle": 97.41 }, + { "time": 0.4, "angle": 99.27 }, + { "time": 0.4667, "angle": 116.1 } + ] + } + }, + "ik": { + "spineboy-front-arm-ik": [ + { "mix": 0, "curve": "stepped" }, + { "time": 0.4667, "mix": 0 }, + { "time": 0.6667, "mix": 0.996 } + ] + } + }, + "jump": { + "slots": { + "mouth-smile": { + "attachment": [ + { "time": 0.1333, "name": "mouth-grind" }, + { "time": 0.9, "name": "mouth-smile" } + ] + } + }, + "bones": { + "front-foot-target": { + "rotate": [ + { "time": 0.3 }, + { "time": 0.4, "angle": -41.64 }, + { "time": 0.4667, "angle": -69.67 }, + { "time": 0.5333, "angle": -12.81 }, + { "time": 0.6667, "angle": 5.74 }, + { "time": 0.9667 } + ], + "translate": [ + { "y": 36.5, "curve": "stepped" }, + { "time": 0.4, "y": 36.5 }, + { "time": 0.4333, "x": -51.5, "y": 55.55 }, + { "time": 0.4667, "x": -134.04, "y": 111.1 }, + { "time": 0.5, "x": -128.33, "y": 165.93 }, + { "time": 0.5333, "x": -12.99, "y": 277.66 }, + { "time": 0.6667, "x": 243.74, "y": 685.02, "curve": 0.55, "c3": 0.928, "c4": 0.67 }, + { "time": 0.9667, "x": 95.94, "y": 36.5 } + ] + }, + "hip": { + "rotate": [ + { "angle": -4.48 }, + { "time": 0.1333, "angle": -23.03 }, + { "time": 0.4, "angle": 19.24, "curve": 0.228, "c2": 0.46, "c3": 0.75 }, + { "time": 0.6667, "angle": 31.43 }, + { "time": 0.9667, "angle": -10.76 }, + { "time": 1.0667, "angle": -18.59 }, + { "time": 1.2333, "angle": 3.45 }, + { "time": 1.3667, "angle": -4.48 } + ], + "translate": [ + { "x": -100.65, "y": 49.77 }, + { "time": 0.1333, "x": 9.38, "y": -109.07, "curve": 0.246, "c3": 0.609, "c4": 0.42 }, + { + "time": 0.2667, + "x": 150.37, + "y": -76.51, + "curve": 0.401, + "c2": 0.34, + "c3": 0.858, + "c4": 0.88 + }, + { "time": 0.4, "x": 361.01, "y": 36.69 }, + { "time": 0.6667, "x": 5.37, "y": 486.67, "curve": 0.665, "c3": 0.883, "c4": 0.6 }, + { "time": 0.9667, "x": -82.29, "y": 108.4 }, + { "time": 1.0667, "x": 84.63, "y": -79.01 }, + { "time": 1.1333, "x": 181, "y": -57.13 }, + { "time": 1.2333, "x": 238.12, "y": 50.64, "curve": 0.25, "c3": 0.75 }, + { "time": 1.3667, "x": 213.2, "y": 49.77 } + ] + }, + "back-foot-target": { + "rotate": [ + { "time": 0.3 }, + { "time": 0.4, "angle": -41.64 }, + { "time": 0.4667, "angle": -69.67 }, + { "time": 0.5333, "angle": -57.97 }, + { "time": 1, "angle": -9.2 }, + { "time": 1.0333, "angle": -7.79 } + ], + "translate": [ + { "time": 0.4 }, + { "time": 0.4333, "x": -87.33, "y": 23.79 }, + { "time": 0.4667, "x": -172.24, "y": 47.59 }, + { "time": 0.5, "x": -205.57, "y": 86.83 }, + { "time": 0.5333, "x": -176.81, "y": 207.15 }, + { + "time": 0.6667, + "x": 61.3, + "y": 639.9, + "curve": 0.651, + "c2": 0.41, + "c3": 0.756, + "c4": 0.91 + }, + { "time": 1.0333, "x": 235.63 } + ] + }, + "front-leg-target": { + "translate": [ + { "time": 0.4 }, + { "time": 0.4667, "x": -11.12, "y": 1.13 }, + { "time": 0.5, "x": 35.48, "y": 8.27 }, + { "time": 0.5333, "x": 6.65, "y": -19.6 }, + { "time": 0.6667, "x": -46.09, "y": -54.23 }, + { "time": 1, "x": -0.4, "y": 24.3 }, + { "time": 1.0667 } + ] + }, + "back-leg-target": { + "translate": [ + { "time": 0.4 }, + { "time": 0.4667, "x": 22.17, "y": 54.94 }, + { "time": 0.5, "x": 38.22, "y": 65.55 }, + { "time": 0.5333, "x": 20.12, "y": -2.63 }, + { "time": 0.6667, "x": -3.59, "y": -12.74 }, + { "time": 1, "x": -43, "y": -42.05 }, + { "time": 1.0667, "x": -29.03, "y": -3.97 } + ] + }, + "tail1": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -11.02 }, + { "time": 0.4, "angle": 0.53 }, + { "time": 0.5333, "angle": 8.64 }, + { "time": 1, "angle": -9.74 }, + { "time": 1.0667, "angle": -4.46, "curve": 0.243, "c3": 0.649 }, + { "time": 1.3667 } + ] + }, + "tail3": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -9.81 }, + { "time": 0.2333, "angle": -22.06 }, + { "time": 0.3, "angle": -26.63 }, + { "time": 0.4, "angle": -17.42 }, + { "time": 0.5333, "angle": -6.59 }, + { "time": 0.6667, "angle": 1.28 }, + { "time": 0.8667, "angle": -7.23 }, + { "time": 1, "angle": -12.78 }, + { "time": 1.0667, "angle": -12.03 }, + { "time": 1.1, "angle": -11.94 }, + { "time": 1.1667, "angle": -4.94 }, + { "time": 1.3667 } + ] + }, + "torso2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 0.52 }, + { "time": 0.4, "angle": -1.91 }, + { "time": 0.6667, "angle": 3 }, + { "time": 1, "angle": -3.26 }, + { "time": 1.0667, "angle": 4.82 }, + { "time": 1.3667 } + ] + }, + "front-arm1": { + "rotate": [ + {}, + { "time": 0.2667, "angle": -308.79 }, + { "time": 0.5, "angle": -398.7 }, + { "time": 0.7667, "angle": -297.81 }, + { "time": 1, "angle": 62.19 }, + { "time": 1.0667, "angle": -325.37 }, + { "time": 1.1333, "angle": -374.43 }, + { "time": 1.3667 } + ] + }, + "neck": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -5.01 }, + { "time": 0.4, "angle": -7.26 }, + { "time": 0.6667, "angle": 10.19 }, + { "time": 1, "angle": 24.02 }, + { "time": 1.0667, "angle": 4.83 }, + { "time": 1.1667, "angle": -1.79 }, + { "time": 1.3667 } + ], + "translate": [ + {}, + { "time": 0.1333, "x": -23.92, "y": -8.77, "curve": 0.146, "c2": 0.61, "c3": 0.75 }, + { "time": 0.4, "x": 29.55, "y": -17.63 }, + { "time": 0.6667, "x": 8.9, "y": -2.9 }, + { "time": 1 }, + { "time": 1.0667, "x": 52.78, "y": -42.59 }, + { "time": 1.1667, "x": 27.85, "y": -19.16 } + ] + }, + "back-arm1": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 51.21 }, + { "time": 0.5333, "angle": -38.7 }, + { "time": 0.8667, "angle": 62.19, "curve": "stepped" }, + { "time": 1.0333, "angle": 62.19 }, + { "time": 1.1, "angle": 34.63 }, + { "time": 1.1667, "angle": -14.43 }, + { "time": 1.3667 } + ] + }, + "spineboy-hip": { + "translate": [ + {}, + { "time": 0.1333, "x": 40.49, "y": -30.56 }, + { "time": 0.3333, "x": 53.35, "y": -66.67 }, + { "time": 0.4, "x": 38.42, "y": -79.98 }, + { "time": 0.5667, "x": 48.41, "y": -88.19 }, + { "time": 0.6667, "x": 46.33, "y": -75.54 }, + { "time": 1, "x": 41.71, "y": -19.46 }, + { "time": 1.1667 } + ] + }, + "tail5": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 7.22 }, + { "time": 0.2333, "angle": -10.93 }, + { "time": 0.3, "angle": -14.58 }, + { "time": 0.4, "angle": -5.79 }, + { "time": 0.5333, "angle": 5.75 }, + { "time": 0.5667, "angle": 8.65 }, + { "time": 0.6333, "angle": 17.01 }, + { "time": 0.6667, "angle": 11.44 }, + { "time": 0.8667, "angle": 8.39 }, + { "time": 1, "angle": 3.54 }, + { "time": 1.0667, "angle": -20.69 }, + { "time": 1.1, "angle": -22.16 }, + { "time": 1.1667, "angle": -18.9 }, + { "time": 1.2667, "angle": -10.15 }, + { "time": 1.3667 } + ] + }, + "front-arm2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 23.11 }, + { "time": 0.5, "angle": -75.93 }, + { "time": 0.7667, "angle": -1.41 }, + { "time": 1.0667, "angle": 26.87 }, + { "time": 1.1333, "angle": -56.15 }, + { "time": 1.3667 } + ] + }, + "gun": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 15.28 }, + { "time": 0.4, "angle": -53.41 }, + { "time": 0.7667, "angle": -63.35 }, + { "time": 1.0667, "angle": -29.92 }, + { "time": 1.2, "angle": 7.24 }, + { "time": 1.3, "angle": -3.7 }, + { "time": 1.3667 } + ] + }, + "head": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 22.2, "curve": 0.25, "c3": 0.75 }, + { "time": 0.2333, "angle": -11.5, "curve": 0.483, "c3": 0.686 }, + { "time": 0.4333, "angle": 10.27 }, + { "time": 0.6667, "angle": -40.57, "curve": 0.145, "c2": 0.48, "c3": 0.75 }, + { "time": 1, "angle": -23.3 }, + { "time": 1.0667, "angle": 21.8 }, + { "time": 1.1667, "angle": 15.37 }, + { "time": 1.3667 } + ], + "translate": [ + { "time": 0.2333 }, + { "time": 0.4333, "x": 23.4, "y": -54.02 }, + { "time": 0.6667, "x": 26.32, "y": -20.79 }, + { "time": 1, "x": 19.04, "y": 1.7 } + ] + }, + "back-arm2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": 23.11 }, + { "time": 0.5, "angle": -75.93 }, + { "time": 0.7667, "angle": -1.41 }, + { "time": 1.0667, "angle": 26.87 }, + { "time": 1.1333, "angle": -56.15 }, + { "time": 1.3667 } + ] + }, + "spineboy-torso": { + "rotate": [ + { "angle": -4.78 }, + { "time": 0.1333, "angle": -36.59 }, + { "time": 0.2667, "angle": -24.94 }, + { "time": 0.3333, "angle": -20.34 }, + { "time": 0.6667, "angle": -11.2 }, + { "time": 1, "angle": 10.49 }, + { "time": 1.1333, "angle": -30.21, "curve": 0.25, "c3": 0.75 }, + { "time": 1.3, "angle": -17.91 }, + { "time": 1.3667, "angle": -31.12 } + ] + }, + "tail7": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 14.46 }, + { "time": 0.2333, "angle": 20.19 }, + { "time": 0.3, "angle": -12.08 }, + { "time": 0.4, "angle": -13.06 }, + { "time": 0.5333, "angle": 7.14 }, + { "time": 0.5667, "angle": 23.54 }, + { "time": 0.6667, "angle": 9.86 }, + { "time": 0.8667, "angle": 10.31 }, + { "time": 1, "angle": 6.72 }, + { "time": 1.0667, "angle": -11.17 }, + { "time": 1.1, "angle": -16.51 }, + { "time": 1.1667, "angle": -11.98 }, + { "time": 1.2667, "angle": -8.74 }, + { "time": 1.3667 } + ] + }, + "front-foot2": { + "rotate": [ + { "time": 0.4 }, + { "time": 0.4333, "angle": -28.28 }, + { "time": 0.4667, "angle": -40.52 }, + { "time": 0.5333, "angle": -67.11 }, + { "time": 0.6667, "angle": -16.7 }, + { "time": 0.9667, "angle": 24.85 }, + { "time": 1.0667 } + ] + }, + "front-hand": { + "rotate": [ + {}, + { "time": 0.6667, "angle": -27.75 }, + { "time": 1.0667, "angle": -27.1 }, + { "time": 1.3667 } + ] + }, + "jaw": { + "rotate": [ + { "angle": 0.83 }, + { "time": 0.1333, "angle": 3.45 }, + { "time": 0.3333, "angle": -3.98 }, + { "time": 0.4667, "angle": -10.78, "curve": 0.609, "c3": 0.75 }, + { "time": 0.9, "angle": 2.06 }, + { "time": 0.9333, "angle": -3.14 }, + { "time": 1.2333, "angle": 0.83 } + ], + "translate": [ + { "x": -10.21, "y": 13.96 } + ] + }, + "back-foot2": { + "rotate": [ + { "time": 0.4 }, + { "time": 0.4333, "angle": -18.7 }, + { "time": 0.4667, "angle": -28.34 }, + { "time": 0.5333, "angle": -126.75 }, + { "time": 0.6667, "angle": -63.79 }, + { "time": 0.9333, "angle": 11.7 }, + { "time": 1, "angle": 24.85 }, + { "time": 1.0667 } + ] + }, + "back-hand": { + "rotate": [ + {}, + { "time": 0.6667, "angle": -27.75 }, + { "time": 1.0667, "angle": -27.1 }, + { "time": 1.3667 } + ] + }, + "tail9": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 10.15 }, + { "time": 0.2333, "angle": 21.25 }, + { "time": 0.3, "angle": -7.52 }, + { "time": 0.4, "angle": -13.06 }, + { "time": 0.5333, "angle": 10.6 }, + { "time": 0.5667, "angle": 23.27 }, + { "time": 0.6667, "angle": 9.49 }, + { "time": 0.8667, "angle": 23.25 }, + { "time": 1, "angle": 16.01 }, + { "time": 1.0667, "angle": -11.17 }, + { "time": 1.1, "angle": -17.02 }, + { "time": 1.1667, "angle": -22.43 }, + { "time": 1.2667, "angle": -13.57 }, + { "time": 1.3667 } + ] + }, + "front-foot3": { + "rotate": [ + { "time": 0.4 }, + { "time": 0.4333, "angle": 8.47 }, + { "time": 0.4667, "angle": 3.02 }, + { "time": 0.5333, "angle": -19.17 }, + { "time": 0.6667, "angle": -15.11 }, + { "time": 0.9667, "angle": 10.78 }, + { "time": 1.0667 } + ] + }, + "head2": { + "rotate": [ + { "angle": 18.08 }, + { "time": 0.1333, "angle": 44.55 }, + { "time": 0.3, "angle": 23.94 }, + { "time": 0.4, "angle": 16.51 }, + { "time": 0.6333, "angle": 11.09 }, + { "time": 0.9667, "angle": 7.01 }, + { "time": 1.0667, "angle": 26.78 }, + { "time": 1.1333, "angle": 31.89 }, + { "time": 1.2333, "angle": 16.95 }, + { "time": 1.3, "angle": 30.99 }, + { "time": 1.3667, "angle": 31.09 } + ] + }, + "neck2": { + "rotate": [ + { "angle": -0.77 }, + { "time": 0.1333, "angle": 15.96 }, + { "time": 0.3, "angle": 5.09 }, + { "time": 0.4, "angle": -2.34 }, + { "time": 0.6333, "angle": -7.76 }, + { "time": 0.9667, "angle": -11.84 }, + { "time": 1.0667, "angle": 7.94 }, + { "time": 1.1333, "angle": 13.05 }, + { "time": 1.2333, "angle": -1.91 }, + { "time": 1.3667, "angle": 12.24 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + { "x": -0.43, "y": -9.01 }, + { "time": 0.1333, "x": -27.62, "y": 9.05 }, + { "time": 0.2667, "x": 10.24, "y": -25.26 }, + { "time": 0.4, "x": 16.65, "y": -40.28 }, + { "time": 0.5, "x": 12.66, "y": -34.61 }, + { "time": 0.6667, "x": 2.73, "y": -3.04 }, + { "time": 0.9667, "x": -6.56, "y": 0.7 }, + { "time": 1.0667, "x": 12.25, "y": -29.51 } + ] + }, + "front-hand2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -22.27 }, + { "time": 0.2667, "angle": -16.91 }, + { "time": 0.4333, "angle": -2.22 }, + { "time": 0.6667, "angle": -6.95 } + ] + }, + "stirrup": { + "rotate": [ + {}, + { "time": 0.3, "angle": -13.39, "curve": "stepped" }, + { "time": 0.9667, "angle": -13.39 }, + { "time": 1.2333 } + ] + }, + "spineboy-front-foot-target": { + "translate": [ + { "time": 0.2667 }, + { "time": 0.4333, "x": 19.72, "y": -2.18 }, + { "time": 0.5333, "x": 19.39, "y": -3.07 }, + { "time": 0.6667, "x": -3.87, "y": 6.01 }, + { "time": 1.0667, "x": -10.92, "y": 4.87 }, + { "time": 1.3667 } + ] + }, + "tail2": { + "rotate": [ + {}, + { "time": 0.2333, "angle": -6.06 }, + { "time": 0.3, "angle": -7.05 }, + { "time": 0.4, "angle": 4.7 }, + { "time": 0.5333, "angle": -1.99 }, + { "time": 1, "angle": -0.83 }, + { "time": 1.0667, "angle": -3.56 }, + { "time": 1.1, "angle": -7.07 }, + { "time": 1.1667, "angle": -6.46 } + ] + }, + "tail4": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 5.9 }, + { "time": 0.2333, "angle": -2.65 }, + { "time": 0.3, "angle": -3.31 }, + { "time": 0.4, "angle": 0.99 }, + { "time": 0.5333, "angle": 7.03 }, + { "time": 1, "angle": 5.36 }, + { "time": 1.0667, "angle": -0.43 }, + { "time": 1.1, "angle": -3.37 }, + { "time": 1.1667, "angle": -2.18 }, + { "time": 1.2667, "angle": 3.65 } + ] + }, + "tail6": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 20.13 }, + { "time": 0.2333, "angle": -3.52 }, + { "time": 0.3, "angle": -4.18 }, + { "time": 0.4, "angle": -11.91 }, + { "time": 0.5333, "angle": 4.01 }, + { "time": 0.5667, "angle": 8.34 }, + { "time": 0.8667, "angle": 5.66 }, + { "time": 1, "angle": 9.81 }, + { "time": 1.0667, "angle": -15.56 }, + { "time": 1.1, "angle": -18.28 }, + { "time": 1.1667, "angle": -10.86 }, + { "time": 1.2667, "angle": 3.69 } + ] + }, + "tail8": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 14.81 }, + { "time": 0.2333, "angle": 17.13 }, + { "time": 0.3, "angle": -10.98 }, + { "time": 0.4, "angle": -14.47 }, + { "time": 0.5333, "angle": 4.33 }, + { "time": 0.5667, "angle": 13.57 }, + { "time": 0.8667, "angle": 9.11 }, + { "time": 1, "angle": 9.41 }, + { "time": 1.0667, "angle": -15.96 }, + { "time": 1.1, "angle": -20.19 }, + { "time": 1.1667, "angle": -23.17 }, + { "time": 1.2667, "angle": -11.89 } + ] + }, + "tail10": { + "rotate": [ + { "angle": 6.72 }, + { "time": 0.1333, "angle": 0.52 }, + { "time": 0.2333, "angle": 10.93 }, + { "time": 0.3, "angle": -7.46 }, + { "time": 0.4, "angle": -12.6 }, + { "time": 0.5333, "angle": 11.74 }, + { "time": 1, "angle": 3.35 }, + { "time": 1.0667, "angle": -22.02 }, + { "time": 1.1, "angle": -26.24 }, + { "time": 1.1667, "angle": -29.22 }, + { "time": 1.2667, "angle": -17.95 } + ] + }, + "saddle-strap-back": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -3.99 }, + { "time": 0.2667, "angle": -2.13 }, + { "time": 0.5333, "angle": 1.36 }, + { "time": 0.9333, "angle": -1.8 }, + { "time": 1.3333, "angle": -0.3 }, + { "time": 1.4333 } + ] + }, + "back-leg1": { + "translate": [ + {}, + { "time": 0.4667, "x": -12.67, "y": -22.45 }, + { "time": 0.9 } + ] + }, + "bone3": { + "rotate": [ + {}, + { "time": 0.1, "angle": 3.16 }, + { "time": 0.1667, "angle": -7.3 }, + { "time": 0.2667, "angle": 14.19 }, + { "time": 0.3333, "angle": 5.37 }, + { "time": 0.5, "angle": -1.88 }, + { "time": 0.7667, "angle": 2.1 }, + { "time": 0.9667, "angle": 8.65 }, + { "time": 1.0333, "angle": -10.01 }, + { "time": 1.1, "angle": -14.96 }, + { "time": 1.1667, "angle": 2.21 }, + { "time": 1.2333, "angle": 6.21 }, + { "time": 1.3, "angle": 1.14 }, + { "time": 1.4, "angle": -2.77 } + ] + }, + "bone4": { + "rotate": [ + {}, + { "time": 0.1, "angle": 3.16 }, + { "time": 0.1667, "angle": -7.3 }, + { "time": 0.2667, "angle": 14.19 }, + { "time": 0.3333, "angle": 5.37 }, + { "time": 0.5, "angle": -1.88 }, + { "time": 0.7667, "angle": 2.1 }, + { "time": 0.9667, "angle": 8.65 }, + { "time": 1.0333, "angle": -10.01 }, + { "time": 1.1, "angle": -14.96 }, + { "time": 1.1667, "angle": 2.21 }, + { "time": 1.2333, "angle": 6.21 }, + { "time": 1.3, "angle": 1.14 }, + { "time": 1.4, "angle": -2.77 } + ] + }, + "bone5": { + "rotate": [ + {}, + { "time": 0.1, "angle": 3.16 }, + { "time": 0.1667, "angle": -7.3 }, + { "time": 0.2667, "angle": 14.19 }, + { "time": 0.3333, "angle": 5.37 }, + { "time": 0.5, "angle": -1.88 }, + { "time": 0.7667, "angle": 2.1 }, + { "time": 0.9667, "angle": 8.65 }, + { "time": 1.0333, "angle": -10.01 }, + { "time": 1.1, "angle": -14.96 }, + { "time": 1.1667, "angle": 2.21 }, + { "time": 1.2333, "angle": 6.21 }, + { "time": 1.3, "angle": 1.14 }, + { "time": 1.4, "angle": -2.77 } + ] + }, + "bone": { + "rotate": [ + {}, + { "time": 0.1, "angle": 3.16 }, + { "time": 0.1667, "angle": -7.3 }, + { "time": 0.2667, "angle": 14.19 }, + { "time": 0.3333, "angle": 5.37 }, + { "time": 0.5, "angle": -1.88 }, + { "time": 0.7667, "angle": 2.1 }, + { "time": 0.9667, "angle": 8.65 }, + { "time": 1.0333, "angle": -10.01 }, + { "time": 1.1, "angle": -14.96 }, + { "time": 1.1667, "angle": 2.21 }, + { "time": 1.2333, "angle": 6.21 }, + { "time": 1.3, "angle": 1.14 }, + { "time": 1.4, "angle": -2.77 } + ] + }, + "bone2": { + "rotate": [ + {}, + { "time": 0.1, "angle": 3.16 }, + { "time": 0.1667, "angle": -7.3 }, + { "time": 0.2667, "angle": 14.19 }, + { "time": 0.3333, "angle": 5.37 }, + { "time": 0.5, "angle": -1.88 }, + { "time": 0.7667, "angle": 2.1 }, + { "time": 0.9667, "angle": 8.65 }, + { "time": 1.0333, "angle": -10.01 }, + { "time": 1.1, "angle": -14.96 }, + { "time": 1.1667, "angle": 2.21 }, + { "time": 1.2333, "angle": 6.21 }, + { "time": 1.3, "angle": 1.14 }, + { "time": 1.4, "angle": -2.77 } + ] + } + } + }, + "roar": { + "slots": { + "mouth-smile": { + "attachment": [ + { "time": 0.6, "name": "mouth-grind" }, + { "time": 1.4333, "name": "mouth-smile" } + ] + } + }, + "bones": { + "hip": { + "rotate": [ + { "curve": 0.25, "c3": 0.75 }, + { "time": 0.2, "angle": -27.34, "curve": 0.334, "c2": 0.4, "c3": 0.656, "c4": 0.73 }, + { "time": 0.3, "angle": -22.37, "curve": 0.45, "c2": 0.09, "c3": 0.724, "c4": 0.65 }, + { "time": 0.5333, "angle": -3.36 }, + { "time": 0.6, "angle": -5.46 }, + { "time": 0.6667, "angle": -0.43 }, + { "time": 1.5667, "angle": -12.77, "curve": 0.295, "c3": 0.521, "c4": 0.96 }, + { "time": 1.8 } + ], + "translate": [ + { "curve": 0.817, "c2": 0.01, "c3": 0.75 }, + { + "time": 0.2, + "x": -225.6, + "y": -78.54, + "curve": 0.334, + "c2": 0.4, + "c3": 0.657, + "c4": 0.73 + }, + { "time": 0.3, "x": -339.74, "y": -70.39, "curve": 0.475, "c3": 0.793, "c4": 0.67 }, + { "time": 0.5333, "x": -121.06, "y": -146.24 }, + { "time": 0.6, "x": -9.1, "y": -87.2 }, + { "time": 0.6667, "x": 44.98, "y": -13.34 }, + { "time": 0.7333, "x": 41.57, "y": -6.52 }, + { "time": 0.8, "x": 44.98, "y": -13.34 }, + { "time": 0.8667, "x": 41.57, "y": -6.52, "curve": 0.25, "c3": 0.75 }, + { + "time": 1.2333, + "x": 48.94, + "y": -29.36, + "curve": 0.574, + "c2": 0.03, + "c3": 0.619, + "c4": 0.76 + }, + { + "time": 1.5667, + "x": -127.64, + "y": 26.21, + "curve": 0.36, + "c2": 0.01, + "c3": 0.701, + "c4": 0.55 + }, + { + "time": 1.7333, + "x": -45.45, + "y": 70.65, + "curve": 0.355, + "c2": 0.39, + "c3": 0.69, + "c4": 0.76 + }, + { + "time": 1.8, + "x": -25.54, + "y": 44.36, + "curve": 0.056, + "c2": 0.99, + "c3": 0.683, + "c4": 0.64 + }, + { "time": 2 } + ] + }, + "torso2": { + "rotate": [ + {}, + { "time": 0.2, "angle": 0.52 }, + { "time": 0.6, "angle": -22.13 }, + { "time": 1.5667, "angle": 0.52 }, + { "time": 1.8 } + ] + }, + "spineboy-torso": { + "rotate": [ + {}, + { "time": 0.2, "angle": -12.47 }, + { "time": 0.3, "angle": -37.77 }, + { "time": 0.4, "angle": -51.05 }, + { "time": 0.5, "angle": -59.08 }, + { "time": 0.6, "angle": -73.34 }, + { "time": 0.6667, "angle": -74.18 }, + { "time": 0.8, "angle": -68.39 }, + { "time": 0.8667, "angle": -67.25 }, + { "time": 1.1, "angle": -62.14 }, + { "time": 1.2, "angle": -64.59 }, + { "time": 1.3667, "angle": -50.19 }, + { "time": 1.5667, "angle": -12.47 }, + { "time": 1.8 } + ] + }, + "head2": { + "rotate": [ + { "angle": 12.98 }, + { "time": 0.2, "angle": 29.86 }, + { "time": 0.3, "angle": 38.44 }, + { "time": 0.6, "angle": 42.77 }, + { "time": 0.7, "angle": 46.69 }, + { "time": 0.8667, "angle": 45.89 }, + { "time": 1.2, "angle": 45.61 }, + { "time": 1.2667, "angle": 42.06 }, + { "time": 1.3667, "angle": 48.76 }, + { "time": 1.5667, "angle": 29.86 }, + { "time": 1.8 }, + { "time": 2, "angle": 12.98 } + ] + }, + "neck2": { + "rotate": [ + {}, + { "time": 0.2, "angle": 11.08 }, + { "time": 0.6, "angle": 37.25 }, + { "time": 1.2, "angle": 33.93 }, + { "time": 1.3667, "angle": 27.8 }, + { "time": 1.5667, "angle": 11.08 }, + { "time": 1.8 } + ] + }, + "front-arm1": { + "rotate": [ + {}, + { "time": 0.2, "angle": 25.6, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "angle": -393.29 }, + { "time": 0.6667, "angle": -379.24 }, + { "time": 0.8333, "angle": -388.76 }, + { "time": 1.3667, "angle": -18.16 }, + { "time": 1.8, "angle": -346.22 }, + { "time": 2 } + ] + }, + "front-arm2": { + "rotate": [ + {}, + { "time": 0.2, "angle": 23.11, "curve": 0.331, "c2": 0.42, "c3": 0.647, "c4": 0.74 }, + { "time": 0.4333, "angle": -9.34, "curve": 0.311, "c2": 0.38, "c3": 0.639, "c4": 0.7 }, + { "time": 0.5, "angle": -5.4, "curve": 0.287, "c2": 0.38, "c3": 0.611, "c4": 0.69 }, + { "time": 0.6, "angle": -52.61 }, + { "time": 0.7667, "angle": -65.84 }, + { "time": 1.0333, "angle": -39.95 }, + { "time": 1.3667, "angle": -67.86 }, + { "time": 1.8, "angle": -8.99 }, + { "time": 2 } + ] + }, + "front-hand": { + "rotate": [ + {}, + { "time": 0.2, "angle": -7.24 }, + { "time": 0.5, "angle": -25.8 }, + { "time": 0.6, "angle": 33.41 }, + { "time": 0.7667, "angle": 52.51 }, + { "time": 1.4, "angle": -30.97 }, + { "time": 1.5667, "angle": -7.24 }, + { "time": 1.8 } + ] + }, + "back-arm2": { + "rotate": [ + {}, + { "time": 0.2333, "angle": 23.11, "curve": 0.324, "c2": 0.45, "c3": 0.628, "c4": 0.76 }, + { "time": 0.4333, "angle": -2.44, "curve": 0.3, "c2": 0.38, "c3": 0.628, "c4": 0.7 }, + { "time": 0.5333, "angle": -22.11, "curve": 0.307, "c2": 0.35, "c3": 0.638, "c4": 0.68 }, + { "time": 0.6, "angle": -77.6 }, + { "time": 0.7667, "angle": -66.07 }, + { "time": 1.3667, "angle": -58.31 }, + { "time": 1.8, "angle": -8.99 }, + { "time": 2 } + ] + }, + "back-hand": { + "rotate": [ + {}, + { "time": 0.2, "angle": -7.24 }, + { "time": 0.4333, "angle": -36 }, + { "time": 0.6, "angle": 10.34 }, + { "time": 0.7667, "angle": 55.96 }, + { "time": 1.2333, "angle": 8.39 }, + { "time": 1.8 } + ] + }, + "back-arm1": { + "rotate": [ + {}, + { "time": 0.2333, "angle": 51.21, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "angle": -19.18 }, + { "time": 0.7667, "angle": -25.79 }, + { "time": 1.3667, "angle": -3.03 }, + { "time": 1.8, "angle": 13.78 }, + { "time": 2 } + ] + }, + "neck": { + "rotate": [ + {}, + { "time": 0.2, "angle": -8.26, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "angle": 13.44 }, + { "time": 1.5667, "angle": -8.26, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 1.8 } + ], + "translate": [ + {}, + { + "time": 0.2, + "x": -19.98, + "y": -1.45, + "curve": 0.28, + "c2": 0.54, + "c3": 0.53, + "c4": 0.78 + }, + { "time": 0.6, "x": 35.7, "y": -47.38 }, + { "time": 1.4667, "x": 2.83, "y": -4.9 }, + { "time": 1.5667, "x": 12.18, "y": 3.64 }, + { "time": 1.8, "x": 2.83, "y": -4.9 }, + { "time": 2 } + ] + }, + "head": { + "rotate": [ + {}, + { "time": 0.2, "angle": 9.94, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "angle": 23.25 }, + { "time": 0.7333, "angle": 24.85 }, + { "time": 0.9333, "angle": 25.3 }, + { "time": 1.3667, "angle": 27.9 }, + { "time": 1.5667, "angle": 12, "curve": 0.237, "c2": 0.4, "c3": 0.587, "c4": 0.72 }, + { "time": 1.6667, "angle": 11.92, "curve": 0.293, "c2": 0.42, "c3": 0.69, "c4": 0.67 }, + { "time": 1.9 } + ], + "translate": [ + { "time": 0.2, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "x": 12.3, "y": -89.23 }, + { "time": 0.6667, "x": 18.74, "y": -87.42 }, + { "time": 0.7333, "x": 16.57, "y": -87.92 }, + { "time": 0.8, "x": 18.74, "y": -87.42 }, + { "time": 0.8667, "x": 16.57, "y": -87.92 }, + { "time": 0.9333, "x": 18.74, "y": -87.42 }, + { "time": 1.3667, "x": 27.31, "y": -84.9 }, + { "time": 1.5667 } + ] + }, + "jaw": { + "rotate": [ + { "angle": -1.2 }, + { "time": 0.2, "angle": 1.83 }, + { "time": 0.4333, "angle": -13.72 }, + { "time": 0.6, "angle": 304.71 }, + { "time": 0.7333, "angle": -49.51 }, + { "time": 0.7667, "angle": -47.49 }, + { "time": 0.8, "angle": -45.13 }, + { "time": 0.8333, "angle": -43.73 }, + { "time": 0.8667, "angle": -43.36 }, + { "time": 0.9, "angle": -40.64 }, + { "time": 0.9333, "angle": -42.02, "curve": 0.775, "c2": 0.06, "c3": 0.821, "c4": 0.7 }, + { "time": 1.4, "angle": -17.61 }, + { "time": 1.5667, "angle": -8.79, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 1.8 } + ], + "translate": [ + { "x": -3.44, "y": 2.51 }, + { "time": 0.2, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6, "x": -19.47, "y": 17.94 }, + { "time": 0.6667, "x": -30.92, "y": 23.07 }, + { "time": 1.5667, "x": -3.44, "y": 2.51 } + ] + }, + "tongue1": { + "rotate": [ + { "time": 0.1667, "angle": 16.25 }, + { "time": 0.2, "angle": 15.93, "curve": 0.33, "c2": 0.42, "c3": 0.644, "c4": 0.74 }, + { "time": 0.3333, "angle": -0.58, "curve": 0.27, "c2": 0.42, "c3": 0.581, "c4": 0.72 }, + { "time": 0.5, "angle": 5.31 }, + { "time": 0.6, "angle": -4.66 }, + { "time": 0.6667, "angle": 5.7 }, + { "time": 0.7, "angle": 13.7 }, + { "time": 0.8333, "angle": 16.75 }, + { "time": 1, "angle": 15.1 }, + { "time": 1.1, "angle": 17.24 }, + { "time": 1.2667, "angle": 2.26 }, + { "time": 1.5667, "angle": 32.1, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 1.8 } + ], + "translate": [ + { "x": -22.37, "y": 13.32 } + ], + "scale": [ + { "time": 0.2 }, + { "time": 0.5667, "x": 1.16 }, + { "time": 0.7, "x": 1.413 }, + { "time": 0.8333, "x": 1.632 }, + { "time": 1.5667 } + ] + }, + "torso1": { + "rotate": [ + { "time": 0.6 }, + { "time": 0.6667, "angle": -6.14 }, + { "time": 0.7333, "angle": -3.57 }, + { "time": 0.8, "angle": -6.14 }, + { "time": 0.8667, "angle": -3.57 }, + { "time": 1, "angle": 3.56 }, + { "time": 1.3667, "angle": -6.11 }, + { "time": 1.5667 } + ] + }, + "horn-back": { + "rotate": [ + { "time": 0.2 }, + { "time": 1, "angle": 7.62 }, + { "time": 1.8 } + ] + }, + "horn-front": { + "rotate": [ + { "time": 0.2 }, + { "time": 1, "angle": 7.62 }, + { "time": 1.8 } + ] + }, + "front-leg-target": { + "translate": [ + {}, + { "time": 0.1333, "x": 94.98, "y": 17.68, "curve": "stepped" }, + { "time": 0.1667, "x": 94.98, "y": 17.68 }, + { + "time": 0.3, + "x": -61.43, + "y": -80.97, + "curve": 0.591, + "c2": 0.02, + "c3": 0.565, + "c4": 0.73 + }, + { "time": 0.6, "x": 54.8, "y": 26.89 }, + { "time": 0.6667, "x": 104.34, "y": 47.28 }, + { + "time": 1.2333, + "x": 126.91, + "y": 52.57, + "curve": 0.452, + "c2": 0.26, + "c3": 0.698, + "c4": 0.49 + }, + { "time": 1.5667, "x": 49.5, "y": 28.71 }, + { "time": 2 } + ] + }, + "back-leg-target": { + "translate": [ + {}, + { + "time": 0.2, + "x": -40.46, + "y": -17.34, + "curve": 0.33, + "c2": 0.42, + "c3": 0.644, + "c4": 0.74 + }, + { + "time": 0.4333, + "x": -39.15, + "y": -5.5, + "curve": 0.27, + "c2": 0.42, + "c3": 0.581, + "c4": 0.72 + }, + { "time": 0.6, "x": 17.09, "y": 42.26 }, + { + "time": 1.2333, + "x": 31.18, + "y": 60.17, + "curve": 0.452, + "c2": 0.26, + "c3": 0.698, + "c4": 0.49 + }, + { "time": 1.5667, "x": -19.04, "y": 19.62 }, + { "time": 2 } + ] + }, + "spineboy-hip": { + "translate": [ + {}, + { "time": 0.2, "x": 35.97, "y": -11.83 }, + { "time": 0.3, "x": 42.12, "y": -39.3 }, + { "time": 0.4333, "x": 48.96, "y": -59.92 }, + { "time": 0.5, "x": 48.85, "y": -52.7 }, + { "time": 0.6, "x": 49.06, "y": -51.25 }, + { "time": 0.6667, "x": 56.03, "y": -56.03 }, + { "time": 0.7333, "x": 43.66, "y": -49.87 }, + { "time": 0.8, "x": 42.93, "y": -49.25 }, + { "time": 0.8667, "x": 34.13, "y": -41.42 }, + { "time": 1, "x": 43.1, "y": -52.61 }, + { "time": 1.2667, "x": 53.82, "y": -63.04 }, + { "time": 1.3667, "x": 60.15, "y": -45.04 }, + { "time": 1.5667, "x": 35.97, "y": -11.83 }, + { "time": 1.8 } + ] + }, + "front-hand2": { + "rotate": [ + {}, + { "time": 0.2, "angle": -21.93 }, + { "time": 0.3, "angle": -23.29 }, + { "time": 0.4, "angle": -29.8 }, + { "time": 0.5, "angle": -36.62 }, + { "time": 0.6, "angle": -40.49 }, + { "time": 0.6667, "angle": -38.28 }, + { "time": 0.7333, "angle": -33.33 }, + { "time": 0.8, "angle": -28.06 }, + { "time": 1.3, "angle": -27.17 }, + { "time": 1.4, "angle": -27.62 }, + { "time": 1.5667 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + { "time": 0.2 }, + { "time": 0.6, "x": 42.84, "y": -71.37 }, + { "time": 0.8, "x": 23.9, "y": -69.35 }, + { "time": 1.3, "x": 21.13, "y": -48.34 }, + { "time": 1.4, "x": 17.74, "y": -52.7 }, + { "time": 1.5667 } + ] + }, + "gun": { + "rotate": [ + {}, + { "time": 0.2, "angle": 15.28 }, + { "time": 0.3333, "angle": -13.87 }, + { "time": 0.4, "angle": -40.91, "curve": 0.761, "c3": 0.95, "c4": 0.87 }, + { "time": 0.6, "angle": -15.61 }, + { "time": 0.6667, "angle": -43.39, "curve": 0.45, "c3": 0.75 }, + { "time": 0.7333, "angle": -25.56 }, + { "time": 1, "angle": -23.42 }, + { "time": 1.1667, "angle": -21.64 }, + { "time": 1.3667, "angle": -27.73 }, + { "time": 1.5667, "angle": -6.38 }, + { "time": 1.7, "angle": -14.44 }, + { "time": 1.8 }, + { "time": 1.9, "angle": -15.75 }, + { "time": 2 } + ], + "translate": [ + { "time": 0.2 }, + { "time": 0.6, "x": -18.37, "y": -9.19 }, + { "time": 1.5667 } + ] + }, + "tail1": { + "rotate": [ + {}, + { "time": 0.2667, "angle": -14.69, "curve": 0.28, "c2": 0.54, "c3": 0.53, "c4": 0.78 }, + { "time": 0.6 }, + { "time": 0.7667, "angle": 2.68 }, + { "time": 0.9333, "angle": 3.2, "curve": 0.377, "c2": 0.02, "c3": 0.713, "c4": 0.59 }, + { "time": 1.1667, "angle": -9.15, "curve": 0.431, "c2": 0.33, "c3": 0.738, "c4": 0.84 }, + { "time": 1.3, "angle": -14.94 }, + { "time": 1.5667, "angle": -11.02, "curve": 0.335, "c2": 0.34, "c3": 0.668, "c4": 0.67 }, + { "time": 1.6667, "angle": -10.95, "curve": 0.335, "c2": 0.35, "c3": 0.667, "c4": 0.69 }, + { "time": 1.8 }, + { "time": 2, "angle": 1.01 } + ] + }, + "tail3": { + "rotate": [ + { "angle": -4.66 }, + { "time": 0.1333, "angle": -1.14 }, + { "time": 0.2667, "angle": -10.12, "curve": 0.145, "c2": 0.39, "c3": 0.515, "c4": 0.72 }, + { "time": 0.4667, "angle": -27.25, "curve": 0.296, "c2": 0.39, "c3": 0.64, "c4": 0.73 }, + { "time": 0.6, "angle": 1.58 }, + { "time": 0.7333, "angle": -9.15 }, + { "time": 0.8333, "angle": -9.17 }, + { "time": 0.9333, "angle": -8.75 }, + { "time": 1.2, "angle": -1.6 }, + { "time": 1.3333, "angle": -14.48 }, + { "time": 1.5, "angle": -9.35 }, + { "time": 1.6667, "angle": 17.55 }, + { "time": 1.8333, "angle": 21.29 }, + { "time": 2, "angle": -4.66 } + ] + }, + "tail5": { + "rotate": [ + { "angle": 5.3 }, + { "time": 0.1333, "angle": 13.48 }, + { "time": 0.2667, "angle": 22.33 }, + { "time": 0.4667, "angle": -17.34, "curve": 0.269, "c2": 0.43, "c3": 0.578, "c4": 0.72 }, + { "time": 0.6, "angle": -7.88 }, + { "time": 0.7333, "angle": -2.96 }, + { "time": 0.8333, "angle": -5.92 }, + { "time": 0.9333, "angle": -5.02 }, + { "time": 1.2, "angle": 6.61 }, + { "time": 1.3333, "angle": 14.51 }, + { "time": 1.5, "angle": -15.86 }, + { "time": 1.6667, "angle": -4.49 }, + { "time": 2, "angle": 5.3 } + ] + }, + "tail7": { + "rotate": [ + { "angle": -10.89 }, + { "time": 0.1333, "angle": 12.24 }, + { "time": 0.2667, "angle": 19.39 }, + { "time": 0.4667, "angle": -11.34, "curve": 0.269, "c2": 0.43, "c3": 0.578, "c4": 0.72 }, + { "time": 0.6, "angle": -10.79 }, + { "time": 0.7333, "angle": -0.59 }, + { "time": 0.8333, "angle": 9.29 }, + { "time": 0.9333, "angle": -4.49 }, + { "time": 1.2, "angle": 7.15 }, + { "time": 1.3333, "angle": 15.05 }, + { "time": 1.5, "angle": -11.36 }, + { "time": 1.6667, "angle": -25.05 }, + { "time": 1.8333, "angle": -9.49 }, + { "time": 2, "angle": -10.89 } + ] + }, + "tail9": { + "rotate": [ + { "angle": -10.89 }, + { "time": 0.1333, "angle": 18.57 }, + { "time": 0.2667, "angle": 23.95 }, + { "time": 0.4667, "angle": -15.74, "curve": 0.269, "c2": 0.43, "c3": 0.578, "c4": 0.72 }, + { "time": 0.6, "angle": -9.8 }, + { "time": 0.7333, "angle": 8.13 }, + { "time": 0.8333, "angle": 11.04 }, + { "time": 0.9333, "angle": -2.74 }, + { "time": 1.2, "angle": 8.89 }, + { "time": 1.3333, "angle": 16.79 }, + { "time": 1.5, "angle": -9.62 }, + { "time": 1.6667, "angle": -23.3 }, + { "time": 1.8333, "angle": -7.74 }, + { "time": 2, "angle": -10.89 } + ] + }, + "tongue2": { + "rotate": [ + {}, + { "time": 0.1667, "angle": 6.48 }, + { "time": 0.2, "angle": 4.21 }, + { "time": 0.2667, "angle": 52.29 }, + { "time": 0.5, "angle": 17.71 }, + { "time": 0.6, "angle": 2.84 }, + { "time": 0.6667, "angle": 10.48 }, + { "time": 0.7, "angle": -9.91 }, + { "time": 0.7333, "angle": -12.97 }, + { "time": 0.7667, "angle": -5.12 }, + { "time": 0.8, "angle": -5.09 }, + { "time": 0.8333, "angle": 1.23 }, + { "time": 1, "angle": -33.21 }, + { "time": 1.2, "angle": 14.14 }, + { "time": 1.3667, "angle": 12.21 }, + { "time": 1.5667, "angle": -13.32 }, + { "time": 1.8 } + ], + "translate": [ + { "time": 0.2 }, + { "time": 0.5, "x": 6.19, "y": 1.67, "curve": "stepped" }, + { "time": 1.0667, "x": 6.19, "y": 1.67 }, + { "time": 1.3 } + ] + }, + "tongue3": { + "rotate": [ + {}, + { "time": 0.1667, "angle": 6.48 }, + { "time": 0.2, "angle": 4.21 }, + { "time": 0.2667, "angle": 52.29 }, + { "time": 0.5, "angle": 17.71 }, + { "time": 0.6, "angle": 13.82 }, + { "time": 0.6667, "angle": -2.82 }, + { "time": 0.7, "angle": -6.98 }, + { "time": 0.7333, "angle": -20.11 }, + { "time": 0.7667, "angle": -0.12 }, + { "time": 0.8, "angle": -7.1 }, + { "time": 0.8333, "angle": 1.23 }, + { "time": 1, "angle": -33.21 }, + { "time": 1.2, "angle": 14.14 }, + { "time": 1.3667, "angle": 19.46 }, + { "time": 1.5667, "angle": -36.24 }, + { "time": 1.8 } + ], + "translate": [ + { "time": 0.2 }, + { "time": 0.5, "x": 11.48, "y": 3.7 }, + { "time": 1.2333 } + ] + }, + "saddle-strap-back": { + "rotate": [ + { "angle": -2.53 }, + { "time": 0.2, "angle": -6.38 }, + { "time": 0.2667, "angle": -12.9 }, + { "time": 0.5, "angle": -4.15 }, + { "time": 0.6, "angle": -20.2 }, + { "time": 0.7, "angle": -5.55 }, + { "time": 0.8, "angle": -3.4 }, + { "time": 1.3333, "angle": -6.7 }, + { "time": 1.5667, "angle": -10.34 }, + { "time": 1.6333, "angle": -9.23 }, + { "time": 1.8 }, + { "time": 2, "angle": -2.53 } + ], + "scale": [ + { "time": 0.6 }, + { "time": 0.6667, "x": 1.083 }, + { "time": 0.8, "x": 1.097 }, + { "time": 1.5667 } + ] + }, + "front-foot-target": { + "rotate": [ + {}, + { "time": 0.1, "angle": -31.3 }, + { "time": 0.1667, "angle": -17.24 }, + { "time": 1.6, "angle": -2.25 }, + { "time": 1.6667, "angle": -21.66 }, + { "time": 1.8 } + ], + "translate": [ + {}, + { "time": 0.0333, "x": -101.15, "y": 98.46 }, + { "time": 0.1, "x": -308.64, "y": 72.48 }, + { "time": 0.1667, "x": -392.1, "y": 9.43, "curve": "stepped" }, + { "time": 1.6, "x": -392.1, "y": 9.43 }, + { "time": 1.6667, "x": -308.05, "y": 111.02 }, + { "time": 1.8 } + ] + }, + "front-foot2": { + "rotate": [ + {}, + { "time": 0.0333, "angle": -34.39 }, + { "time": 0.1, "angle": -11.91 }, + { "time": 0.2, "angle": -11.36 }, + { "time": 1.6, "angle": 14.29 }, + { "time": 1.6667, "angle": -41.83 }, + { "time": 1.7333, "angle": -1.1 }, + { "time": 1.8 } + ], + "scale": [ + { "time": 0.5667 }, + { "time": 0.6667, "x": 1.051 } + ] + }, + "front-foot3": { + "rotate": [ + {}, + { "time": 0.0333, "angle": 8 }, + { "time": 0.1, "angle": -1.59 }, + { "time": 0.2, "angle": 16.32 }, + { "time": 1.6, "angle": -8.75 }, + { "time": 1.6667, "angle": -12.37 }, + { "time": 1.8 } + ], + "translate": [ + { "x": -29.67, "curve": "stepped" }, + { "time": 1.6, "x": -29.67 }, + { "time": 1.6667, "x": -34.03, "y": 8.95 }, + { "time": 2, "x": -29.67 } + ], + "scale": [ + { "time": 0.5667 }, + { "time": 0.6667, "x": 1.058 } + ] + }, + "back-hand2": { + "rotate": [ + { "angle": -21.46 }, + { "time": 0.2, "angle": -21.93 }, + { "time": 0.3, "angle": -8.39 }, + { "time": 0.4, "angle": -5.38 }, + { "time": 0.5, "angle": -30.38 }, + { "time": 0.6, "angle": -55.56 }, + { "time": 0.6667, "angle": -18.74 }, + { "time": 0.7333, "angle": -20.26 }, + { "time": 0.8, "angle": -21.46 } + ] + }, + "saddle": { + "rotate": [ + { "angle": -3.18 }, + { "time": 0.6 }, + { "time": 0.8, "angle": -3.18 } + ], + "translate": [ + { "x": 12.68, "y": -2.67 }, + { "time": 0.6, "x": 9.26, "y": -0.42 }, + { "time": 0.7, "x": 12.68, "y": -2.67 } + ] + }, + "saddle-strap-front": { + "rotate": [ + { "angle": -0.37 }, + { "time": 0.2667, "angle": 0.04 }, + { "time": 0.4667, "angle": -4 }, + { "time": 0.6, "angle": -7 }, + { "time": 0.7, "angle": -7.25 }, + { "time": 0.8, "angle": -3.69 }, + { "time": 1.4667, "angle": -0.58 }, + { "time": 1.7667, "angle": 0.55 }, + { "time": 2, "angle": -0.37 } + ] + }, + "spineboy-back-arm-target": { + "translate": [ + {}, + { "time": 0.6, "x": 56.17, "y": -58.56 }, + { "time": 0.8, "x": 34.47, "y": -59.19 }, + { "time": 2 } + ] + }, + "tail2": { + "rotate": [ + { "angle": -4.33 }, + { "time": 0.1333, "angle": -15.43 }, + { "time": 0.2667, "angle": -9.41 }, + { "time": 0.7333, "angle": 0.95 }, + { "time": 0.9333, "angle": -1.28 }, + { "time": 1.3333, "angle": -16.53 }, + { "time": 1.5, "angle": -5.17 }, + { "time": 1.6667, "angle": 7.32 }, + { "time": 1.8333, "angle": 11.05 }, + { "time": 2, "angle": -4.33 } + ] + }, + "tail4": { + "rotate": [ + { "angle": 13.37 }, + { "time": 0.1333, "angle": 7.68 }, + { "time": 0.2667, "angle": 6.84 }, + { "time": 0.4667, "angle": -2.28 }, + { "time": 0.7333, "angle": -2.62 }, + { "time": 0.8333, "angle": -6.07 }, + { "time": 0.9333, "angle": 2.21 }, + { "time": 1.2, "angle": 9.58 }, + { "time": 1.3333, "angle": -0.15 }, + { "time": 1.5, "angle": -20.79 }, + { "time": 1.6667, "angle": -9.43 }, + { "time": 1.8333, "angle": -5.7 }, + { "time": 2, "angle": 13.37 } + ] + }, + "tail6": { + "rotate": [ + { "angle": 5.3 }, + { "time": 0.1333, "angle": 7.74 }, + { "time": 0.2667, "angle": 10.2 }, + { "time": 0.4667, "angle": -12.04 }, + { "time": 0.6, "angle": -1.26 }, + { "time": 0.9333, "angle": -4.96 }, + { "time": 1.2, "angle": 6.67 }, + { "time": 1.3333, "angle": 14.57 }, + { "time": 1.5, "angle": -11.84 }, + { "time": 1.6667, "angle": -25.53 }, + { "time": 1.8333, "angle": -9.25 }, + { "time": 2, "angle": 5.3 } + ] + }, + "tail8": { + "rotate": [ + { "angle": -10.89 }, + { "time": 0.1333, "angle": 6.12 }, + { "time": 0.2667, "angle": 15.74 }, + { "time": 0.4667, "angle": -21.25 }, + { "time": 0.6, "angle": -8.03 }, + { "time": 0.7333, "angle": 4.9 }, + { "time": 0.8333, "angle": 1.83 }, + { "time": 0.9333, "angle": -11.95 }, + { "time": 1.2, "angle": -0.32 }, + { "time": 1.3333, "angle": 7.59 }, + { "time": 1.5, "angle": -18.82 }, + { "time": 1.6667, "angle": -32.51 }, + { "time": 1.8333, "angle": -16.95 }, + { "time": 2, "angle": -10.89 } + ] + }, + "tail10": { + "rotate": [ + { "angle": -10.89 }, + { "time": 0.1333, "angle": 4.18 }, + { "time": 0.2667, "angle": 4.66 }, + { "time": 0.4667, "angle": -20.32 }, + { "time": 0.7333, "angle": 1.73 }, + { "time": 0.8333, "angle": -1.06 }, + { "time": 0.9333, "angle": -14.83 }, + { "time": 1.2, "angle": -3.2 }, + { "time": 1.3333, "angle": 4.7 }, + { "time": 1.5, "angle": -21.71 }, + { "time": 1.6667, "angle": -35.4 }, + { "time": 1.8333, "angle": -19.84 }, + { "time": 2, "angle": -10.89 } + ] + }, + "jaw-inside": { + "rotate": [ + {}, + { "time": 0.7333, "angle": 13.77 } + ], + "translate": [ + {}, + { "time": 0.5667, "x": -4.3, "y": 4.48 }, + { "time": 0.7333, "x": -23.59, "y": -9.32 } + ], + "scale": [ + { "time": 0.5667 }, + { "time": 0.7333, "x": 1.119 } + ] + }, + "bone": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -6.45 }, + { "time": 0.2667, "angle": 4.84 }, + { "time": 0.6667, "angle": 14.69 }, + { "time": 0.7667, "angle": -1.4 }, + { "time": 0.8333, "angle": 3.9 }, + { "time": 1.3333, "angle": 0.49 }, + { "time": 1.5, "angle": -8.16 }, + { "time": 1.5667, "angle": 4.87 }, + { "time": 1.6333, "angle": -1.8 }, + { "time": 1.8333, "angle": 1.81 }, + { "time": 2 } + ] + }, + "bone2": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -6.45 }, + { "time": 0.2667, "angle": 4.84 }, + { "time": 0.6667, "angle": 14.69 }, + { "time": 0.7667, "angle": -1.4 }, + { "time": 0.8333, "angle": 3.9 }, + { "time": 1.3333, "angle": 0.49 }, + { "time": 1.5, "angle": -8.16 }, + { "time": 1.5667, "angle": 4.87 }, + { "time": 1.6333, "angle": -1.8 }, + { "time": 1.8333, "angle": 1.81 }, + { "time": 2 } + ] + }, + "bone3": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -6.45 }, + { "time": 0.2667, "angle": 4.84 }, + { "time": 0.6667, "angle": 14.69 }, + { "time": 0.7667, "angle": -1.4 }, + { "time": 0.8333, "angle": 3.9 }, + { "time": 1.3333, "angle": 0.49 }, + { "time": 1.5, "angle": -8.16 }, + { "time": 1.5667, "angle": 4.87 }, + { "time": 1.6333, "angle": -1.8 }, + { "time": 1.8333, "angle": 1.81 }, + { "time": 2 } + ] + }, + "bone4": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -6.45 }, + { "time": 0.2667, "angle": 4.84 }, + { "time": 0.6667, "angle": 14.69 }, + { "time": 0.7667, "angle": -1.4 }, + { "time": 0.8333, "angle": 3.9 }, + { "time": 1.3333, "angle": 0.49 }, + { "time": 1.5, "angle": -8.16 }, + { "time": 1.5667, "angle": 4.87 }, + { "time": 1.6333, "angle": -1.8 }, + { "time": 1.8333, "angle": 1.81 }, + { "time": 2 } + ] + }, + "bone5": { + "rotate": [ + {}, + { "time": 0.1667, "angle": -6.45 }, + { "time": 0.2667, "angle": 4.84 }, + { "time": 0.6667, "angle": 14.69 }, + { "time": 0.7667, "angle": -1.4 }, + { "time": 0.8333, "angle": 3.9 }, + { "time": 1.3333, "angle": 0.49 }, + { "time": 1.5, "angle": -8.16 }, + { "time": 1.5667, "angle": 4.87 }, + { "time": 1.6333, "angle": -1.8 }, + { "time": 1.8333, "angle": 1.81 }, + { "time": 2 } + ] + } + }, + "deform": { + "default": { + "raptor-front-leg": { + "raptor-front-leg": [ + {}, + { + "time": 0.1667, + "offset": 150, + "vertices": [ -10.88947, -30.36389, -10.71732, -22.72197, 25.01976, 2.27203, -7.08154, -15.97241, 17.35857, 1.98693, -7.08154, -15.97241, 17.35857, 1.98693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7.08154, -15.97241, -16.2515, -6.41524, 0, 0, 0, 0, -2.62177, -5.91267, 6.42596, 0.73537, -2.62177, -5.91267, 6.42596, 0.73537, -2.62177, -5.91267, 6.42596, 0.73537 ] + }, + { + "time": 0.5, + "offset": 144, + "vertices": [ -13.42749, 17.0267, 15.81436, -1.82489, 12.55496, -3.69128, -14.84991, -27.69955, -12.20212, -20.72182, 23.54478, 0.26454, -7.08154, -15.97241, 17.35857, 1.98693, -7.08154, -15.97241, 17.35857, 1.98693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7.08154, -15.97241, -16.2515, -6.41524, 0, 0, 0, 0, -2.62177, -5.91267, 6.42596, 0.73537, -2.14818, -17.13634, 17.0141, 4.48871, 0.76036, -16.70564, 15.74725, 7.14192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7.43222, -10.01694, -8.45212, 9.17316, 0, 0, 0, 0, 0, 0, 0, 0, 8.35347, -9.45856, -10.85333, -6.43872 ] + }, + { + "time": 0.7, + "offset": 144, + "vertices": [ -8.16173, 41.49426, 18.18862, -10.69293, -6.44682, -46.91269, -10.54358, -11.12482, -6.70166, -2.12044, 13.43587, 16.82005, -7.08154, -15.97241, 17.35857, 1.98693, -7.08154, -15.97241, 17.35857, 1.98693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.77762, -30.78729, -28.91833, 1.94682, 0, 0, 0, 0, -2.62177, -5.91267, 6.42596, 0.73537, -2.14818, -17.13634, 17.0141, 4.48871, 0.76036, -16.70564, 15.74725, 7.14192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7.43222, -10.01694, -8.45212, 9.17316, 0.67496, -8.34445, -6.28122, 5.53439, 2.34509, 11.36743, 6.20795, -9.80856, 19.70685, -3.18417, -16.38966, -11.3985 ] + }, + { "time": 1.8 } + ] + } + } + } + }, + "walk": { + "slots": { + "raptor-jaw-inside": { + "color": [ + { "color": "646464ff" }, + { "time": 0.5333, "color": "808080ff" }, + { "time": 1.0667, "color": "646464ff" } + ] + }, + "tail-shadow": { + "color": [ + { "color": "0000004a" }, + { "time": 0.1333, "color": "00000000" }, + { "time": 0.2667, "color": "0000000c", "curve": "stepped" }, + { "time": 0.4333, "color": "0000000c" }, + { "time": 0.4667, "color": "0000001c" }, + { "time": 0.5333, "color": "00000000", "curve": "stepped" }, + { "time": 0.6667, "color": "00000000" }, + { "time": 0.8, "color": "00000024" }, + { "time": 0.9333, "color": "0000003a" }, + { "time": 1.0667, "color": "0000004a" } + ], + "attachment": [ + { "name": "raptor-tail-shadow" } + ] + } + }, + "bones": { + "front-foot-target": { + "rotate": [ + {}, + { "time": 0.2667, "angle": -51.26 }, + { "time": 0.4, "angle": -65.18 }, + { "time": 0.5333, "angle": -76.29 }, + { "time": 0.8, "angle": -76.53 }, + { "time": 1.0667 } + ], + "translate": [ + { "x": 343.28, "y": 36.5 }, + { "time": 0.2667, "x": 86.51, "y": 36.99 }, + { "time": 0.5333, "x": -173.36, "y": 37.42 }, + { "time": 0.6, "x": -68.16, "y": 141.15 }, + { "time": 0.7333, "x": 91.79, "y": 238.01 }, + { "time": 0.8, "x": 155.9, "y": 190.91 }, + { "time": 0.9667, "x": 303.28, "y": 94.41 }, + { "time": 1.0667, "x": 343.28, "y": 36.5 } + ] + }, + "hip": { + "rotate": [ + { "angle": -4.78 }, + { "time": 0.0667, "angle": -3.99 }, + { "time": 0.2667, "angle": -12.5 }, + { "time": 0.5333, "angle": -4.78 }, + { "time": 0.6, "angle": -3.99 }, + { "time": 0.8, "angle": -12.5 }, + { "time": 1.0667, "angle": -4.78 } + ], + "translate": [ + { "x": 161.93, "y": 4.9, "curve": 0.27, "c2": 0.38, "c3": 0.621, "c4": 0.4 }, + { "time": 0.0667, "x": 165.04, "y": -5.99, "curve": 0.245, "c2": 0.01, "c3": 0.758 }, + { "time": 0.2667, "x": 178.81, "y": 136.53, "curve": 0.25, "c3": 0.841, "c4": 0.81 }, + { + "time": 0.5333, + "x": 161.93, + "y": 4.9, + "curve": 0.27, + "c2": 0.38, + "c3": 0.621, + "c4": 0.4 + }, + { "time": 0.6, "x": 165.04, "y": -5.99, "curve": 0.245, "c2": 0.01, "c3": 0.758 }, + { "time": 0.8, "x": 178.81, "y": 136.52, "curve": 0.25, "c3": 0.859, "c4": 0.82 }, + { "time": 1.0667, "x": 161.93, "y": 4.9 } + ] + }, + "back-foot-target": { + "rotate": [ + { "angle": -62.73 }, + { "time": 0.2667, "angle": -107.17 }, + { "time": 0.4667, "angle": -40.52 }, + { "time": 0.8, "angle": -97.16 }, + { "time": 1.0667, "angle": -62.73 } + ], + "translate": [ + { "x": -266.7, "y": -15.47 }, + { "time": 0.1333, "x": -87.88, "y": 124.85 }, + { "time": 0.2667, "x": 88.36, "y": 134.06 }, + { "time": 0.3667, "x": 198.39, "y": 90.65 }, + { "time": 0.4667, "x": 308.19, "y": -26.42 }, + { "time": 0.6, "x": 167.06, "y": -26.42 }, + { "time": 1.0667, "x": -266.7, "y": -15.47 } + ] + }, + "front-leg1": { + "translate": [ + {}, + { "time": 0.0667, "x": -0.22, "y": 15.2 }, + { "time": 0.5333, "x": -0.34, "y": 12.16 }, + { "time": 0.7333, "x": -4.75, "y": 31.94 }, + { "time": 1.0667 } + ] + }, + "front-leg-target": { + "translate": [ + { "x": -18.05, "y": -2.89 }, + { "time": 0.4333, "x": -42.2, "y": -88.63 }, + { "time": 0.5333, "x": -27.31, "y": -43.91 }, + { "time": 0.7333, "x": -1.52, "y": -94.29 }, + { "time": 0.8, "x": -24.29, "y": -116.41 }, + { "time": 1, "x": -41.88, "y": -93.3 }, + { "time": 1.0667, "x": -18.05, "y": -2.89 } + ] + }, + "back-leg-target": { + "translate": [ + { "x": -2.05, "y": 15.12 }, + { "time": 0.2667, "x": 17.49, "y": -150.44 }, + { "time": 0.4667, "x": -40.21, "y": -81.76 }, + { "time": 0.5333, "x": -31.69, "y": -82.43 }, + { "time": 0.8, "x": 2.65, "y": -169.22 }, + { "time": 0.9333, "x": -16.77, "y": -98.31 }, + { "time": 1.0667, "x": -2.05, "y": 15.12 } + ] + }, + "tail1": { + "rotate": [ + { "angle": 1.31 }, + { "time": 0.0667, "angle": 4.14 }, + { "time": 0.3333, "angle": -5.78 }, + { "time": 0.6333, "angle": 4.14 }, + { "time": 0.9, "angle": -5.78 }, + { "time": 1.0667, "angle": 1.31 } + ] + }, + "torso1": { + "rotate": [ + { "angle": 7.22 }, + { "time": 0.2667, "angle": 4.2 }, + { "time": 0.5333, "angle": 7.22 }, + { "time": 0.8, "angle": 4.2 }, + { "time": 1.0667, "angle": 7.22 } + ] + }, + "saddle": { + "rotate": [ + { "angle": -2.52 }, + { "time": 0.2667, "angle": -4.17 }, + { "time": 0.5333, "angle": -3.85 }, + { "time": 0.8, "angle": -3.1 }, + { "time": 1.0667, "angle": -2.52 } + ], + "translate": [ + { "x": 5.87, "y": -0.06 }, + { "time": 0.2667, "curve": 0.15, "c2": 0.28, "c3": 0.75 }, + { "time": 0.3333, "x": -0.04, "y": 5.92, "curve": 0.421, "c3": 0.85, "c4": 0.78 }, + { "time": 0.5333, "x": -8.81, "y": 0.1 }, + { "time": 0.6, "x": -7.83, "y": -2.27 }, + { "time": 0.8, "curve": 0.15, "c2": 0.28, "c3": 0.75 }, + { "time": 0.8667, "x": -0.04, "y": 5.92, "curve": 0.421, "c3": 0.85, "c4": 0.78 }, + { "time": 1.0667, "x": 5.87, "y": -0.06 } + ] + }, + "torso2": { + "rotate": [ + { "angle": -4.19 }, + { "time": 0.2667, "angle": -1.92, "curve": 0.25, "c3": 0.75 }, + { "time": 0.5333, "angle": -4.19 }, + { "time": 0.8, "angle": -1.92, "curve": 0.25, "c3": 0.75 }, + { "time": 1.0667, "angle": -4.19 } + ] + }, + "front-arm1": { + "rotate": [ + { "angle": -329.45 }, + { "time": 0.5, "angle": -349.54 }, + { "time": 1.0667, "angle": -329.45 } + ], + "translate": [ + { "x": 20.65, "y": -7.55 }, + { "time": 0.5, "x": -9.9, "y": 10.94 }, + { "time": 0.8, "x": 24.1, "y": -1.47 }, + { "time": 0.9333, "x": 21.73, "y": -3.71 }, + { "time": 1.0667, "x": 20.65, "y": -7.55 } + ] + }, + "neck": { + "rotate": [ + { "angle": -22.13 }, + { "time": 0.2667, "angle": -4.12 }, + { "time": 0.5333, "angle": -22.13 }, + { "time": 0.8, "angle": -4.12 }, + { "time": 1.0667, "angle": -22.13 } + ], + "translate": [ + { "x": 19.46, "y": -14.29 }, + { "time": 0.2667, "x": 9.68, "y": -8.36 }, + { "time": 0.5333, "x": 21.46, "y": -15.75 }, + { "time": 0.8, "x": 9.68, "y": -8.36 }, + { "time": 1.0667, "x": 19.46, "y": -14.29 } + ] + }, + "back-arm1": { + "rotate": [ + { "angle": 23.86 }, + { "time": 0.5, "angle": 37.58 }, + { "time": 1.0667, "angle": 23.86 } + ], + "translate": [ + {}, + { "time": 0.5, "x": 11.13, "y": -13.39 }, + { "time": 1.0667 } + ] + }, + "saddle-strap-back": { + "rotate": [ + { "angle": -5.12 }, + { "time": 0.1, "angle": 2.48 }, + { "time": 0.3, "angle": -2.61 }, + { "time": 0.4333, "angle": -4.47 }, + { "time": 0.6333, "angle": 3.21 }, + { "time": 0.9, "angle": -5.33 }, + { "time": 1.0667, "angle": -5.12 } + ] + }, + "front-arm2": { + "rotate": [ + { "angle": -11.14 }, + { "time": 0.5, "angle": 22.44 }, + { "time": 1.0667, "angle": -11.14 } + ] + }, + "head": { + "rotate": [ + { "angle": 16.44, "curve": 0.351, "c2": 0.65, "c3": 0.686 }, + { "time": 0.2667, "angle": 15.71, "curve": 0.375, "c2": 0.5, "c3": 0.75 }, + { "time": 0.5333, "angle": 18.05 }, + { "time": 0.8, "angle": 20.32, "curve": 0.364, "c2": 0.45, "c3": 0.729, "c4": 0.9 }, + { "time": 1.0667, "angle": 16.44 } + ], + "translate": [ + { "x": 9.88, "y": -14.4 }, + { "time": 0.2667, "x": 5.05, "y": 2.22 }, + { "time": 0.5333, "x": 7.52, "y": -10.95 }, + { "time": 0.8, "x": 5.05, "y": 2.22 }, + { "time": 1.0667, "x": 9.88, "y": -14.4 } + ] + }, + "back-arm2": { + "rotate": [ + {}, + { "time": 0.5, "angle": -30.21 }, + { "time": 1.0667 } + ] + }, + "stirrup": { + "rotate": [ + { "angle": -17.15 }, + { "time": 0.2667, "angle": -4.96 }, + { "time": 0.5333 }, + { "time": 0.8, "angle": -4.96 }, + { "time": 1.0667, "angle": -17.15 } + ], + "translate": [ + { "x": 8.98, "y": 4.99 }, + { "time": 0.2667, "x": 4.85, "y": 1 }, + { "time": 0.5333, "x": 7.76, "y": -2.99 }, + { "time": 0.8, "x": 4.85, "y": 1 }, + { "time": 1.0667, "x": 8.98, "y": 4.99 } + ] + }, + "front-foot2": { + "rotate": [ + { "angle": 36.9 }, + { "time": 0.0667, "angle": 7.88 }, + { "time": 0.1333, "angle": 4.67 }, + { "time": 0.4, "angle": 7.59 }, + { "time": 0.5333, "angle": 8.08 }, + { "time": 0.6667, "angle": -67.33 }, + { "time": 0.7333, "angle": -65.24 }, + { "time": 1, "angle": 27.75 }, + { "time": 1.0667, "angle": 36.9 } + ] + }, + "front-hand": { + "rotate": [ + { "angle": 9.49 }, + { "time": 0.5, "angle": -48.61 }, + { "time": 1.0667, "angle": 9.49 } + ] + }, + "horn-back": { + "translate": [ + {}, + { "time": 0.2667, "x": 17.11, "y": 15.23 }, + { "time": 0.5333, "x": 4.7, "y": 1.5 }, + { "time": 0.8, "x": 15.44, "y": 7.47 }, + { "time": 1.0667 } + ] + }, + "jaw": { + "rotate": [ + { "angle": -2.84 }, + { "time": 0.2, "angle": -10.94 }, + { "time": 0.3333, "angle": -10.86 }, + { "time": 0.6667, "angle": -16.61 }, + { "time": 0.8667, "angle": -9.25 }, + { "time": 1.0667, "angle": -2.84 } + ], + "translate": [ + { "x": -0.34, "y": -2.02 }, + { "time": 0.2667, "x": 0.79, "y": 9.47 }, + { "time": 0.5, "x": 0.93, "y": 6.09 }, + { "time": 0.7333, "x": 0.79, "y": 9.47 }, + { "time": 1.0667, "x": -0.34, "y": -2.02 } + ] + }, + "back-foot2": { + "rotate": [ + {}, + { "time": 0.1333, "angle": -82.38 }, + { "time": 0.2667, "angle": -110.31 }, + { "time": 0.4333, "angle": 36.22 }, + { "time": 0.5333, "angle": 2.1 }, + { "time": 1.0667 } + ] + }, + "back-hand": { + "rotate": [ + { "angle": -28.89 }, + { "time": 0.5, "angle": 12.2 }, + { "time": 1.0667, "angle": -28.89 } + ] + }, + "tongue1": { + "rotate": [ + { "angle": 30.23 }, + { "time": 0.2333, "angle": 14.93 }, + { "time": 0.7, "angle": 0.38 }, + { "time": 0.9, "angle": 18.55 }, + { "time": 1.0667, "angle": 30.23 } + ] + }, + "front-foot3": { + "rotate": [ + { "angle": -1.65 }, + { "time": 0.0667, "angle": -3.21 }, + { "time": 0.1333, "angle": -3.94 }, + { "time": 0.2667, "angle": -3.82 }, + { "time": 0.5333, "angle": -5.89 }, + { "time": 0.6333, "angle": -25.29 }, + { "time": 0.8333, "angle": -7.16 }, + { "time": 1, "angle": 10.93 }, + { "time": 1.0667, "angle": -1.65 } + ] + }, + "tongue2": { + "rotate": [ + { "angle": -16.02 }, + { "time": 0.2333, "angle": -11.27 }, + { "time": 0.7, "angle": -0.71 }, + { "time": 0.9, "angle": -6.84 }, + { "time": 1.0667, "angle": -16.02 } + ] + }, + "tongue3": { + "rotate": [ + { "angle": -16.02 }, + { "time": 0.2333, "angle": -28.5 }, + { "time": 0.7, "angle": -1.69 }, + { "time": 0.9, "angle": -32.34 }, + { "time": 1.0667, "angle": -16.02 } + ] + }, + "head2": { + "rotate": [ + { "angle": 16.22 }, + { "time": 0.2667, "angle": 29.6 }, + { "time": 0.5333, "angle": 18.04 }, + { "time": 0.8, "angle": 30.81 }, + { "time": 1.0667, "angle": 16.22 } + ] + }, + "neck2": { + "rotate": [ + { "angle": 36.68 }, + { "time": 0.2667, "angle": 9.43 }, + { "time": 0.4, "angle": 16.32 }, + { "time": 0.5333, "angle": 38.06 }, + { "time": 0.8, "angle": 14.74 }, + { "time": 1.0667, "angle": 36.68 } + ], + "translate": [ + { "x": -6.84, "y": -1.8 }, + { "time": 0.2667, "x": -6.99, "y": 1.2 }, + { "time": 0.5333, "x": -6.03, "y": -5.15 }, + { "time": 0.8, "x": -10.81, "y": -0.35 }, + { "time": 1.0667, "x": -6.84, "y": -1.8 } + ] + }, + "spineboy-hip": { + "translate": [ + { "x": 30.8, "y": -38.27, "curve": 0.413, "c3": 0.873, "c4": 0.78 }, + { "time": 0.2667, "x": -12.88, "y": 0.58, "curve": 0.139, "c2": 0.18, "c3": 0.75 }, + { "time": 0.5333, "x": 33.99, "y": -13.71, "curve": 0.367, "c3": 0.867, "c4": 0.82 }, + { "time": 0.8, "x": -12.88, "y": 0.58, "curve": 0.164, "c2": 0.17, "c3": 0.75 }, + { "time": 1.0667, "x": 30.8, "y": -38.27 } + ] + }, + "spineboy-torso": { + "rotate": [ + { "angle": -42.71 }, + { "time": 0.2667, "angle": -10.38, "curve": 0.493, "c3": 0.75 }, + { "time": 0.5333, "angle": -45.79 }, + { "time": 0.8, "angle": -17.34, "curve": 0.493, "c3": 0.75 }, + { "time": 1.0667, "angle": -42.71 } + ] + }, + "front-arm": { + "translate": [ + {}, + { "time": 0.3333, "x": -14.43, "y": -11.03 }, + { "time": 0.5333 }, + { "time": 0.8, "x": -14.43, "y": -11.03 }, + { "time": 1.0667 } + ] + }, + "gun": { + "rotate": [ + { "angle": -11.68, "curve": 0.379, "c2": 0.6, "c3": 0.724 }, + { "time": 0.0667, "angle": -17.6 }, + { "time": 0.3333, "angle": 0.63, "curve": 0.25, "c3": 0.75 }, + { "time": 0.6, "angle": -15.69, "curve": 0.326, "c2": 0.01, "c3": 0.716 }, + { "time": 0.8667, "angle": 0.55, "curve": 0.242, "c3": 0.667, "c4": 0.67 }, + { "time": 1.0667, "angle": -11.68 } + ], + "translate": [ + { "x": 0.84, "y": -3.82 }, + { "time": 0.0667 }, + { "time": 0.3333, "x": 3.38, "y": -15.28 }, + { "time": 0.6 }, + { "time": 0.8667, "x": 3.38, "y": -15.28 }, + { "time": 1.0667, "x": 0.84, "y": -3.82 } + ] + }, + "tail2": { + "rotate": [ + { "angle": 9.88 }, + { "time": 0.1333, "angle": -0.81 }, + { "time": 0.2333, "angle": -2.7 }, + { "time": 0.3, "angle": -11.33 }, + { "time": 0.4333, "angle": -15.11 }, + { "time": 0.5333, "angle": 9.88 }, + { "time": 0.6667, "angle": -0.81 }, + { "time": 0.7667, "angle": -2.7 }, + { "time": 0.8333, "angle": -11.33 }, + { "time": 0.9667, "angle": -15.11 }, + { "time": 1.0667, "angle": 9.88 } + ] + }, + "tail3": { + "rotate": [ + { "angle": -7.15 }, + { "time": 0.1333, "angle": 7.47 }, + { "time": 0.2333, "angle": -0.7 }, + { "time": 0.3, "angle": -6.29 }, + { "time": 0.4333, "angle": 0.13 }, + { "time": 0.5333, "angle": -7.15 }, + { "time": 0.6667, "angle": 7.47 }, + { "time": 0.7667, "angle": -0.7 }, + { "time": 0.8333, "angle": -6.29 }, + { "time": 0.9667, "angle": 0.13 }, + { "time": 1.0667, "angle": -7.15 } + ] + }, + "tail4": { + "rotate": [ + { "angle": -4.53 }, + { "time": 0.1333, "angle": 11.46 }, + { "time": 0.2333, "angle": 5.93 }, + { "time": 0.3, "angle": 2.43 }, + { "time": 0.4333, "angle": 0.24 }, + { "time": 0.5333, "angle": -4.53 }, + { "time": 0.6667, "angle": 11.46 }, + { "time": 0.7667, "angle": 5.93 }, + { "time": 0.8333, "angle": 2.43 }, + { "time": 0.9667, "angle": 0.24 }, + { "time": 1.0667, "angle": -4.53 } + ] + }, + "tail5": { + "rotate": [ + { "angle": -9.9 }, + { "time": 0.1333, "angle": 11.7 }, + { "time": 0.2333, "angle": 13.82 }, + { "time": 0.3, "angle": 10.26 }, + { "time": 0.4333, "angle": -4.1 }, + { "time": 0.5333, "angle": -9.9 }, + { "time": 0.6667, "angle": 11.7 }, + { "time": 0.7667, "angle": 13.82 }, + { "time": 0.8333, "angle": 10.26 }, + { "time": 0.9667, "angle": -4.1 }, + { "time": 1.0667, "angle": -9.9 } + ] + }, + "tail6": { + "rotate": [ + { "angle": -9.9 }, + { "time": 0.1333, "angle": 13.73 }, + { "time": 0.2333, "angle": 15.23 }, + { "time": 0.3, "angle": 12.03 }, + { "time": 0.4333, "angle": -10.82 }, + { "time": 0.5333, "angle": -9.9 }, + { "time": 0.6667, "angle": 13.73 }, + { "time": 0.7667, "angle": 15.23 }, + { "time": 0.8333, "angle": 12.03 }, + { "time": 0.9667, "angle": -10.82 }, + { "time": 1.0667, "angle": -9.9 } + ], + "scale": [ + {}, + { "time": 0.1333, "x": 0.845 }, + { "time": 0.2667, "x": 0.91 }, + { "time": 0.4, "x": 0.834 }, + { "time": 0.5333, "x": 0.92 }, + { "time": 0.6667, "x": 0.884 }, + { "time": 0.8, "x": 0.967 }, + { "time": 0.9333, "x": 0.904 }, + { "time": 1.0667 } + ] + }, + "tail7": { + "rotate": [ + { "angle": -9.9 }, + { "time": 0.1333, "angle": 9.57 }, + { "time": 0.2333, "angle": 10.69 }, + { "time": 0.3, "angle": 8.31 }, + { "time": 0.4333, "angle": -9.18 }, + { "time": 0.5333, "angle": -9.9 }, + { "time": 0.6667, "angle": 9.57 }, + { "time": 0.7667, "angle": 10.69 }, + { "time": 0.8333, "angle": 8.31 }, + { "time": 0.9667, "angle": -9.18 }, + { "time": 1.0667, "angle": -9.9 } + ], + "scale": [ + {}, + { "time": 0.1333, "x": 0.845 }, + { "time": 0.2667, "x": 0.91 }, + { "time": 0.4, "x": 0.834 }, + { "time": 0.5333, "x": 0.92 }, + { "time": 0.6667, "x": 0.884 }, + { "time": 0.8, "x": 0.967 }, + { "time": 0.9333, "x": 0.904 }, + { "time": 1.0667 } + ] + }, + "tail8": { + "rotate": [ + { "angle": -9.9 }, + { "time": 0.0667, "angle": -14.09 }, + { "time": 0.1333, "angle": -6.85 }, + { "time": 0.2, "angle": 10.88 }, + { "time": 0.2333, "angle": 9.63 }, + { "time": 0.3, "angle": 9.48 }, + { "time": 0.4333, "angle": -10.9 }, + { "time": 0.4667, "angle": -21.91 }, + { "time": 0.5333, "angle": -9.9 }, + { "time": 0.6, "angle": -14.09 }, + { "time": 0.6667, "angle": -6.85 }, + { "time": 0.7333, "angle": 10.88 }, + { "time": 0.7667, "angle": 9.63 }, + { "time": 0.8333, "angle": 9.48 }, + { "time": 0.9667, "angle": -10.9 }, + { "time": 1, "angle": -21.91 }, + { "time": 1.0667, "angle": -9.9 } + ], + "scale": [ + {}, + { "time": 0.1333, "x": 0.845 }, + { "time": 0.2667, "x": 0.91 }, + { "time": 0.4, "x": 0.834 }, + { "time": 0.5333, "x": 0.92 }, + { "time": 0.6667, "x": 0.884 }, + { "time": 0.8, "x": 0.967 }, + { "time": 0.9333, "x": 0.904 }, + { "time": 1.0667 } + ] + }, + "tail9": { + "rotate": [ + { "angle": -6.79 }, + { "time": 0.0333, "angle": -20.12 }, + { "time": 0.1333, "angle": -9.9 }, + { "time": 0.2, "angle": -18.42 }, + { "time": 0.2667, "angle": -15.51 }, + { "time": 0.3333, "angle": 10.33 }, + { "time": 0.3667, "angle": 13.13 }, + { "time": 0.4333, "angle": 4.99 }, + { "time": 0.5, "angle": 6.54 }, + { "time": 0.5667, "angle": -20.12 }, + { "time": 0.6667, "angle": -9.9 }, + { "time": 0.7333, "angle": -18.42 }, + { "time": 0.8, "angle": -15.51 }, + { "time": 0.8667, "angle": 10.33 }, + { "time": 0.9, "angle": 13.13 }, + { "time": 0.9667, "angle": 4.99 }, + { "time": 1.0333, "angle": 6.54 }, + { "time": 1.0667, "angle": -6.79 } + ], + "scale": [ + { "x": 0.904 }, + { "time": 0.1333 }, + { "time": 0.2667, "x": 0.845 }, + { "time": 0.4, "x": 0.91 }, + { "time": 0.5333, "x": 0.834 }, + { "time": 0.6667, "x": 0.92 }, + { "time": 0.8, "x": 0.884 }, + { "time": 0.9333, "x": 0.967 }, + { "time": 1.0667, "x": 0.904 } + ] + }, + "tail10": { + "rotate": [ + { "angle": -5.98 }, + { "time": 0.0333, "angle": -12.6 }, + { "time": 0.0667, "angle": -23.33 }, + { "time": 0.1333, "angle": -9.9 }, + { "time": 0.2, "angle": -23.4 }, + { "time": 0.2667, "angle": -25.45 }, + { "time": 0.3333, "angle": 2.64 }, + { "time": 0.3667, "angle": 6.57 }, + { "time": 0.4333, "angle": 13.89 }, + { "time": 0.5667, "angle": -12.6 }, + { "time": 0.6, "angle": -23.33 }, + { "time": 0.6667, "angle": -9.9 }, + { "time": 0.7333, "angle": -23.4 }, + { "time": 0.8, "angle": -25.45 }, + { "time": 0.8667, "angle": 2.64 }, + { "time": 0.9, "angle": 6.57 }, + { "time": 0.9667, "angle": 13.89 }, + { "time": 1.0667, "angle": -5.98 } + ], + "scale": [ + { "x": 0.904 }, + { "time": 0.1333 }, + { "time": 0.2667, "x": 0.845 }, + { "time": 0.4, "x": 0.91 }, + { "time": 0.5333, "x": 0.834 }, + { "time": 0.6667, "x": 0.92 }, + { "time": 0.8, "x": 0.884 }, + { "time": 0.9333, "x": 0.967 }, + { "time": 1.0667, "x": 0.904 } + ] + }, + "horn-front": { + "translate": [ + { "x": -2.29, "y": -13.82 }, + { "time": 0.2667, "x": 3.57, "y": -1.24 }, + { "time": 0.5333, "x": 5.09, "y": -3.74 }, + { "time": 0.8, "x": 3.99, "y": -5.87 }, + { "time": 1.0667, "x": -2.29, "y": -13.82 } + ] + }, + "saddle-strap-front": { + "rotate": [ + { "angle": 3.65 }, + { "time": 0.2667, "angle": 5.97 }, + { "time": 0.5333, "angle": 3.49 }, + { "time": 0.6, "angle": 5.82 }, + { "time": 0.8, "angle": 3.68 }, + { "time": 1.0667, "angle": 3.65 } + ] + }, + "jaw-inside": { + "translate": [ + { "x": -8.34, "y": -3.22 }, + { "time": 0.5333, "x": 1.17, "y": -1.6 }, + { "time": 1.0667, "x": -8.34, "y": -3.22 } + ] + }, + "bone": { + "rotate": [ + {}, + { "time": 0.1, "angle": -8.07 }, + { "time": 0.1667, "angle": -8.59 }, + { "time": 0.5333, "angle": -11.19 }, + { "time": 0.6333, "angle": -8.07 }, + { "time": 0.7, "angle": -8.59 }, + { "time": 1.0667 } + ] + }, + "bone2": { + "rotate": [ + {}, + { "time": 0.1, "angle": -8.07 }, + { "time": 0.1667, "angle": 14.12 }, + { "time": 0.3333, "angle": -10.54 }, + { "time": 0.5333, "angle": -13.65 }, + { "time": 0.6333, "angle": -8.07 }, + { "time": 0.7, "angle": 14.12 }, + { "time": 0.8667, "angle": -10.54 }, + { "time": 1.0667 } + ] + }, + "bone3": { + "rotate": [ + {}, + { "time": 0.1, "angle": 5.59 }, + { "time": 0.1667, "angle": 8.3 }, + { "time": 0.3333, "angle": -1.12 }, + { "time": 0.5333, "angle": -5.17 }, + { "time": 0.6333, "angle": 5.59 }, + { "time": 0.7, "angle": 8.3 }, + { "time": 0.8667, "angle": -1.12 }, + { "time": 1.0667 } + ] + }, + "bone4": { + "rotate": [ + {}, + { "time": 0.1, "angle": 5.59 }, + { "time": 0.1667, "angle": 8.3 }, + { "time": 0.3333, "angle": -1.12 }, + { "time": 0.5333, "angle": -5.17 }, + { "time": 0.6333, "angle": 5.59 }, + { "time": 0.7, "angle": 8.3 }, + { "time": 0.8667, "angle": -1.12 }, + { "time": 1.0667 } + ] + }, + "bone5": { + "rotate": [ + {}, + { "time": 0.1, "angle": 5.59 }, + { "time": 0.1667, "angle": 8.3 }, + { "time": 0.3333, "angle": -1.12 }, + { "time": 0.5333, "angle": -5.17 }, + { "time": 0.6333, "angle": 5.59 }, + { "time": 0.7, "angle": 8.3 }, + { "time": 0.8667, "angle": -1.12 }, + { "time": 1.0667 } + ] + }, + "spineboy-front-arm-target": { + "translate": [ + {}, + { "time": 0.2667, "x": -12.14, "y": 8.93 }, + { "time": 0.5333 }, + { "time": 0.8333, "x": -12.14, "y": 8.93 }, + { "time": 1.0667 } + ] + }, + "front-hand2": { + "rotate": [ + {}, + { "time": 0.2667, "angle": 15.62 }, + { "time": 0.5333 }, + { "time": 0.8333, "angle": 15.62 }, + { "time": 1.0667 } + ] + } + }, + "deform": { + "default": { + "raptor-body": { + "raptor-body": [ + { + "offset": 408, + "vertices": [ 13.71567, -12.38429, 8.86707, -16.21404, 14.13376, 11.90601, 8.86707, -16.21404, -0.71399, -18.46735, 14.13376, 11.90601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8.4906, -7.6657, 5.4895, -10.03702, 8.74924, 7.37085 ] + }, + { + "time": 0.2667, + "offset": 18, + "vertices": [ 0.70813, 7.44351, 1.07001, 11.24002, 1.08411, 11.39075, 1.02405, 10.74866, 1.03925, 10.92072, 0.85474, 8.98672, 0.86066, 9.04904, 0.89789, 9.44125, 0.90637, 9.5307, 0.94983, 9.98828, 0.96765, 10.17432, 1.00269, 10.54266, 0, 0, 0, 0, 0, 0, 0, 0, 0.90533, 6.48813, -4.83447, -4.4209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.59564, 4.3848, -2.59491, 7.48297, -5.60541, -5.59521, -2.59491, 7.48297, 0.75079, 7.88437, -5.60541, -5.59521, 0, 0, 0, 0, 0, 0, 0, 0, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, -16.63549, -1.25745, 13.9549, 9.14218, -16.65107, -1.03064, -12.07328, -0.91254, -10.08334, 6.70255, -12.08454, -0.74829, -6.81092, -0.51489, -5.68832, 3.78119, -6.81731, -0.42206, -2.13165, -0.16132, -1.78043, 1.1835, 0.92268, 0.06927, 0.77066, -0.51218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.59564, 4.3848, -2.59491, 7.48297, -5.60541, -5.59521, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.45563, 15.28763, 0, 0, 0.84955, 8.92258, 0.86261, 9.06027, 1.03558, 10.87985, 1.04388, 10.93173, 1.00079, 10.50467, 1.51581, 15.87836, 1.29034, 13.55914 ] + }, + { + "time": 0.5333, + "offset": 18, + "vertices": [ 0.70813, 7.44351, 1.07001, 11.24002, 1.08411, 11.39075, 1.02405, 10.74866, 1.03925, 10.92072, 0.85474, 8.98672, 0.86066, 9.04904, 0.89789, 9.44125, 0.90637, 9.5307, 0.94983, 9.98828, 0.96765, 10.17432, 1.00269, 10.54266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9.82916, 8.09055, -5.51956, 11.46271, -8.27203, -9.69153, -5.51956, 11.46271, 0.71658, 12.7357, -8.27203, -9.69153, 0, 0, 0, 0, 0, 0, 0, 0, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, -20.25358, 2.27841, 18.97852, 7.42908, -20.32699, 1.48425, -14.55186, 1.63705, -10.8692, 9.81364, -14.60457, 1.06616, -8.3676, 0.94171, -6.25018, 5.64297, -8.39783, 0.61307, -3.12171, 0.35193, -2.33182, 2.10535, -2.62373, 0.29605, -1.95944, 1.76942, -8.49063, 7.66762, -5.48889, 10.03763, -6.53128, 5.89809, -4.22223, 7.72119, -5.4693, -6.89392, -9.82916, 8.09055, -5.51956, 11.46271, -8.27203, -9.69153, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.45563, 15.28763, 0, 0, 0.84955, 8.92258, 0.86261, 9.06027, 1.03558, 10.87985, 1.04388, 10.93173, 1.00079, 10.50467, 1.51581, 15.87836, 1.29034, 13.55914 ] + }, + { + "time": 0.8, + "offset": 18, + "vertices": [ 0.70813, 7.44351, 1.07001, 11.24002, 1.08411, 11.39075, 1.02405, 10.74866, 1.03925, 10.92072, 0.85474, 8.98672, 0.86066, 9.04904, 0.89789, 9.44125, 0.90637, 9.5307, 0.94983, 9.98828, 0.96765, 10.17432, 1.00269, 10.54266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0932, 11.47726, 1.0932, 11.47726, 1.0932, 11.47726, 1.45563, 15.28763, 0, 0, 0.84955, 8.92258, 0.86261, 9.06027, 1.03558, 10.87985, 1.04388, 10.93173, 1.00079, 10.50467, 1.51581, 15.87836, 1.29034, 13.55914 ] + }, + { + "time": 1.0667, + "offset": 408, + "vertices": [ 13.71567, -12.38429, 8.86707, -16.21404, 14.13376, 11.90601, 8.86707, -16.21404, -0.71399, -18.46735, 14.13376, 11.90601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8.4906, -7.6657, 5.4895, -10.03702, 8.74924, 7.37085 ] + } + ] + }, + "raptor-front-arm": { + "raptor-front-arm": [ + { + "vertices": [ 0.63858, 10.11987, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.63858, 10.11987, 8.91238, 4.83664, 8.91238, 4.83664, -2.95996, -9.69858, 9.59641, -3.2762, -9.13791, -4.39584 ] + }, + { + "time": 0.5333, + "vertices": [ 2.12625, -9.42834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.12625, -9.42834, 2.21136, -13.58762, 2.21136, -13.58762, -11.1066, 8.13367, -7.02609, 7.11565, 9.99887, -0.14359 ] + }, + { + "time": 1.0667, + "vertices": [ 0.63858, 10.11987, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.63858, 10.11987, 8.91238, 4.83664, 8.91238, 4.83664, -2.95996, -9.69858, 9.59641, -3.2762, -9.13791, -4.39584 ] + } + ] + }, + "raptor-front-leg": { + "raptor-front-leg": [ + { + "offset": 150, + "vertices": [ 5.88568, 2.31329, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 3.24279, 5.42923, -3.33963, 5.37029, 3.24279, 5.42923, 5.48474, 1.33588, -3.33963, 5.37029, 3.24279, 5.42923, 5.48474, 1.33588, 6.45844, -3.76048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.88568, 2.31329, 6.32144, 0.17871 ] + }, + { "time": 0.2667 }, + { + "time": 0.5333, + "offset": 144, + "vertices": [ -18.2879, 9.64194, 8.54771, -3.97604, 0, 0, -6.20459, -38.80288, -1.60495, -18.19489, 18.00257, -3.08813, 1.01712, -11.54924, 11.59372, 0.06879, 1.01712, -11.54924, 11.59372, 0.06879, 1.01712, -11.54924, 11.59372, 0.06879, 1.01712, -11.54924, 11.59372, 0.06879, 7.2315, -9.06223, 11.59372, 0.06879, 7.2315, -9.06223, -5.34506, -9.90634, 11.59372, 0.06879, 7.2315, -9.06223, -5.34506, -9.90634, -15.37766, 0.70782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.90936, -20.67399, -20.69142, 0.32318, 0.83218, -9.44935, 9.48574, 0.05627, 0.83218, -9.44935, 9.48574, 0.05627, 0.32794, -15.86422, 15.83783, -0.97108, 0.42538, -16.96904, 16.94692, -0.96432, 0.83218, -9.44935, 9.48574, 0.05627, 0, 0, 0, 0, 0, 0, 0, 0, -2.43991, -8.71271, -8.55199, 2.95432, -4.47107, -11.33224, -11.04593, 5.13776 ] + }, + { + "time": 0.6, + "offset": 144, + "vertices": [ 5.8644, -1.96475 ] + }, + { + "time": 0.6667, + "offset": 48, + "vertices": [ 2.83282, 3.82607, 2.88747, -3.47459, 6.13686, -0.65051, 1.80194, 5.80962, -3.46157, 8.71898, 1.95515, 17.84987, -2.16496, 11.59793, -21.96982, -6.69659, -9.24968, 5.30598, 3.17815, -2.1165, 0.26888, 0.03062, 0.02821, 0.2688, -10.98312, -7.06466, -4.71954, -11.86687, -13.45984, 4.74478, -3.79447, -8.00033, 0, 0, 0, 0, 4.81293, -9.78431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.41243, 0.36704, -0.00642, -0.55221, 0, 0, 0, 0, 0.7433, -1.29713, 0.49036, 1.41172, 1.3683, -5.24968, 3.06253, 4.47641, -1.30437, -1.14192, 1.71709, -0.23523, -1.14153, -2.38019, 2.54447, 0.70039, 0, 0, 0, 0, 7.63262, -3.45871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.34303, -8.30955, 8.08327, 3.22951, -3.09877, 0.10198, -0.71957, -2.98701, 0, 0, 0, 0, 0, 0, 0, 0, -0.68984, -0.87758, -1.06615, -0.32834, -1.4312, -0.38682, 1.22995, -0.8266 ] + }, + { + "time": 0.7, + "offset": 48, + "vertices": [ 1.41641, 1.91303, 1.44373, -1.7373, 3.06843, -0.32526, 0.90097, 2.90481, -1.73079, 4.35949, 0.97757, 8.92494, -1.08248, 5.79897, -7.52768, -11.41519, -8.67229, -4.663, -0.13032, -9.51013, 0.13444, 0.01531, 0.01411, 0.1344, -5.49157, -3.53233, -2.35977, -5.93344, -0.53535, 10.74624, -0.16897, 6.33698, 12.85229, 2.43229, 8.83852, 8.18031, 26.96328, -11.50604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.61864, 0.55055, -0.00964, -0.82832, 0, 0, 0, 0, 1.11495, -1.9457, 0.73553, 2.11757, 2.05245, -7.87452, 4.59379, 6.71461, -1.95655, -1.71288, 2.57563, -0.35284, -1.71229, -3.57028, 3.8167, 1.05059, 0, 0, 0, 0, 3.81631, -1.72936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.67152, -4.15478, 4.04164, 1.61476, -0.32874, 3.11779, -0.67256, 1.78751, 0, 0, 0, 0, 0, 0, 0, 0, -1.03475, -1.31637, -1.59922, -0.49251, -2.1468, -0.58024, 1.84492, -1.2399 ] + }, + { + "time": 0.7333, + "offset": 76, + "vertices": [ 2.70691, 7.35512, -0.12915, 7.83603, 0, 0, 0, 0, 14.23546, -11.27834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.82486, 0.73407, -0.01285, -1.10443, 0, 0, 0, 0, 1.4866, -2.59427, 0.98071, 2.82343, 2.7366, -10.49936, 6.12506, 8.95282, -2.60873, -2.28384, 3.43417, -0.47046, -2.28305, -4.76038, 5.08893, 1.40079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.37967, -1.75516, -2.1323, -0.65668, -2.8624, -0.77365, 2.4599, -1.6532 ] + }, + { + "time": 0.8, + "offset": 144, + "vertices": [ 4.33227, 5.00964 ] + }, + { + "time": 0.9, + "offset": 62, + "vertices": [ -2.62872, -4.62305, -2.90607, 8.52032, -0.22961, 8.99833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.00874, 9.84058 ] + }, + { + "time": 1.0667, + "offset": 150, + "vertices": [ 5.88568, 2.31329, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 5.88568, 2.31329, -3.33963, 5.37029, 3.24279, 5.42923, -3.33963, 5.37029, 3.24279, 5.42923, 5.48474, 1.33588, -3.33963, 5.37029, 3.24279, 5.42923, 5.48474, 1.33588, 6.45844, -3.76048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5.88568, 2.31329, 6.32144, 0.17871 ] + } + ] + }, + "raptor-jaw": { + "raptor-jaw": [ + {}, + { + "time": 0.2667, + "offset": 2, + "vertices": [ -4.47122, -4.24109, -3.60373, -3.41827, -8.41095, -2.54828, -5.50699, -1.7359, -2.66876, -0.81238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5.87677, -3.0119, -8.36108, -4.3338, -1.12198, -1.06427, -2.6153, -2.24945, -8.84198, -3.32513, -4.86157, -4.61145, -10.66547, -5.80609, -5.57019, -5.28363, -5.70374, -5.41016 ] + }, + { + "time": 0.8, + "offset": 2, + "vertices": [ -4.47122, -4.24109, -3.60373, -3.41827, -2.6868, -2.5484, -1.83014, -1.7359, -0.85641, -0.81238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.17538, -3.0119, -4.56903, -4.3338, -1.12198, -1.06427, -2.37146, -2.24939, -3.50571, -3.3252, -4.86157, -4.61145, -4.60556, -4.36859, -5.57019, -5.28363, -5.70374, -5.41016 ] + }, + { "time": 1.0667 } + ] + }, + "raptor-saddle": { + "raptor-saddle-w-shadow": [ + { + "vertices": [ -0.00729, 4.41981, 0, 0, -0.01709, 10.45464, -0.01709, 10.45464, -0.01709, 10.45464, 0, 0, 0, 0, 0.01511, -8.47841, -0.0061, 3.66493, -0.0061, 3.66493, -0.0061, 3.66493, -0.0061, 3.66493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01511, -8.47841, -0.00729, 4.41981, 0, 0, 0, 0, -0.0061, 3.66493, -0.0061, 3.66493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0, 0, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841 ] + }, + { "time": 0.2667 }, + { + "time": 0.5333, + "vertices": [ 0.22061, -8.83728, 0, 0, 0.17395, -6.96783, 0.17395, -6.96783, 0.17395, -6.96783, 0, 0, 0, 0, -0.1377, 5.51426, 0.12805, -5.12938, 0, 0, 0, 0, 0.12805, -5.12938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.1377, 5.51426, 0.22061, -8.83728, 0, 0, 0, 0, 0.12805, -5.12938, 0.12805, -5.12938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, 0, 0, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426, -0.1377, 5.51426 ] + }, + { "time": 0.8 }, + { + "time": 1.0667, + "vertices": [ -0.00729, 4.41981, 0, 0, -0.01709, 10.45464, -0.01709, 10.45464, -0.01709, 10.45464, 0, 0, 0, 0, 0.01511, -8.47841, -0.0061, 3.66493, -0.0061, 3.66493, -0.0061, 3.66493, -0.0061, 3.66493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01511, -8.47841, -0.00729, 4.41981, 0, 0, 0, 0, -0.0061, 3.66493, -0.0061, 3.66493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0, 0, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841, 0.01511, -8.47841 ] + } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/threejs/example/assets/raptor.atlas b/apps/module-ts/src/spine-ts/threejs/example/assets/raptor.atlas new file mode 100755 index 0000000..ae95b7d --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/example/assets/raptor.atlas @@ -0,0 +1,272 @@ + +raptor.png +size: 1024,512 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back-arm + rotate: true + xy: 829, 88 + size: 46, 25 + orig: 46, 25 + offset: 0, 0 + index: -1 +back-bracer + rotate: true + xy: 195, 238 + size: 39, 28 + orig: 39, 28 + offset: 0, 0 + index: -1 +back-hand + rotate: true + xy: 724, 140 + size: 36, 34 + orig: 36, 34 + offset: 0, 0 + index: -1 +back-knee + rotate: true + xy: 760, 131 + size: 49, 67 + orig: 49, 67 + offset: 0, 0 + index: -1 +back-thigh + rotate: true + xy: 225, 238 + size: 39, 24 + orig: 39, 24 + offset: 0, 0 + index: -1 +eyes-open + rotate: false + xy: 975, 204 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +front-arm + rotate: false + xy: 969, 112 + size: 48, 26 + orig: 48, 26 + offset: 0, 0 + index: -1 +front-bracer + rotate: true + xy: 724, 97 + size: 41, 29 + orig: 41, 29 + offset: 0, 0 + index: -1 +front-hand + rotate: false + xy: 251, 239 + size: 41, 38 + orig: 41, 38 + offset: 0, 0 + index: -1 +front-open-hand + rotate: true + xy: 856, 76 + size: 43, 44 + orig: 43, 44 + offset: 0, 0 + index: -1 +front-thigh + rotate: true + xy: 729, 178 + size: 57, 29 + orig: 57, 29 + offset: 0, 0 + index: -1 +gun + rotate: false + xy: 894, 251 + size: 107, 103 + orig: 107, 103 + offset: 0, 0 + index: -1 +gun-nohand + rotate: false + xy: 764, 241 + size: 105, 102 + orig: 105, 102 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 756, 345 + size: 136, 149 + orig: 136, 149 + offset: 0, 0 + index: -1 +lower-leg + rotate: true + xy: 475, 237 + size: 73, 98 + orig: 73, 98 + offset: 0, 0 + index: -1 +mouth-grind + rotate: false + xy: 975, 172 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth-smile + rotate: false + xy: 975, 140 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 366, 282 + size: 18, 21 + orig: 18, 21 + offset: 0, 0 + index: -1 +raptor-back-arm + rotate: true + xy: 636, 97 + size: 82, 86 + orig: 82, 86 + offset: 0, 0 + index: -1 +raptor-body + rotate: false + xy: 2, 2 + size: 632, 233 + orig: 632, 233 + offset: 0, 0 + index: -1 +raptor-front-arm + rotate: true + xy: 871, 168 + size: 81, 102 + orig: 81, 102 + offset: 0, 0 + index: -1 +raptor-front-leg + rotate: false + xy: 2, 237 + size: 191, 257 + orig: 191, 257 + offset: 0, 0 + index: -1 +raptor-hindleg-back + rotate: false + xy: 195, 279 + size: 169, 215 + orig: 169, 215 + offset: 0, 0 + index: -1 +raptor-horn + rotate: true + xy: 431, 312 + size: 182, 80 + orig: 182, 80 + offset: 0, 0 + index: -1 +raptor-horn-back + rotate: true + xy: 513, 318 + size: 176, 77 + orig: 176, 77 + offset: 0, 0 + index: -1 +raptor-jaw + rotate: false + xy: 894, 356 + size: 126, 138 + orig: 126, 138 + offset: 0, 0 + index: -1 +raptor-jaw-tooth + rotate: true + xy: 294, 240 + size: 37, 48 + orig: 37, 48 + offset: 0, 0 + index: -1 +raptor-mouth-inside + rotate: true + xy: 344, 241 + size: 36, 41 + orig: 36, 41 + offset: 0, 0 + index: -1 +raptor-saddle-strap-back + rotate: false + xy: 575, 242 + size: 54, 74 + orig: 54, 74 + offset: 0, 0 + index: -1 +raptor-saddle-strap-front + rotate: true + xy: 764, 182 + size: 57, 95 + orig: 57, 95 + offset: 0, 0 + index: -1 +raptor-saddle-w-shadow + rotate: false + xy: 592, 323 + size: 162, 171 + orig: 162, 171 + offset: 0, 0 + index: -1 +raptor-tail-shadow + rotate: true + xy: 366, 305 + size: 189, 63 + orig: 189, 63 + offset: 0, 0 + index: -1 +raptor-tongue + rotate: false + xy: 387, 239 + size: 86, 64 + orig: 86, 64 + offset: 0, 0 + index: -1 +stirrup-back + rotate: true + xy: 829, 136 + size: 44, 35 + orig: 44, 35 + offset: 0, 0 + index: -1 +stirrup-front + rotate: true + xy: 866, 121 + size: 45, 50 + orig: 45, 50 + offset: 0, 0 + index: -1 +stirrup-strap + rotate: false + xy: 918, 120 + size: 49, 46 + orig: 49, 46 + offset: 0, 0 + index: -1 +torso + rotate: true + xy: 636, 181 + size: 54, 91 + orig: 54, 91 + offset: 0, 0 + index: -1 +visor + rotate: false + xy: 631, 237 + size: 131, 84 + orig: 131, 84 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/threejs/example/assets/raptor.png b/apps/module-ts/src/spine-ts/threejs/example/assets/raptor.png new file mode 100755 index 0000000..fd55a79 Binary files /dev/null and b/apps/module-ts/src/spine-ts/threejs/example/assets/raptor.png differ diff --git a/apps/module-ts/src/spine-ts/threejs/example/index.html b/apps/module-ts/src/spine-ts/threejs/example/index.html new file mode 100755 index 0000000..df26bde --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/example/index.html @@ -0,0 +1,122 @@ + + + +spine-threejs + + + + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/threejs/src/AssetManager.ts b/apps/module-ts/src/spine-ts/threejs/src/AssetManager.ts new file mode 100755 index 0000000..5e7914e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/AssetManager.ts @@ -0,0 +1,38 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.threejs { + export class AssetManager extends spine.AssetManager { + constructor (pathPrefix: string = "") { + super((image: HTMLImageElement) => { + return new ThreeJsTexture(image); + }, pathPrefix); + } + } +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/MeshBatcher.ts b/apps/module-ts/src/spine-ts/threejs/src/MeshBatcher.ts new file mode 100755 index 0000000..73dd356 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/MeshBatcher.ts @@ -0,0 +1,125 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.threejs { + export class MeshBatcher extends THREE.Mesh { + private static VERTEX_SIZE = 9; + private vertexBuffer: THREE.InterleavedBuffer; + private vertices: Float32Array; + private verticesLength = 0; + private indices: Uint16Array; + private indicesLength = 0; + + constructor (maxVertices: number = 10920, materialCustomizer: SkeletonMeshMaterialParametersCustomizer = (parameters) => { }) { + super(); + if (maxVertices > 10920) throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); + let vertices = this.vertices = new Float32Array(maxVertices * MeshBatcher.VERTEX_SIZE); + let indices = this.indices = new Uint16Array(maxVertices * 3); + let geo = new THREE.BufferGeometry(); + let vertexBuffer = this.vertexBuffer = new THREE.InterleavedBuffer(vertices, MeshBatcher.VERTEX_SIZE); + vertexBuffer.usage = WebGLRenderingContext.DYNAMIC_DRAW; + geo.setAttribute("position", new THREE.InterleavedBufferAttribute(vertexBuffer, 3, 0, false)); + geo.setAttribute("color", new THREE.InterleavedBufferAttribute(vertexBuffer, 4, 3, false)); + geo.setAttribute("uv", new THREE.InterleavedBufferAttribute(vertexBuffer, 2, 7, false)); + geo.setIndex(new THREE.BufferAttribute(indices, 1)); + geo.getIndex().usage = WebGLRenderingContext.DYNAMIC_DRAW;; + geo.drawRange.start = 0; + geo.drawRange.count = 0; + this.geometry = geo; + this.material = new SkeletonMeshMaterial(materialCustomizer); + } + + dispose () { + this.geometry.dispose(); + if (this.material instanceof THREE.Material) + this.material.dispose(); + else if (this.material) { + for (let i = 0; i < this.material.length; i++) { + let material = this.material[i]; + if (material instanceof THREE.Material) + material.dispose(); + } + } + } + + clear () { + let geo = (this.geometry); + geo.drawRange.start = 0; + geo.drawRange.count = 0; + (this.material).uniforms.map.value = null; + } + + begin () { + this.verticesLength = 0; + this.indicesLength = 0; + } + + canBatch(verticesLength: number, indicesLength: number) { + if (this.indicesLength + indicesLength >= this.indices.byteLength / 2) return false; + if (this.verticesLength + verticesLength >= this.vertices.byteLength / 2) return false; + return true; + } + + batch (vertices: ArrayLike, verticesLength: number, indices: ArrayLike, indicesLength: number, z: number = 0) { + let indexStart = this.verticesLength / MeshBatcher.VERTEX_SIZE; + let vertexBuffer = this.vertices; + let i = this.verticesLength; + let j = 0; + for (;j < verticesLength;) { + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = z; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + vertexBuffer[i++] = vertices[j++]; + } + this.verticesLength = i; + + let indicesArray = this.indices; + for (i = this.indicesLength, j = 0; j < indicesLength; i++, j++) + indicesArray[i] = indices[j] + indexStart; + this.indicesLength += indicesLength; + } + + end () { + this.vertexBuffer.needsUpdate = this.verticesLength > 0; + this.vertexBuffer.updateRange.offset = 0; + this.vertexBuffer.updateRange.count = this.verticesLength; + let geo = (this.geometry); + geo.getIndex().needsUpdate = this.indicesLength > 0; + geo.getIndex().updateRange.offset = 0; + geo.getIndex().updateRange.count = this.indicesLength; + geo.drawRange.start = 0; + geo.drawRange.count = this.indicesLength; + } + } +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/SkeletonMesh.ts b/apps/module-ts/src/spine-ts/threejs/src/SkeletonMesh.ts new file mode 100755 index 0000000..99f5ebe --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/SkeletonMesh.ts @@ -0,0 +1,316 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.threejs { + export interface SkeletonMeshMaterialParametersCustomizer { + (materialParameters: THREE.ShaderMaterialParameters): void; + } + + export class SkeletonMeshMaterial extends THREE.ShaderMaterial { + constructor (customizer: SkeletonMeshMaterialParametersCustomizer) { + let vertexShader = ` + attribute vec4 color; + varying vec2 vUv; + varying vec4 vColor; + void main() { + vUv = uv; + vColor = color; + gl_Position = projectionMatrix*modelViewMatrix*vec4(position,1.0); + } + `; + let fragmentShader = ` + uniform sampler2D map; + varying vec2 vUv; + varying vec4 vColor; + void main(void) { + gl_FragColor = texture2D(map, vUv)*vColor; + } + `; + + let parameters: THREE.ShaderMaterialParameters = { + uniforms: { + map: { type: "t", value: null } + }, + vertexShader: vertexShader, + fragmentShader: fragmentShader, + side: THREE.DoubleSide, + transparent: true, + alphaTest: 0.5 + }; + customizer(parameters); + super(parameters); + }; + } + + export class SkeletonMesh extends THREE.Object3D { + tempPos: Vector2 = new Vector2(); + tempUv: Vector2 = new Vector2(); + tempLight = new Color(); + tempDark = new Color(); + skeleton: Skeleton; + state: AnimationState; + zOffset: number = 0.1; + vertexEffect: VertexEffect; + + private batches = new Array(); + private nextBatchIndex = 0; + private clipper: SkeletonClipping = new SkeletonClipping(); + + static QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + static VERTEX_SIZE = 2 + 2 + 4; + + private vertices = Utils.newFloatArray(1024); + private tempColor = new Color(); + private materialCustomizer: SkeletonMeshMaterialParametersCustomizer; + + constructor (skeletonData: SkeletonData, materialCustomizer: SkeletonMeshMaterialParametersCustomizer = (parameters) => { }) { + super(); + this.materialCustomizer = materialCustomizer; + this.skeleton = new Skeleton(skeletonData); + let animData = new AnimationStateData(skeletonData); + this.state = new AnimationState(animData); + } + + update(deltaTime: number) { + let state = this.state; + let skeleton = this.skeleton; + + state.update(deltaTime); + state.apply(skeleton); + skeleton.updateWorldTransform(); + + this.updateGeometry(); + } + + dispose () { + for (var i = 0; i < this.batches.length; i++) { + this.batches[i].dispose(); + } + } + + private clearBatches () { + for (var i = 0; i < this.batches.length; i++) { + this.batches[i].clear(); + this.batches[i].visible = false; + } + this.nextBatchIndex = 0; + } + + private nextBatch () { + if (this.batches.length == this.nextBatchIndex) { + let batch = new MeshBatcher(10920, this.materialCustomizer); + this.add(batch); + this.batches.push(batch); + } + let batch = this.batches[this.nextBatchIndex++]; + batch.visible = true; + return batch; + } + + private updateGeometry() { + this.clearBatches(); + + let tempPos = this.tempPos; + let tempUv = this.tempUv; + let tempLight = this.tempLight; + let tempDark = this.tempDark; + + var numVertices = 0; + var verticesLength = 0; + var indicesLength = 0; + + let blendMode: BlendMode = null; + let clipper = this.clipper; + + let vertices: ArrayLike = this.vertices; + let triangles: Array = null; + let uvs: ArrayLike = null; + let drawOrder = this.skeleton.drawOrder; + let batch = this.nextBatch(); + batch.begin(); + let z = 0; + let zOffset = this.zOffset; + for (let i = 0, n = drawOrder.length; i < n; i++) { + let vertexSize = clipper.isClipping() ? 2 : SkeletonMesh.VERTEX_SIZE; + let slot = drawOrder[i]; + if (!slot.bone.active) continue; + let attachment = slot.getAttachment(); + let attachmentColor: Color = null; + let texture: ThreeJsTexture = null; + let numFloats = 0; + if (attachment instanceof RegionAttachment) { + let region = attachment; + attachmentColor = region.color; + vertices = this.vertices; + numFloats = vertexSize * 4; + region.computeWorldVertices(slot.bone, vertices, 0, vertexSize); + triangles = SkeletonMesh.QUAD_TRIANGLES; + uvs = region.uvs; + texture = (region.region.renderObject).texture; + } else if (attachment instanceof MeshAttachment) { + let mesh = attachment; + attachmentColor = mesh.color; + vertices = this.vertices; + numFloats = (mesh.worldVerticesLength >> 1) * vertexSize; + if (numFloats > vertices.length) { + vertices = this.vertices = spine.Utils.newFloatArray(numFloats); + } + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, vertexSize); + triangles = mesh.triangles; + uvs = mesh.uvs; + texture = (mesh.region.renderObject).texture; + } else if (attachment instanceof ClippingAttachment) { + let clip = (attachment); + clipper.clipStart(slot, clip); + continue; + } else continue; + + if (texture != null) { + let skeleton = slot.bone.skeleton; + let skeletonColor = skeleton.color; + let slotColor = slot.color; + let alpha = skeletonColor.a * slotColor.a * attachmentColor.a; + let color = this.tempColor; + color.set(skeletonColor.r * slotColor.r * attachmentColor.r, + skeletonColor.g * slotColor.g * attachmentColor.g, + skeletonColor.b * slotColor.b * attachmentColor.b, + alpha); + + let finalVertices: ArrayLike; + let finalVerticesLength: number; + let finalIndices: ArrayLike; + let finalIndicesLength: number; + + if (clipper.isClipping()) { + clipper.clipTriangles(vertices, numFloats, triangles, triangles.length, uvs, color, null, false); + let clippedVertices = clipper.clippedVertices; + let clippedTriangles = clipper.clippedTriangles; + if (this.vertexEffect != null) { + let vertexEffect = this.vertexEffect; + let verts = clippedVertices; + for (let v = 0, n = clippedVertices.length; v < n; v += vertexSize) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.setFromColor(color); + tempDark.set(0, 0, 0, 0); + tempUv.x = verts[v + 6]; + tempUv.y = verts[v + 7]; + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } + finalVertices = clippedVertices; + finalVerticesLength = clippedVertices.length; + finalIndices = clippedTriangles; + finalIndicesLength = clippedTriangles.length; + } else { + let verts = vertices; + if (this.vertexEffect != null) { + let vertexEffect = this.vertexEffect; + for (let v = 0, u = 0, n = numFloats; v < n; v += vertexSize, u += 2) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.setFromColor(color); + tempDark.set(0, 0, 0, 0); + tempUv.x = uvs[u]; + tempUv.y = uvs[u + 1]; + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y; + } + } else { + for (let v = 2, u = 0, n = numFloats; v < n; v += vertexSize, u += 2) { + verts[v] = color.r; + verts[v + 1] = color.g; + verts[v + 2] = color.b; + verts[v + 3] = color.a; + verts[v + 4] = uvs[u]; + verts[v + 5] = uvs[u + 1]; + } + } + finalVertices = vertices; + finalVerticesLength = numFloats; + finalIndices = triangles; + finalIndicesLength = triangles.length; + } + + if (finalVerticesLength == 0 || finalIndicesLength == 0) + continue; + + // Start new batch if this one can't hold vertices/indices + if (!batch.canBatch(finalVerticesLength, finalIndicesLength)) { + batch.end(); + batch = this.nextBatch(); + batch.begin(); + } + + // FIXME per slot blending would require multiple material support + //let slotBlendMode = slot.data.blendMode; + //if (slotBlendMode != blendMode) { + // blendMode = slotBlendMode; + // batcher.setBlendMode(getSourceGLBlendMode(this._gl, blendMode, premultipliedAlpha), getDestGLBlendMode(this._gl, blendMode)); + //} + + let batchMaterial = batch.material; + if (batchMaterial.uniforms.map.value == null) { + batchMaterial.uniforms.map.value = texture.texture; + } + if (batchMaterial.uniforms.map.value != texture.texture) { + batch.end(); + batch = this.nextBatch(); + batch.begin(); + batchMaterial = batch.material; + batchMaterial.uniforms.map.value = texture.texture; + } + batchMaterial.needsUpdate = true; + + batch.batch(finalVertices, finalVerticesLength, finalIndices, finalIndicesLength, z); + z += zOffset; + } + + clipper.clipEndWithSlot(slot); + } + clipper.clipEnd(); + batch.end(); + } + } +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/ThreeJsTexture.ts b/apps/module-ts/src/spine-ts/threejs/src/ThreeJsTexture.ts new file mode 100755 index 0000000..adb14fb --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/ThreeJsTexture.ts @@ -0,0 +1,72 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.threejs { + export class ThreeJsTexture extends Texture { + texture: THREE.Texture; + + constructor (image: HTMLImageElement) { + super(image); + this.texture = new THREE.Texture(image); + this.texture.flipY = false; + this.texture.needsUpdate = true; + } + + setFilters (minFilter: TextureFilter, magFilter: TextureFilter) { + this.texture.minFilter = ThreeJsTexture.toThreeJsTextureFilter(minFilter); + this.texture.magFilter = ThreeJsTexture.toThreeJsTextureFilter(magFilter); + } + + setWraps (uWrap: TextureWrap, vWrap: TextureWrap) { + this.texture.wrapS = ThreeJsTexture.toThreeJsTextureWrap(uWrap); + this.texture.wrapT = ThreeJsTexture.toThreeJsTextureWrap(vWrap); + } + + dispose () { + this.texture.dispose(); + } + + static toThreeJsTextureFilter(filter: TextureFilter) { + if (filter === TextureFilter.Linear) return THREE.LinearFilter; + else if (filter === TextureFilter.MipMap) return THREE.LinearMipMapLinearFilter; // also includes TextureFilter.MipMapLinearLinear + else if (filter === TextureFilter.MipMapLinearNearest) return THREE.LinearMipMapNearestFilter; + else if (filter === TextureFilter.MipMapNearestLinear) return THREE.NearestMipMapLinearFilter; + else if (filter === TextureFilter.MipMapNearestNearest) return THREE.NearestMipMapNearestFilter; + else if (filter === TextureFilter.Nearest) return THREE.NearestFilter; + else throw new Error("Unknown texture filter: " + filter); + } + + static toThreeJsTextureWrap(wrap: TextureWrap) { + if (wrap === TextureWrap.ClampToEdge) return THREE.ClampToEdgeWrapping; + else if (wrap === TextureWrap.MirroredRepeat) return THREE.MirroredRepeatWrapping; + else if (wrap === TextureWrap.Repeat) return THREE.RepeatWrapping; + else throw new Error("Unknown texture wrap: " + wrap); + } + } +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/Three.Legacy.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/Three.Legacy.d.ts new file mode 100755 index 0000000..51248d9 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/Three.Legacy.d.ts @@ -0,0 +1,13 @@ +import { Geometry } from './core/Geometry'; +import { Material } from './materials/Material'; +import { Object3D } from './core/Object3D'; +import { Scene } from './scenes/Scene'; + +export namespace SceneUtils { + export function createMultiMaterialObject( + geometry: Geometry, + materials: Material[] + ): Object3D; + export function detach( child: Object3D, parent: Object3D, scene: Scene ): void; + export function attach( child: Object3D, scene: Scene, parent: Object3D ): void; +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/Three.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/Three.d.ts new file mode 100755 index 0000000..4f8e8df --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/Three.d.ts @@ -0,0 +1,180 @@ +export * from './polyfills'; +export * from './renderers/WebGLMultisampleRenderTarget'; +export * from './renderers/WebGLRenderTargetCube'; +export * from './renderers/WebGLRenderTarget'; +export * from './renderers/WebGLRenderer'; +export * from './renderers/shaders/ShaderLib'; +export * from './renderers/shaders/UniformsLib'; +export * from './renderers/shaders/UniformsUtils'; +export * from './renderers/shaders/ShaderChunk'; +export * from './scenes/FogExp2'; +export * from './scenes/Fog'; +export * from './scenes/Scene'; +export * from './objects/Sprite'; +export * from './objects/LOD'; +export * from './objects/InstancedMesh'; +export * from './objects/SkinnedMesh'; +export * from './objects/Skeleton'; +export * from './objects/Bone'; +export * from './objects/Mesh'; +export * from './objects/LineSegments'; +export * from './objects/LineLoop'; +export * from './objects/Line'; +export * from './objects/Points'; +export * from './objects/Group'; +export * from './textures/VideoTexture'; +export * from './textures/DataTexture'; +export * from './textures/DataTexture3D'; +export * from './textures/CompressedTexture'; +export * from './textures/CubeTexture'; +export * from './textures/CanvasTexture'; +export * from './textures/DepthTexture'; +export * from './textures/Texture'; +export * from './geometries/Geometries'; +export * from './materials/Materials'; +export * from './loaders/AnimationLoader'; +export * from './loaders/CompressedTextureLoader'; +export * from './loaders/DataTextureLoader'; +export * from './loaders/CubeTextureLoader'; +export * from './loaders/TextureLoader'; +export * from './loaders/ObjectLoader'; +export * from './loaders/MaterialLoader'; +export * from './loaders/BufferGeometryLoader'; +export * from './loaders/LoadingManager'; +export * from './loaders/ImageLoader'; +export * from './loaders/ImageBitmapLoader'; +export * from './loaders/FontLoader'; +export * from './loaders/FileLoader'; +export * from './loaders/Loader'; +export * from './loaders/LoaderUtils'; +export * from './loaders/Cache'; +export * from './loaders/AudioLoader'; +export * from './lights/SpotLightShadow'; +export * from './lights/SpotLight'; +export * from './lights/PointLight'; +export * from './lights/RectAreaLight'; +export * from './lights/HemisphereLight'; +export * from './lights/DirectionalLightShadow'; +export * from './lights/DirectionalLight'; +export * from './lights/AmbientLight'; +export * from './lights/LightShadow'; +export * from './lights/Light'; +export * from './lights/AmbientLightProbe'; +export * from './lights/HemisphereLightProbe'; +export * from './lights/LightProbe'; +export * from './cameras/StereoCamera'; +export * from './cameras/PerspectiveCamera'; +export * from './cameras/OrthographicCamera'; +export * from './cameras/CubeCamera'; +export * from './cameras/ArrayCamera'; +export * from './cameras/Camera'; +export * from './audio/AudioListener'; +export * from './audio/PositionalAudio'; +export * from './audio/AudioContext'; +export * from './audio/AudioAnalyser'; +export * from './audio/Audio'; +export * from './animation/tracks/VectorKeyframeTrack'; +export * from './animation/tracks/StringKeyframeTrack'; +export * from './animation/tracks/QuaternionKeyframeTrack'; +export * from './animation/tracks/NumberKeyframeTrack'; +export * from './animation/tracks/ColorKeyframeTrack'; +export * from './animation/tracks/BooleanKeyframeTrack'; +export * from './animation/PropertyMixer'; +export * from './animation/PropertyBinding'; +export * from './animation/KeyframeTrack'; +export * from './animation/AnimationUtils'; +export * from './animation/AnimationObjectGroup'; +export * from './animation/AnimationMixer'; +export * from './animation/AnimationClip'; +export * from './core/Uniform'; +export * from './core/InstancedBufferGeometry'; +export * from './core/BufferGeometry'; +export * from './core/Geometry'; +export * from './core/InterleavedBufferAttribute'; +export * from './core/InstancedInterleavedBuffer'; +export * from './core/InterleavedBuffer'; +export * from './core/InstancedBufferAttribute'; +export * from './core/BufferAttribute'; +export * from './core/Face3'; +export * from './core/Object3D'; +export * from './core/Raycaster'; +export * from './core/Layers'; +export * from './core/EventDispatcher'; +export * from './core/DirectGeometry'; +export * from './core/Clock'; +export * from './math/interpolants/QuaternionLinearInterpolant'; +export * from './math/interpolants/LinearInterpolant'; +export * from './math/interpolants/DiscreteInterpolant'; +export * from './math/interpolants/CubicInterpolant'; +export * from './math/Interpolant'; +export * from './math/Triangle'; +export { _Math as Math } from './math/Math'; +export * from './math/Spherical'; +export * from './math/Cylindrical'; +export * from './math/Plane'; +export * from './math/Frustum'; +export * from './math/Sphere'; +export * from './math/Ray'; +export * from './math/Matrix4'; +export * from './math/Matrix3'; +export * from './math/Box3'; +export * from './math/Box2'; +export * from './math/Line3'; +export * from './math/Euler'; +export * from './math/Vector4'; +export * from './math/Vector3'; +export * from './math/Vector2'; +export * from './math/Quaternion'; +export * from './math/Color'; +export * from './math/SphericalHarmonics3'; +export * from './extras/objects/ImmediateRenderObject'; +export * from './helpers/VertexNormalsHelper'; +export * from './helpers/SpotLightHelper'; +export * from './helpers/SkeletonHelper'; +export * from './helpers/PointLightHelper'; +export * from './helpers/RectAreaLightHelper'; +export * from './helpers/HemisphereLightHelper'; +export * from './helpers/GridHelper'; +export * from './helpers/PolarGridHelper'; +export * from './helpers/PositionalAudioHelper'; +export * from './helpers/FaceNormalsHelper'; +export * from './helpers/DirectionalLightHelper'; +export * from './helpers/CameraHelper'; +export * from './helpers/BoxHelper'; +export * from './helpers/Box3Helper'; +export * from './helpers/PlaneHelper'; +export * from './helpers/ArrowHelper'; +export * from './helpers/AxesHelper'; +export * from './extras/curves/Curves'; +export * from './extras/core/Shape'; +export * from './extras/core/Path'; +export * from './extras/core/ShapePath'; +export * from './extras/core/Font'; +export * from './extras/core/CurvePath'; +export * from './extras/core/Curve'; +export * from './extras/ImageUtils'; +export * from './extras/ShapeUtils'; +export * from './renderers/webgl/WebGLBufferRenderer'; +export * from './renderers/webgl/WebGLCapabilities'; +export * from './renderers/webgl/WebGLClipping'; +export * from './renderers/webgl/WebGLExtensions'; +export * from './renderers/webgl/WebGLGeometries'; +export * from './renderers/webgl/WebGLIndexedBufferRenderer'; +export * from './renderers/webgl/WebGLInfo'; +export * from './renderers/webgl/WebGLLights'; +export * from './renderers/webgl/WebGLObjects'; +export * from './renderers/webgl/WebGLProgram'; +export * from './renderers/webgl/WebGLPrograms'; +export * from './renderers/webgl/WebGLProperties'; +export * from './renderers/webgl/WebGLRenderLists'; +export * from './renderers/webgl/WebGLShader'; +export * from './renderers/webgl/WebGLShadowMap'; +export * from './renderers/webgl/WebGLState'; +export * from './renderers/webgl/WebGLTextures'; +export * from './renderers/webgl/WebGLUniforms'; +//export * from './renderers/webgl/WebGLUtils'; +export * from './renderers/webvr/WebVRManager'; +export * from './constants'; +export * from './Three.Legacy'; + +export as namespace THREE; diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationAction.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationAction.d.ts new file mode 100755 index 0000000..b441fff --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationAction.d.ts @@ -0,0 +1,62 @@ +import { AnimationMixer } from './AnimationMixer'; +import { AnimationClip } from './AnimationClip'; +import { AnimationActionLoopStyles } from '../constants'; +import { Object3D } from '../core/Object3D'; +// Animation //////////////////////////////////////////////////////////////////////////////////////// + +export class AnimationAction { + + constructor( mixer: AnimationMixer, clip: AnimationClip, localRoot?: Object3D ); + + loop: AnimationActionLoopStyles; + time: number; + timeScale: number; + weight: number; + repetitions: number; + paused: boolean; + enabled: boolean; + clampWhenFinished: boolean; + zeroSlopeAtStart: boolean; + zeroSlopeAtEnd: boolean; + + play(): AnimationAction; + stop(): AnimationAction; + reset(): AnimationAction; + isRunning(): boolean; + isScheduled(): boolean; + startAt( time: number ): AnimationAction; + setLoop( + mode: AnimationActionLoopStyles, + repetitions: number + ): AnimationAction; + setEffectiveWeight( weight: number ): AnimationAction; + getEffectiveWeight(): number; + fadeIn( duration: number ): AnimationAction; + fadeOut( duration: number ): AnimationAction; + crossFadeFrom( + fadeOutAction: AnimationAction, + duration: number, + warp: boolean + ): AnimationAction; + crossFadeTo( + fadeInAction: AnimationAction, + duration: number, + warp: boolean + ): AnimationAction; + stopFading(): AnimationAction; + setEffectiveTimeScale( timeScale: number ): AnimationAction; + getEffectiveTimeScale(): number; + setDuration( duration: number ): AnimationAction; + syncWith( action: AnimationAction ): AnimationAction; + halt( duration: number ): AnimationAction; + warp( + statTimeScale: number, + endTimeScale: number, + duration: number + ): AnimationAction; + stopWarping(): AnimationAction; + getMixer(): AnimationMixer; + getClip(): AnimationClip; + getRoot(): Object3D; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationClip.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationClip.d.ts new file mode 100755 index 0000000..c8f76cf --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationClip.d.ts @@ -0,0 +1,41 @@ +import { KeyframeTrack } from './KeyframeTrack'; +import { Bone } from './../objects/Bone'; +import { MorphTarget } from '../core/Geometry'; + +export class AnimationClip { + + constructor( name?: string, duration?: number, tracks?: KeyframeTrack[] ); + + name: string; + tracks: KeyframeTrack[]; + duration: number; + uuid: string; + results: any[]; + + resetDuration(): AnimationClip; + trim(): AnimationClip; + validate(): boolean; + optimize(): AnimationClip; + clone(): AnimationClip; + + static CreateFromMorphTargetSequence( + name: string, + morphTargetSequence: MorphTarget[], + fps: number, + noLoop: boolean + ): AnimationClip; + static findByName( clipArray: AnimationClip[], name: string ): AnimationClip; + static CreateClipsFromMorphTargetSequences( + morphTargets: MorphTarget[], + fps: number, + noLoop: boolean + ): AnimationClip[]; + static parse( json: any ): AnimationClip; + static parseAnimation( + animation: any, + bones: Bone[], + nodeName: string + ): AnimationClip; + static toJSON(): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationMixer.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationMixer.d.ts new file mode 100755 index 0000000..9abd226 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationMixer.d.ts @@ -0,0 +1,23 @@ +import { AnimationClip } from './AnimationClip'; +import { AnimationAction } from './AnimationAction'; +import { EventDispatcher } from './../core/EventDispatcher'; +import { Object3D } from '../core/Object3D'; + +export class AnimationMixer extends EventDispatcher { + + constructor( root: Object3D ); + + time: number; + timeScale: number; + + clipAction( clip: AnimationClip, root?: Object3D ): AnimationAction; + existingAction( clip: AnimationClip, root?: Object3D ): AnimationAction | null; + stopAllAction(): AnimationMixer; + update( deltaTime: number ): AnimationMixer; + setTime( timeInSeconds: number ): AnimationMixer; + getRoot(): Object3D; + uncacheClip( clip: AnimationClip ): void; + uncacheRoot( root: Object3D ): void; + uncacheAction( clip: AnimationClip, root?: Object3D ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationObjectGroup.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationObjectGroup.d.ts new file mode 100755 index 0000000..8bbfe38 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationObjectGroup.d.ts @@ -0,0 +1,18 @@ +export class AnimationObjectGroup { + + constructor( ...args: any[] ); + + uuid: string; + stats: { + bindingsPerObject: number; + objects: { + total: number; + inUse: number; + }; + }; + + add( ...args: any[] ): void; + remove( ...args: any[] ): void; + uncache( ...args: any[] ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationUtils.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationUtils.d.ts new file mode 100755 index 0000000..33b40b3 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/AnimationUtils.d.ts @@ -0,0 +1,26 @@ +import { AnimationClip } from './AnimationClip'; + +export namespace AnimationUtils { + export function arraySlice( array: any, from: number, to: number ): any; + export function convertArray( array: any, type: any, forceClone: boolean ): any; + export function isTypedArray( object: any ): boolean; + export function getKeyFrameOrder( times: number[] ): number[]; + export function sortedArray( + values: any[], + stride: number, + order: number[] + ): any[]; + export function flattenJSON( + jsonKeys: string[], + times: any[], + values: any[], + valuePropertyName: string + ): void; + export function subclip( + sourceClip: AnimationClip, + name: string, + startFrame: number, + endFrame: number, + fps?: number + ): AnimationClip; +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/KeyframeTrack.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/KeyframeTrack.d.ts new file mode 100755 index 0000000..19257e1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/KeyframeTrack.d.ts @@ -0,0 +1,43 @@ +import { DiscreteInterpolant } from './../math/interpolants/DiscreteInterpolant'; +import { LinearInterpolant } from './../math/interpolants/LinearInterpolant'; +import { CubicInterpolant } from './../math/interpolants/CubicInterpolant'; +import { InterpolationModes } from '../constants'; + +export class KeyframeTrack { + + constructor( + name: string, + times: any[], + values: any[], + interpolation?: InterpolationModes + ); + + name: string; + times: Float32Array; + values: Float32Array; + + ValueTypeName: string; + TimeBufferType: Float32Array; + ValueBufferType: Float32Array; + + DefaultInterpolation: InterpolationModes; + + InterpolantFactoryMethodDiscrete( result: any ): DiscreteInterpolant; + InterpolantFactoryMethodLinear( result: any ): LinearInterpolant; + InterpolantFactoryMethodSmooth( result: any ): CubicInterpolant; + + setInterpolation( interpolation: InterpolationModes ): KeyframeTrack; + getInterpolation(): InterpolationModes; + + getValuesize(): number; + + shift( timeOffset: number ): KeyframeTrack; + scale( timeScale: number ): KeyframeTrack; + trim( startTime: number, endTime: number ): KeyframeTrack; + validate(): boolean; + optimize(): KeyframeTrack; + clone(): KeyframeTrack; + + static toJSON( track: KeyframeTrack ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/PropertyBinding.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/PropertyBinding.d.ts new file mode 100755 index 0000000..4c4995e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/PropertyBinding.d.ts @@ -0,0 +1,51 @@ +export interface ParseTrackNameResults { + nodeName: string; + objectName: string; + objectIndex: string; + propertyName: string; + propertyIndex: string; +} + +export class PropertyBinding { + + constructor( rootNode: any, path: string, parsedPath?: any ); + + path: string; + parsedPath: any; + node: any; + rootNode: any; + + getValue( targetArray: any, offset: number ): any; + setValue( sourceArray: any, offset: number ): void; + bind(): void; + unbind(): void; + + BindingType: { [bindingType: string]: number }; + Versioning: { [versioning: string]: number }; + + GetterByBindingType: Function[]; + SetterByBindingTypeAndVersioning: Array; + + static create( + root: any, + path: any, + parsedPath?: any + ): PropertyBinding | PropertyBinding.Composite; + static sanitizeNodeName( name: string ): string; + static parseTrackName( trackName: string ): ParseTrackNameResults; + static findNode( root: any, nodeName: string ): any; + +} + +export namespace PropertyBinding { + export class Composite { + + constructor( targetGroup: any, path: any, parsedPath?: any ); + + getValue( array: any, offset: number ): any; + setValue( array: any, offset: number ): void; + bind(): void; + unbind(): void; + + } +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/PropertyMixer.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/PropertyMixer.d.ts new file mode 100755 index 0000000..9e86622 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/PropertyMixer.d.ts @@ -0,0 +1,17 @@ +export class PropertyMixer { + + constructor( binding: any, typeName: string, valueSize: number ); + + binding: any; + valueSize: number; + buffer: any; + cumulativeWeight: number; + useCount: number; + referenceCount: number; + + accumulate( accuIndex: number, weight: number ): void; + apply( accuIndex: number ): void; + saveOriginalState(): void; + restoreOriginalState(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/BooleanKeyframeTrack.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/BooleanKeyframeTrack.d.ts new file mode 100755 index 0000000..e37b0ea --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/BooleanKeyframeTrack.d.ts @@ -0,0 +1,7 @@ +import { KeyframeTrack } from './../KeyframeTrack'; + +export class BooleanKeyframeTrack extends KeyframeTrack { + + constructor( name: string, times: any[], values: any[] ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/ColorKeyframeTrack.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/ColorKeyframeTrack.d.ts new file mode 100755 index 0000000..aacf8bf --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/ColorKeyframeTrack.d.ts @@ -0,0 +1,13 @@ +import { KeyframeTrack } from './../KeyframeTrack'; +import { InterpolationModes } from '../../constants'; + +export class ColorKeyframeTrack extends KeyframeTrack { + + constructor( + name: string, + times: any[], + values: any[], + interpolation?: InterpolationModes + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/NumberKeyframeTrack.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/NumberKeyframeTrack.d.ts new file mode 100755 index 0000000..b7f36e0 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/NumberKeyframeTrack.d.ts @@ -0,0 +1,13 @@ +import { KeyframeTrack } from './../KeyframeTrack'; +import { InterpolationModes } from '../../constants'; + +export class NumberKeyframeTrack extends KeyframeTrack { + + constructor( + name: string, + times: any[], + values: any[], + interpolation?: InterpolationModes + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/QuaternionKeyframeTrack.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/QuaternionKeyframeTrack.d.ts new file mode 100755 index 0000000..b06b707 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/QuaternionKeyframeTrack.d.ts @@ -0,0 +1,13 @@ +import { KeyframeTrack } from './../KeyframeTrack'; +import { InterpolationModes } from '../../constants'; + +export class QuaternionKeyframeTrack extends KeyframeTrack { + + constructor( + name: string, + times: any[], + values: any[], + interpolation?: InterpolationModes + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/StringKeyframeTrack.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/StringKeyframeTrack.d.ts new file mode 100755 index 0000000..ecf2b7f --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/StringKeyframeTrack.d.ts @@ -0,0 +1,13 @@ +import { KeyframeTrack } from './../KeyframeTrack'; +import { InterpolationModes } from '../../constants'; + +export class StringKeyframeTrack extends KeyframeTrack { + + constructor( + name: string, + times: any[], + values: any[], + interpolation?: InterpolationModes + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/VectorKeyframeTrack.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/VectorKeyframeTrack.d.ts new file mode 100755 index 0000000..d9647db --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/animation/tracks/VectorKeyframeTrack.d.ts @@ -0,0 +1,13 @@ +import { KeyframeTrack } from './../KeyframeTrack'; +import { InterpolationModes } from '../../constants'; + +export class VectorKeyframeTrack extends KeyframeTrack { + + constructor( + name: string, + times: any[], + values: any[], + interpolation?: InterpolationModes + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/Audio.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/Audio.d.ts new file mode 100755 index 0000000..e89afe9 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/Audio.d.ts @@ -0,0 +1,70 @@ +import { Object3D } from './../core/Object3D'; +import { AudioListener } from './AudioListener'; +import { AudioContext } from './AudioContext'; + +// Extras / Audio ///////////////////////////////////////////////////////////////////// + +export class Audio extends Object3D { + + constructor( listener: AudioListener ); + type: 'Audio'; + + context: AudioContext; + gain: GainNode; + autoplay: boolean; + buffer: null | Audio; + detune: number; + loop: boolean; + offset: number; + duration: number | undefined; + playbackRate: number; + isPlaying: boolean; + hasPlaybackControl: boolean; + sourceType: string; + source: AudioBufferSourceNode; + filters: any[]; + + getOutput(): GainNode; + setNodeSource( audioNode: AudioBufferSourceNode ): this; + setMediaElementSource( mediaElement: HTMLMediaElement ): this; + setMediaStreamSource( mediaStream: MediaStream ): this; + setBuffer( audioBuffer: AudioBuffer ): this; + play( delay?: number ): this; + onEnded(): void; + pause(): this; + stop(): this; + connect(): this; + disconnect(): this; + setDetune( value: number ): this; + getDetune(): number; + getFilters(): any[]; + setFilter( value: any[] ): this; + getFilter(): any; + setFilter( filter: any ): this; + setPlaybackRate( value: number ): this; + getPlaybackRate(): number; + getLoop(): boolean; + setLoop( value: boolean ): this; + setLoopStart( value: number ): this; + setLoopEnd( value: number ): this; + getVolume(): number; + setVolume( value: number ): this; + /** + * @deprecated Use {@link AudioLoader} instead. + */ + load( file: string ): Audio; + +} + +export class AudioBuffer { + + constructor( context: any ); + + context: any; + ready: boolean; + readyCallbacks: Function[]; + + load( file: string ): AudioBuffer; + onReady( callback: Function ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/AudioAnalyser.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/AudioAnalyser.d.ts new file mode 100755 index 0000000..f1051b1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/AudioAnalyser.d.ts @@ -0,0 +1,16 @@ +export class AudioAnalyser { + + constructor( audio: any, fftSize: number ); + + analyser: any; + data: Uint8Array; + + getFrequencyData(): Uint8Array; + getAverageFrequency(): number; + + /** + * @deprecated Use {@link AudioAnalyser#getFrequencyData .getFrequencyData()} instead. + */ + getData( file: any ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/AudioContext.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/AudioContext.d.ts new file mode 100755 index 0000000..5fb703a --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/AudioContext.d.ts @@ -0,0 +1 @@ +export const AudioContext: AudioContext; diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/AudioListener.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/AudioListener.d.ts new file mode 100755 index 0000000..de3fb11 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/AudioListener.d.ts @@ -0,0 +1,21 @@ +import { Object3D } from './../core/Object3D'; +import { AudioContext } from './AudioContext'; + +export class AudioListener extends Object3D { + + constructor(); + + type: 'AudioListener'; + context: AudioContext; + gain: GainNode; + filter: null | any; + + getInput(): GainNode; + removeFilter(): void; + setFilter( value: any ): void; + getFilter(): any; + setMasterVolume( value: number ): void; + getMasterVolume(): number; + updateMatrixWorld( force?: boolean ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/PositionalAudio.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/PositionalAudio.d.ts new file mode 100755 index 0000000..eb328be --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/audio/PositionalAudio.d.ts @@ -0,0 +1,24 @@ +import { AudioListener } from './AudioListener'; +import { Audio } from './Audio'; + +export class PositionalAudio extends Audio { + + constructor( listener: AudioListener ); + + panner: PannerNode; + + setRefDistance( value: number ): this; + getRefDistance(): number; + setRolloffFactor( value: number ): this; + getRolloffFactor(): number; + setDistanceModel( value: string ): this; + getDistanceModel(): string; + setMaxDistance( value: number ): this; + getMaxDistance(): number; + setDirectionalCone( + coneInnerAngle: number, + coneOuterAngle: number, + coneOuterGain: number + ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/ArrayCamera.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/ArrayCamera.d.ts new file mode 100755 index 0000000..08b4c65 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/ArrayCamera.d.ts @@ -0,0 +1,10 @@ +import { PerspectiveCamera } from './PerspectiveCamera'; + +export class ArrayCamera extends PerspectiveCamera { + + constructor( cameras?: PerspectiveCamera[] ); + + cameras: PerspectiveCamera[]; + isArrayCamera: true; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/Camera.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/Camera.d.ts new file mode 100755 index 0000000..f858802 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/Camera.d.ts @@ -0,0 +1,38 @@ +import { Matrix4 } from './../math/Matrix4'; +import { Vector3 } from './../math/Vector3'; +import { Object3D } from './../core/Object3D'; + +// Cameras //////////////////////////////////////////////////////////////////////////////////////// + +/** + * Abstract base class for cameras. This class should always be inherited when you build a new camera. + */ +export class Camera extends Object3D { + + /** + * This constructor sets following properties to the correct type: matrixWorldInverse, projectionMatrix and projectionMatrixInverse. + */ + constructor(); + + /** + * This is the inverse of matrixWorld. MatrixWorld contains the Matrix which has the world transform of the Camera. + */ + matrixWorldInverse: Matrix4; + + /** + * This is the matrix which contains the projection. + */ + projectionMatrix: Matrix4; + + /** + * This is the inverse of projectionMatrix. + */ + projectionMatrixInverse: Matrix4; + + isCamera: true; + + getWorldDirection( target: Vector3 ): Vector3; + + updateMatrixWorld( force?: boolean ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/CubeCamera.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/CubeCamera.d.ts new file mode 100755 index 0000000..99a8985 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/CubeCamera.d.ts @@ -0,0 +1,19 @@ +import { WebGLRenderTargetCube } from './../renderers/WebGLRenderTargetCube'; +import { WebGLRenderTargetOptions } from './../renderers/WebGLRenderTarget'; +import { Scene } from './../scenes/Scene'; +import { WebGLRenderer } from './../renderers/WebGLRenderer'; +import { Object3D } from './../core/Object3D'; + +export class CubeCamera extends Object3D { + + constructor( near?: number, far?: number, cubeResolution?: number, options?: WebGLRenderTargetOptions ); + + type: 'CubeCamera'; + + renderTarget: WebGLRenderTargetCube; + + update( renderer: WebGLRenderer, scene: Scene ): void; + + clear( renderer: WebGLRenderer, color: boolean, depth: boolean, stencil: boolean ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/OrthographicCamera.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/OrthographicCamera.d.ts new file mode 100755 index 0000000..d598d55 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/OrthographicCamera.d.ts @@ -0,0 +1,91 @@ +import { Camera } from './Camera'; + +/** + * Camera with orthographic projection + * + * @example + * var camera = new THREE.OrthographicCamera( width / - 2, width / 2, height / 2, height / - 2, 1, 1000 ); + * scene.add( camera ); + * + * @see src/cameras/OrthographicCamera.js + */ +export class OrthographicCamera extends Camera { + + /** + * @param left Camera frustum left plane. + * @param right Camera frustum right plane. + * @param top Camera frustum top plane. + * @param bottom Camera frustum bottom plane. + * @param near Camera frustum near plane. + * @param far Camera frustum far plane. + */ + constructor( + left: number, + right: number, + top: number, + bottom: number, + near?: number, + far?: number + ); + + type: 'OrthographicCamera'; + + isOrthographicCamera: true; + + zoom: number; + view: null | { + enabled: boolean; + fullWidth: number; + fullHeight: number; + offsetX: number; + offsetY: number; + width: number; + height: number; + }; + + /** + * Camera frustum left plane. + */ + left: number; + + /** + * Camera frustum right plane. + */ + right: number; + + /** + * Camera frustum top plane. + */ + top: number; + + /** + * Camera frustum bottom plane. + */ + bottom: number; + + /** + * Camera frustum near plane. + */ + near: number; + + /** + * Camera frustum far plane. + */ + far: number; + + /** + * Updates the camera projection matrix. Must be called after change of parameters. + */ + updateProjectionMatrix(): void; + setViewOffset( + fullWidth: number, + fullHeight: number, + offsetX: number, + offsetY: number, + width: number, + height: number + ): void; + clearViewOffset(): void; + toJSON( meta?: any ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/PerspectiveCamera.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/PerspectiveCamera.d.ts new file mode 100755 index 0000000..d6b2c61 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/PerspectiveCamera.d.ts @@ -0,0 +1,121 @@ +import { Camera } from './Camera'; + +/** + * Camera with perspective projection. + * + * @source https://github.com/mrdoob/three.js/blob/master/src/cameras/PerspectiveCamera.js + */ +export class PerspectiveCamera extends Camera { + + /** + * @param fov Camera frustum vertical field of view. Default value is 50. + * @param aspect Camera frustum aspect ratio. Default value is 1. + * @param near Camera frustum near plane. Default value is 0.1. + * @param far Camera frustum far plane. Default value is 2000. + */ + constructor( fov?: number, aspect?: number, near?: number, far?: number ); + + type: 'PerspectiveCamera'; + + isPerspectiveCamera: true; + + zoom: number; + + /** + * Camera frustum vertical field of view, from bottom to top of view, in degrees. + */ + fov: number; + + /** + * Camera frustum aspect ratio, window width divided by window height. + */ + aspect: number; + + /** + * Camera frustum near plane. + */ + near: number; + + /** + * Camera frustum far plane. + */ + far: number; + + focus: number; + view: null | { + enabled: boolean; + fullWidth: number; + fullHeight: number; + offsetX: number; + offsetY: number; + width: number; + height: number; + }; + filmGauge: number; + filmOffset: number; + + setFocalLength( focalLength: number ): void; + getFocalLength(): number; + getEffectiveFOV(): number; + getFilmWidth(): number; + getFilmHeight(): number; + + /** + * Sets an offset in a larger frustum. This is useful for multi-window or multi-monitor/multi-machine setups. + * For example, if you have 3x2 monitors and each monitor is 1920x1080 and the monitors are in grid like this: + * + * +---+---+---+ + * | A | B | C | + * +---+---+---+ + * | D | E | F | + * +---+---+---+ + * + * then for each monitor you would call it like this: + * + * var w = 1920; + * var h = 1080; + * var fullWidth = w * 3; + * var fullHeight = h * 2; + * + * // A + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); + * // B + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); + * // C + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); + * // D + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); + * // E + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); + * // F + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); Note there is no reason monitors have to be the same size or in a grid. + * + * @param fullWidth full width of multiview setup + * @param fullHeight full height of multiview setup + * @param x horizontal offset of subcamera + * @param y vertical offset of subcamera + * @param width width of subcamera + * @param height height of subcamera + */ + setViewOffset( + fullWidth: number, + fullHeight: number, + x: number, + y: number, + width: number, + height: number + ): void; + clearViewOffset(): void; + + /** + * Updates the camera projection matrix. Must be called after change of parameters. + */ + updateProjectionMatrix(): void; + toJSON( meta?: any ): any; + + /** + * @deprecated Use {@link PerspectiveCamera#setFocalLength .setFocalLength()} and {@link PerspectiveCamera#filmGauge .filmGauge} instead. + */ + setLens( focalLength: number, frameHeight?: number ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/StereoCamera.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/StereoCamera.d.ts new file mode 100755 index 0000000..5ba067d --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/cameras/StereoCamera.d.ts @@ -0,0 +1,17 @@ +import { PerspectiveCamera } from './PerspectiveCamera'; +import { Camera } from './Camera'; + +export class StereoCamera extends Camera { + + constructor(); + + type: 'StereoCamera'; + + aspect: number; + eyeSep: number; + cameraL: PerspectiveCamera; + cameraR: PerspectiveCamera; + + update( camera: PerspectiveCamera ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/constants.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/constants.d.ts new file mode 100755 index 0000000..266553d --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/constants.d.ts @@ -0,0 +1,290 @@ +export const REVISION: string; + +// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.button +export enum MOUSE { + LEFT, + MIDDLE, + RIGHT, + ROTATE, + DOLLY, + PAN, +} + +export enum TOUCH { + ROTATE, + PAN, + DOLLY_PAN, + DOLLY_ROTATE, +} + +// GL STATE CONSTANTS +export enum CullFace {} +export const CullFaceNone: CullFace; +export const CullFaceBack: CullFace; +export const CullFaceFront: CullFace; +export const CullFaceFrontBack: CullFace; + +export enum FrontFaceDirection {} +export const FrontFaceDirectionCW: FrontFaceDirection; +export const FrontFaceDirectionCCW: FrontFaceDirection; + +// Shadowing Type +export enum ShadowMapType {} +export const BasicShadowMap: ShadowMapType; +export const PCFShadowMap: ShadowMapType; +export const PCFSoftShadowMap: ShadowMapType; +export const VSMShadowMap: ShadowMapType; + +// MATERIAL CONSTANTS + +// side +export enum Side {} +export const FrontSide: Side; +export const BackSide: Side; +export const DoubleSide: Side; + +// shading +export enum Shading {} +export const FlatShading: Shading; +export const SmoothShading: Shading; + +// colors +export enum Colors {} +export const NoColors: Colors; +export const FaceColors: Colors; +export const VertexColors: Colors; + +// blending modes +export enum Blending {} +export const NoBlending: Blending; +export const NormalBlending: Blending; +export const AdditiveBlending: Blending; +export const SubtractiveBlending: Blending; +export const MultiplyBlending: Blending; +export const CustomBlending: Blending; + +// custom blending equations +// (numbers start from 100 not to clash with other +// mappings to OpenGL constants defined in Texture.js) +export enum BlendingEquation {} +export const AddEquation: BlendingEquation; +export const SubtractEquation: BlendingEquation; +export const ReverseSubtractEquation: BlendingEquation; +export const MinEquation: BlendingEquation; +export const MaxEquation: BlendingEquation; + +// custom blending destination factors +export enum BlendingDstFactor {} +export const ZeroFactor: BlendingDstFactor; +export const OneFactor: BlendingDstFactor; +export const SrcColorFactor: BlendingDstFactor; +export const OneMinusSrcColorFactor: BlendingDstFactor; +export const SrcAlphaFactor: BlendingDstFactor; +export const OneMinusSrcAlphaFactor: BlendingDstFactor; +export const DstAlphaFactor: BlendingDstFactor; +export const OneMinusDstAlphaFactor: BlendingDstFactor; +export const DstColorFactor: BlendingDstFactor; +export const OneMinusDstColorFactor: BlendingDstFactor; + +// custom blending src factors +export enum BlendingSrcFactor {} +export const SrcAlphaSaturateFactor: BlendingSrcFactor; + +// depth modes +export enum DepthModes {} +export const NeverDepth: DepthModes; +export const AlwaysDepth: DepthModes; +export const LessDepth: DepthModes; +export const LessEqualDepth: DepthModes; +export const EqualDepth: DepthModes; +export const GreaterEqualDepth: DepthModes; +export const GreaterDepth: DepthModes; +export const NotEqualDepth: DepthModes; + +// TEXTURE CONSTANTS +// Operations +export enum Combine {} +export const MultiplyOperation: Combine; +export const MixOperation: Combine; +export const AddOperation: Combine; + +// Tone Mapping modes +export enum ToneMapping {} +export const NoToneMapping: ToneMapping; +export const LinearToneMapping: ToneMapping; +export const ReinhardToneMapping: ToneMapping; +export const Uncharted2ToneMapping: ToneMapping; +export const CineonToneMapping: ToneMapping; +export const ACESFilmicToneMapping: ToneMapping; + +// Mapping modes +export enum Mapping {} +export const UVMapping: Mapping; +export const CubeReflectionMapping: Mapping; +export const CubeRefractionMapping: Mapping; +export const EquirectangularReflectionMapping: Mapping; +export const EquirectangularRefractionMapping: Mapping; +export const SphericalReflectionMapping: Mapping; +export const CubeUVReflectionMapping: Mapping; +export const CubeUVRefractionMapping: Mapping; + +// Wrapping modes +export enum Wrapping {} +export const RepeatWrapping: Wrapping; +export const ClampToEdgeWrapping: Wrapping; +export const MirroredRepeatWrapping: Wrapping; + +// Filters +export enum TextureFilter {} +export const NearestFilter: TextureFilter; +export const NearestMipmapNearestFilter: TextureFilter; +export const NearestMipMapNearestFilter: TextureFilter; +export const NearestMipmapLinearFilter: TextureFilter; +export const NearestMipMapLinearFilter: TextureFilter; +export const LinearFilter: TextureFilter; +export const LinearMipmapNearestFilter: TextureFilter; +export const LinearMipMapNearestFilter: TextureFilter; +export const LinearMipmapLinearFilter: TextureFilter; +export const LinearMipMapLinearFilter: TextureFilter; + +// Data types +export enum TextureDataType {} +export const UnsignedByteType: TextureDataType; +export const ByteType: TextureDataType; +export const ShortType: TextureDataType; +export const UnsignedShortType: TextureDataType; +export const IntType: TextureDataType; +export const UnsignedIntType: TextureDataType; +export const FloatType: TextureDataType; +export const HalfFloatType: TextureDataType; + +// Pixel types +export enum PixelType {} +export const UnsignedShort4444Type: PixelType; +export const UnsignedShort5551Type: PixelType; +export const UnsignedShort565Type: PixelType; +export const UnsignedInt248Type: PixelType; + +// Pixel formats +export enum PixelFormat {} +export const AlphaFormat: PixelFormat; +export const RGBFormat: PixelFormat; +export const RGBAFormat: PixelFormat; +export const LuminanceFormat: PixelFormat; +export const LuminanceAlphaFormat: PixelFormat; +export const RGBEFormat: PixelFormat; +export const DepthFormat: PixelFormat; +export const DepthStencilFormat: PixelFormat; +export const RedFormat: PixelFormat; + +// Compressed texture formats +// DDS / ST3C Compressed texture formats +export enum CompressedPixelFormat {} +export const RGB_S3TC_DXT1_Format: CompressedPixelFormat; +export const RGBA_S3TC_DXT1_Format: CompressedPixelFormat; +export const RGBA_S3TC_DXT3_Format: CompressedPixelFormat; +export const RGBA_S3TC_DXT5_Format: CompressedPixelFormat; + +// PVRTC compressed './texture formats +export const RGB_PVRTC_4BPPV1_Format: CompressedPixelFormat; +export const RGB_PVRTC_2BPPV1_Format: CompressedPixelFormat; +export const RGBA_PVRTC_4BPPV1_Format: CompressedPixelFormat; +export const RGBA_PVRTC_2BPPV1_Format: CompressedPixelFormat; + +// ETC compressed texture formats +export const RGB_ETC1_Format: CompressedPixelFormat; + +// ASTC compressed texture formats +export const RGBA_ASTC_4x4_Format: CompressedPixelFormat; +export const RGBA_ASTC_5x4_Format: CompressedPixelFormat; +export const RGBA_ASTC_5x5_Format: CompressedPixelFormat; +export const RGBA_ASTC_6x5_Format: CompressedPixelFormat; +export const RGBA_ASTC_6x6_Format: CompressedPixelFormat; +export const RGBA_ASTC_8x5_Format: CompressedPixelFormat; +export const RGBA_ASTC_8x6_Format: CompressedPixelFormat; +export const RGBA_ASTC_8x8_Format: CompressedPixelFormat; +export const RGBA_ASTC_10x5_Format: CompressedPixelFormat; +export const RGBA_ASTC_10x6_Format: CompressedPixelFormat; +export const RGBA_ASTC_10x8_Format: CompressedPixelFormat; +export const RGBA_ASTC_10x10_Format: CompressedPixelFormat; +export const RGBA_ASTC_12x10_Format: CompressedPixelFormat; +export const RGBA_ASTC_12x12_Format: CompressedPixelFormat; + +// Loop styles for AnimationAction +export enum AnimationActionLoopStyles {} +export const LoopOnce: AnimationActionLoopStyles; +export const LoopRepeat: AnimationActionLoopStyles; +export const LoopPingPong: AnimationActionLoopStyles; + +// Interpolation +export enum InterpolationModes {} +export const InterpolateDiscrete: InterpolationModes; +export const InterpolateLinear: InterpolationModes; +export const InterpolateSmooth: InterpolationModes; + +// Interpolant ending modes +export enum InterpolationEndingModes {} +export const ZeroCurvatureEnding: InterpolationEndingModes; +export const ZeroSlopeEnding: InterpolationEndingModes; +export const WrapAroundEnding: InterpolationEndingModes; + +// Triangle Draw modes +export enum TrianglesDrawModes {} +export const TrianglesDrawMode: TrianglesDrawModes; +export const TriangleStripDrawMode: TrianglesDrawModes; +export const TriangleFanDrawMode: TrianglesDrawModes; + +// Texture Encodings +export enum TextureEncoding {} +export const LinearEncoding: TextureEncoding; +export const sRGBEncoding: TextureEncoding; +export const GammaEncoding: TextureEncoding; +export const RGBEEncoding: TextureEncoding; +export const LogLuvEncoding: TextureEncoding; +export const RGBM7Encoding: TextureEncoding; +export const RGBM16Encoding: TextureEncoding; +export const RGBDEncoding: TextureEncoding; + +// Depth packing strategies +export enum DepthPackingStrategies {} +export const BasicDepthPacking: DepthPackingStrategies; +export const RGBADepthPacking: DepthPackingStrategies; + +// Normal Map types +export enum NormalMapTypes {} +export const TangentSpaceNormalMap: NormalMapTypes; +export const ObjectSpaceNormalMap: NormalMapTypes; + +// Stencil Op types +export enum StencilOp {} +export const ZeroStencilOp: StencilOp; +export const KeepStencilOp: StencilOp; +export const ReplaceStencilOp: StencilOp; +export const IncrementStencilOp: StencilOp; +export const DecrementStencilOp: StencilOp; +export const IncrementWrapStencilOp: StencilOp; +export const DecrementWrapStencilOp: StencilOp; +export const InvertStencilOp: StencilOp; + +// Stencil Func types +export enum StencilFunc {} +export const NeverStencilFunc: StencilFunc; +export const LessStencilFunc: StencilFunc; +export const EqualStencilFunc: StencilFunc; +export const LessEqualStencilFunc: StencilFunc; +export const GreaterStencilFunc: StencilFunc; +export const NotEqualStencilFunc: StencilFunc; +export const GreaterEqualStencilFunc: StencilFunc; +export const AlwaysStencilFunc: StencilFunc; + +// usage types +export enum Usage {} +export const StaticDrawUsage: Usage; +export const DynamicDrawUsage: Usage; +export const StreamDrawUsage: Usage; +export const StaticReadUsage: Usage; +export const DynamicReadUsage: Usage; +export const StreamReadUsage: Usage; +export const StaticCopyUsage: Usage; +export const DynamicCopyUsage: Usage; +export const StreamCopyUsage: Usage; diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/BufferAttribute.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/BufferAttribute.d.ts new file mode 100755 index 0000000..c1abc44 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/BufferAttribute.d.ts @@ -0,0 +1,245 @@ +import { + Usage +} from '../constants'; + +/** + * @see src/core/BufferAttribute.js + */ +export class BufferAttribute { + + constructor( array: ArrayLike, itemSize: number, normalized?: boolean ); // array parameter should be TypedArray. + + name: string; + array: ArrayLike; + itemSize: number; + usage: Usage; + updateRange: { offset: number; count: number }; + version: number; + normalized: boolean; + count: number; + + set needsUpdate( value: boolean ); + + isBufferAttribute: true; + + onUploadCallback: () => void; + onUpload( callback: () => void ): this; + setUsage( usage: Usage ): this; + clone(): BufferAttribute; + copy( source: BufferAttribute ): this; + copyAt( + index1: number, + attribute: BufferAttribute, + index2: number + ): this; + copyArray( array: ArrayLike ): this; + copyColorsArray( + colors: { r: number; g: number; b: number }[] + ): this; + copyVector2sArray( vectors: { x: number; y: number }[] ): this; + copyVector3sArray( + vectors: { x: number; y: number; z: number }[] + ): this; + copyVector4sArray( + vectors: { x: number; y: number; z: number; w: number }[] + ): this; + set( + value: ArrayLike | ArrayBufferView, + offset?: number + ): this; + getX( index: number ): number; + setX( index: number, x: number ): this; + getY( index: number ): number; + setY( index: number, y: number ): this; + getZ( index: number ): number; + setZ( index: number, z: number ): this; + getW( index: number ): number; + setW( index: number, z: number ): this; + setXY( index: number, x: number, y: number ): this; + setXYZ( index: number, x: number, y: number, z: number ): this; + setXYZW( + index: number, + x: number, + y: number, + z: number, + w: number + ): this; + toJSON(): { + itemSize: number, + type: string, + array: number[], + normalized: boolean + }; + +} + +/** + * @deprecated THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead. + */ +export class Int8Attribute extends BufferAttribute { + + constructor( array: any, itemSize: number ); + +} + +/** + * @deprecated THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead. + */ +export class Uint8Attribute extends BufferAttribute { + + constructor( array: any, itemSize: number ); + +} + +/** + * @deprecated THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead. + */ +export class Uint8ClampedAttribute extends BufferAttribute { + + constructor( array: any, itemSize: number ); + +} + +/** + * @deprecated THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead. + */ +export class Int16Attribute extends BufferAttribute { + + constructor( array: any, itemSize: number ); + +} + +/** + * @deprecated THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead. + */ +export class Uint16Attribute extends BufferAttribute { + + constructor( array: any, itemSize: number ); + +} + +/** + * @deprecated THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead. + */ +export class Int32Attribute extends BufferAttribute { + + constructor( array: any, itemSize: number ); + +} + +/** + * @deprecated THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead. + */ +export class Uint32Attribute extends BufferAttribute { + + constructor( array: any, itemSize: number ); + +} + +/** + * @deprecated THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead. + */ +export class Float32Attribute extends BufferAttribute { + + constructor( array: any, itemSize: number ); + +} + +/** + * @deprecated THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead. + */ +export class Float64Attribute extends BufferAttribute { + + constructor( array: any, itemSize: number ); + +} + +export class Int8BufferAttribute extends BufferAttribute { + + constructor( + array: ArrayLike | ArrayBuffer | number, + itemSize: number, + normalized?: boolean + ); + +} + +export class Uint8BufferAttribute extends BufferAttribute { + + constructor( + array: ArrayLike | ArrayBuffer | number, + itemSize: number, + normalized?: boolean + ); + +} + +export class Uint8ClampedBufferAttribute extends BufferAttribute { + + constructor( + array: ArrayLike | ArrayBuffer | number, + itemSize: number, + normalized?: boolean + ); + +} + +export class Int16BufferAttribute extends BufferAttribute { + + constructor( + array: ArrayLike | ArrayBuffer | number, + itemSize: number, + normalized?: boolean + ); + +} + +export class Uint16BufferAttribute extends BufferAttribute { + + constructor( + array: ArrayLike | ArrayBuffer | number, + itemSize: number, + normalized?: boolean + ); + +} + +export class Int32BufferAttribute extends BufferAttribute { + + constructor( + array: ArrayLike | ArrayBuffer | number, + itemSize: number, + normalized?: boolean + ); + +} + +export class Uint32BufferAttribute extends BufferAttribute { + + constructor( + array: ArrayLike | ArrayBuffer | number, + itemSize: number, + normalized?: boolean + ); + +} + +export class Float32BufferAttribute extends BufferAttribute { + + constructor( + array: ArrayLike | ArrayBuffer | number, + itemSize: number, + normalized?: boolean + ); + +} + +export class Float64BufferAttribute extends BufferAttribute { + + constructor( + array: ArrayLike | ArrayBuffer | number, + itemSize: number, + normalized?: boolean + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/BufferGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/BufferGeometry.d.ts new file mode 100755 index 0000000..b784663 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/BufferGeometry.d.ts @@ -0,0 +1,157 @@ +import { BufferAttribute } from './BufferAttribute'; +import { Box3 } from './../math/Box3'; +import { Sphere } from './../math/Sphere'; +import { Matrix4 } from './../math/Matrix4'; +import { Vector2 } from './../math/Vector2'; +import { Vector3 } from './../math/Vector3'; +import { Object3D } from './Object3D'; +import { Geometry } from './Geometry'; +import { DirectGeometry } from './DirectGeometry'; +import { EventDispatcher } from './EventDispatcher'; +import { InterleavedBufferAttribute } from './InterleavedBufferAttribute'; + +/** + * This is a superefficent class for geometries because it saves all data in buffers. + * It reduces memory costs and cpu cycles. But it is not as easy to work with because of all the nessecary buffer calculations. + * It is mainly interesting when working with static objects. + * + * @see src/core/BufferGeometry.js + */ +export class BufferGeometry extends EventDispatcher { + + /** + * This creates a new BufferGeometry. It also sets several properties to an default value. + */ + constructor(); + + static MaxIndex: number; + + /** + * Unique number of this buffergeometry instance + */ + id: number; + uuid: string; + name: string; + type: string; + index: BufferAttribute | null; + attributes: { + [name: string]: BufferAttribute | InterleavedBufferAttribute; + }; + morphAttributes: { + [name: string]: ( BufferAttribute | InterleavedBufferAttribute )[]; + }; + morphTargetsRelative: boolean; + groups: { start: number; count: number; materialIndex?: number }[]; + boundingBox: Box3; + boundingSphere: Sphere; + drawRange: { start: number; count: number }; + userData: {[key: string]: any}; + isBufferGeometry: boolean; + + getIndex(): BufferAttribute; + setIndex( index: BufferAttribute | number[] ): void; + + setAttribute( name: string, attribute: BufferAttribute | InterleavedBufferAttribute ): BufferGeometry; + getAttribute( name: string ): BufferAttribute | InterleavedBufferAttribute; + deleteAttribute( name: string ): BufferGeometry; + + addGroup( start: number, count: number, materialIndex?: number ): void; + clearGroups(): void; + + setDrawRange( start: number, count: number ): void; + + /** + * Bakes matrix transform directly into vertex coordinates. + */ + applyMatrix( matrix: Matrix4 ): BufferGeometry; + + rotateX( angle: number ): BufferGeometry; + rotateY( angle: number ): BufferGeometry; + rotateZ( angle: number ): BufferGeometry; + translate( x: number, y: number, z: number ): BufferGeometry; + scale( x: number, y: number, z: number ): BufferGeometry; + lookAt( v: Vector3 ): void; + + center(): BufferGeometry; + + setFromObject( object: Object3D ): BufferGeometry; + setFromPoints( points: Vector3[] | Vector2[] ): BufferGeometry; + updateFromObject( object: Object3D ): void; + + fromGeometry( geometry: Geometry, settings?: any ): BufferGeometry; + + fromDirectGeometry( geometry: DirectGeometry ): BufferGeometry; + + /** + * Computes bounding box of the geometry, updating Geometry.boundingBox attribute. + * Bounding boxes aren't computed by default. They need to be explicitly computed, otherwise they are null. + */ + computeBoundingBox(): void; + + /** + * Computes bounding sphere of the geometry, updating Geometry.boundingSphere attribute. + * Bounding spheres aren't' computed by default. They need to be explicitly computed, otherwise they are null. + */ + computeBoundingSphere(): void; + + /** + * Computes vertex normals by averaging face normals. + */ + computeVertexNormals(): void; + + merge( geometry: BufferGeometry, offset: number ): BufferGeometry; + normalizeNormals(): void; + + toNonIndexed(): BufferGeometry; + + toJSON(): any; + clone(): this; + copy( source: BufferGeometry ): this; + + /** + * Disposes the object from memory. + * You need to call this when you want the bufferGeometry removed while the application is running. + */ + dispose(): void; + + /** + * @deprecated Use {@link BufferGeometry#groups .groups} instead. + */ + drawcalls: any; + + /** + * @deprecated Use {@link BufferGeometry#groups .groups} instead. + */ + offsets: any; + + /** + * @deprecated Use {@link BufferGeometry#setIndex .setIndex()} instead. + */ + addIndex( index: any ): void; + + /** + * @deprecated Use {@link BufferGeometry#addGroup .addGroup()} instead. + */ + addDrawCall( start: any, count: any, indexOffset?: any ): void; + + /** + * @deprecated Use {@link BufferGeometry#clearGroups .clearGroups()} instead. + */ + clearDrawCalls(): void; + + /** + * @deprecated Use {@link BufferGeometry#setAttribute .setAttribute()} instead. + */ + addAttribute( + name: string, + attribute: BufferAttribute | InterleavedBufferAttribute + ): BufferGeometry; + + /** + * @deprecated Use {@link BufferGeometry#deleteAttribute .deleteAttribute()} instead. + */ + removeAttribute( name: string ): BufferGeometry; + + addAttribute( name: any, array: any, itemSize: any ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Clock.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Clock.d.ts new file mode 100755 index 0000000..29d2cc5 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Clock.d.ts @@ -0,0 +1,61 @@ +/** + * Object for keeping track of time. + * + * @see src/core/Clock.js + */ +export class Clock { + + /** + * @param autoStart Automatically start the clock. + */ + constructor( autoStart?: boolean ); + + /** + * If set, starts the clock automatically when the first update is called. + */ + autoStart: boolean; + + /** + * When the clock is running, It holds the starttime of the clock. + * This counted from the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC. + */ + startTime: number; + + /** + * When the clock is running, It holds the previous time from a update. + * This counted from the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC. + */ + oldTime: number; + + /** + * When the clock is running, It holds the time elapsed between the start of the clock to the previous update. + * This parameter is in seconds of three decimal places. + */ + elapsedTime: number; + + /** + * This property keeps track whether the clock is running or not. + */ + running: boolean; + + /** + * Starts clock. + */ + start(): void; + + /** + * Stops clock. + */ + stop(): void; + + /** + * Get the seconds passed since the clock started. + */ + getElapsedTime(): number; + + /** + * Get the seconds passed since the last call to this method. + */ + getDelta(): number; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/DirectGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/DirectGeometry.d.ts new file mode 100755 index 0000000..047407e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/DirectGeometry.d.ts @@ -0,0 +1,44 @@ +import { Vector3 } from './../math/Vector3'; +import { Color } from './../math/Color'; +import { Vector2 } from './../math/Vector2'; +import { Vector4 } from './../math/Vector4'; +import { Box3 } from './../math/Box3'; +import { Sphere } from './../math/Sphere'; +import { Geometry } from './Geometry'; +import { MorphTarget } from './Geometry'; +/** + * @see src/core/DirectGeometry.js + */ +export class DirectGeometry { + + constructor(); + + id: number; + uuid: string; + name: string; + type: string; + indices: number[]; + vertices: Vector3[]; + normals: Vector3[]; + colors: Color[]; + uvs: Vector2[]; + uvs2: Vector2[]; + groups: { start: number; materialIndex: number }[]; + morphTargets: MorphTarget[]; + skinWeights: Vector4[]; + skinIndices: Vector4[]; + boundingBox: Box3; + boundingSphere: Sphere; + verticesNeedUpdate: boolean; + normalsNeedUpdate: boolean; + colorsNeedUpdate: boolean; + uvsNeedUpdate: boolean; + groupsNeedUpdate: boolean; + + computeBoundingBox(): void; + computeBoundingSphere(): void; + computeGroups( geometry: Geometry ): void; + fromGeometry( geometry: Geometry ): DirectGeometry; + dispose(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/EventDispatcher.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/EventDispatcher.d.ts new file mode 100755 index 0000000..4395cc9 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/EventDispatcher.d.ts @@ -0,0 +1,42 @@ +import { Event } from './Face3'; + +/** + * JavaScript events for custom objects + * + * @source src/core/EventDispatcher.js + */ +export class EventDispatcher { + + /** + * Creates eventDispatcher object. It needs to be call with '.call' to add the functionality to an object. + */ + constructor(); + + /** + * Adds a listener to an event type. + * @param type The type of event to listen to. + * @param listener The function that gets called when the event is fired. + */ + addEventListener( type: string, listener: ( event: Event ) => void ): void; + + /** + * Checks if listener is added to an event type. + * @param type The type of event to listen to. + * @param listener The function that gets called when the event is fired. + */ + hasEventListener( type: string, listener: ( event: Event ) => void ): boolean; + + /** + * Removes a listener from an event type. + * @param type The type of the listener that gets removed. + * @param listener The listener function that gets removed. + */ + removeEventListener( type: string, listener: ( event: Event ) => void ): void; + + /** + * Fire an event type. + * @param type The type of event that gets fired. + */ + dispatchEvent( event: { type: string; [attachment: string]: any } ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Face3.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Face3.d.ts new file mode 100755 index 0000000..b8704c1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Face3.d.ts @@ -0,0 +1,101 @@ +import { Vector3 } from './../math/Vector3'; +import { Color } from './../math/Color'; + +export interface Event { + type: string; + target?: any; + [attachment: string]: any; +} + +/** + * Triangle face. + * + * @source https://github.com/mrdoob/three.js/blob/master/src/core/Face3.js + */ +export class Face3 { + + /** + * @param a Vertex A index. + * @param b Vertex B index. + * @param c Vertex C index. + * @param normal Face normal or array of vertex normals. + * @param color Face color or array of vertex colors. + * @param materialIndex Material index. + */ + constructor( + a: number, + b: number, + c: number, + normal?: Vector3, + color?: Color, + materialIndex?: number + ); + constructor( + a: number, + b: number, + c: number, + normal?: Vector3, + vertexColors?: Color[], + materialIndex?: number + ); + constructor( + a: number, + b: number, + c: number, + vertexNormals?: Vector3[], + color?: Color, + materialIndex?: number + ); + constructor( + a: number, + b: number, + c: number, + vertexNormals?: Vector3[], + vertexColors?: Color[], + materialIndex?: number + ); + + /** + * Vertex A index. + */ + a: number; + + /** + * Vertex B index. + */ + b: number; + + /** + * Vertex C index. + */ + c: number; + + /** + * Face normal. + */ + normal: Vector3; + + /** + * Array of 4 vertex normals. + */ + vertexNormals: Vector3[]; + + /** + * Face color. + */ + color: Color; + + /** + * Array of 4 vertex normals. + */ + vertexColors: Color[]; + + /** + * Material index (points to {@link Geometry.materials}). + */ + materialIndex: number; + + clone(): this; + copy( source: Face3 ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Geometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Geometry.d.ts new file mode 100755 index 0000000..422a18d --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Geometry.d.ts @@ -0,0 +1,255 @@ +import { Vector3 } from './../math/Vector3'; +import { Color } from './../math/Color'; +import { Face3 } from './Face3'; +import { Vector2 } from './../math/Vector2'; +import { Vector4 } from './../math/Vector4'; +import { Box3 } from './../math/Box3'; +import { Sphere } from './../math/Sphere'; +import { Matrix4 } from './../math/Matrix4'; +import { BufferGeometry } from './BufferGeometry'; +import { Matrix } from './../math/Matrix3'; +import { Mesh } from './../objects/Mesh'; +import { Bone } from './../objects/Bone'; +import { AnimationClip } from './../animation/AnimationClip'; +import { EventDispatcher } from './EventDispatcher'; + +/** + * @deprecated Use {@link Face3} instead. + */ + +export interface MorphTarget { + name: string; + vertices: Vector3[]; +} + +export interface MorphColor { + name: string; + colors: Color[]; +} + +export interface MorphNormals { + name: string; + normals: Vector3[]; +} + +export let GeometryIdCount: number; + +/** + * Base class for geometries + * + * @see https://github.com/mrdoob/three.js/blob/master/src/core/Geometry.js + */ +export class Geometry extends EventDispatcher { + + constructor(); + + /** + * Unique number of this geometry instance + */ + id: number; + + uuid: string; + + isGeometry: boolean; + + /** + * Name for this geometry. Default is an empty string. + */ + name: string; + + type: string; + + /** + * The array of vertices hold every position of points of the model. + * To signal an update in this array, Geometry.verticesNeedUpdate needs to be set to true. + */ + vertices: Vector3[]; + + /** + * Array of vertex colors, matching number and order of vertices. + * Used in ParticleSystem, Line and Ribbon. + * Meshes use per-face-use-of-vertex colors embedded directly in faces. + * To signal an update in this array, Geometry.colorsNeedUpdate needs to be set to true. + */ + colors: Color[]; + + /** + * Array of triangles or/and quads. + * The array of faces describe how each vertex in the model is connected with each other. + * To signal an update in this array, Geometry.elementsNeedUpdate needs to be set to true. + */ + faces: Face3[]; + + /** + * Array of face UV layers. + * Each UV layer is an array of UV matching order and number of vertices in faces. + * To signal an update in this array, Geometry.uvsNeedUpdate needs to be set to true. + */ + faceVertexUvs: Vector2[][][]; + + /** + * Array of morph targets. Each morph target is a Javascript object: + * + * { name: "targetName", vertices: [ new THREE.Vector3(), ... ] } + * + * Morph vertices match number and order of primary vertices. + */ + morphTargets: MorphTarget[]; + + /** + * Array of morph normals. Morph normals have similar structure as morph targets, each normal set is a Javascript object: + * + * morphNormal = { name: "NormalName", normals: [ new THREE.Vector3(), ... ] } + */ + morphNormals: MorphNormals[]; + + /** + * Array of skinning weights, matching number and order of vertices. + */ + skinWeights: Vector4[]; + + /** + * Array of skinning indices, matching number and order of vertices. + */ + skinIndices: Vector4[]; + + /** + * + */ + lineDistances: number[]; + + /** + * Bounding box. + */ + boundingBox: Box3; + + /** + * Bounding sphere. + */ + boundingSphere: Sphere; + + /** + * Set to true if the vertices array has been updated. + */ + verticesNeedUpdate: boolean; + + /** + * Set to true if the faces array has been updated. + */ + elementsNeedUpdate: boolean; + + /** + * Set to true if the uvs array has been updated. + */ + uvsNeedUpdate: boolean; + + /** + * Set to true if the normals array has been updated. + */ + normalsNeedUpdate: boolean; + + /** + * Set to true if the colors array has been updated. + */ + colorsNeedUpdate: boolean; + + /** + * Set to true if the linedistances array has been updated. + */ + lineDistancesNeedUpdate: boolean; + + /** + * + */ + groupsNeedUpdate: boolean; + + /** + * Bakes matrix transform directly into vertex coordinates. + */ + applyMatrix( matrix: Matrix4 ): Geometry; + + rotateX( angle: number ): Geometry; + rotateY( angle: number ): Geometry; + rotateZ( angle: number ): Geometry; + + translate( x: number, y: number, z: number ): Geometry; + scale( x: number, y: number, z: number ): Geometry; + lookAt( vector: Vector3 ): void; + + fromBufferGeometry( geometry: BufferGeometry ): Geometry; + + center(): Geometry; + + normalize(): Geometry; + + /** + * Computes face normals. + */ + computeFaceNormals(): void; + + /** + * Computes vertex normals by averaging face normals. + * Face normals must be existing / computed beforehand. + */ + computeVertexNormals( areaWeighted?: boolean ): void; + + /** + * Compute vertex normals, but duplicating face normals. + */ + computeFlatVertexNormals(): void; + + /** + * Computes morph normals. + */ + computeMorphNormals(): void; + + /** + * Computes bounding box of the geometry, updating {@link Geometry.boundingBox} attribute. + */ + computeBoundingBox(): void; + + /** + * Computes bounding sphere of the geometry, updating Geometry.boundingSphere attribute. + * Neither bounding boxes or bounding spheres are computed by default. They need to be explicitly computed, otherwise they are null. + */ + computeBoundingSphere(): void; + + merge( + geometry: Geometry, + matrix?: Matrix, + materialIndexOffset?: number + ): void; + + mergeMesh( mesh: Mesh ): void; + + /** + * Checks for duplicate vertices using hashmap. + * Duplicated vertices are removed and faces' vertices are updated. + */ + mergeVertices(): number; + + setFromPoints( points: Array | Array ): this; + + sortFacesByMaterialIndex(): void; + + toJSON(): any; + + /** + * Creates a new clone of the Geometry. + */ + clone(): this; + + copy( source: Geometry ): this; + + /** + * Removes The object from memory. + * Don't forget to call this method when you remove an geometry because it can cuase meomory leaks. + */ + dispose(): void; + + // These properties do not exist in a normal Geometry class, but if you use the instance that was passed by JSONLoader, it will be added. + bones: Bone[]; + animation: AnimationClip; + animations: AnimationClip[]; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InstancedBufferAttribute.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InstancedBufferAttribute.d.ts new file mode 100755 index 0000000..6e7eaa5 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InstancedBufferAttribute.d.ts @@ -0,0 +1,49 @@ +import { BufferGeometry } from './BufferGeometry'; +import { BufferAttribute } from './BufferAttribute'; + +/** + * @see examples/js/BufferGeometryUtils.js + */ +export namespace BufferGeometryUtils { + export function mergeBufferGeometries( + geometries: BufferGeometry[] + ): BufferGeometry; + export function computeTangents( geometry: BufferGeometry ): null; + export function mergeBufferAttributes( + attributes: BufferAttribute[] + ): BufferAttribute; +} + +/** + * @deprecated + */ +export namespace GeometryUtils { + /** + * @deprecated Use {@link Geometry#merge geometry.merge( geometry2, matrix, materialIndexOffset )} instead. + */ + export function merge( + geometry1: any, + geometry2: any, + materialIndexOffset?: any + ): any; + /** + * @deprecated Use {@link Geometry#center geometry.center()} instead. + */ + export function center( geometry: any ): any; +} + +/** + * @see src/core/InstancedBufferAttribute.js + */ +export class InstancedBufferAttribute extends BufferAttribute { + + constructor( + array: ArrayLike, + itemSize: number, + normalized?: boolean, + meshPerAttribute?: number + ); + + meshPerAttribute: number; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InstancedBufferGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InstancedBufferGeometry.d.ts new file mode 100755 index 0000000..8896a10 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InstancedBufferGeometry.d.ts @@ -0,0 +1,15 @@ +import { BufferGeometry } from './BufferGeometry'; + +/** + * @see src/core/InstancedBufferGeometry.js + */ +export class InstancedBufferGeometry extends BufferGeometry { + + constructor(); + + groups: { start: number; count: number; instances: number }[]; + maxInstancedCount: number; + + addGroup( start: number, count: number, instances: number ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InstancedInterleavedBuffer.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InstancedInterleavedBuffer.d.ts new file mode 100755 index 0000000..ca8c8ad --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InstancedInterleavedBuffer.d.ts @@ -0,0 +1,16 @@ +import { InterleavedBuffer } from './InterleavedBuffer'; + +/** + * @see src/core/InstancedInterleavedBuffer.js + */ +export class InstancedInterleavedBuffer extends InterleavedBuffer { + + constructor( + array: ArrayLike, + stride: number, + meshPerAttribute?: number + ); + + meshPerAttribute: number; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InterleavedBuffer.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InterleavedBuffer.d.ts new file mode 100755 index 0000000..690e07e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InterleavedBuffer.d.ts @@ -0,0 +1,30 @@ +import { InterleavedBufferAttribute } from './InterleavedBufferAttribute'; +import { Usage } from '../constants'; + +/** + * @see src/core/InterleavedBuffer.js + */ +export class InterleavedBuffer { + + constructor( array: ArrayLike, stride: number ); + + array: ArrayLike; + stride: number; + usage: Usage; + updateRange: { offset: number; count: number }; + version: number; + length: number; + count: number; + needsUpdate: boolean; + + setUsage( usage: Usage ): InterleavedBuffer; + clone(): this; + copy( source: InterleavedBuffer ): this; + copyAt( + index1: number, + attribute: InterleavedBufferAttribute, + index2: number + ): InterleavedBuffer; + set( value: ArrayLike, index: number ): InterleavedBuffer; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InterleavedBufferAttribute.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InterleavedBufferAttribute.d.ts new file mode 100755 index 0000000..1ce65b8 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/InterleavedBufferAttribute.d.ts @@ -0,0 +1,47 @@ +import { InterleavedBuffer } from './InterleavedBuffer'; +/** + * @see src/core/InterleavedBufferAttribute.js + */ +export class InterleavedBufferAttribute { + + constructor( + interleavedBuffer: InterleavedBuffer, + itemSize: number, + offset: number, + normalized?: boolean + ); + + data: InterleavedBuffer; + itemSize: number; + offset: number; + normalized: boolean; + + get count(): number; + get array(): ArrayLike; + + isInterleavedBufferAttribute: true; + + getX( index: number ): number; + setX( index: number, x: number ): InterleavedBufferAttribute; + getY( index: number ): number; + setY( index: number, y: number ): InterleavedBufferAttribute; + getZ( index: number ): number; + setZ( index: number, z: number ): InterleavedBufferAttribute; + getW( index: number ): number; + setW( index: number, z: number ): InterleavedBufferAttribute; + setXY( index: number, x: number, y: number ): InterleavedBufferAttribute; + setXYZ( + index: number, + x: number, + y: number, + z: number + ): InterleavedBufferAttribute; + setXYZW( + index: number, + x: number, + y: number, + z: number, + w: number + ): InterleavedBufferAttribute; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Layers.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Layers.d.ts new file mode 100755 index 0000000..14dad23 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Layers.d.ts @@ -0,0 +1,15 @@ +export class Layers { + + constructor(); + + mask: number; + + set( channel: number ): void; + enable( channel: number ): void; + enableAll(): void; + toggle( channel: number ): void; + disable( channel: number ): void; + disableAll(): void; + test( layers: Layers ): boolean; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Object3D.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Object3D.d.ts new file mode 100755 index 0000000..f3612b0 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Object3D.d.ts @@ -0,0 +1,351 @@ +import { Vector3 } from './../math/Vector3'; +import { Euler } from './../math/Euler'; +import { Quaternion } from './../math/Quaternion'; +import { Matrix4 } from './../math/Matrix4'; +import { Matrix3 } from './../math/Matrix3'; +import { Layers } from './Layers'; +import { WebGLRenderer } from './../renderers/WebGLRenderer'; +import { Scene } from './../scenes/Scene'; +import { Camera } from './../cameras/Camera'; +import { Geometry } from './Geometry'; +import { Material } from './../materials/Material'; +import { Group } from './../objects/Group'; +import { Raycaster } from './Raycaster'; +import { EventDispatcher } from './EventDispatcher'; +import { BufferGeometry } from './BufferGeometry'; +import { Intersection } from './Raycaster'; + +export let Object3DIdCount: number; + +/** + * Base class for scene graph objects + */ +export class Object3D extends EventDispatcher { + + constructor(); + + /** + * Unique number of this object instance. + */ + id: number; + + /** + * + */ + uuid: string; + + /** + * Optional name of the object (doesn't need to be unique). + */ + name: string; + + type: string; + + /** + * Object's parent in the scene graph. + */ + parent: Object3D | null; + + /** + * Array with object's children. + */ + children: Object3D[]; + + /** + * Up direction. + */ + up: Vector3; + + /** + * Object's local position. + */ + position: Vector3; + + /** + * Object's local rotation (Euler angles), in radians. + */ + rotation: Euler; + + /** + * Global rotation. + */ + quaternion: Quaternion; + + /** + * Object's local scale. + */ + scale: Vector3; + + modelViewMatrix: Matrix4; + + normalMatrix: Matrix3; + + /** + * Local transform. + */ + matrix: Matrix4; + + /** + * The global transform of the object. If the Object3d has no parent, then it's identical to the local transform. + */ + matrixWorld: Matrix4; + + /** + * When this is set, it calculates the matrix of position, (rotation or quaternion) and scale every frame and also recalculates the matrixWorld property. + */ + matrixAutoUpdate: boolean; + + /** + * When this is set, it calculates the matrixWorld in that frame and resets this property to false. + */ + matrixWorldNeedsUpdate: boolean; + + layers: Layers; + /** + * Object gets rendered if true. + */ + visible: boolean; + + /** + * Gets rendered into shadow map. + */ + castShadow: boolean; + + /** + * Material gets baked in shadow receiving. + */ + receiveShadow: boolean; + + /** + * When this is set, it checks every frame if the object is in the frustum of the camera. Otherwise the object gets drawn every frame even if it isn't visible. + */ + frustumCulled: boolean; + + /** + * Overrides the default rendering order of scene graph objects, from lowest to highest renderOrder. Opaque and transparent objects remain sorted independently though. When this property is set for an instance of Group, all descendants objects will be sorted and rendered together. + */ + renderOrder: number; + + /** + * An object that can be used to store custom data about the Object3d. It should not hold references to functions as these will not be cloned. + */ + userData: { [key: string]: any }; + + /** + * Custom depth material to be used when rendering to the depth map. Can only be used in context of meshes. + * When shadow-casting with a DirectionalLight or SpotLight, if you are (a) modifying vertex positions in + * the vertex shader, (b) using a displacement map, (c) using an alpha map with alphaTest, or (d) using a + * transparent texture with alphaTest, you must specify a customDepthMaterial for proper shadows. + */ + customDepthMaterial: Material; + + /** + * Same as customDepthMaterial, but used with PointLight. + */ + customDistanceMaterial: Material; + + /** + * Used to check whether this or derived classes are Object3Ds. Default is true. + * You should not change this, as it is used internally for optimisation. + */ + isObject3D: true; + + /** + * Calls before rendering object + */ + onBeforeRender: ( + renderer: WebGLRenderer, + scene: Scene, + camera: Camera, + geometry: Geometry | BufferGeometry, + material: Material, + group: Group + ) => void; + + /** + * Calls after rendering object + */ + onAfterRender: ( + renderer: WebGLRenderer, + scene: Scene, + camera: Camera, + geometry: Geometry | BufferGeometry, + material: Material, + group: Group + ) => void; + + static DefaultUp: Vector3; + static DefaultMatrixAutoUpdate: boolean; + + /** + * This updates the position, rotation and scale with the matrix. + */ + applyMatrix( matrix: Matrix4 ): void; + + applyQuaternion( quaternion: Quaternion ): this; + + /** + * + */ + setRotationFromAxisAngle( axis: Vector3, angle: number ): void; + + /** + * + */ + setRotationFromEuler( euler: Euler ): void; + + /** + * + */ + setRotationFromMatrix( m: Matrix4 ): void; + + /** + * + */ + setRotationFromQuaternion( q: Quaternion ): void; + + /** + * Rotate an object along an axis in object space. The axis is assumed to be normalized. + * @param axis A normalized vector in object space. + * @param angle The angle in radians. + */ + rotateOnAxis( axis: Vector3, angle: number ): this; + + /** + * Rotate an object along an axis in world space. The axis is assumed to be normalized. Method Assumes no rotated parent. + * @param axis A normalized vector in object space. + * @param angle The angle in radians. + */ + rotateOnWorldAxis( axis: Vector3, angle: number ): this; + + /** + * + * @param angle + */ + rotateX( angle: number ): this; + + /** + * + * @param angle + */ + rotateY( angle: number ): this; + + /** + * + * @param angle + */ + rotateZ( angle: number ): this; + + /** + * @param axis A normalized vector in object space. + * @param distance The distance to translate. + */ + translateOnAxis( axis: Vector3, distance: number ): this; + + /** + * Translates object along x axis by distance. + * @param distance Distance. + */ + translateX( distance: number ): this; + + /** + * Translates object along y axis by distance. + * @param distance Distance. + */ + translateY( distance: number ): this; + + /** + * Translates object along z axis by distance. + * @param distance Distance. + */ + translateZ( distance: number ): this; + + /** + * Updates the vector from local space to world space. + * @param vector A local vector. + */ + localToWorld( vector: Vector3 ): Vector3; + + /** + * Updates the vector from world space to local space. + * @param vector A world vector. + */ + worldToLocal( vector: Vector3 ): Vector3; + + /** + * Rotates object to face point in space. + * @param vector A world vector to look at. + */ + lookAt( vector: Vector3 | number, y?: number, z?: number ): void; + + /** + * Adds object as child of this object. + */ + add( ...object: Object3D[] ): this; + + /** + * Removes object as child of this object. + */ + remove( ...object: Object3D[] ): this; + + /** + * Adds object as a child of this, while maintaining the object's world transform. + */ + attach( object: Object3D ): this; + + /** + * Searches through the object's children and returns the first with a matching id. + * @param id Unique number of the object instance + */ + getObjectById( id: number ): Object3D | undefined; + + /** + * Searches through the object's children and returns the first with a matching name. + * @param name String to match to the children's Object3d.name property. + */ + getObjectByName( name: string ): Object3D | undefined; + + getObjectByProperty( name: string, value: string ): Object3D | undefined; + + getWorldPosition( target: Vector3 ): Vector3; + getWorldQuaternion( target: Quaternion ): Quaternion; + getWorldScale( target: Vector3 ): Vector3; + getWorldDirection( target: Vector3 ): Vector3; + + raycast( raycaster: Raycaster, intersects: Intersection[] ): void; + + traverse( callback: ( object: Object3D ) => any ): void; + + traverseVisible( callback: ( object: Object3D ) => any ): void; + + traverseAncestors( callback: ( object: Object3D ) => any ): void; + + /** + * Updates local transform. + */ + updateMatrix(): void; + + /** + * Updates global transform of the object and its children. + */ + updateMatrixWorld( force?: boolean ): void; + + updateWorldMatrix( updateParents: boolean, updateChildren: boolean ): void; + + toJSON( meta?: { + geometries: any; + materials: any; + textures: any; + images: any; + } ): any; + + clone( recursive?: boolean ): this; + + /** + * + * @param object + * @param recursive + */ + copy( source: this, recursive?: boolean ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Raycaster.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Raycaster.d.ts new file mode 100755 index 0000000..483f723 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Raycaster.d.ts @@ -0,0 +1,109 @@ +import { Vector3 } from './../math/Vector3'; +import { Face3 } from './Face3'; +import { Object3D } from './Object3D'; +import { Vector2 } from './../math/Vector2'; +import { Ray } from './../math/Ray'; +import { Camera } from './../cameras/Camera'; + +export interface Intersection { + distance: number; + distanceToRay?: number; + point: Vector3; + index?: number; + face?: Face3 | null; + faceIndex?: number; + object: Object3D; + uv?: Vector2; +} + +export interface RaycasterParameters { + Mesh?: any; + Line?: any; + LOD?: any; + Points?: { threshold: number }; + Sprite?: any; +} + +export class Raycaster { + + /** + * This creates a new raycaster object. + * @param origin The origin vector where the ray casts from. + * @param direction The direction vector that gives direction to the ray. Should be normalized. + * @param near All results returned are further away than near. Near can't be negative. Default value is 0. + * @param far All results returned are closer then far. Far can't be lower then near . Default value is Infinity. + */ + constructor( + origin?: Vector3, + direction?: Vector3, + near?: number, + far?: number + ); + + /** The Ray used for the raycasting. */ + ray: Ray; + + /** + * The near factor of the raycaster. This value indicates which objects can be discarded based on the + * distance. This value shouldn't be negative and should be smaller than the far property. + */ + near: number; + + /** + * The far factor of the raycaster. This value indicates which objects can be discarded based on the + * distance. This value shouldn't be negative and should be larger than the near property. + */ + far: number; + + /** + * The camera to use when raycasting against view-dependent objects such as billboarded objects like Sprites. This field + * can be set manually or is set when calling "setFromCamera". + */ + camera: Camera; + + params: RaycasterParameters; + + /** + * The precision factor of the raycaster when intersecting Line objects. + */ + linePrecision: number; + + /** + * Updates the ray with a new origin and direction. + * @param origin The origin vector where the ray casts from. + * @param direction The normalized direction vector that gives direction to the ray. + */ + set( origin: Vector3, direction: Vector3 ): void; + + /** + * Updates the ray with a new origin and direction. + * @param coords 2D coordinates of the mouse, in normalized device coordinates (NDC)---X and Y components should be between -1 and 1. + * @param camera camera from which the ray should originate + */ + setFromCamera( coords: { x: number; y: number }, camera: Camera ): void; + + /** + * Checks all intersection between the ray and the object with or without the descendants. Intersections are returned sorted by distance, closest first. + * @param object The object to check for intersection with the ray. + * @param recursive If true, it also checks all descendants. Otherwise it only checks intersecton with the object. Default is false. + * @param optionalTarget (optional) target to set the result. Otherwise a new Array is instantiated. If set, you must clear this array prior to each call (i.e., array.length = 0;). + */ + intersectObject( + object: Object3D, + recursive?: boolean, + optionalTarget?: Intersection[] + ): Intersection[]; + + /** + * Checks all intersection between the ray and the objects with or without the descendants. Intersections are returned sorted by distance, closest first. Intersections are of the same form as those returned by .intersectObject. + * @param objects The objects to check for intersection with the ray. + * @param recursive If true, it also checks all descendants of the objects. Otherwise it only checks intersecton with the objects. Default is false. + * @param optionalTarget (optional) target to set the result. Otherwise a new Array is instantiated. If set, you must clear this array prior to each call (i.e., array.length = 0;). + */ + intersectObjects( + objects: Object3D[], + recursive?: boolean, + optionalTarget?: Intersection[] + ): Intersection[]; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Uniform.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Uniform.d.ts new file mode 100755 index 0000000..b890fd6 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/core/Uniform.d.ts @@ -0,0 +1,24 @@ +export class Uniform { + + constructor( value: any ); + /** + * @deprecated + */ + constructor( type: string, value: any ); + /** + * @deprecated + */ + type: string; + value: any; + /** + * @deprecated Use {@link Object3D#onBeforeRender object.onBeforeRender()} instead. + */ + dynamic: boolean; + onUpdateCallback: Function; + + /** + * @deprecated Use {@link Object3D#onBeforeRender object.onBeforeRender()} instead. + */ + onUpdate( callback: Function ): Uniform; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/ImageUtils.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/ImageUtils.d.ts new file mode 100755 index 0000000..ea1bddb --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/ImageUtils.d.ts @@ -0,0 +1,34 @@ +import { Mapping } from '../constants'; +import { Texture } from '../textures/Texture'; + +export namespace ImageUtils { + + export function getDataURL( + image: any, + ): string; + + /** + * @deprecated + */ + export let crossOrigin: string; + + /** + * @deprecated Use {@link TextureLoader THREE.TextureLoader()} instead. + */ + export function loadTexture( + url: string, + mapping?: Mapping, + onLoad?: ( texture: Texture ) => void, + onError?: ( message: string ) => void + ): Texture; + + /** + * @deprecated Use {@link CubeTextureLoader THREE.CubeTextureLoader()} instead. + */ + export function loadTextureCube( + array: string[], + mapping?: Mapping, + onLoad?: ( texture: Texture ) => void, + onError?: ( message: string ) => void + ): Texture; +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/ShapeUtils.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/ShapeUtils.d.ts new file mode 100755 index 0000000..c309787 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/ShapeUtils.d.ts @@ -0,0 +1,10 @@ +interface Vec2 { + x: number; + y: number; +} + +export namespace ShapeUtils { + export function area( contour: Vec2[] ): number; + export function triangulateShape( contour: Vec2[], holes: Vec2[][] ): number[][]; + export function isClockWise( pts: Vec2[] ): boolean; +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Curve.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Curve.d.ts new file mode 100755 index 0000000..ff99565 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Curve.d.ts @@ -0,0 +1,79 @@ +import { Vector } from './../../math/Vector2'; + +// Extras / Core ///////////////////////////////////////////////////////////////////// + +/** + * An extensible curve object which contains methods for interpolation + * class Curve<T extends Vector> + */ +export class Curve { + + /** + * This value determines the amount of divisions when calculating the cumulative segment lengths of a curve via .getLengths. + * To ensure precision when using methods like .getSpacedPoints, it is recommended to increase .arcLengthDivisions if the curve is very large. + * Default is 200. + */ + arcLengthDivisions: number; + + /** + * Returns a vector for point t of the curve where t is between 0 and 1 + * getPoint(t: number): T; + */ + getPoint( t: number, optionalTarget?: T ): T; + + /** + * Returns a vector for point at relative position in curve according to arc length + * getPointAt(u: number): T; + */ + getPointAt( u: number, optionalTarget?: T ): T; + + /** + * Get sequence of points using getPoint( t ) + * getPoints(divisions?: number): T[]; + */ + getPoints( divisions?: number ): T[]; + + /** + * Get sequence of equi-spaced points using getPointAt( u ) + * getSpacedPoints(divisions?: number): T[]; + */ + getSpacedPoints( divisions?: number ): T[]; + + /** + * Get total curve arc length + */ + getLength(): number; + + /** + * Get list of cumulative segment lengths + */ + getLengths( divisions?: number ): number[]; + + /** + * Update the cumlative segment distance cache + */ + updateArcLengths(): void; + + /** + * Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equi distance + */ + getUtoTmapping( u: number, distance: number ): number; + + /** + * Returns a unit vector tangent at t. If the subclassed curve do not implement its tangent derivation, 2 points a small delta apart will be used to find its gradient which seems to give a reasonable approximation + * getTangent(t: number): T; + */ + getTangent( t: number ): T; + + /** + * Returns tangent at equidistance point u on the curve + * getTangentAt(u: number): T; + */ + getTangentAt( u: number ): T; + + /** + * @deprecated since r84. + */ + static create( constructorFunc: Function, getPointFunc: Function ): Function; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/CurvePath.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/CurvePath.d.ts new file mode 100755 index 0000000..3462858 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/CurvePath.d.ts @@ -0,0 +1,35 @@ +import { Curve } from './Curve'; +import { Geometry } from './../../core/Geometry'; +import { Vector } from './../../math/Vector2'; + +export class CurvePath extends Curve { + + constructor(); + + curves: Curve[]; + autoClose: boolean; + + add( curve: Curve ): void; + checkConnection(): boolean; + closePath(): void; + getPoint( t: number ): T; + getLength(): number; + updateArcLengths(): void; + getCurveLengths(): number[]; + getSpacedPoints( divisions?: number ): T[]; + getPoints( divisions?: number ): T[]; + + /** + * @deprecated Use {@link Geometry#setFromPoints new THREE.Geometry().setFromPoints( points )} instead. + */ + createPointsGeometry( divisions: number ): Geometry; + /** + * @deprecated Use {@link Geometry#setFromPoints new THREE.Geometry().setFromPoints( points )} instead. + */ + createSpacedPointsGeometry( divisions: number ): Geometry; + /** + * @deprecated Use {@link Geometry#setFromPoints new THREE.Geometry().setFromPoints( points )} instead. + */ + createGeometry( points: T[] ): Geometry; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Font.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Font.d.ts new file mode 100755 index 0000000..1ef5b5c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Font.d.ts @@ -0,0 +1,9 @@ +export class Font { + + constructor( jsondata: any ); + + data: string; + + generateShapes( text: string, size: number, divisions: number ): any[]; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Interpolations.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Interpolations.d.ts new file mode 100755 index 0000000..f0d8970 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Interpolations.d.ts @@ -0,0 +1,5 @@ +export namespace Interpolations { + export function CatmullRom( t: number, p0: number, p1: number, p2: number, p3: number ): number; + export function QuadraticBezier( t: number, p0: number, p1: number, p2: number ): number; + export function CubicBezier( t: number, p0: number, p1: number, p2: number, p3: number ): number; +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Path.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Path.d.ts new file mode 100755 index 0000000..efbec42 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Path.d.ts @@ -0,0 +1,82 @@ +import { Vector2 } from './../../math/Vector2'; +import { CurvePath } from './CurvePath'; + +export enum PathActions { + MOVE_TO, + LINE_TO, + QUADRATIC_CURVE_TO, // Bezier quadratic curve + BEZIER_CURVE_TO, // Bezier cubic curve + CSPLINE_THRU, // Catmull-rom spline + ARC, // Circle + ELLIPSE, +} + +export interface PathAction { + action: PathActions; + args: any; +} + +/** + * a 2d path representation, comprising of points, lines, and cubes, similar to the html5 2d canvas api. It extends CurvePath. + */ +export class Path extends CurvePath { + + constructor( points?: Vector2[] ); + + currentPoint: Vector2; + + /** + * @deprecated Use {@link Path#setFromPoints .setFromPoints()} instead. + */ + fromPoints( vectors: Vector2[] ): this; + setFromPoints( vectors: Vector2[] ): this; + moveTo( x: number, y: number ): this; + lineTo( x: number, y: number ): this; + quadraticCurveTo( aCPx: number, aCPy: number, aX: number, aY: number ): this; + bezierCurveTo( + aCP1x: number, + aCP1y: number, + aCP2x: number, + aCP2y: number, + aX: number, + aY: number + ): this; + splineThru( pts: Vector2[] ): this; + arc( + aX: number, + aY: number, + aRadius: number, + aStartAngle: number, + aEndAngle: number, + aClockwise: boolean + ): this; + absarc( + aX: number, + aY: number, + aRadius: number, + aStartAngle: number, + aEndAngle: number, + aClockwise: boolean + ): this; + ellipse( + aX: number, + aY: number, + xRadius: number, + yRadius: number, + aStartAngle: number, + aEndAngle: number, + aClockwise: boolean, + aRotation: number + ): this; + absellipse( + aX: number, + aY: number, + xRadius: number, + yRadius: number, + aStartAngle: number, + aEndAngle: number, + aClockwise: boolean, + aRotation: number + ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Shape.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Shape.d.ts new file mode 100755 index 0000000..f3f35f3 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/Shape.d.ts @@ -0,0 +1,40 @@ +import { Vector2 } from './../../math/Vector2'; +import { Path } from './Path'; +import { ExtrudeGeometry } from './../../geometries/ExtrudeGeometry'; +import { ShapeGeometry } from './../../geometries/ShapeGeometry'; + +/** + * Defines a 2d shape plane using paths. + */ +export class Shape extends Path { + + constructor( points?: Vector2[] ); + + holes: Path[]; + + /** + * @deprecated Use {@link ExtrudeGeometry ExtrudeGeometry()} instead. + */ + extrude( options?: any ): ExtrudeGeometry; + + /** + * @deprecated Use {@link ShapeGeometry ShapeGeometry()} instead. + */ + makeGeometry( options?: any ): ShapeGeometry; + getPointsHoles( divisions: number ): Vector2[][]; + + /** + * @deprecated Use {@link Shape#extractPoints .extractPoints()} instead. + */ + extractAllPoints( + divisions: number + ): { + shape: Vector2[]; + holes: Vector2[][]; + }; + extractPoints( divisions: number ): { + shape: Vector2[]; + holes: Vector2[][]; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/ShapePath.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/ShapePath.d.ts new file mode 100755 index 0000000..88203ee --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/core/ShapePath.d.ts @@ -0,0 +1,25 @@ +import { Vector2 } from './../../math/Vector2'; +import { Shape } from './Shape'; + +export class ShapePath { + + constructor(); + + subPaths: any[]; + currentPath: any; + + moveTo( x: number, y: number ): this; + lineTo( x: number, y: number ): this; + quadraticCurveTo( aCPx: number, aCPy: number, aX: number, aY: number ): this; + bezierCurveTo( + aCP1x: number, + aCP1y: number, + aCP2x: number, + aCP2y: number, + aX: number, + aY: number + ): this; + splineThru( pts: Vector2[] ): this; + toShapes( isCCW: boolean, noHoles?: boolean ): Shape[]; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/ArcCurve.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/ArcCurve.d.ts new file mode 100755 index 0000000..ccd7efa --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/ArcCurve.d.ts @@ -0,0 +1,13 @@ +import { EllipseCurve } from './EllipseCurve'; +export class ArcCurve extends EllipseCurve { + + constructor( + aX: number, + aY: number, + aRadius: number, + aStartAngle: number, + aEndAngle: number, + aClockwise: boolean + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/CatmullRomCurve3.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/CatmullRomCurve3.d.ts new file mode 100755 index 0000000..890c8ff --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/CatmullRomCurve3.d.ts @@ -0,0 +1,48 @@ +import { Vector3 } from './../../math/Vector3'; +import { Curve } from './../core/Curve'; + +// Extras / Curves ///////////////////////////////////////////////////////////////////// +export namespace CurveUtils { + export function tangentQuadraticBezier( + t: number, + p0: number, + p1: number, + p2: number + ): number; + export function tangentCubicBezier( + t: number, + p0: number, + p1: number, + p2: number, + p3: number + ): number; + export function tangentSpline( + t: number, + p0: number, + p1: number, + p2: number, + p3: number + ): number; + export function interpolate( + p0: number, + p1: number, + p2: number, + p3: number, + t: number + ): number; +} + +export class CatmullRomCurve3 extends Curve { + + constructor( + points?: Vector3[], + closed?: boolean, + curveType?: string, + tension?: number + ); + + points: Vector3[]; + + getPoint( t: number ): Vector3; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/CubicBezierCurve.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/CubicBezierCurve.d.ts new file mode 100755 index 0000000..4310980 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/CubicBezierCurve.d.ts @@ -0,0 +1,13 @@ +import { Vector2 } from './../../math/Vector2'; +import { Curve } from './../core/Curve'; + +export class CubicBezierCurve extends Curve { + + constructor( v0: Vector2, v1: Vector2, v2: Vector2, v3: Vector2 ); + + v0: Vector2; + v1: Vector2; + v2: Vector2; + v3: Vector2; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/CubicBezierCurve3.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/CubicBezierCurve3.d.ts new file mode 100755 index 0000000..402ed76 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/CubicBezierCurve3.d.ts @@ -0,0 +1,15 @@ +import { Vector3 } from './../../math/Vector3'; +import { Curve } from './../core/Curve'; + +export class CubicBezierCurve3 extends Curve { + + constructor( v0: Vector3, v1: Vector3, v2: Vector3, v3: Vector3 ); + + v0: Vector3; + v1: Vector3; + v2: Vector3; + v3: Vector3; + + getPoint( t: number ): Vector3; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/Curves.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/Curves.d.ts new file mode 100755 index 0000000..e89592b --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/Curves.d.ts @@ -0,0 +1,10 @@ +export * from './ArcCurve'; +export * from './CatmullRomCurve3'; +export * from './CubicBezierCurve'; +export * from './CubicBezierCurve3'; +export * from './EllipseCurve'; +export * from './LineCurve'; +export * from './LineCurve3'; +export * from './QuadraticBezierCurve'; +export * from './QuadraticBezierCurve3'; +export * from './SplineCurve'; diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/EllipseCurve.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/EllipseCurve.d.ts new file mode 100755 index 0000000..8ff8d04 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/EllipseCurve.d.ts @@ -0,0 +1,26 @@ +import { Curve } from './../core/Curve'; +import { Vector2 } from '../../math/Vector2'; + +export class EllipseCurve extends Curve { + + constructor( + aX: number, + aY: number, + xRadius: number, + yRadius: number, + aStartAngle: number, + aEndAngle: number, + aClockwise: boolean, + aRotation: number + ); + + aX: number; + aY: number; + xRadius: number; + yRadius: number; + aStartAngle: number; + aEndAngle: number; + aClockwise: boolean; + aRotation: number; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/LineCurve.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/LineCurve.d.ts new file mode 100755 index 0000000..270c585 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/LineCurve.d.ts @@ -0,0 +1,11 @@ +import { Vector2 } from './../../math/Vector2'; +import { Curve } from './../core/Curve'; + +export class LineCurve extends Curve { + + constructor( v1: Vector2, v2: Vector2 ); + + v1: Vector2; + v2: Vector2; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/LineCurve3.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/LineCurve3.d.ts new file mode 100755 index 0000000..be96881 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/LineCurve3.d.ts @@ -0,0 +1,13 @@ +import { Vector3 } from './../../math/Vector3'; +import { Curve } from './../core/Curve'; + +export class LineCurve3 extends Curve { + + constructor( v1: Vector3, v2: Vector3 ); + + v1: Vector3; + v2: Vector3; + + getPoint( t: number ): Vector3; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/QuadraticBezierCurve.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/QuadraticBezierCurve.d.ts new file mode 100755 index 0000000..344d109 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/QuadraticBezierCurve.d.ts @@ -0,0 +1,12 @@ +import { Vector2 } from './../../math/Vector2'; +import { Curve } from './../core/Curve'; + +export class QuadraticBezierCurve extends Curve { + + constructor( v0: Vector2, v1: Vector2, v2: Vector2 ); + + v0: Vector2; + v1: Vector2; + v2: Vector2; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/QuadraticBezierCurve3.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/QuadraticBezierCurve3.d.ts new file mode 100755 index 0000000..77ec435 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/QuadraticBezierCurve3.d.ts @@ -0,0 +1,14 @@ +import { Vector3 } from './../../math/Vector3'; +import { Curve } from './../core/Curve'; + +export class QuadraticBezierCurve3 extends Curve { + + constructor( v0: Vector3, v1: Vector3, v2: Vector3 ); + + v0: Vector3; + v1: Vector3; + v2: Vector3; + + getPoint( t: number ): Vector3; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/SplineCurve.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/SplineCurve.d.ts new file mode 100755 index 0000000..37d10d2 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/curves/SplineCurve.d.ts @@ -0,0 +1,10 @@ +import { Vector2 } from './../../math/Vector2'; +import { Curve } from './../core/Curve'; + +export class SplineCurve extends Curve { + + constructor( points?: Vector2[] ); + + points: Vector2[]; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/objects/ImmediateRenderObject.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/objects/ImmediateRenderObject.d.ts new file mode 100755 index 0000000..3145ad7 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/extras/objects/ImmediateRenderObject.d.ts @@ -0,0 +1,13 @@ +import { Object3D } from './../../core/Object3D'; +import { Material } from './../../materials/Material'; + +// Extras / Objects ///////////////////////////////////////////////////////////////////// + +export class ImmediateRenderObject extends Object3D { + + constructor( material: Material ); + + material: Material; + render( renderCallback: Function ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/BoxGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/BoxGeometry.d.ts new file mode 100755 index 0000000..9645280 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/BoxGeometry.d.ts @@ -0,0 +1,58 @@ +import { Geometry } from '../core/Geometry'; +import { BufferGeometry } from '../core/BufferGeometry'; + +// Extras / Geometries ///////////////////////////////////////////////////////////////////// +export class BoxBufferGeometry extends BufferGeometry { + + constructor( + width?: number, + height?: number, + depth?: number, + widthSegments?: number, + heightSegments?: number, + depthSegments?: number + ); + + parameters: { + width: number; + height: number; + depth: number; + widthSegments: number; + heightSegments: number; + depthSegments: number; + }; + +} + +/** + * BoxGeometry is the quadrilateral primitive geometry class. It is typically used for creating a cube or irregular quadrilateral of the dimensions provided within the (optional) 'width', 'height', & 'depth' constructor arguments. + */ +export class BoxGeometry extends Geometry { + + /** + * @param width — Width of the sides on the X axis. + * @param height — Height of the sides on the Y axis. + * @param depth — Depth of the sides on the Z axis. + * @param widthSegments — Number of segmented faces along the width of the sides. + * @param heightSegments — Number of segmented faces along the height of the sides. + * @param depthSegments — Number of segmented faces along the depth of the sides. + */ + constructor( + width?: number, + height?: number, + depth?: number, + widthSegments?: number, + heightSegments?: number, + depthSegments?: number + ); + + parameters: { + width: number; + height: number; + depth: number; + widthSegments: number; + heightSegments: number; + depthSegments: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/CircleGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/CircleGeometry.d.ts new file mode 100755 index 0000000..8f8b365 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/CircleGeometry.d.ts @@ -0,0 +1,38 @@ +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from '../core/BufferGeometry'; + +export class CircleBufferGeometry extends BufferGeometry { + + constructor( + radius?: number, + segments?: number, + thetaStart?: number, + thetaLength?: number + ); + + parameters: { + radius: number; + segments: number; + thetaStart: number; + thetaLength: number; + }; + +} + +export class CircleGeometry extends Geometry { + + constructor( + radius?: number, + segments?: number, + thetaStart?: number, + thetaLength?: number + ); + + parameters: { + radius: number; + segments: number; + thetaStart: number; + thetaLength: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ConeGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ConeGeometry.d.ts new file mode 100755 index 0000000..04340a9 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ConeGeometry.d.ts @@ -0,0 +1,30 @@ +import { CylinderGeometry } from './CylinderGeometry'; +import { CylinderBufferGeometry } from './CylinderGeometry'; + +export class ConeBufferGeometry extends CylinderBufferGeometry { + + constructor( + radius?: number, + height?: number, + radialSegment?: number, + heightSegment?: number, + openEnded?: boolean, + thetaStart?: number, + thetaLength?: number + ); + +} + +export class ConeGeometry extends CylinderGeometry { + + constructor( + radius?: number, + height?: number, + radialSegment?: number, + heightSegment?: number, + openEnded?: boolean, + thetaStart?: number, + thetaLength?: number + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/CylinderGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/CylinderGeometry.d.ts new file mode 100755 index 0000000..eaad678 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/CylinderGeometry.d.ts @@ -0,0 +1,62 @@ +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from '../core/BufferGeometry'; + +export class CylinderBufferGeometry extends BufferGeometry { + + constructor( + radiusTop?: number, + radiusBottom?: number, + height?: number, + radialSegments?: number, + heightSegments?: number, + openEnded?: boolean, + thetaStart?: number, + thetaLength?: number + ); + + parameters: { + radiusTop: number; + radiusBottom: number; + height: number; + radialSegments: number; + heightSegments: number; + openEnded: boolean; + thetaStart: number; + thetaLength: number; + }; + +} + +export class CylinderGeometry extends Geometry { + + /** + * @param radiusTop — Radius of the cylinder at the top. + * @param radiusBottom — Radius of the cylinder at the bottom. + * @param height — Height of the cylinder. + * @param radiusSegments — Number of segmented faces around the circumference of the cylinder. + * @param heightSegments — Number of rows of faces along the height of the cylinder. + * @param openEnded - A Boolean indicating whether or not to cap the ends of the cylinder. + */ + constructor( + radiusTop?: number, + radiusBottom?: number, + height?: number, + radiusSegments?: number, + heightSegments?: number, + openEnded?: boolean, + thetaStart?: number, + thetaLength?: number + ); + + parameters: { + radiusTop: number; + radiusBottom: number; + height: number; + radialSegments: number; + heightSegments: number; + openEnded: boolean; + thetaStart: number; + thetaLength: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/DodecahedronGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/DodecahedronGeometry.d.ts new file mode 100755 index 0000000..ea97fa1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/DodecahedronGeometry.d.ts @@ -0,0 +1,19 @@ +import { Geometry } from './../core/Geometry'; +import { PolyhedronBufferGeometry } from './PolyhedronGeometry'; + +export class DodecahedronBufferGeometry extends PolyhedronBufferGeometry { + + constructor( radius?: number, detail?: number ); + +} + +export class DodecahedronGeometry extends Geometry { + + constructor( radius?: number, detail?: number ); + + parameters: { + radius: number; + detail: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/EdgesGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/EdgesGeometry.d.ts new file mode 100755 index 0000000..86a7510 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/EdgesGeometry.d.ts @@ -0,0 +1,8 @@ +import { BufferGeometry } from '../core/BufferGeometry'; +import { Geometry } from '../core/Geometry'; + +export class EdgesGeometry extends BufferGeometry { + + constructor( geometry: BufferGeometry | Geometry, thresholdAngle?: number ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ExtrudeGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ExtrudeGeometry.d.ts new file mode 100755 index 0000000..2f089fc --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ExtrudeGeometry.d.ts @@ -0,0 +1,59 @@ +import { Curve } from './../extras/core/Curve'; +import { Vector2 } from './../math/Vector2'; +import { Vector3 } from './../math/Vector3'; +import { Shape } from './../extras/core/Shape'; +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export interface ExtrudeGeometryOptions { + curveSegments?: number; + steps?: number; + depth?: number; + bevelEnabled?: boolean; + bevelThickness?: number; + bevelSize?: number; + bevelOffset?: number; + bevelSegments?: number; + extrudePath?: Curve; + UVGenerator?: UVGenerator; +} + +export interface UVGenerator { + generateTopUV( + geometry: ExtrudeBufferGeometry, + vertices: number[], + indexA: number, + indexB: number, + indexC: number + ): Vector2[]; + generateSideWallUV( + geometry: ExtrudeBufferGeometry, + vertices: number[], + indexA: number, + indexB: number, + indexC: number, + indexD: number + ): Vector2[]; +} + +export class ExtrudeBufferGeometry extends BufferGeometry { + + constructor( shapes: Shape | Shape[], options?: ExtrudeGeometryOptions ); + + static WorldUVGenerator: UVGenerator; + + addShapeList( shapes: Shape[], options?: any ): void; + addShape( shape: Shape, options?: any ): void; + +} + +export class ExtrudeGeometry extends Geometry { + + constructor( shapes: Shape | Shape[], options?: ExtrudeGeometryOptions ); + + static WorldUVGenerator: UVGenerator; + + addShapeList( shapes: Shape[], options?: any ): void; + addShape( shape: Shape, options?: any ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/Geometries.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/Geometries.d.ts new file mode 100755 index 0000000..a5f7808 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/Geometries.d.ts @@ -0,0 +1,22 @@ +export * from './WireframeGeometry'; +export * from './ParametricGeometry'; +export * from './TetrahedronGeometry'; +export * from './OctahedronGeometry'; +export * from './IcosahedronGeometry'; +export * from './DodecahedronGeometry'; +export * from './PolyhedronGeometry'; +export * from './TubeGeometry'; +export * from './TorusKnotGeometry'; +export * from './TorusGeometry'; +export * from './TextGeometry'; +export * from './SphereGeometry'; +export * from './RingGeometry'; +export * from './PlaneGeometry'; +export * from './LatheGeometry'; +export * from './ShapeGeometry'; +export * from './ExtrudeGeometry'; +export * from './EdgesGeometry'; +export * from './ConeGeometry'; +export * from './CylinderGeometry'; +export * from './CircleGeometry'; +export * from './BoxGeometry'; diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/IcosahedronGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/IcosahedronGeometry.d.ts new file mode 100755 index 0000000..fc02ea3 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/IcosahedronGeometry.d.ts @@ -0,0 +1,16 @@ +import { + PolyhedronGeometry, + PolyhedronBufferGeometry, +} from './PolyhedronGeometry'; + +export class IcosahedronBufferGeometry extends PolyhedronBufferGeometry { + + constructor( radius?: number, detail?: number ); + +} + +export class IcosahedronGeometry extends PolyhedronGeometry { + + constructor( radius?: number, detail?: number ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/LatheGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/LatheGeometry.d.ts new file mode 100755 index 0000000..aea669b --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/LatheGeometry.d.ts @@ -0,0 +1,39 @@ +import { Vector2 } from './../math/Vector2'; +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export class LatheBufferGeometry extends BufferGeometry { + + constructor( + points: Vector2[], + segments?: number, + phiStart?: number, + phiLength?: number + ); + + parameters: { + points: Vector2[]; + segments: number; + phiStart: number; + phiLength: number; + }; + +} + +export class LatheGeometry extends Geometry { + + constructor( + points: Vector2[], + segments?: number, + phiStart?: number, + phiLength?: number + ); + + parameters: { + points: Vector2[]; + segments: number; + phiStart: number; + phiLength: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/OctahedronGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/OctahedronGeometry.d.ts new file mode 100755 index 0000000..ca7c079 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/OctahedronGeometry.d.ts @@ -0,0 +1,16 @@ +import { + PolyhedronGeometry, + PolyhedronBufferGeometry, +} from './PolyhedronGeometry'; + +export class OctahedronBufferGeometry extends PolyhedronBufferGeometry { + + constructor( radius?: number, detail?: number ); + +} + +export class OctahedronGeometry extends PolyhedronGeometry { + + constructor( radius?: number, detail?: number ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ParametricGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ParametricGeometry.d.ts new file mode 100755 index 0000000..a12735b --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ParametricGeometry.d.ts @@ -0,0 +1,35 @@ +import { Vector3 } from './../math/Vector3'; +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export class ParametricBufferGeometry extends BufferGeometry { + + constructor( + func: ( u: number, v: number, dest: Vector3 ) => void, + slices: number, + stacks: number + ); + + parameters: { + func: ( u: number, v: number, dest: Vector3 ) => void; + slices: number; + stacks: number; + }; + +} + +export class ParametricGeometry extends Geometry { + + constructor( + func: ( u: number, v: number, dest: Vector3 ) => void, + slices: number, + stacks: number + ); + + parameters: { + func: ( u: number, v: number, dest: Vector3 ) => void; + slices: number; + stacks: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/PlaneGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/PlaneGeometry.d.ts new file mode 100755 index 0000000..21447c3 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/PlaneGeometry.d.ts @@ -0,0 +1,38 @@ +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export class PlaneBufferGeometry extends BufferGeometry { + + constructor( + width?: number, + height?: number, + widthSegments?: number, + heightSegments?: number + ); + + parameters: { + width: number; + height: number; + widthSegments: number; + heightSegments: number; + }; + +} + +export class PlaneGeometry extends Geometry { + + constructor( + width?: number, + height?: number, + widthSegments?: number, + heightSegments?: number + ); + + parameters: { + width: number; + height: number; + widthSegments: number; + heightSegments: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/PolyhedronGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/PolyhedronGeometry.d.ts new file mode 100755 index 0000000..d57ea87 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/PolyhedronGeometry.d.ts @@ -0,0 +1,40 @@ +import { Sphere } from './../math/Sphere'; +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export class PolyhedronBufferGeometry extends BufferGeometry { + + constructor( + vertices: number[], + indices: number[], + radius?: number, + detail?: number + ); + + parameters: { + vertices: number[]; + indices: number[]; + radius: number; + detail: number; + }; + +} + +export class PolyhedronGeometry extends Geometry { + + constructor( + vertices: number[], + indices: number[], + radius?: number, + detail?: number + ); + + parameters: { + vertices: number[]; + indices: number[]; + radius: number; + detail: number; + }; + boundingSphere: Sphere; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/RingGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/RingGeometry.d.ts new file mode 100755 index 0000000..0576324 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/RingGeometry.d.ts @@ -0,0 +1,46 @@ +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export class RingBufferGeometry extends BufferGeometry { + + constructor( + innerRadius?: number, + outerRadius?: number, + thetaSegments?: number, + phiSegments?: number, + thetaStart?: number, + thetaLength?: number + ); + + parameters: { + innerRadius: number; + outerRadius: number; + thetaSegments: number; + phiSegments: number; + thetaStart: number; + thetaLength: number; + }; + +} + +export class RingGeometry extends Geometry { + + constructor( + innerRadius?: number, + outerRadius?: number, + thetaSegments?: number, + phiSegments?: number, + thetaStart?: number, + thetaLength?: number + ); + + parameters: { + innerRadius: number; + outerRadius: number; + thetaSegments: number; + phiSegments: number; + thetaStart: number; + thetaLength: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ShapeGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ShapeGeometry.d.ts new file mode 100755 index 0000000..f934979 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/ShapeGeometry.d.ts @@ -0,0 +1,18 @@ +import { Shape } from './../extras/core/Shape'; +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export class ShapeBufferGeometry extends BufferGeometry { + + constructor( shapes: Shape | Shape[], curveSegments?: number ); + +} + +export class ShapeGeometry extends Geometry { + + constructor( shapes: Shape | Shape[], curveSegments?: number ); + + addShapeList( shapes: Shape[], options: any ): ShapeGeometry; + addShape( shape: Shape, options?: any ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/SphereGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/SphereGeometry.d.ts new file mode 100755 index 0000000..7242a74 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/SphereGeometry.d.ts @@ -0,0 +1,64 @@ +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export class SphereBufferGeometry extends BufferGeometry { + + constructor( + radius?: number, + widthSegments?: number, + heightSegments?: number, + phiStart?: number, + phiLength?: number, + thetaStart?: number, + thetaLength?: number + ); + + parameters: { + radius: number; + widthSegments: number; + heightSegments: number; + phiStart: number; + phiLength: number; + thetaStart: number; + thetaLength: number; + }; + +} + +/** + * A class for generating sphere geometries + */ +export class SphereGeometry extends Geometry { + + /** + * The geometry is created by sweeping and calculating vertexes around the Y axis (horizontal sweep) and the Z axis (vertical sweep). Thus, incomplete spheres (akin to 'sphere slices') can be created through the use of different values of phiStart, phiLength, thetaStart and thetaLength, in order to define the points in which we start (or end) calculating those vertices. + * + * @param radius — sphere radius. Default is 50. + * @param widthSegments — number of horizontal segments. Minimum value is 3, and the default is 8. + * @param heightSegments — number of vertical segments. Minimum value is 2, and the default is 6. + * @param phiStart — specify horizontal starting angle. Default is 0. + * @param phiLength — specify horizontal sweep angle size. Default is Math.PI * 2. + * @param thetaStart — specify vertical starting angle. Default is 0. + * @param thetaLength — specify vertical sweep angle size. Default is Math.PI. + */ + constructor( + radius?: number, + widthSegments?: number, + heightSegments?: number, + phiStart?: number, + phiLength?: number, + thetaStart?: number, + thetaLength?: number + ); + + parameters: { + radius: number; + widthSegments: number; + heightSegments: number; + phiStart: number; + phiLength: number; + thetaStart: number; + thetaLength: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TetrahedronGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TetrahedronGeometry.d.ts new file mode 100755 index 0000000..7b4a7cc --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TetrahedronGeometry.d.ts @@ -0,0 +1,13 @@ +import { PolyhedronGeometry, PolyhedronBufferGeometry } from './PolyhedronGeometry'; + +export class TetrahedronBufferGeometry extends PolyhedronBufferGeometry { + + constructor( radius?: number, detail?: number ); + +} + +export class TetrahedronGeometry extends PolyhedronGeometry { + + constructor( radius?: number, detail?: number ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TextGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TextGeometry.d.ts new file mode 100755 index 0000000..b3278ab --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TextGeometry.d.ts @@ -0,0 +1,50 @@ +import { Font } from './../extras/core/Font'; +import { ExtrudeGeometry, ExtrudeBufferGeometry } from './ExtrudeGeometry'; + +export interface TextGeometryParameters { + font?: Font; + size?: number; + height?: number; + curveSegments?: number; + bevelEnabled?: boolean; + bevelThickness?: number; + bevelSize?: number; + bevelOffset?: number; + bevelSegments?: number; +} + +export class TextBufferGeometry extends ExtrudeBufferGeometry { + + constructor( text: string, parameters?: TextGeometryParameters ); + + parameters: { + font: Font; + size: number; + height: number; + curveSegments: number; + bevelEnabled: boolean; + bevelThickness: number; + bevelSize: number; + bevelOffset: number; + bevelSegments: number; + }; + +} + +export class TextGeometry extends ExtrudeGeometry { + + constructor( text: string, parameters?: TextGeometryParameters ); + + parameters: { + font: Font; + size: number; + height: number; + curveSegments: number; + bevelEnabled: boolean; + bevelThickness: number; + bevelSize: number; + bevelOffset: number; + bevelSegments: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TorusGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TorusGeometry.d.ts new file mode 100755 index 0000000..c05a133 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TorusGeometry.d.ts @@ -0,0 +1,42 @@ +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export class TorusBufferGeometry extends BufferGeometry { + + constructor( + radius?: number, + tube?: number, + radialSegments?: number, + tubularSegments?: number, + arc?: number + ); + + parameters: { + radius: number; + tube: number; + radialSegments: number; + tubularSegments: number; + arc: number; + }; + +} + +export class TorusGeometry extends Geometry { + + constructor( + radius?: number, + tube?: number, + radialSegments?: number, + tubularSegments?: number, + arc?: number + ); + + parameters: { + radius: number; + tube: number; + radialSegments: number; + tubularSegments: number; + arc: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TorusKnotGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TorusKnotGeometry.d.ts new file mode 100755 index 0000000..06cfe8a --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TorusKnotGeometry.d.ts @@ -0,0 +1,48 @@ +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export class TorusKnotBufferGeometry extends BufferGeometry { + + constructor( + radius?: number, + tube?: number, + tubularSegments?: number, + radialSegments?: number, + p?: number, + q?: number + ); + + parameters: { + radius: number; + tube: number; + tubularSegments: number; + radialSegments: number; + p: number; + q: number; + heightScale: number; + }; + +} + +export class TorusKnotGeometry extends Geometry { + + constructor( + radius?: number, + tube?: number, + tubularSegments?: number, + radialSegments?: number, + p?: number, + q?: number + ); + + parameters: { + radius: number; + tube: number; + tubularSegments: number; + radialSegments: number; + p: number; + q: number; + heightScale: number; + }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TubeGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TubeGeometry.d.ts new file mode 100755 index 0000000..2420bb5 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/TubeGeometry.d.ts @@ -0,0 +1,50 @@ +import { Curve } from './../extras/core/Curve'; +import { Vector3 } from './../math/Vector3'; +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export class TubeBufferGeometry extends BufferGeometry { + + constructor( + path: Curve, + tubularSegments?: number, + radius?: number, + radiusSegments?: number, + closed?: boolean + ); + + parameters: { + path: Curve; + tubularSegments: number; + radius: number; + radialSegments: number; + closed: boolean; + }; + tangents: Vector3[]; + normals: Vector3[]; + binormals: Vector3[]; + +} + +export class TubeGeometry extends Geometry { + + constructor( + path: Curve, + tubularSegments?: number, + radius?: number, + radiusSegments?: number, + closed?: boolean + ); + + parameters: { + path: Curve; + tubularSegments: number; + radius: number; + radialSegments: number; + closed: boolean; + }; + tangents: Vector3[]; + normals: Vector3[]; + binormals: Vector3[]; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/WireframeGeometry.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/WireframeGeometry.d.ts new file mode 100755 index 0000000..f92dd30 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/geometries/WireframeGeometry.d.ts @@ -0,0 +1,8 @@ +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; + +export class WireframeGeometry extends BufferGeometry { + + constructor( geometry: Geometry | BufferGeometry ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/ArrowHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/ArrowHelper.d.ts new file mode 100755 index 0000000..cfe4f64 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/ArrowHelper.d.ts @@ -0,0 +1,27 @@ +import { Vector3 } from './../math/Vector3'; +import { Line } from './../objects/Line'; +import { Mesh } from './../objects/Mesh'; +import { Color } from './../math/Color'; +import { Object3D } from './../core/Object3D'; + +// Extras / Helpers ///////////////////////////////////////////////////////////////////// + +export class ArrowHelper extends Object3D { + + constructor( + dir: Vector3, + origin?: Vector3, + length?: number, + hex?: number, + headLength?: number, + headWidth?: number + ); + + line: Line; + cone: Mesh; + + setDirection( dir: Vector3 ): void; + setLength( length: number, headLength?: number, headWidth?: number ): void; + setColor( color: Color | string | number ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/AxesHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/AxesHelper.d.ts new file mode 100755 index 0000000..e41d6cd --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/AxesHelper.d.ts @@ -0,0 +1,7 @@ +import { LineSegments } from './../objects/LineSegments'; + +export class AxesHelper extends LineSegments { + + constructor( size?: number ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/Box3Helper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/Box3Helper.d.ts new file mode 100755 index 0000000..b58c8d5 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/Box3Helper.d.ts @@ -0,0 +1,11 @@ +import { Box3 } from './../math/Box3'; +import { Color } from './../math/Color'; +import { LineSegments } from './../objects/LineSegments'; + +export class Box3Helper extends LineSegments { + + constructor( box: Box3, color?: Color ); + + box: Box3; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/BoxHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/BoxHelper.d.ts new file mode 100755 index 0000000..0de73c8 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/BoxHelper.d.ts @@ -0,0 +1,13 @@ +import { Object3D } from './../core/Object3D'; +import { Color } from './../math/Color'; +import { LineSegments } from './../objects/LineSegments'; + +export class BoxHelper extends LineSegments { + + constructor( object: Object3D, color?: Color ); + + update( object?: Object3D ): void; + + setFromObject( object: Object3D ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/CameraHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/CameraHelper.d.ts new file mode 100755 index 0000000..dc1ec11 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/CameraHelper.d.ts @@ -0,0 +1,13 @@ +import { Camera } from './../cameras/Camera'; +import { LineSegments } from './../objects/LineSegments'; + +export class CameraHelper extends LineSegments { + + constructor( camera: Camera ); + + camera: Camera; + pointMap: { [id: string]: number[] }; + + update(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/DirectionalLightHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/DirectionalLightHelper.d.ts new file mode 100755 index 0000000..3a778f2 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/DirectionalLightHelper.d.ts @@ -0,0 +1,25 @@ +import { DirectionalLight } from './../lights/DirectionalLight'; +import { Color } from './../math/Color'; +import { Line } from './../objects/Line'; +import { Matrix4 } from './../math/Matrix4'; +import { Object3D } from './../core/Object3D'; + +export class DirectionalLightHelper extends Object3D { + + constructor( + light: DirectionalLight, + size?: number, + color?: Color | string | number + ); + + light: DirectionalLight; + lightPlane: Line; + targetLine: Line; + color: Color | string | number | undefined; + matrix: Matrix4; + matrixAutoUpdate: boolean; + + dispose(): void; + update(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/FaceNormalsHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/FaceNormalsHelper.d.ts new file mode 100755 index 0000000..7a5535f --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/FaceNormalsHelper.d.ts @@ -0,0 +1,25 @@ +import { Object3D } from './../core/Object3D'; +import { LineSegments } from './../objects/LineSegments'; + +/** + * @deprecated Use {@link EdgesGeometry THREE.EdgesGeometry} + */ +// export class EdgesHelper extends LineSegments { +// constructor(object: Object3D, hex?: number, thresholdAngle?: number); +// } + +export class FaceNormalsHelper extends LineSegments { + + constructor( + object: Object3D, + size?: number, + hex?: number, + linewidth?: number + ); + + object: Object3D; + size: number; + + update( object?: Object3D ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/GridHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/GridHelper.d.ts new file mode 100755 index 0000000..ab7b080 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/GridHelper.d.ts @@ -0,0 +1,17 @@ +import { Color } from './../math/Color'; +import { LineSegments } from './../objects/LineSegments'; + +export class GridHelper extends LineSegments { + + constructor( + size: number, + divisions: number, + color1?: Color | number, + color2?: Color | number + ); + /** + * @deprecated Colors should be specified in the constructor. + */ + setColors( color1?: Color | number, color2?: Color | number ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/HemisphereLightHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/HemisphereLightHelper.d.ts new file mode 100755 index 0000000..7d3ae8e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/HemisphereLightHelper.d.ts @@ -0,0 +1,25 @@ +import { HemisphereLight } from './../lights/HemisphereLight'; +import { Color } from './../math/Color'; +import { Matrix4 } from './../math/Matrix4'; +import { MeshBasicMaterial } from './../materials/MeshBasicMaterial'; +import { Object3D } from './../core/Object3D'; + +export class HemisphereLightHelper extends Object3D { + + constructor( + light: HemisphereLight, + size: number, + color?: Color | number | string + ); + + light: HemisphereLight; + matrix: Matrix4; + matrixAutoUpdate: boolean; + material: MeshBasicMaterial; + + color: Color | string | number | undefined; + + dispose(): void; + update(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PlaneHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PlaneHelper.d.ts new file mode 100755 index 0000000..353e31d --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PlaneHelper.d.ts @@ -0,0 +1,13 @@ +import { Plane } from './../math/Plane'; +import { LineSegments } from './../objects/LineSegments'; + +export class PlaneHelper extends LineSegments { + + constructor( plane: Plane, size?: number, hex?: number ); + + plane: Plane; + size: number; + + updateMatrixWorld( force?: boolean ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PointLightHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PointLightHelper.d.ts new file mode 100755 index 0000000..44aa29e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PointLightHelper.d.ts @@ -0,0 +1,22 @@ +import { PointLight } from './../lights/PointLight'; +import { Color } from './../math/Color'; +import { Matrix4 } from './../math/Matrix4'; +import { Object3D } from './../core/Object3D'; + +export class PointLightHelper extends Object3D { + + constructor( + light: PointLight, + sphereSize?: number, + color?: Color | string | number + ); + + light: PointLight; + color: Color | string | number | undefined; + matrix: Matrix4; + matrixAutoUpdate: boolean; + + dispose(): void; + update(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PolarGridHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PolarGridHelper.d.ts new file mode 100755 index 0000000..bdd253c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PolarGridHelper.d.ts @@ -0,0 +1,15 @@ +import { LineSegments } from '../objects/LineSegments'; +import { Color } from '../math/Color'; + +export class PolarGridHelper extends LineSegments { + + constructor( + radius: number, + radials: number, + circles: number, + divisions: number, + color1: Color | string | number | undefined, + color2: Color | string | number | undefined + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PositionalAudioHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PositionalAudioHelper.d.ts new file mode 100755 index 0000000..8f1e997 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/PositionalAudioHelper.d.ts @@ -0,0 +1,16 @@ +import { PositionalAudio } from './../audio/PositionalAudio'; +import { Line } from './../objects/Line'; + +export class PositionalAudioHelper extends Line { + + constructor( audio: PositionalAudio, range?: number, divisionsInnerAngle?: number, divisionsOuterAngle?: number ); + + audio: PositionalAudio; + range: number; + divisionsInnerAngle: number; + divisionsOuterAngle: number; + + dispose(): void; + update(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/RectAreaLightHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/RectAreaLightHelper.d.ts new file mode 100755 index 0000000..c7551f8 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/RectAreaLightHelper.d.ts @@ -0,0 +1,15 @@ +import { RectAreaLight } from './../lights/RectAreaLight'; +import { Color } from './../math/Color'; +import { Line } from '../objects/Line'; + +export class RectAreaLightHelper extends Line { + + constructor( light: RectAreaLight, color?: Color | string | number ); + + light: RectAreaLight; + color: Color | string | number | undefined; + + update(): void; + dispose(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/SkeletonHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/SkeletonHelper.d.ts new file mode 100755 index 0000000..f7a8fc0 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/SkeletonHelper.d.ts @@ -0,0 +1,15 @@ +import { Object3D } from './../core/Object3D'; +import { Bone } from './../objects/Bone'; +import { LineSegments } from './../objects/LineSegments'; + +export class SkeletonHelper extends LineSegments { + + constructor( bone: Object3D ); + + bones: Bone[]; + root: Object3D; + + getBoneList( object: Object3D ): Bone[]; + update(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/SpotLightHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/SpotLightHelper.d.ts new file mode 100755 index 0000000..cf37186 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/SpotLightHelper.d.ts @@ -0,0 +1,20 @@ +import { Light } from './../lights/Light'; +import { Color } from './../math/Color'; +import { Matrix4 } from './../math/Matrix4'; +import { Object3D } from './../core/Object3D'; +import { LineSegments } from '../objects/LineSegments'; + +export class SpotLightHelper extends Object3D { + + constructor( light: Light, color?: Color | string | number ); + + light: Light; + matrix: Matrix4; + matrixAutoUpdate: boolean; + color: Color | string | number | undefined; + cone: LineSegments; + + dispose(): void; + update(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/VertexNormalsHelper.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/VertexNormalsHelper.d.ts new file mode 100755 index 0000000..090575c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/helpers/VertexNormalsHelper.d.ts @@ -0,0 +1,18 @@ +import { Object3D } from './../core/Object3D'; +import { LineSegments } from './../objects/LineSegments'; + +export class VertexNormalsHelper extends LineSegments { + + constructor( + object: Object3D, + size?: number, + hex?: number, + linewidth?: number + ); + + object: Object3D; + size: number; + + update( object?: Object3D ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/AmbientLight.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/AmbientLight.d.ts new file mode 100755 index 0000000..d6b05ce --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/AmbientLight.d.ts @@ -0,0 +1,19 @@ +import { Color } from './../math/Color'; +import { Light } from './Light'; + +/** + * This light's color gets applied to all the objects in the scene globally. + * + * @source https://github.com/mrdoob/three.js/blob/master/src/lights/AmbientLight.js + */ +export class AmbientLight extends Light { + + /** + * This creates a Ambientlight with a color. + * @param color Numeric value of the RGB component of the color or a Color instance. + */ + constructor( color?: Color | string | number, intensity?: number ); + + castShadow: boolean; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/AmbientLightProbe.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/AmbientLightProbe.d.ts new file mode 100755 index 0000000..5cc1de8 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/AmbientLightProbe.d.ts @@ -0,0 +1,10 @@ +import { Color } from './../math/Color'; +import { LightProbe } from './LightProbe'; + +export class AmbientLightProbe extends LightProbe { + + constructor( color?: Color | string | number, intensity?: number ); + + isAmbientLightProbe: true; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/DirectionalLight.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/DirectionalLight.d.ts new file mode 100755 index 0000000..25d619a --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/DirectionalLight.d.ts @@ -0,0 +1,34 @@ +import { Color } from './../math/Color'; +import { Object3D } from './../core/Object3D'; +import { DirectionalLightShadow } from './DirectionalLightShadow'; +import { Light } from './Light'; + +/** + * Affects objects using MeshLambertMaterial or MeshPhongMaterial. + * + * @example + * // White directional light at half intensity shining from the top. + * var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 ); + * directionalLight.position.set( 0, 1, 0 ); + * scene.add( directionalLight ); + * + * @see src/lights/DirectionalLight.js + */ +export class DirectionalLight extends Light { + + constructor( color?: Color | string | number, intensity?: number ); + + /** + * Target used for shadow camera orientation. + */ + target: Object3D; + + /** + * Light's intensity. + * Default — 1.0. + */ + intensity: number; + + shadow: DirectionalLightShadow; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/DirectionalLightShadow.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/DirectionalLightShadow.d.ts new file mode 100755 index 0000000..7a50638 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/DirectionalLightShadow.d.ts @@ -0,0 +1,8 @@ +import { OrthographicCamera } from './../cameras/OrthographicCamera'; +import { LightShadow } from './LightShadow'; + +export class DirectionalLightShadow extends LightShadow { + + camera: OrthographicCamera; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/HemisphereLight.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/HemisphereLight.d.ts new file mode 100755 index 0000000..1e40c3b --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/HemisphereLight.d.ts @@ -0,0 +1,16 @@ +import { Color } from './../math/Color'; +import { Light } from './Light'; + +export class HemisphereLight extends Light { + + constructor( + skyColor?: Color | string | number, + groundColor?: Color | string | number, + intensity?: number + ); + + skyColor: Color; + groundColor: Color; + intensity: number; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/HemisphereLightProbe.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/HemisphereLightProbe.d.ts new file mode 100755 index 0000000..8b85882 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/HemisphereLightProbe.d.ts @@ -0,0 +1,10 @@ +import { Color } from './../math/Color'; +import { LightProbe } from './LightProbe'; + +export class HemisphereLightProbe extends LightProbe { + + constructor( skyColor?: Color | string | number, groundColor?: Color | string | number, intensity?: number ); + + isHemisphereLightProbe: true; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/Light.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/Light.d.ts new file mode 100755 index 0000000..ab54ff1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/Light.d.ts @@ -0,0 +1,60 @@ +import { Color } from './../math/Color'; +import { LightShadow } from './LightShadow'; +import { Object3D } from './../core/Object3D'; + +// Lights ////////////////////////////////////////////////////////////////////////////////// + +/** + * Abstract base class for lights. + */ +export class Light extends Object3D { + + constructor( hex?: number | string, intensity?: number ); + + color: Color; + intensity: number; + isLight: true; + receiveShadow: boolean; + shadow: LightShadow; + /** + * @deprecated Use shadow.camera.fov instead. + */ + shadowCameraFov: any; + /** + * @deprecated Use shadow.camera.left instead. + */ + shadowCameraLeft: any; + /** + * @deprecated Use shadow.camera.right instead. + */ + shadowCameraRight: any; + /** + * @deprecated Use shadow.camera.top instead. + */ + shadowCameraTop: any; + /** + * @deprecated Use shadow.camera.bottom instead. + */ + shadowCameraBottom: any; + /** + * @deprecated Use shadow.camera.near instead. + */ + shadowCameraNear: any; + /** + * @deprecated Use shadow.camera.far instead. + */ + shadowCameraFar: any; + /** + * @deprecated Use shadow.bias instead. + */ + shadowBias: any; + /** + * @deprecated Use shadow.mapSize.width instead. + */ + shadowMapWidth: any; + /** + * @deprecated Use shadow.mapSize.height instead. + */ + shadowMapHeight: any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/LightProbe.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/LightProbe.d.ts new file mode 100755 index 0000000..5dde42e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/LightProbe.d.ts @@ -0,0 +1,11 @@ +import { SphericalHarmonics3 } from './../math/SphericalHarmonics3'; +import { Light } from './Light'; + +export class LightProbe extends Light { + + constructor( sh?: SphericalHarmonics3, intensity?: number ); + + isLightProbe: true; + sh: SphericalHarmonics3; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/LightShadow.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/LightShadow.d.ts new file mode 100755 index 0000000..3273569 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/LightShadow.d.ts @@ -0,0 +1,28 @@ +import { Camera } from './../cameras/Camera'; +import { Light } from './../lights/Light'; +import { Vector2 } from './../math/Vector2'; +import { Vector4 } from './../math/Vector4'; +import { Matrix4 } from './../math/Matrix4'; +import { RenderTarget } from '../renderers/webgl/WebGLRenderLists'; + +export class LightShadow { + + constructor( camera: Camera ); + + camera: Camera; + bias: number; + radius: number; + mapSize: Vector2; + map: RenderTarget; + mapPass: RenderTarget; + matrix: Matrix4; + + copy( source: LightShadow ): this; + clone( recursive?: boolean ): this; + toJSON(): any; + getFrustum(): number; + updateMatrices( light: Light, viewportIndex?: number ): void; + getViewport( viewportIndex: number ): Vector4; + getFrameExtents(): Vector2; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/PointLight.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/PointLight.d.ts new file mode 100755 index 0000000..fa844da --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/PointLight.d.ts @@ -0,0 +1,45 @@ +import { Color } from './../math/Color'; +import { Light } from './Light'; +import { PerspectiveCamera } from './../cameras/PerspectiveCamera'; +import { LightShadow } from './LightShadow'; + +export class PointLightShadow extends LightShadow { + + camera: PerspectiveCamera; + +} + +/** + * Affects objects using {@link MeshLambertMaterial} or {@link MeshPhongMaterial}. + * + * @example + * var light = new THREE.PointLight( 0xff0000, 1, 100 ); + * light.position.set( 50, 50, 50 ); + * scene.add( light ); + */ +export class PointLight extends Light { + + constructor( + color?: Color | string | number, + intensity?: number, + distance?: number, + decay?: number + ); + + /* + * Light's intensity. + * Default - 1.0. + */ + intensity: number; + + /** + * If non-zero, light will attenuate linearly from maximum intensity at light position down to zero at distance. + * Default — 0.0. + */ + distance: number; + + decay: number; + shadow: PointLightShadow; + power: number; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/PointLightShadow.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/PointLightShadow.d.ts new file mode 100755 index 0000000..8381c1f --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/PointLightShadow.d.ts @@ -0,0 +1,8 @@ +import { PerspectiveCamera } from './../cameras/PerspectiveCamera'; +import { LightShadow } from './LightShadow'; + +export class PointLightShadow extends LightShadow { + + camera: PerspectiveCamera; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/RectAreaLight.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/RectAreaLight.d.ts new file mode 100755 index 0000000..ec55ab1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/RectAreaLight.d.ts @@ -0,0 +1,18 @@ +import { Light } from './Light'; +import { Color } from './../math/Color'; + +export class RectAreaLight extends Light { + + constructor( + color?: Color | string | number, + intensity?: number, + width?: number, + height?: number + ); + + type: string; + width: number; + height: number; + intensity: number; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/SpotLight.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/SpotLight.d.ts new file mode 100755 index 0000000..65ce39b --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/SpotLight.d.ts @@ -0,0 +1,55 @@ +import { Color } from './../math/Color'; +import { Object3D } from './../core/Object3D'; +import { SpotLightShadow } from './SpotLightShadow'; +import { Light } from './Light'; + +/** + * A point light that can cast shadow in one direction. + */ +export class SpotLight extends Light { + + constructor( + color?: Color | string | number, + intensity?: number, + distance?: number, + angle?: number, + exponent?: number, + decay?: number + ); + + /** + * Spotlight focus points at target.position. + * Default position — (0,0,0). + */ + target: Object3D; + + /** + * Light's intensity. + * Default — 1.0. + */ + intensity: number; + + /** + * If non-zero, light will attenuate linearly from maximum intensity at light position down to zero at distance. + * Default — 0.0. + */ + distance: number; + + /* + * Maximum extent of the spotlight, in radians, from its direction. + * Default — Math.PI/2. + */ + angle: number; + + /** + * Rapidity of the falloff of light from its target direction. + * Default — 10.0. + */ + exponent: number; + + decay: number; + shadow: SpotLightShadow; + power: number; + penumbra: number; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/SpotLightShadow.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/SpotLightShadow.d.ts new file mode 100755 index 0000000..a3a432f --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/lights/SpotLightShadow.d.ts @@ -0,0 +1,8 @@ +import { PerspectiveCamera } from './../cameras/PerspectiveCamera'; +import { LightShadow } from './LightShadow'; + +export class SpotLightShadow extends LightShadow { + + camera: PerspectiveCamera; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/AnimationLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/AnimationLoader.d.ts new file mode 100755 index 0000000..ccf51e6 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/AnimationLoader.d.ts @@ -0,0 +1,17 @@ +import { LoadingManager } from './LoadingManager'; +import { Loader } from './Loader'; +import { AnimationClip } from './../animation/AnimationClip'; + +export class AnimationLoader extends Loader { + + constructor( manager?: LoadingManager ); + + load( + url: string, + onLoad: ( response: AnimationClip[] ) => void, + onProgress?: ( request: ProgressEvent ) => void, + onError?: ( event: ErrorEvent ) => void + ): void; + parse( json: any ): AnimationClip[]; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/AudioLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/AudioLoader.d.ts new file mode 100755 index 0000000..c5c5b05 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/AudioLoader.d.ts @@ -0,0 +1,15 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; + +export class AudioLoader extends Loader { + + constructor( manager?: LoadingManager ); + + load( + url: string, + onLoad: ( audioBuffer: AudioBuffer ) => void, + onProgress?: ( request: ProgressEvent ) => void, + onError?: ( event: ErrorEvent ) => void + ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/BufferGeometryLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/BufferGeometryLoader.d.ts new file mode 100755 index 0000000..96569ad --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/BufferGeometryLoader.d.ts @@ -0,0 +1,18 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; +import { BufferGeometry } from './../core/BufferGeometry'; +import { InstancedBufferGeometry } from '../core/InstancedBufferGeometry'; + +export class BufferGeometryLoader extends Loader { + + constructor( manager?: LoadingManager ); + + load( + url: string, + onLoad: ( bufferGeometry: InstancedBufferGeometry | BufferGeometry ) => void, + onProgress?: ( request: ProgressEvent ) => void, + onError?: ( event: ErrorEvent ) => void + ): void; + parse( json: any ): InstancedBufferGeometry | BufferGeometry; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/Cache.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/Cache.d.ts new file mode 100755 index 0000000..a658f7a --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/Cache.d.ts @@ -0,0 +1,9 @@ +export namespace Cache { + export let enabled: boolean; + export let files: any; + + export function add( key: string, file: any ): void; + export function get( key: string ): any; + export function remove( key: string ): void; + export function clear(): void; +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/CompressedTextureLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/CompressedTextureLoader.d.ts new file mode 100755 index 0000000..d95e6e4 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/CompressedTextureLoader.d.ts @@ -0,0 +1,16 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; +import { CompressedTexture } from './../textures/CompressedTexture'; + +export class CompressedTextureLoader extends Loader { + + constructor( manager?: LoadingManager ); + + load( + url: string, + onLoad: ( texture: CompressedTexture ) => void, + onProgress?: ( event: ProgressEvent ) => void, + onError?: ( event: ErrorEvent ) => void + ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/CubeTextureLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/CubeTextureLoader.d.ts new file mode 100755 index 0000000..12d7b3b --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/CubeTextureLoader.d.ts @@ -0,0 +1,16 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; +import { CubeTexture } from './../textures/CubeTexture'; + +export class CubeTextureLoader extends Loader { + + constructor( manager?: LoadingManager ); + + load( + urls: Array, + onLoad?: ( texture: CubeTexture ) => void, + onProgress?: ( event: ProgressEvent ) => void, + onError?: ( event: ErrorEvent ) => void + ): CubeTexture; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/DataTextureLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/DataTextureLoader.d.ts new file mode 100755 index 0000000..e493509 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/DataTextureLoader.d.ts @@ -0,0 +1,16 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; +import { DataTexture } from './../textures/DataTexture'; + +export class DataTextureLoader extends Loader { + + constructor( manager?: LoadingManager ); + + load( + url: string, + onLoad: ( dataTexture: DataTexture ) => void, + onProgress?: ( event: ProgressEvent ) => void, + onError?: ( event: ErrorEvent ) => void + ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/FileLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/FileLoader.d.ts new file mode 100755 index 0000000..fefd230 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/FileLoader.d.ts @@ -0,0 +1,24 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; + +export class FileLoader extends Loader { + + constructor( manager?: LoadingManager ); + + mimeType: undefined | MimeType; + responseType: undefined |string; + withCredentials: undefined |string; + requestHeader: undefined | { [header: string]: string }; + + load( + url: string, + onLoad?: ( response: string | ArrayBuffer ) => void, + onProgress?: ( request: ProgressEvent ) => void, + onError?: ( event: ErrorEvent ) => void + ): any; + setMimeType( mimeType: MimeType ): FileLoader; + setResponseType( responseType: string ): FileLoader; + setWithCredentials( value: string ): FileLoader; + setRequestHeader( value: { [header: string]: string } ): FileLoader; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/FontLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/FontLoader.d.ts new file mode 100755 index 0000000..28b1b18 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/FontLoader.d.ts @@ -0,0 +1,17 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; +import { Font } from './../extras/core/Font'; + +export class FontLoader extends Loader { + + constructor( manager?: LoadingManager ); + + load( + url: string, + onLoad?: ( responseFont: Font ) => void, + onProgress?: ( event: ProgressEvent ) => void, + onError?: ( event: ErrorEvent ) => void + ): void; + parse( json: any ): Font; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/ImageBitmapLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/ImageBitmapLoader.d.ts new file mode 100755 index 0000000..70a7f51 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/ImageBitmapLoader.d.ts @@ -0,0 +1,18 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; + +export class ImageBitmapLoader extends Loader { + + constructor( manager?: LoadingManager ); + + options: undefined | object; + + setOptions( options: object ): ImageBitmapLoader; + load( + url: string, + onLoad?: ( response: ImageBitmap ) => void, + onProgress?: ( request: ProgressEvent ) => void, + onError?: ( event: ErrorEvent ) => void + ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/ImageLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/ImageLoader.d.ts new file mode 100755 index 0000000..f20d1e6 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/ImageLoader.d.ts @@ -0,0 +1,19 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; + +/** + * A loader for loading an image. + * Unlike other loaders, this one emits events instead of using predefined callbacks. So if you're interested in getting notified when things happen, you need to add listeners to the object. + */ +export class ImageLoader extends Loader { + + constructor( manager?: LoadingManager ); + + load( + url: string, + onLoad?: ( image: HTMLImageElement ) => void, + onProgress?: ( event: ProgressEvent ) => void, + onError?: ( event: ErrorEvent ) => void + ): HTMLImageElement; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/Loader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/Loader.d.ts new file mode 100755 index 0000000..9bba509 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/Loader.d.ts @@ -0,0 +1,24 @@ +import { LoadingManager } from './LoadingManager'; + +/** + * Base class for implementing loaders. + */ +export class Loader { + + constructor( manager?: LoadingManager ); + + crossOrigin: string; + path: string; + resourcePath: string; + manager: LoadingManager; + + /* + load(): void; + parse(): void; + */ + + setCrossOrigin( crossOrigin: string ): this; + setPath( path: string ): this; + setResourcePath( resourcePath: string ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/LoaderUtils.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/LoaderUtils.d.ts new file mode 100755 index 0000000..d6014c1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/LoaderUtils.d.ts @@ -0,0 +1,8 @@ +import { TypedArray } from '../polyfills'; + +export class LoaderUtils { + + static decodeText( array: TypedArray ): string; + static extractUrlBase( url: string ): string; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/LoadingManager.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/LoadingManager.d.ts new file mode 100755 index 0000000..7301a1b --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/LoadingManager.d.ts @@ -0,0 +1,61 @@ +import { Loader } from './Loader'; + +export const DefaultLoadingManager: LoadingManager; + +/** + * Handles and keeps track of loaded and pending data. + */ +export class LoadingManager { + + constructor( + onLoad?: () => void, + onProgress?: ( url: string, loaded: number, total: number ) => void, + onError?: ( url: string ) => void + ); + + onStart?: ( url: string, loaded: number, total: number ) => void; + + /** + * Will be called when load starts. + * The default is a function with empty body. + */ + onLoad: () => void; + + /** + * Will be called while load progresses. + * The default is a function with empty body. + */ + onProgress: ( item: any, loaded: number, total: number ) => void; + + /** + * Will be called when each element in the scene completes loading. + * The default is a function with empty body. + */ + onError: ( url: string ) => void; + + /** + * If provided, the callback will be passed each resource URL before a request is sent. + * The callback may return the original URL, or a new URL to override loading behavior. + * This behavior can be used to load assets from .ZIP files, drag-and-drop APIs, and Data URIs. + * @param callback URL modifier callback. Called with url argument, and must return resolvedURL. + */ + setURLModifier( callback?: ( url: string ) => string ): this; + + /** + * Given a URL, uses the URL modifier callback (if any) and returns a resolved URL. + * If no URL modifier is set, returns the original URL. + * @param url the url to load + */ + resolveURL( url: string ): string; + + itemStart( url: string ): void; + itemEnd( url: string ): void; + itemError( url: string ): void; + + // handlers + + addHandler( regex: RegExp, loader: Loader ): this; + removeHandler( regex: RegExp ): this; + getHandler( file: string ): Loader | null; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/MaterialLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/MaterialLoader.d.ts new file mode 100755 index 0000000..bf9b5d9 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/MaterialLoader.d.ts @@ -0,0 +1,21 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; +import { Texture } from './../textures/Texture'; +import { Material } from './../materials/Material'; + +export class MaterialLoader extends Loader { + + constructor( manager?: LoadingManager ); + + textures: { [key: string]: Texture }; + + load( + url: string, + onLoad: ( material: Material ) => void, + onProgress?: ( event: ProgressEvent ) => void, + onError?: ( event: Error | ErrorEvent ) => void + ): void; + setTextures( textures: { [key: string]: Texture } ): this; + parse( json: any ): Material; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/ObjectLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/ObjectLoader.d.ts new file mode 100755 index 0000000..857eb77 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/ObjectLoader.d.ts @@ -0,0 +1,33 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; +import { Object3D } from './../core/Object3D'; +import { Texture } from './../textures/Texture'; +import { Material } from './../materials/Material'; +import { AnimationClip } from './../animation/AnimationClip'; + +export class ObjectLoader extends Loader { + + constructor( manager?: LoadingManager ); + + load( + url: string, + onLoad?: ( object: ObjectType ) => void, + onProgress?: ( event: ProgressEvent ) => void, + onError?: ( event: Error | ErrorEvent ) => void + ): void; + parse( json: any, onLoad?: ( object: Object3D ) => void ): T; + parseGeometries( json: any ): any[]; // Array of BufferGeometry or Geometry or Geometry2. + parseMaterials( json: any, textures: Texture[] ): Material[]; // Array of Classes that inherits from Matrial. + parseAnimations( json: any ): AnimationClip[]; + parseImages( + json: any, + onLoad: () => void + ): { [key: string]: HTMLImageElement }; + parseTextures( json: any, images: any ): Texture[]; + parseObject( + data: any, + geometries: any[], + materials: Material[] + ): T; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/TextureLoader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/TextureLoader.d.ts new file mode 100755 index 0000000..2901301 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/loaders/TextureLoader.d.ts @@ -0,0 +1,20 @@ +import { Loader } from './Loader'; +import { LoadingManager } from './LoadingManager'; +import { Texture } from './../textures/Texture'; + +/** + * Class for loading a texture. + * Unlike other loaders, this one emits events instead of using predefined callbacks. So if you're interested in getting notified when things happen, you need to add listeners to the object. + */ +export class TextureLoader extends Loader { + + constructor( manager?: LoadingManager ); + + load( + url: string, + onLoad?: ( texture: Texture ) => void, + onProgress?: ( event: ProgressEvent ) => void, + onError?: ( event: ErrorEvent ) => void + ): Texture; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/LineBasicMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/LineBasicMaterial.d.ts new file mode 100755 index 0000000..ec05e8b --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/LineBasicMaterial.d.ts @@ -0,0 +1,22 @@ +import { Color } from './../math/Color'; +import { MaterialParameters, Material } from './Material'; + +export interface LineBasicMaterialParameters extends MaterialParameters { + color?: Color | string | number; + linewidth?: number; + linecap?: string; + linejoin?: string; +} + +export class LineBasicMaterial extends Material { + + constructor( parameters?: LineBasicMaterialParameters ); + + color: Color; + linewidth: number; + linecap: string; + linejoin: string; + + setValues( parameters: LineBasicMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/LineDashedMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/LineDashedMaterial.d.ts new file mode 100755 index 0000000..1cfd87d --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/LineDashedMaterial.d.ts @@ -0,0 +1,24 @@ +import { Color } from './../math/Color'; +import { MaterialParameters } from './Material'; +import { LineBasicMaterial } from './LineBasicMaterial'; + +export interface LineDashedMaterialParameters extends MaterialParameters { + color?: Color | string | number; + linewidth?: number; + scale?: number; + dashSize?: number; + gapSize?: number; +} + +export class LineDashedMaterial extends LineBasicMaterial { + + constructor( parameters?: LineDashedMaterialParameters ); + + scale: number; + dashSize: number; + gapSize: number; + isLineDashedMaterial: boolean; + + setValues( parameters: LineDashedMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/Material.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/Material.d.ts new file mode 100755 index 0000000..ca03e10 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/Material.d.ts @@ -0,0 +1,336 @@ +import { Plane } from './../math/Plane'; +import { Shader } from './../renderers/shaders/ShaderLib'; +import { EventDispatcher } from './../core/EventDispatcher'; +import { WebGLRenderer } from './../renderers/WebGLRenderer'; +import { + BlendingDstFactor, + BlendingEquation, + Blending, + BlendingSrcFactor, + DepthModes, + Side, + Colors, + StencilFunc, + StencilOp +} from '../constants'; + +// Materials ////////////////////////////////////////////////////////////////////////////////// +export let MaterialIdCount: number; + +export interface MaterialParameters { + alphaTest?: number; + blendDst?: BlendingDstFactor; + blendDstAlpha?: number; + blendEquation?: BlendingEquation; + blendEquationAlpha?: number; + blending?: Blending; + blendSrc?: BlendingSrcFactor | BlendingDstFactor; + blendSrcAlpha?: number; + clipIntersection?: boolean; + clippingPlanes?: Plane[]; + clipShadows?: boolean; + colorWrite?: boolean; + depthFunc?: DepthModes; + depthTest?: boolean; + depthWrite?: boolean; + fog?: boolean; + name?: string; + opacity?: number; + polygonOffset?: boolean; + polygonOffsetFactor?: number; + polygonOffsetUnits?: number; + precision?: 'highp' | 'mediump' | 'lowp' | null; + premultipliedAlpha?: boolean; + dithering?: boolean; + flatShading?: boolean; + side?: Side; + shadowSide?: Side; + toneMapped?: boolean; + transparent?: boolean; + vertexColors?: Colors; + vertexTangents?: boolean; + visible?: boolean; + stencilWrite?: boolean; + stencilFunc?: StencilFunc; + stencilRef?: number; + stencilMask?: number; + stencilFail?: StencilOp; + stencilZFail?: StencilOp; + stencilZPass?: StencilOp; +} + +/** + * Materials describe the appearance of objects. They are defined in a (mostly) renderer-independent way, so you don't have to rewrite materials if you decide to use a different renderer. + */ +export class Material extends EventDispatcher { + + constructor(); + + /** + * Sets the alpha value to be used when running an alpha test. Default is 0. + */ + alphaTest: number; + + /** + * Blending destination. It's one of the blending mode constants defined in Three.js. Default is {@link OneMinusSrcAlphaFactor}. + */ + blendDst: BlendingDstFactor; + + /** + * The tranparency of the .blendDst. Default is null. + */ + blendDstAlpha: number | null; + + /** + * Blending equation to use when applying blending. It's one of the constants defined in Three.js. Default is {@link AddEquation}. + */ + blendEquation: BlendingEquation; + + /** + * The tranparency of the .blendEquation. Default is null. + */ + blendEquationAlpha: number | null; + + /** + * Which blending to use when displaying objects with this material. Default is {@link NormalBlending}. + */ + blending: Blending; + + /** + * Blending source. It's one of the blending mode constants defined in Three.js. Default is {@link SrcAlphaFactor}. + */ + blendSrc: BlendingSrcFactor | BlendingDstFactor; + + /** + * The tranparency of the .blendSrc. Default is null. + */ + blendSrcAlpha: number | null; + + /** + * Changes the behavior of clipping planes so that only their intersection is clipped, rather than their union. Default is false. + */ + clipIntersection: boolean; + + /** + * User-defined clipping planes specified as THREE.Plane objects in world space. These planes apply to the objects this material is attached to. Points in space whose signed distance to the plane is negative are clipped (not rendered). See the WebGL / clipping /intersection example. Default is null. + */ + clippingPlanes: any; + + /** + * Defines whether to clip shadows according to the clipping planes specified on this material. Default is false. + */ + clipShadows: boolean; + + /** + * Whether to render the material's color. This can be used in conjunction with a mesh's .renderOrder property to create invisible objects that occlude other objects. Default is true. + */ + colorWrite: boolean; + + /** + * Which depth function to use. Default is {@link LessEqualDepth}. See the depth mode constants for all possible values. + */ + depthFunc: DepthModes; + + /** + * Whether to have depth test enabled when rendering this material. Default is true. + */ + depthTest: boolean; + + /** + * Whether rendering this material has any effect on the depth buffer. Default is true. + * When drawing 2D overlays it can be useful to disable the depth writing in order to layer several things together without creating z-index artifacts. + */ + depthWrite: boolean; + + /** + * Whether the material is affected by fog. Default is true. + */ + fog: boolean; + + /** + * Unique number of this material instance. + */ + id: number; + + /** + * Whether rendering this material has any effect on the stencil buffer. Default is *false*. + */ + stencilWrite: boolean; + + /** + * The stencil comparison function to use. Default is {@link AlwaysStencilFunc}. See stencil operation constants for all possible values. + */ + stencilFunc: StencilFunc; + + /** + * The value to use when performing stencil comparisons or stencil operations. Default is *0*. + */ + stencilRef: number; + + /** + * The bit mask to use when comparing against or writing to the stencil buffer. Default is *0xFF*. + */ + stencilMask: number; + + /** + * Which stencil operation to perform when the comparison function returns false. Default is {@link KeepStencilOp}. See the stencil operation constants for all possible values. + */ + stencilFail: StencilOp; + + /** + * Which stencil operation to perform when the comparison function returns true but the depth test fails. Default is {@link KeepStencilOp}. See the stencil operation constants for all possible values. + */ + stencilZFail: StencilOp; + + /** + * Which stencil operation to perform when the comparison function returns true and the depth test passes. Default is {@link KeepStencilOp}. See the stencil operation constants for all possible values. + */ + stencilZPass: StencilOp; + + /** + * Used to check whether this or derived classes are materials. Default is true. + * You should not change this, as it used internally for optimisation. + */ + isMaterial: boolean; + + /** + * Material name. Default is an empty string. + */ + name: string; + + /** + * Specifies that the material needs to be updated, WebGL wise. Set it to true if you made changes that need to be reflected in WebGL. + * This property is automatically set to true when instancing a new material. + */ + needsUpdate: boolean; + + /** + * Opacity. Default is 1. + */ + opacity: number; + + /** + * Whether to use polygon offset. Default is false. This corresponds to the POLYGON_OFFSET_FILL WebGL feature. + */ + polygonOffset: boolean; + + /** + * Sets the polygon offset factor. Default is 0. + */ + polygonOffsetFactor: number; + + /** + * Sets the polygon offset units. Default is 0. + */ + polygonOffsetUnits: number; + + /** + * Override the renderer's default precision for this material. Can be "highp", "mediump" or "lowp". Defaults is null. + */ + precision: 'highp' | 'mediump' | 'lowp' | null; + + /** + * Whether to premultiply the alpha (transparency) value. See WebGL / Materials / Transparency for an example of the difference. Default is false. + */ + premultipliedAlpha: boolean; + + /** + * Whether to apply dithering to the color to remove the appearance of banding. Default is false. + */ + dithering: boolean; + + /** + * Define whether the material is rendered with flat shading. Default is false. + */ + flatShading: boolean; + + /** + * Defines which of the face sides will be rendered - front, back or both. + * Default is THREE.FrontSide. Other options are THREE.BackSide and THREE.DoubleSide. + */ + side: Side; + + /** + * Defines whether this material is tone mapped according to the renderer's toneMapping setting. + * Default is true. + */ + toneMapped: boolean; + + /** + * Defines whether this material is transparent. This has an effect on rendering as transparent objects need special treatment and are rendered after non-transparent objects. + * When set to true, the extent to which the material is transparent is controlled by setting it's .opacity property. + * Default is false. + */ + transparent: boolean; + + /** + * Value is the string 'Material'. This shouldn't be changed, and can be used to find all objects of this type in a scene. + */ + type: string; + + /** + * UUID of this material instance. This gets automatically assigned, so this shouldn't be edited. + */ + uuid: string; + + /** + * Defines whether vertex coloring is used. Default is THREE.NoColors. Other options are THREE.VertexColors and THREE.FaceColors. + */ + vertexColors: Colors; + + /** + * Defines whether precomputed vertex tangents are used. Default is false. + */ + vertexTangents: boolean; + + /** + * Defines whether this material is visible. Default is true. + */ + visible: boolean; + + /** + * An object that can be used to store custom data about the Material. It should not hold references to functions as these will not be cloned. + */ + userData: any; + + /** + * This starts at 0 and counts how many times .needsUpdate is set to true. + */ + version: number; + + /** + * Return a new material with the same parameters as this material. + */ + clone(): this; + + /** + * Copy the parameters from the passed material into this material. + * @param material + */ + copy( material: Material ): this; + + /** + * This disposes the material. Textures of a material don't get disposed. These needs to be disposed by {@link Texture}. + */ + dispose(): void; + + /** + * An optional callback that is executed immediately before the shader program is compiled. This function is called with the shader source code as a parameter. Useful for the modification of built-in materials. + * @param shader Source code of the shader + * @param renderer WebGLRenderer Context that is initializing the material + */ + onBeforeCompile ( shader : Shader, renderer : WebGLRenderer ) : void; + + /** + * Sets the properties based on the values. + * @param values A container with parameters. + */ + setValues( values: MaterialParameters ): void; + + /** + * Convert the material to three.js JSON format. + * @param meta Object containing metadata such as textures or images for the material. + */ + toJSON( meta?: any ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/Materials.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/Materials.d.ts new file mode 100755 index 0000000..ff7faa9 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/Materials.d.ts @@ -0,0 +1,18 @@ +export * from './ShadowMaterial'; +export * from './SpriteMaterial'; +export * from './RawShaderMaterial'; +export * from './ShaderMaterial'; +export * from './PointsMaterial'; +export * from './MeshPhysicalMaterial'; +export * from './MeshStandardMaterial'; +export * from './MeshPhongMaterial'; +export * from './MeshToonMaterial'; +export * from './MeshNormalMaterial'; +export * from './MeshLambertMaterial'; +export * from './MeshDepthMaterial'; +export * from './MeshDistanceMaterial'; +export * from './MeshBasicMaterial'; +export * from './MeshMatcapMaterial'; +export * from './LineDashedMaterial'; +export * from './LineBasicMaterial'; +export * from './Material'; diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshBasicMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshBasicMaterial.d.ts new file mode 100755 index 0000000..c7622d6 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshBasicMaterial.d.ts @@ -0,0 +1,51 @@ +import { Color } from './../math/Color'; +import { Texture } from './../textures/Texture'; +import { MaterialParameters, Material } from './Material'; +import { Combine } from '../constants'; +/** + * parameters is an object with one or more properties defining the material's appearance. + */ +export interface MeshBasicMaterialParameters extends MaterialParameters { + color?: Color | string | number; + opacity?: number; + map?: Texture | null; + aoMap?: Texture | null; + aoMapIntensity?: number; + specularMap?: Texture | null; + alphaMap?: Texture | null; + envMap?: Texture | null; + combine?: Combine; + reflectivity?: number; + refractionRatio?: number; + wireframe?: boolean; + wireframeLinewidth?: number; + wireframeLinecap?: string; + wireframeLinejoin?: string; + skinning?: boolean; + morphTargets?: boolean; +} + +export class MeshBasicMaterial extends Material { + + constructor( parameters?: MeshBasicMaterialParameters ); + + color: Color; + map: Texture | null; + aoMap: Texture | null; + aoMapIntensity: number; + specularMap: Texture | null; + alphaMap: Texture | null; + envMap: Texture | null; + combine: Combine; + reflectivity: number; + refractionRatio: number; + wireframe: boolean; + wireframeLinewidth: number; + wireframeLinecap: string; + wireframeLinejoin: string; + skinning: boolean; + morphTargets: boolean; + + setValues( parameters: MeshBasicMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshDepthMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshDepthMaterial.d.ts new file mode 100755 index 0000000..3609b91 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshDepthMaterial.d.ts @@ -0,0 +1,29 @@ +import { DepthPackingStrategies } from '../constants'; +import { MaterialParameters, Material } from './Material'; +import { Texture } from './../textures/Texture'; + +export interface MeshDepthMaterialParameters extends MaterialParameters { + alphaMap?: Texture | null; + depthPacking?: DepthPackingStrategies; + displacementMap?: Texture | null; + displacementScale?: number; + displacementBias?: number; + wireframe?: boolean; + wireframeLinewidth?: number; +} + +export class MeshDepthMaterial extends Material { + + constructor( parameters?: MeshDepthMaterialParameters ); + + alphaMap: Texture | null; + depthPacking: DepthPackingStrategies; + displacementMap: Texture | null; + displacementScale: number; + displacementBias: number; + wireframe: boolean; + wireframeLinewidth: number; + + setValues( parameters: MeshDepthMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshDistanceMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshDistanceMaterial.d.ts new file mode 100755 index 0000000..54a3265 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshDistanceMaterial.d.ts @@ -0,0 +1,29 @@ +import { MaterialParameters, Material } from './Material'; +import { Vector3 } from './../math/Vector3'; +import { Texture } from './../textures/Texture'; + +export interface MeshDistanceMaterialParameters extends MaterialParameters { + alphaMap?: Texture | null; + displacementMap?: Texture | null; + displacementScale?: number; + displacementBias?: number; + farDistance?: number; + nearDistance?: number; + referencePosition?: Vector3; +} + +export class MeshDistanceMaterial extends Material { + + constructor( parameters?: MeshDistanceMaterialParameters ); + + alphaMap: Texture | null; + displacementMap: Texture | null; + displacementScale: number; + displacementBias: number; + farDistance: number; + nearDistance: number; + referencePosition: Vector3; + + setValues( parameters: MeshDistanceMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshLambertMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshLambertMaterial.d.ts new file mode 100755 index 0000000..787c578 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshLambertMaterial.d.ts @@ -0,0 +1,60 @@ +import { Color } from './../math/Color'; +import { Texture } from './../textures/Texture'; +import { MaterialParameters, Material } from './Material'; +import { Combine } from '../constants'; + +export interface MeshLambertMaterialParameters extends MaterialParameters { + color?: Color | string | number; + emissive?: Color | string | number; + emissiveIntensity?: number; + emissiveMap?: Texture | null; + map?: Texture | null; + lightMap?: Texture | null; + lightMapIntensity?: number; + aoMap?: Texture | null; + aoMapIntensity?: number; + specularMap?: Texture | null; + alphaMap?: Texture | null; + envMap?: Texture | null; + combine?: Combine; + reflectivity?: number; + refractionRatio?: number; + wireframe?: boolean; + wireframeLinewidth?: number; + wireframeLinecap?: string; + wireframeLinejoin?: string; + skinning?: boolean; + morphTargets?: boolean; + morphNormals?: boolean; +} + +export class MeshLambertMaterial extends Material { + + constructor( parameters?: MeshLambertMaterialParameters ); + + color: Color; + emissive: Color; + emissiveIntensity: number; + emissiveMap: Texture | null; + map: Texture | null; + lightMap: Texture | null; + lightMapIntensity: number; + aoMap: Texture | null; + aoMapIntensity: number; + specularMap: Texture | null; + alphaMap: Texture | null; + envMap: Texture | null; + combine: Combine; + reflectivity: number; + refractionRatio: number; + wireframe: boolean; + wireframeLinewidth: number; + wireframeLinecap: string; + wireframeLinejoin: string; + skinning: boolean; + morphTargets: boolean; + morphNormals: boolean; + + setValues( parameters: MeshLambertMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshMatcapMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshMatcapMaterial.d.ts new file mode 100755 index 0000000..c542635 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshMatcapMaterial.d.ts @@ -0,0 +1,48 @@ +import { Color } from './../math/Color'; +import { Texture } from './../textures/Texture'; +import { Vector2 } from './../math/Vector2'; +import { MaterialParameters, Material } from './Material'; +import { NormalMapTypes } from '../constants'; + +export interface MeshMatcapMaterialParameters extends MaterialParameters { + + color?: Color | string | number; + matcap?: Texture | null; + map?: Texture | null; + bumpMap?: Texture | null; + bumpScale?: number; + normalMap?: Texture | null; + normalMapType?: NormalMapTypes; + normalScale?: Vector2; + displacementMap?: Texture | null; + displacementScale?: number; + displacementBias?: number; + alphaMap?: Texture | null; + skinning?: boolean; + morphTargets?: boolean; + morphNormals?: boolean; +} + +export class MeshMatcapMaterial extends Material { + + constructor( parameters?: MeshMatcapMaterialParameters ); + + color: Color; + matcap: Texture | null; + map: Texture | null; + bumpMap: Texture | null; + bumpScale: number; + normalMap: Texture | null; + normalMapType: NormalMapTypes; + normalScale: Vector2; + displacementMap: Texture | null; + displacementScale: number; + displacementBias: number; + alphaMap: Texture | null; + skinning: boolean; + morphTargets: boolean; + morphNormals: boolean; + + setValues( parameters: MeshMatcapMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshNormalMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshNormalMaterial.d.ts new file mode 100755 index 0000000..965240c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshNormalMaterial.d.ts @@ -0,0 +1,43 @@ +import { MaterialParameters, Material } from './Material'; +import { Texture } from './../textures/Texture'; +import { Vector2 } from './../math/Vector2'; +import { NormalMapTypes } from '../constants'; + +export interface MeshNormalMaterialParameters extends MaterialParameters { + + bumpMap?: Texture | null; + bumpScale?: number; + normalMap?: Texture | null; + normalMapType?: NormalMapTypes; + normalScale?: Vector2; + displacementMap?: Texture | null; + displacementScale?: number; + displacementBias?: number; + wireframe?: boolean; + wireframeLinewidth?: number; + skinning?: boolean; + morphTargets?: boolean; + morphNormals?: boolean; +} + +export class MeshNormalMaterial extends Material { + + constructor( parameters?: MeshNormalMaterialParameters ); + + bumpMap: Texture | null; + bumpScale: number; + normalMap: Texture | null; + normalMapType: NormalMapTypes; + normalScale: Vector2; + displacementMap: Texture | null; + displacementScale: number; + displacementBias: number; + wireframe: boolean; + wireframeLinewidth: number; + skinning: boolean; + morphTargets: boolean; + morphNormals: boolean; + + setValues( parameters: MeshNormalMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshPhongMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshPhongMaterial.d.ts new file mode 100755 index 0000000..afbda64 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshPhongMaterial.d.ts @@ -0,0 +1,87 @@ +import { Color } from './../math/Color'; +import { Texture } from './../textures/Texture'; +import { Vector2 } from './../math/Vector2'; +import { MaterialParameters, Material } from './Material'; +import { Combine, NormalMapTypes } from '../constants'; + +export interface MeshPhongMaterialParameters extends MaterialParameters { + /** geometry color in hexadecimal. Default is 0xffffff. */ + color?: Color | string | number; + specular?: Color | string | number; + shininess?: number; + opacity?: number; + map?: Texture | null; + lightMap?: Texture | null; + lightMapIntensity?: number; + aoMap?: Texture | null; + aoMapIntensity?: number; + emissive?: Color | string | number; + emissiveIntensity?: number; + emissiveMap?: Texture | null; + bumpMap?: Texture | null; + bumpScale?: number; + normalMap?: Texture | null; + normalMapType?: NormalMapTypes; + normalScale?: Vector2; + displacementMap?: Texture | null; + displacementScale?: number; + displacementBias?: number; + specularMap?: Texture | null; + alphaMap?: Texture | null; + envMap?: Texture | null; + combine?: Combine; + reflectivity?: number; + refractionRatio?: number; + wireframe?: boolean; + wireframeLinewidth?: number; + wireframeLinecap?: string; + wireframeLinejoin?: string; + skinning?: boolean; + morphTargets?: boolean; + morphNormals?: boolean; +} + +export class MeshPhongMaterial extends Material { + + constructor( parameters?: MeshPhongMaterialParameters ); + + color: Color; + specular: Color; + shininess: number; + map: Texture | null; + lightMap: Texture | null; + lightMapIntensity: number; + aoMap: Texture | null; + aoMapIntensity: number; + emissive: Color; + emissiveIntensity: number; + emissiveMap: Texture | null; + bumpMap: Texture | null; + bumpScale: number; + normalMap: Texture | null; + normalMapType: NormalMapTypes; + normalScale: Vector2; + displacementMap: Texture | null; + displacementScale: number; + displacementBias: number; + specularMap: Texture | null; + alphaMap: Texture | null; + envMap: Texture | null; + combine: Combine; + reflectivity: number; + refractionRatio: number; + wireframe: boolean; + wireframeLinewidth: number; + wireframeLinecap: string; + wireframeLinejoin: string; + skinning: boolean; + morphTargets: boolean; + morphNormals: boolean; + /** + * @deprecated Use {@link MeshStandardMaterial THREE.MeshStandardMaterial} instead. + */ + metal: boolean; + + setValues( parameters: MeshPhongMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshPhysicalMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshPhysicalMaterial.d.ts new file mode 100755 index 0000000..50aa34c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshPhysicalMaterial.d.ts @@ -0,0 +1,35 @@ +import { Texture } from './../textures/Texture'; +import { Vector2 } from './../math/Vector2'; +import { + MeshStandardMaterialParameters, + MeshStandardMaterial, +} from './MeshStandardMaterial'; +import { Color } from './../math/Color'; + +export interface MeshPhysicalMaterialParameters + extends MeshStandardMaterialParameters { + reflectivity?: number; + clearcoat?: number; + clearcoatRoughness?: number; + + sheen?: Color; + + clearcoatNormalScale?: Vector2; + clearcoatNormalMap?: Texture | null; +} + +export class MeshPhysicalMaterial extends MeshStandardMaterial { + + constructor( parameters: MeshPhysicalMaterialParameters ); + + defines: any; + reflectivity: number; + clearcoat: number; + clearcoatRoughness: number; + + sheen: Color | null; + + clearcoatNormalScale: Vector2; + clearcoatNormalMap: Texture | null; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshStandardMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshStandardMaterial.d.ts new file mode 100755 index 0000000..53aef82 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshStandardMaterial.d.ts @@ -0,0 +1,78 @@ +import { Color } from './../math/Color'; +import { Texture } from './../textures/Texture'; +import { Vector2 } from './../math/Vector2'; +import { MaterialParameters, Material } from './Material'; +import { NormalMapTypes } from '../constants'; + +export interface MeshStandardMaterialParameters extends MaterialParameters { + color?: Color | string | number; + roughness?: number; + metalness?: number; + map?: Texture | null; + lightMap?: Texture | null; + lightMapIntensity?: number; + aoMap?: Texture | null; + aoMapIntensity?: number; + emissive?: Color | string | number; + emissiveIntensity?: number; + emissiveMap?: Texture | null; + bumpMap?: Texture | null; + bumpScale?: number; + normalMap?: Texture | null; + normalMapType?: NormalMapTypes; + normalScale?: Vector2; + displacementMap?: Texture | null; + displacementScale?: number; + displacementBias?: number; + roughnessMap?: Texture | null; + metalnessMap?: Texture | null; + alphaMap?: Texture | null; + envMap?: Texture | null; + envMapIntensity?: number; + refractionRatio?: number; + wireframe?: boolean; + wireframeLinewidth?: number; + skinning?: boolean; + morphTargets?: boolean; + morphNormals?: boolean; +} + +export class MeshStandardMaterial extends Material { + + constructor( parameters?: MeshStandardMaterialParameters ); + + defines: any; + color: Color; + roughness: number; + metalness: number; + map: Texture | null; + lightMap: Texture | null; + lightMapIntensity: number; + aoMap: Texture | null; + aoMapIntensity: number; + emissive: Color; + emissiveIntensity: number; + emissiveMap: Texture | null; + bumpMap: Texture | null; + bumpScale: number; + normalMap: Texture | null; + normalMapType: NormalMapTypes; + normalScale: Vector2; + displacementMap: Texture | null; + displacementScale: number; + displacementBias: number; + roughnessMap: Texture | null; + metalnessMap: Texture | null; + alphaMap: Texture | null; + envMap: Texture | null; + envMapIntensity: number; + refractionRatio: number; + wireframe: boolean; + wireframeLinewidth: number; + skinning: boolean; + morphTargets: boolean; + morphNormals: boolean; + + setValues( parameters: MeshStandardMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshToonMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshToonMaterial.d.ts new file mode 100755 index 0000000..6b7192a --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/MeshToonMaterial.d.ts @@ -0,0 +1,16 @@ +import { Texture } from './../textures/Texture'; +import { MeshPhongMaterialParameters, MeshPhongMaterial } from './MeshPhongMaterial'; + +export interface MeshToonMaterialParameters extends MeshPhongMaterialParameters { + gradientMap?: Texture | null; +} + +export class MeshToonMaterial extends MeshPhongMaterial { + + constructor( parameters?: MeshToonMaterialParameters ); + + gradientMap: Texture | null; + + setValues( parameters: MeshToonMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/PointsMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/PointsMaterial.d.ts new file mode 100755 index 0000000..dc01327 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/PointsMaterial.d.ts @@ -0,0 +1,46 @@ +import { Material, MaterialParameters } from './Material'; +import { Color } from './../math/Color'; +import { Texture } from './../textures/Texture'; + +// MultiMaterial does not inherit the Material class in the original code. However, it should treat as Material class. +// See tests/canvas/canvas_materials.ts. +/** + * @deprecated Use an Array instead. + */ +export class MultiMaterial extends Material { + + constructor( materials?: Material[] ); + + isMultiMaterial: true; + + materials: Material[]; + + toJSON( meta: any ): any; + +} + +/** + * @deprecated Use {@link MultiMaterial} instead. + */ + +export interface PointsMaterialParameters extends MaterialParameters { + color?: Color | string | number; + map?: Texture | null; + alphaMap?: Texture | null; + size?: number; + sizeAttenuation?: boolean; +} + +export class PointsMaterial extends Material { + + constructor( parameters?: PointsMaterialParameters ); + + color: Color; + map: Texture | null; + alphaMap: Texture | null; + size: number; + sizeAttenuation: boolean; + + setValues( parameters: PointsMaterialParameters ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/RawShaderMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/RawShaderMaterial.d.ts new file mode 100755 index 0000000..24a2791 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/RawShaderMaterial.d.ts @@ -0,0 +1,7 @@ +import { ShaderMaterialParameters, ShaderMaterial } from './ShaderMaterial'; + +export class RawShaderMaterial extends ShaderMaterial { + + constructor( parameters?: ShaderMaterialParameters ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/ShaderMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/ShaderMaterial.d.ts new file mode 100755 index 0000000..1e8c0ca --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/ShaderMaterial.d.ts @@ -0,0 +1,67 @@ +import { IUniform } from '../renderers/shaders/UniformsLib'; +import { MaterialParameters, Material } from './Material'; + +/** + * @deprecated Use {@link PointsMaterial THREE.PointsMaterial} instead + */ +/** + * @deprecated Use {@link PointsMaterial THREE.PointsMaterial} instead + */ +/** + * @deprecated Use {@link PointsMaterial THREE.PointsMaterial} instead + */ + +export interface ShaderMaterialParameters extends MaterialParameters { + defines?: any; + uniforms?: any; + vertexShader?: string; + fragmentShader?: string; + linewidth?: number; + wireframe?: boolean; + wireframeLinewidth?: number; + lights?: boolean; + clipping?: boolean; + skinning?: boolean; + morphTargets?: boolean; + morphNormals?: boolean; + extensions?: { + derivatives?: boolean; + fragDepth?: boolean; + drawBuffers?: boolean; + shaderTextureLOD?: boolean; + }; +} + +export class ShaderMaterial extends Material { + + constructor( parameters?: ShaderMaterialParameters ); + + defines: any; + uniforms: { [uniform: string]: IUniform }; + vertexShader: string; + fragmentShader: string; + linewidth: number; + wireframe: boolean; + wireframeLinewidth: number; + lights: boolean; + clipping: boolean; + skinning: boolean; + morphTargets: boolean; + morphNormals: boolean; + /** + * @deprecated Use {@link ShaderMaterial#extensions.derivatives extensions.derivatives} instead. + */ + derivatives: any; + extensions: { + derivatives: boolean; + fragDepth: boolean; + drawBuffers: boolean; + shaderTextureLOD: boolean; + }; + defaultAttributeValues: any; + index0AttributeName: string | undefined; + + setValues( parameters: ShaderMaterialParameters ): void; + toJSON( meta: any ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/ShadowMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/ShadowMaterial.d.ts new file mode 100755 index 0000000..8096ba9 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/ShadowMaterial.d.ts @@ -0,0 +1,14 @@ +import { Color } from './../math/Color'; +import { MaterialParameters, Material } from './Material'; + +export interface ShadowMaterialParameters extends MaterialParameters { + color?: Color | string | number; +} + +export class ShadowMaterial extends Material { + + constructor( parameters?: ShadowMaterialParameters ); + + color: Color; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/SpriteMaterial.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/SpriteMaterial.d.ts new file mode 100755 index 0000000..74416db --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/materials/SpriteMaterial.d.ts @@ -0,0 +1,27 @@ +import { Color } from './../math/Color'; +import { Texture } from './../textures/Texture'; +import { MaterialParameters, Material } from './Material'; + +export interface SpriteMaterialParameters extends MaterialParameters { + color?: Color | string | number; + map?: Texture | null; + alphaMap?: Texture | null; + rotation?: number; + sizeAttenuation?: boolean; +} + +export class SpriteMaterial extends Material { + + constructor( parameters?: SpriteMaterialParameters ); + + color: Color; + map: Texture | null; + alphaMap: Texture | null; + rotation: number; + sizeAttenuation: boolean; + isSpriteMaterial: true; + + setValues( parameters: SpriteMaterialParameters ): void; + copy( source: SpriteMaterial ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Box2.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Box2.d.ts new file mode 100755 index 0000000..49827ea --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Box2.d.ts @@ -0,0 +1,43 @@ +import { Vector2 } from './Vector2'; + +// Math ////////////////////////////////////////////////////////////////////////////////// + +export class Box2 { + + constructor( min?: Vector2, max?: Vector2 ); + + max: Vector2; + min: Vector2; + + set( min: Vector2, max: Vector2 ): Box2; + setFromPoints( points: Vector2[] ): Box2; + setFromCenterAndSize( center: Vector2, size: Vector2 ): Box2; + clone(): this; + copy( box: Box2 ): this; + makeEmpty(): Box2; + isEmpty(): boolean; + getCenter( target: Vector2 ): Vector2; + getSize( target: Vector2 ): Vector2; + expandByPoint( point: Vector2 ): Box2; + expandByVector( vector: Vector2 ): Box2; + expandByScalar( scalar: number ): Box2; + containsPoint( point: Vector2 ): boolean; + containsBox( box: Box2 ): boolean; + getParameter( point: Vector2 ): Vector2; + intersectsBox( box: Box2 ): boolean; + clampPoint( point: Vector2, target: Vector2 ): Vector2; + distanceToPoint( point: Vector2 ): number; + intersect( box: Box2 ): Box2; + union( box: Box2 ): Box2; + translate( offset: Vector2 ): Box2; + equals( box: Box2 ): boolean; + /** + * @deprecated Use {@link Box2#isEmpty .isEmpty()} instead. + */ + empty(): any; + /** + * @deprecated Use {@link Box2#intersectsBox .intersectsBox()} instead. + */ + isIntersectionBox( b: any ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Box3.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Box3.d.ts new file mode 100755 index 0000000..69008e6 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Box3.d.ts @@ -0,0 +1,58 @@ +import { Vector3 } from './Vector3'; +import { Object3D } from './../core/Object3D'; +import { Sphere } from './Sphere'; +import { Plane } from './Plane'; +import { Matrix4 } from './Matrix4'; +import { Triangle } from './Triangle'; + +export class Box3 { + + constructor( min?: Vector3, max?: Vector3 ); + + max: Vector3; + min: Vector3; + + set( min: Vector3, max: Vector3 ): this; + setFromArray( array: ArrayLike ): this; + setFromPoints( points: Vector3[] ): this; + setFromCenterAndSize( center: Vector3, size: Vector3 ): this; + setFromObject( object: Object3D ): this; + clone(): this; + copy( box: Box3 ): this; + makeEmpty(): this; + isEmpty(): boolean; + getCenter( target: Vector3 ): Vector3; + getSize( target: Vector3 ): Vector3; + expandByPoint( point: Vector3 ): this; + expandByVector( vector: Vector3 ): this; + expandByScalar( scalar: number ): this; + expandByObject( object: Object3D ): this; + containsPoint( point: Vector3 ): boolean; + containsBox( box: Box3 ): boolean; + getParameter( point: Vector3 ): Vector3; + intersectsBox( box: Box3 ): boolean; + intersectsSphere( sphere: Sphere ): boolean; + intersectsPlane( plane: Plane ): boolean; + intersectsTriangle( triangle: Triangle ): boolean; + clampPoint( point: Vector3, target: Vector3 ): Vector3; + distanceToPoint( point: Vector3 ): number; + getBoundingSphere( target: Sphere ): Sphere; + intersect( box: Box3 ): this; + union( box: Box3 ): this; + applyMatrix4( matrix: Matrix4 ): this; + translate( offset: Vector3 ): this; + equals( box: Box3 ): boolean; + /** + * @deprecated Use {@link Box3#isEmpty .isEmpty()} instead. + */ + empty(): any; + /** + * @deprecated Use {@link Box3#intersectsBox .intersectsBox()} instead. + */ + isIntersectionBox( b: any ): any; + /** + * @deprecated Use {@link Box3#intersectsSphere .intersectsSphere()} instead. + */ + isIntersectionSphere( s: any ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Color.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Color.d.ts new file mode 100755 index 0000000..17fb3c8 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Color.d.ts @@ -0,0 +1,198 @@ +/** + * @author Joe Pea / http://github.com/trusktr + */ + +export interface HSL { + h: number; + s: number; + l: number; +} + +/** + * Represents a color. See also {@link ColorUtils}. + * + * @example + * var color = new THREE.Color( 0xff0000 ); + * + * @see src/math/Color.js + */ +export class Color { + + constructor( color?: Color | string | number ); + constructor( r: number, g: number, b: number ); + + isColor: boolean; + + /** + * Red channel value between 0 and 1. Default is 1. + */ + r: number; + + /** + * Green channel value between 0 and 1. Default is 1. + */ + g: number; + + /** + * Blue channel value between 0 and 1. Default is 1. + */ + b: number; + + set( color: Color ): Color; + set( color: number ): Color; + set( color: string ): Color; + setScalar( scalar: number ): Color; + setHex( hex: number ): Color; + + /** + * Sets this color from RGB values. + * @param r Red channel value between 0 and 1. + * @param g Green channel value between 0 and 1. + * @param b Blue channel value between 0 and 1. + */ + setRGB( r: number, g: number, b: number ): Color; + + /** + * Sets this color from HSL values. + * Based on MochiKit implementation by Bob Ippolito. + * + * @param h Hue channel value between 0 and 1. + * @param s Saturation value channel between 0 and 1. + * @param l Value channel value between 0 and 1. + */ + setHSL( h: number, s: number, l: number ): Color; + + /** + * Sets this color from a CSS context style string. + * @param contextStyle Color in CSS context style format. + */ + setStyle( style: string ): Color; + + /** + * Sets this color from a color name. + * Faster than {@link Color#setStyle .setStyle()} method if you don't need the other CSS-style formats. + * @param style Color name in X11 format. + */ + setColorName( style: string ): Color; + + /** + * Clones this color. + */ + clone(): this; + + /** + * Copies given color. + * @param color Color to copy. + */ + copy( color: Color ): this; + + /** + * Copies given color making conversion from gamma to linear space. + * @param color Color to copy. + */ + copyGammaToLinear( color: Color, gammaFactor?: number ): Color; + + /** + * Copies given color making conversion from linear to gamma space. + * @param color Color to copy. + */ + copyLinearToGamma( color: Color, gammaFactor?: number ): Color; + + /** + * Converts this color from gamma to linear space. + */ + convertGammaToLinear( gammaFactor?: number ): Color; + + /** + * Converts this color from linear to gamma space. + */ + convertLinearToGamma( gammaFactor?: number ): Color; + + /** + * Copies given color making conversion from sRGB to linear space. + * @param color Color to copy. + */ + copySRGBToLinear( color: Color ): Color; + + /** + * Copies given color making conversion from linear to sRGB space. + * @param color Color to copy. + */ + copyLinearToSRGB( color: Color ): Color; + + /** + * Converts this color from sRGB to linear space. + */ + convertSRGBToLinear(): Color; + + /** + * Converts this color from linear to sRGB space. + */ + convertLinearToSRGB(): Color; + + /** + * Returns the hexadecimal value of this color. + */ + getHex(): number; + + /** + * Returns the string formated hexadecimal value of this color. + */ + getHexString(): string; + + getHSL( target: HSL ): HSL; + + /** + * Returns the value of this color in CSS context style. + * Example: rgb(r, g, b) + */ + getStyle(): string; + + offsetHSL( h: number, s: number, l: number ): this; + + add( color: Color ): this; + addColors( color1: Color, color2: Color ): this; + addScalar( s: number ): this; + sub( color: Color ): this; + multiply( color: Color ): this; + multiplyScalar( s: number ): this; + lerp( color: Color, alpha: number ): this; + lerpHSL( color: Color, alpha: number ): this; + equals( color: Color ): boolean; + + /** + * Sets this color's red, green and blue value from the provided array. + * @param array the source array. + * @param offset (optional) offset into the array. Default is 0. + */ + fromArray( array: number[], offset?: number ): this; + + /** + * Sets this color's red, green and blue value from the provided array-like. + * @param array the source array-like. + * @param offset (optional) offset into the array-like. Default is 0. + */ + fromArray( array: ArrayLike, offset?: number ): this; + + /** + * Returns an array [red, green, blue], or copies red, green and blue into the provided array. + * @param array (optional) array to store the color to. If this is not provided, a new array will be created. + * @param offset (optional) optional offset into the array. + * @return The created or provided array. + */ + toArray( array?: number[], offset?: number ): number[]; + + /** + * Copies red, green and blue into the provided array-like. + * @param array array-like to store the color to. + * @param offset (optional) optional offset into the array-like. + * @return The provided array-like. + */ + toArray( xyz: ArrayLike, offset?: number ): ArrayLike; + + /** + * List of X11 color names. + */ + static NAMES: Record; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Cylindrical.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Cylindrical.d.ts new file mode 100755 index 0000000..29fe511 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Cylindrical.d.ts @@ -0,0 +1,17 @@ +import { Vector3 } from './Vector3'; + +export class Cylindrical { + + constructor( radius?: number, theta?: number, y?: number ); + + radius: number; + theta: number; + y: number; + + clone(): this; + copy( other: Cylindrical ): this; + set( radius: number, theta: number, y: number ): this; + setFromVector3( vec3: Vector3 ): this; + setFromCartesianCoords( x: number, y: number, z: number ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Euler.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Euler.d.ts new file mode 100755 index 0000000..e8e1b87 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Euler.d.ts @@ -0,0 +1,31 @@ +import { Matrix4 } from './Matrix4'; +import { Quaternion } from './Quaternion'; +import { Vector3 } from './Vector3'; + +export class Euler { + + constructor( x?: number, y?: number, z?: number, order?: string ); + + x: number; + y: number; + z: number; + order: string; + _onChangeCallback: Function; + + set( x: number, y: number, z: number, order?: string ): Euler; + clone(): this; + copy( euler: Euler ): this; + setFromRotationMatrix( m: Matrix4, order?: string ): Euler; + setFromQuaternion( q: Quaternion, order?: string ): Euler; + setFromVector3( v: Vector3, order?: string ): Euler; + reorder( newOrder: string ): Euler; + equals( euler: Euler ): boolean; + fromArray( xyzo: any[] ): Euler; + toArray( array?: number[], offset?: number ): number[]; + toVector3( optionalResult?: Vector3 ): Vector3; + _onChange( callback: Function ): this; + + static RotationOrders: string[]; + static DefaultOrder: string; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Frustum.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Frustum.d.ts new file mode 100755 index 0000000..6689e1f --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Frustum.d.ts @@ -0,0 +1,45 @@ +import { Plane } from './Plane'; +import { Matrix4 } from './Matrix4'; +import { Object3D } from './../core/Object3D'; +import { Sprite } from './../objects/Sprite'; +import { Sphere } from './Sphere'; +import { Box3 } from './Box3'; +import { Vector3 } from './Vector3'; + +/** + * Frustums are used to determine what is inside the camera's field of view. They help speed up the rendering process. + */ +export class Frustum { + + constructor( + p0?: Plane, + p1?: Plane, + p2?: Plane, + p3?: Plane, + p4?: Plane, + p5?: Plane + ); + + /** + * Array of 6 vectors. + */ + planes: Plane[]; + + set( + p0?: number, + p1?: number, + p2?: number, + p3?: number, + p4?: number, + p5?: number + ): Frustum; + clone(): this; + copy( frustum: Frustum ): this; + setFromMatrix( m: Matrix4 ): Frustum; + intersectsObject( object: Object3D ): boolean; + intersectsSprite( sprite: Sprite ): boolean; + intersectsSphere( sphere: Sphere ): boolean; + intersectsBox( box: Box3 ): boolean; + containsPoint( point: Vector3 ): boolean; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Interpolant.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Interpolant.d.ts new file mode 100755 index 0000000..42b65e5 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Interpolant.d.ts @@ -0,0 +1,17 @@ +export abstract class Interpolant { + + constructor( + parameterPositions: any, + sampleValues: any, + sampleSize: number, + resultBuffer?: any + ); + + parameterPositions: any; + sampleValues: any; + valueSize: number; + resultBuffer: any; + + evaluate( time: number ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Line3.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Line3.d.ts new file mode 100755 index 0000000..f4b9b1c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Line3.d.ts @@ -0,0 +1,28 @@ +import { Vector3 } from './Vector3'; +import { Matrix4 } from './Matrix4'; + +export class Line3 { + + constructor( start?: Vector3, end?: Vector3 ); + + start: Vector3; + end: Vector3; + + set( start?: Vector3, end?: Vector3 ): Line3; + clone(): this; + copy( line: Line3 ): this; + getCenter( target: Vector3 ): Vector3; + delta( target: Vector3 ): Vector3; + distanceSq(): number; + distance(): number; + at( t: number, target: Vector3 ): Vector3; + closestPointToPointParameter( point: Vector3, clampToLine?: boolean ): number; + closestPointToPoint( + point: Vector3, + clampToLine: boolean, + target: Vector3 + ): Vector3; + applyMatrix4( matrix: Matrix4 ): Line3; + equals( line: Line3 ): boolean; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Math.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Math.d.ts new file mode 100755 index 0000000..23bbe8d --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Math.d.ts @@ -0,0 +1,95 @@ +/** + * + * @see src/math/Math.js + */ +export namespace _Math { + export const DEG2RAD: number; + export const RAD2DEG: number; + + export function generateUUID(): string; + + /** + * Clamps the x to be between a and b. + * + * @param value Value to be clamped. + * @param min Minimum value + * @param max Maximum value. + */ + export function clamp( value: number, min: number, max: number ): number; + export function euclideanModulo( n: number, m: number ): number; + + /** + * Linear mapping of x from range [a1, a2] to range [b1, b2]. + * + * @param x Value to be mapped. + * @param a1 Minimum value for range A. + * @param a2 Maximum value for range A. + * @param b1 Minimum value for range B. + * @param b2 Maximum value for range B. + */ + export function mapLinear( + x: number, + a1: number, + a2: number, + b1: number, + b2: number + ): number; + + export function smoothstep( x: number, min: number, max: number ): number; + + export function smootherstep( x: number, min: number, max: number ): number; + + /** + * Random float from 0 to 1 with 16 bits of randomness. + * Standard Math.random() creates repetitive patterns when applied over larger space. + * + * @deprecated Use {@link Math#random Math.random()} + */ + export function random16(): number; + + /** + * Random integer from low to high interval. + */ + export function randInt( low: number, high: number ): number; + + /** + * Random float from low to high interval. + */ + export function randFloat( low: number, high: number ): number; + + /** + * Random float from - range / 2 to range / 2 interval. + */ + export function randFloatSpread( range: number ): number; + + export function degToRad( degrees: number ): number; + + export function radToDeg( radians: number ): number; + + export function isPowerOfTwo( value: number ): boolean; + + /** + * Returns a value linearly interpolated from two known points based + * on the given interval - t = 0 will return x and t = 1 will return y. + * + * @param x Start point. + * @param y End point. + * @param t interpolation factor in the closed interval [0, 1] + * @return {number} + */ + export function lerp( x: number, y: number, t: number ): number; + + /** + * @deprecated Use {@link Math#floorPowerOfTwo .floorPowerOfTwo()} + */ + export function nearestPowerOfTwo( value: number ): number; + + /** + * @deprecated Use {@link Math#ceilPowerOfTwo .ceilPowerOfTwo()} + */ + export function nextPowerOfTwo( value: number ): number; + + export function floorPowerOfTwo( value: number ): number; + + export function ceilPowerOfTwo( value: number ): number; +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Matrix3.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Matrix3.d.ts new file mode 100755 index 0000000..9879dfe --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Matrix3.d.ts @@ -0,0 +1,172 @@ +import { Matrix4 } from './Matrix4'; +import { BufferAttribute } from './../core/BufferAttribute'; +import { Vector3 } from './Vector3'; + +/** + * ( interface Matrix<T> ) + */ +export interface Matrix { + /** + * Array with matrix values. + */ + elements: number[]; + + /** + * identity():T; + */ + identity(): Matrix; + + /** + * copy(m:T):T; + */ + copy( m: this ): this; + + /** + * multiplyScalar(s:number):T; + */ + multiplyScalar( s: number ): Matrix; + + determinant(): number; + + /** + * getInverse(matrix:T, throwOnInvertible?:boolean):T; + */ + getInverse( matrix: Matrix, throwOnInvertible?: boolean ): Matrix; + + /** + * transpose():T; + */ + transpose(): Matrix; + + /** + * clone():T; + */ + clone(): this; +} + +/** + * ( class Matrix3 implements Matrix<Matrix3> ) + */ +export class Matrix3 implements Matrix { + + /** + * Creates an identity matrix. + */ + constructor(); + + /** + * Array with matrix values. + */ + elements: number[]; + + set( + n11: number, + n12: number, + n13: number, + n21: number, + n22: number, + n23: number, + n31: number, + n32: number, + n33: number + ): Matrix3; + identity(): Matrix3; + clone(): this; + copy( m: Matrix3 ): this; + setFromMatrix4( m: Matrix4 ): Matrix3; + + /** + * @deprecated Use {@link Matrix3#applyToBufferAttribute matrix3.applyToBufferAttribute( attribute )} instead. + */ + applyToBuffer( + buffer: BufferAttribute, + offset?: number, + length?: number + ): BufferAttribute; + + applyToBufferAttribute( attribute: BufferAttribute ): BufferAttribute; + + multiplyScalar( s: number ): Matrix3; + determinant(): number; + getInverse( matrix: Matrix3, throwOnDegenerate?: boolean ): Matrix3; + + /** + * Transposes this matrix in place. + */ + transpose(): Matrix3; + getNormalMatrix( matrix4: Matrix4 ): Matrix3; + + /** + * Transposes this matrix into the supplied array r, and returns itself. + */ + transposeIntoArray( r: number[] ): number[]; + + setUvTransform( tx: number, ty: number, sx: number, sy: number, rotation: number, cx: number, cy: number ): Matrix3; + + scale( sx: number, sy: number ): Matrix3; + + rotate( theta: number ): Matrix3; + + translate( tx: number, ty: number ): Matrix3; + + equals( matrix: Matrix3 ): boolean; + + /** + * Sets the values of this matrix from the provided array. + * @param array the source array. + * @param offset (optional) offset into the array. Default is 0. + */ + fromArray( array: number[], offset?: number ): Matrix3; + + /** + * Sets the values of this matrix from the provided array-like. + * @param array the source array-like. + * @param offset (optional) offset into the array-like. Default is 0. + */ + fromArray( array: ArrayLike, offset?: number ): Matrix3; + + /** + * Returns an array with the values of this matrix, or copies them into the provided array. + * @param array (optional) array to store the matrix to. If this is not provided, a new array will be created. + * @param offset (optional) optional offset into the array. + * @return The created or provided array. + */ + toArray( array?: number[], offset?: number ): number[]; + + /** + * Copies he values of this matrix into the provided array-like. + * @param array array-like to store the matrix to. + * @param offset (optional) optional offset into the array-like. + * @return The provided array-like. + */ + toArray( array?: ArrayLike, offset?: number ): ArrayLike; + + /** + * Multiplies this matrix by m. + */ + multiply( m: Matrix3 ): Matrix3; + + premultiply( m: Matrix3 ): Matrix3; + + /** + * Sets this matrix to a x b. + */ + multiplyMatrices( a: Matrix3, b: Matrix3 ): Matrix3; + + /** + * @deprecated Use {@link Vector3.applyMatrix3 vector.applyMatrix3( matrix )} instead. + */ + multiplyVector3( vector: Vector3 ): any; + + /** + * @deprecated This method has been removed completely. + */ + multiplyVector3Array( a: any ): any; + getInverse( matrix: Matrix4, throwOnDegenerate?: boolean ): Matrix3; + + /** + * @deprecated Use {@link Matrix3#toArray .toArray()} instead. + */ + flattenToArrayOffset( array: number[], offset: number ): number[]; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Matrix4.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Matrix4.d.ts new file mode 100755 index 0000000..41dade6 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Matrix4.d.ts @@ -0,0 +1,300 @@ +import { Vector3 } from './Vector3'; +import { Euler } from './Euler'; +import { Quaternion } from './Quaternion'; +import { BufferAttribute } from './../core/BufferAttribute'; +import { Matrix } from './Matrix3'; +/** + * A 4x4 Matrix. + * + * @example + * // Simple rig for rotating around 3 axes + * var m = new THREE.Matrix4(); + * var m1 = new THREE.Matrix4(); + * var m2 = new THREE.Matrix4(); + * var m3 = new THREE.Matrix4(); + * var alpha = 0; + * var beta = Math.PI; + * var gamma = Math.PI/2; + * m1.makeRotationX( alpha ); + * m2.makeRotationY( beta ); + * m3.makeRotationZ( gamma ); + * m.multiplyMatrices( m1, m2 ); + * m.multiply( m3 ); + */ +export class Matrix4 implements Matrix { + + constructor(); + + /** + * Array with matrix values. + */ + elements: number[]; + + /** + * Sets all fields of this matrix. + */ + set( + n11: number, + n12: number, + n13: number, + n14: number, + n21: number, + n22: number, + n23: number, + n24: number, + n31: number, + n32: number, + n33: number, + n34: number, + n41: number, + n42: number, + n43: number, + n44: number + ): Matrix4; + + /** + * Resets this matrix to identity. + */ + identity(): Matrix4; + clone(): this; + copy( m: Matrix4 ): this; + copyPosition( m: Matrix4 ): Matrix4; + extractBasis( xAxis: Vector3, yAxis: Vector3, zAxis: Vector3 ): Matrix4; + makeBasis( xAxis: Vector3, yAxis: Vector3, zAxis: Vector3 ): Matrix4; + + /** + * Copies the rotation component of the supplied matrix m into this matrix rotation component. + */ + extractRotation( m: Matrix4 ): Matrix4; + makeRotationFromEuler( euler: Euler ): Matrix4; + makeRotationFromQuaternion( q: Quaternion ): Matrix4; + /** + * Constructs a rotation matrix, looking from eye towards center with defined up vector. + */ + lookAt( eye: Vector3, target: Vector3, up: Vector3 ): Matrix4; + + /** + * Multiplies this matrix by m. + */ + multiply( m: Matrix4 ): Matrix4; + + premultiply( m: Matrix4 ): Matrix4; + + /** + * Sets this matrix to a x b. + */ + multiplyMatrices( a: Matrix4, b: Matrix4 ): Matrix4; + + /** + * Sets this matrix to a x b and stores the result into the flat array r. + * r can be either a regular Array or a TypedArray. + * + * @deprecated This method has been removed completely. + */ + multiplyToArray( a: Matrix4, b: Matrix4, r: number[] ): Matrix4; + + /** + * Multiplies this matrix by s. + */ + multiplyScalar( s: number ): Matrix4; + + /** + * @deprecated Use {@link Matrix4#applyToBufferAttribute matrix4.applyToBufferAttribute( attribute )} instead. + */ + applyToBuffer( + buffer: BufferAttribute, + offset?: number, + length?: number + ): BufferAttribute; + + applyToBufferAttribute( attribute: BufferAttribute ): BufferAttribute; + + /** + * Computes determinant of this matrix. + * Based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm + */ + determinant(): number; + + /** + * Transposes this matrix. + */ + transpose(): Matrix4; + + /** + * Sets the position component for this matrix from vector v. + */ + setPosition( v: Vector3 | number, y?: number, z?: number ): Matrix4; + + /** + * Sets this matrix to the inverse of matrix m. + * Based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm. + */ + getInverse( m: Matrix4, throwOnDegeneratee?: boolean ): Matrix4; + + /** + * Multiplies the columns of this matrix by vector v. + */ + scale( v: Vector3 ): Matrix4; + + getMaxScaleOnAxis(): number; + /** + * Sets this matrix as translation transform. + */ + makeTranslation( x: number, y: number, z: number ): Matrix4; + + /** + * Sets this matrix as rotation transform around x axis by theta radians. + * + * @param theta Rotation angle in radians. + */ + makeRotationX( theta: number ): Matrix4; + + /** + * Sets this matrix as rotation transform around y axis by theta radians. + * + * @param theta Rotation angle in radians. + */ + makeRotationY( theta: number ): Matrix4; + + /** + * Sets this matrix as rotation transform around z axis by theta radians. + * + * @param theta Rotation angle in radians. + */ + makeRotationZ( theta: number ): Matrix4; + + /** + * Sets this matrix as rotation transform around axis by angle radians. + * Based on http://www.gamedev.net/reference/articles/article1199.asp. + * + * @param axis Rotation axis. + * @param theta Rotation angle in radians. + */ + makeRotationAxis( axis: Vector3, angle: number ): Matrix4; + + /** + * Sets this matrix as scale transform. + */ + makeScale( x: number, y: number, z: number ): Matrix4; + + /** + * Sets this matrix to the transformation composed of translation, rotation and scale. + */ + compose( translation: Vector3, rotation: Quaternion, scale: Vector3 ): Matrix4; + + /** + * Decomposes this matrix into the translation, rotation and scale components. + * If parameters are not passed, new instances will be created. + */ + decompose( + translation?: Vector3, + rotation?: Quaternion, + scale?: Vector3 + ): Object[]; // [Vector3, Quaternion, Vector3] + + /** + * Creates a frustum matrix. + */ + makePerspective( + left: number, + right: number, + bottom: number, + top: number, + near: number, + far: number + ): Matrix4; + + /** + * Creates a perspective projection matrix. + */ + makePerspective( + fov: number, + aspect: number, + near: number, + far: number + ): Matrix4; + + /** + * Creates an orthographic projection matrix. + */ + makeOrthographic( + left: number, + right: number, + top: number, + bottom: number, + near: number, + far: number + ): Matrix4; + equals( matrix: Matrix4 ): boolean; + + /** + * Sets the values of this matrix from the provided array. + * @param array the source array. + * @param offset (optional) offset into the array. Default is 0. + */ + fromArray( array: number[], offset?: number ): Matrix4; + + /** + * Sets the values of this matrix from the provided array-like. + * @param array the source array-like. + * @param offset (optional) offset into the array-like. Default is 0. + */ + fromArray( array: ArrayLike, offset?: number ): Matrix4; + + /** + * Returns an array with the values of this matrix, or copies them into the provided array. + * @param array (optional) array to store the matrix to. If this is not provided, a new array will be created. + * @param offset (optional) optional offset into the array. + * @return The created or provided array. + */ + toArray( array?: number[], offset?: number ): number[]; + + /** + * Copies he values of this matrix into the provided array-like. + * @param array array-like to store the matrix to. + * @param offset (optional) optional offset into the array-like. + * @return The provided array-like. + */ + toArray( array?: ArrayLike, offset?: number ): ArrayLike; + + /** + * @deprecated Use {@link Matrix4#copyPosition .copyPosition()} instead. + */ + extractPosition( m: Matrix4 ): Matrix4; + + /** + * @deprecated Use {@link Matrix4#makeRotationFromQuaternion .makeRotationFromQuaternion()} instead. + */ + setRotationFromQuaternion( q: Quaternion ): Matrix4; + + /** + * @deprecated Use {@link Vector3#applyMatrix4 vector.applyMatrix4( matrix )} instead. + */ + multiplyVector3( v: any ): any; + + /** + * @deprecated Use {@link Vector4#applyMatrix4 vector.applyMatrix4( matrix )} instead. + */ + multiplyVector4( v: any ): any; + + /** + * @deprecated This method has been removed completely. + */ + multiplyVector3Array( array: number[] ): number[]; + + /** + * @deprecated Use {@link Vector3#transformDirection Vector3.transformDirection( matrix )} instead. + */ + rotateAxis( v: any ): void; + + /** + * @deprecated Use {@link Vector3#applyMatrix4 vector.applyMatrix4( matrix )} instead. + */ + crossVector( v: any ): void; + + /** + * @deprecated Use {@link Matrix4#toArray .toArray()} instead. + */ + flattenToArrayOffset( array: number[], offset: number ): number[]; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Plane.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Plane.d.ts new file mode 100755 index 0000000..6bc428a --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Plane.d.ts @@ -0,0 +1,41 @@ +import { Vector3 } from './Vector3'; +import { Sphere } from './Sphere'; +import { Line3 } from './Line3'; +import { Box3 } from './Box3'; +import { Matrix4 } from './Matrix4'; +import { Matrix3 } from './Matrix3'; + +export class Plane { + + constructor( normal?: Vector3, constant?: number ); + + normal: Vector3; + constant: number; + + set( normal: Vector3, constant: number ): Plane; + setComponents( x: number, y: number, z: number, w: number ): Plane; + setFromNormalAndCoplanarPoint( normal: Vector3, point: Vector3 ): Plane; + setFromCoplanarPoints( a: Vector3, b: Vector3, c: Vector3 ): Plane; + clone(): this; + copy( plane: Plane ): this; + normalize(): Plane; + negate(): Plane; + distanceToPoint( point: Vector3 ): number; + distanceToSphere( sphere: Sphere ): number; + projectPoint( point: Vector3, target: Vector3 ): Vector3; + orthoPoint( point: Vector3, target: Vector3 ): Vector3; + intersectLine( line: Line3, target: Vector3 ): Vector3 | undefined; + intersectsLine( line: Line3 ): boolean; + intersectsBox( box: Box3 ): boolean; + intersectsSphere( sphere: Sphere ): boolean; + coplanarPoint( target: Vector3 ): Vector3; + applyMatrix4( matrix: Matrix4, optionalNormalMatrix?: Matrix3 ): Plane; + translate( offset: Vector3 ): Plane; + equals( plane: Plane ): boolean; + + /** + * @deprecated Use {@link Plane#intersectsLine .intersectsLine()} instead. + */ + isIntersectionLine( l: any ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Quaternion.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Quaternion.d.ts new file mode 100755 index 0000000..dba3b27 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Quaternion.d.ts @@ -0,0 +1,156 @@ +import { Euler } from './Euler'; +import { Vector3 } from './Vector3'; +import { Matrix4 } from './Matrix4'; + +/** + * Implementation of a quaternion. This is used for rotating things without incurring in the dreaded gimbal lock issue, amongst other advantages. + * + * @example + * var quaternion = new THREE.Quaternion(); + * quaternion.setFromAxisAngle( new THREE.Vector3( 0, 1, 0 ), Math.PI / 2 ); + * var vector = new THREE.Vector3( 1, 0, 0 ); + * vector.applyQuaternion( quaternion ); + */ +export class Quaternion { + + /** + * @param x x coordinate + * @param y y coordinate + * @param z z coordinate + * @param w w coordinate + */ + constructor( x?: number, y?: number, z?: number, w?: number ); + + x: number; + y: number; + z: number; + w: number; + + /** + * Sets values of this quaternion. + */ + set( x: number, y: number, z: number, w: number ): Quaternion; + + /** + * Clones this quaternion. + */ + clone(): this; + + /** + * Copies values of q to this quaternion. + */ + copy( q: Quaternion ): this; + + /** + * Sets this quaternion from rotation specified by Euler angles. + */ + setFromEuler( euler: Euler ): Quaternion; + + /** + * Sets this quaternion from rotation specified by axis and angle. + * Adapted from http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm. + * Axis have to be normalized, angle is in radians. + */ + setFromAxisAngle( axis: Vector3, angle: number ): Quaternion; + + /** + * Sets this quaternion from rotation component of m. Adapted from http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm. + */ + setFromRotationMatrix( m: Matrix4 ): Quaternion; + setFromUnitVectors( vFrom: Vector3, vTo: Vector3 ): Quaternion; + angleTo( q: Quaternion ): number; + rotateTowards( q: Quaternion, step: number ): Quaternion; + + /** + * Inverts this quaternion. + */ + inverse(): Quaternion; + + conjugate(): Quaternion; + dot( v: Quaternion ): number; + lengthSq(): number; + + /** + * Computes length of this quaternion. + */ + length(): number; + + /** + * Normalizes this quaternion. + */ + normalize(): Quaternion; + + /** + * Multiplies this quaternion by b. + */ + multiply( q: Quaternion ): Quaternion; + premultiply( q: Quaternion ): Quaternion; + + /** + * Sets this quaternion to a x b + * Adapted from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm. + */ + multiplyQuaternions( a: Quaternion, b: Quaternion ): Quaternion; + + slerp( qb: Quaternion, t: number ): Quaternion; + equals( v: Quaternion ): boolean; + + /** + * Sets this quaternion's x, y, z and w value from the provided array. + * @param array the source array. + * @param offset (optional) offset into the array. Default is 0. + */ + fromArray( array: number[], offset?: number ): this; + + /** + * Sets this quaternion's x, y, z and w value from the provided array-like. + * @param array the source array-like. + * @param offset (optional) offset into the array-like. Default is 0. + */ + fromArray( array: ArrayLike, offset?: number ): this; + + /** + * Returns an array [x, y, z, w], or copies x, y, z and w into the provided array. + * @param array (optional) array to store the quaternion to. If this is not provided, a new array will be created. + * @param offset (optional) optional offset into the array. + * @return The created or provided array. + */ + toArray( array?: number[], offset?: number ): number[]; + + /** + * Copies x, y, z and w into the provided array-like. + * @param array array-like to store the quaternion to. + * @param offset (optional) optional offset into the array. + * @return The provided array-like. + */ + toArray( array: ArrayLike, offset?: number ): ArrayLike; + + _onChange( callback: Function ): Quaternion; + _onChangeCallback: Function; + + /** + * Adapted from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/. + */ + static slerp( + qa: Quaternion, + qb: Quaternion, + qm: Quaternion, + t: number + ): Quaternion; + + static slerpFlat( + dst: number[], + dstOffset: number, + src0: number[], + srcOffset: number, + src1: number[], + stcOffset1: number, + t: number + ): Quaternion; + + /** + * @deprecated Use {@link Vector#applyQuaternion vector.applyQuaternion( quaternion )} instead. + */ + multiplyVector3( v: any ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Ray.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Ray.d.ts new file mode 100755 index 0000000..b8038fb --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Ray.d.ts @@ -0,0 +1,61 @@ +import { Vector3 } from './Vector3'; +import { Sphere } from './Sphere'; +import { Plane } from './Plane'; +import { Box3 } from './Box3'; +import { Matrix4 } from './Matrix4'; + +export class Ray { + + constructor( origin?: Vector3, direction?: Vector3 ); + + origin: Vector3; + direction: Vector3; + + set( origin: Vector3, direction: Vector3 ): Ray; + clone(): this; + copy( ray: Ray ): this; + at( t: number, target: Vector3 ): Vector3; + lookAt( v: Vector3 ): Vector3; + recast( t: number ): Ray; + closestPointToPoint( point: Vector3, target: Vector3 ): Vector3; + distanceToPoint( point: Vector3 ): number; + distanceSqToPoint( point: Vector3 ): number; + distanceSqToSegment( + v0: Vector3, + v1: Vector3, + optionalPointOnRay?: Vector3, + optionalPointOnSegment?: Vector3 + ): number; + intersectSphere( sphere: Sphere, target: Vector3 ): Vector3 | null; + intersectsSphere( sphere: Sphere ): boolean; + distanceToPlane( plane: Plane ): number; + intersectPlane( plane: Plane, target: Vector3 ): Vector3 | null; + intersectsPlane( plane: Plane ): boolean; + intersectBox( box: Box3, target: Vector3 ): Vector3 | null; + intersectsBox( box: Box3 ): boolean; + intersectTriangle( + a: Vector3, + b: Vector3, + c: Vector3, + backfaceCulling: boolean, + target: Vector3 + ): Vector3 | null; + applyMatrix4( matrix4: Matrix4 ): Ray; + equals( ray: Ray ): boolean; + + /** + * @deprecated Use {@link Ray#intersectsBox .intersectsBox()} instead. + */ + isIntersectionBox( b: any ): any; + + /** + * @deprecated Use {@link Ray#intersectsPlane .intersectsPlane()} instead. + */ + isIntersectionPlane( p: any ): any; + + /** + * @deprecated Use {@link Ray#intersectsSphere .intersectsSphere()} instead. + */ + isIntersectionSphere( s: any ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Sphere.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Sphere.d.ts new file mode 100755 index 0000000..cc6f4c7 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Sphere.d.ts @@ -0,0 +1,29 @@ +import { Vector3 } from './Vector3'; +import { Box3 } from './Box3'; +import { Plane } from './Plane'; +import { Matrix4 } from './Matrix4'; + +export class Sphere { + + constructor( center?: Vector3, radius?: number ); + + center: Vector3; + radius: number; + + set( center: Vector3, radius: number ): Sphere; + setFromPoints( points: Vector3[], optionalCenter?: Vector3 ): Sphere; + clone(): this; + copy( sphere: Sphere ): this; + empty(): boolean; + containsPoint( point: Vector3 ): boolean; + distanceToPoint( point: Vector3 ): number; + intersectsSphere( sphere: Sphere ): boolean; + intersectsBox( box: Box3 ): boolean; + intersectsPlane( plane: Plane ): boolean; + clampPoint( point: Vector3, target: Vector3 ): Vector3; + getBoundingBox( target: Box3 ): Box3; + applyMatrix4( matrix: Matrix4 ): Sphere; + translate( offset: Vector3 ): Sphere; + equals( sphere: Sphere ): boolean; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Spherical.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Spherical.d.ts new file mode 100755 index 0000000..b97afc0 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Spherical.d.ts @@ -0,0 +1,18 @@ +import { Vector3 } from './Vector3'; + +export class Spherical { + + constructor( radius?: number, phi?: number, theta?: number ); + + radius: number; + phi: number; + theta: number; + + set( radius: number, phi: number, theta: number ): this; + clone(): this; + copy( other: Spherical ): this; + makeSafe(): this; + setFromVector3( v: Vector3 ): this; + setFromCartesianCoords( x: number, y: number, z: number ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/SphericalHarmonics3.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/SphericalHarmonics3.d.ts new file mode 100755 index 0000000..f46f4e5 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/SphericalHarmonics3.d.ts @@ -0,0 +1,54 @@ +import { Vector3 } from './Vector3'; + +export class SphericalHarmonics3 { + + constructor(); + + coefficients: Vector3[]; + isSphericalHarmonics3: boolean; + + set ( coefficients: Vector3[] ): SphericalHarmonics3; + zero(): SphericalHarmonics3; + add( sh: SphericalHarmonics3 ): SphericalHarmonics3; + scale( s: number ): SphericalHarmonics3; + lerp( sh: SphericalHarmonics3, alpha: number ): SphericalHarmonics3; + equals( sh: SphericalHarmonics3 ): boolean; + copy( sh: SphericalHarmonics3 ): SphericalHarmonics3; + clone(): SphericalHarmonics3; + + /** + * Sets the values of this spherical harmonics from the provided array. + * @param array the source array. + * @param offset (optional) offset into the array. Default is 0. + */ + fromArray( array: number[], offset?: number ): this; + + /** + * Sets the values of this spherical harmonics from the provided array-like. + * @param array the source array-like. + * @param offset (optional) offset into the array-like. Default is 0. + */ + fromArray( array: ArrayLike, offset?: number ): this; + + /** + * Returns an array with the values of this spherical harmonics, or copies them into the provided array. + * @param array (optional) array to store the spherical harmonics to. If this is not provided, a new array will be created. + * @param offset (optional) optional offset into the array. + * @return The created or provided array. + */ + toArray( array?: number[], offset?: number ): number[]; + + /** + * Returns an array with the values of this spherical harmonics, or copies them into the provided array-like. + * @param array array-like to store the spherical harmonics to. + * @param offset (optional) optional offset into the array-like. + * @return The provided array-like. + */ + toArray( array: ArrayLike, offset?: number ): ArrayLike; + + getAt( normal: Vector3, target: Vector3 ) : Vector3; + getIrradianceAt( normal: Vector3, target: Vector3 ) : Vector3; + + static getBasisAt( normal: Vector3, shBasis: number[] ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Triangle.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Triangle.d.ts new file mode 100755 index 0000000..061a662 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Triangle.d.ts @@ -0,0 +1,77 @@ +import { Vector2 } from './Vector2'; +import { Vector3 } from './Vector3'; +import { Plane } from './Plane'; +import { Box3 } from './Box3'; + +export interface SplineControlPoint { + x: number; + y: number; + z: number; +} + +export class Triangle { + + constructor( a?: Vector3, b?: Vector3, c?: Vector3 ); + + a: Vector3; + b: Vector3; + c: Vector3; + + set( a: Vector3, b: Vector3, c: Vector3 ): Triangle; + setFromPointsAndIndices( + points: Vector3[], + i0: number, + i1: number, + i2: number + ): Triangle; + clone(): this; + copy( triangle: Triangle ): this; + getArea(): number; + getMidpoint( target: Vector3 ): Vector3; + getNormal( target: Vector3 ): Vector3; + getPlane( target: Plane ): Plane; + getBarycoord( point: Vector3, target: Vector3 ): Vector3; + getUV( point: Vector3, uv1: Vector2, uv2: Vector2, uv3: Vector2, target: Vector2 ): Vector2; + containsPoint( point: Vector3 ): boolean; + intersectsBox( box: Box3 ): boolean; + isFrontFacing( direction: Vector3 ): boolean; + closestPointToPoint( point: Vector3, target: Vector3 ): Vector3; + equals( triangle: Triangle ): boolean; + + static getNormal( + a: Vector3, + b: Vector3, + c: Vector3, + target: Vector3 + ): Vector3; + static getBarycoord( + point: Vector3, + a: Vector3, + b: Vector3, + c: Vector3, + target: Vector3 + ): Vector3; + static containsPoint( + point: Vector3, + a: Vector3, + b: Vector3, + c: Vector3 + ): boolean; + static getUV( + point: Vector3, + p1: Vector3, + p2: Vector3, + p3: Vector3, + uv1: Vector2, + uv2: Vector2, + uv3: Vector2, + target: Vector2 + ): Vector2; + static isFrontFacing( + a: Vector3, + b: Vector3, + c: Vector3, + direction: Vector3 + ): boolean; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Vector2.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Vector2.d.ts new file mode 100755 index 0000000..72d0eac --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Vector2.d.ts @@ -0,0 +1,462 @@ +import { Matrix3 } from './Matrix3'; +import { BufferAttribute } from './../core/BufferAttribute'; + +/** + * ( interface Vector<T> ) + * + * Abstract interface of Vector2, Vector3 and Vector4. + * Currently the members of Vector is NOT type safe because it accepts different typed vectors. + * Those definitions will be changed when TypeScript innovates Generics to be type safe. + * + * @example + * var v:THREE.Vector = new THREE.Vector3(); + * v.addVectors(new THREE.Vector2(0, 1), new THREE.Vector2(2, 3)); // invalid but compiled successfully + */ +export interface Vector { + setComponent( index: number, value: number ): this; + + getComponent( index: number ): number; + + set( ...args: number[] ): this; + + setScalar( scalar: number ): this; + + /** + * copy(v:T):T; + */ + copy( v: Vector ): this; + + /** + * NOTE: The second argument is deprecated. + * + * add(v:T):T; + */ + add( v: Vector, w?: Vector ): this; + + /** + * addVectors(a:T, b:T):T; + */ + addVectors( a: Vector, b: Vector ): this; + + addScaledVector( vector: Vector, scale: number ): this; + + /** + * Adds the scalar value s to this vector's values. + */ + addScalar( scalar: number ): this; + + /** + * sub(v:T):T; + */ + sub( v: Vector ): this; + + /** + * subVectors(a:T, b:T):T; + */ + subVectors( a: Vector, b: Vector ): this; + + /** + * multiplyScalar(s:number):T; + */ + multiplyScalar( s: number ): this; + + /** + * divideScalar(s:number):T; + */ + divideScalar( s: number ): this; + + /** + * negate():T; + */ + negate(): this; + + /** + * dot(v:T):T; + */ + dot( v: Vector ): number; + + /** + * lengthSq():number; + */ + lengthSq(): number; + + /** + * length():number; + */ + length(): number; + + /** + * normalize():T; + */ + normalize(): this; + + /** + * NOTE: Vector4 doesn't have the property. + * + * distanceTo(v:T):number; + */ + distanceTo?( v: Vector ): number; + + /** + * NOTE: Vector4 doesn't have the property. + * + * distanceToSquared(v:T):number; + */ + distanceToSquared?( v: Vector ): number; + + /** + * setLength(l:number):T; + */ + setLength( l: number ): this; + + /** + * lerp(v:T, alpha:number):T; + */ + lerp( v: Vector, alpha: number ): this; + + /** + * equals(v:T):boolean; + */ + equals( v: Vector ): boolean; + + /** + * clone():T; + */ + clone(): this; +} + +/** + * 2D vector. + * + * ( class Vector2 implements Vector ) + */ +export class Vector2 implements Vector { + + constructor( x?: number, y?: number ); + + x: number; + y: number; + width: number; + height: number; + isVector2: true; + + /** + * Sets value of this vector. + */ + set( x: number, y: number ): this; + + /** + * Sets the x and y values of this vector both equal to scalar. + */ + setScalar( scalar: number ): this; + + /** + * Sets X component of this vector. + */ + setX( x: number ): this; + + /** + * Sets Y component of this vector. + */ + setY( y: number ): this; + + /** + * Sets a component of this vector. + */ + setComponent( index: number, value: number ): this; + + /** + * Gets a component of this vector. + */ + getComponent( index: number ): number; + + /** + * Returns a new Vector2 instance with the same `x` and `y` values. + */ + clone(): this; + + /** + * Copies value of v to this vector. + */ + copy( v: Vector2 ): this; + + /** + * Adds v to this vector. + */ + add( v: Vector2, w?: Vector2 ): this; + + /** + * Adds the scalar value s to this vector's x and y values. + */ + addScalar( s: number ): this; + + /** + * Sets this vector to a + b. + */ + addVectors( a: Vector2, b: Vector2 ): this; + + /** + * Adds the multiple of v and s to this vector. + */ + addScaledVector( v: Vector2, s: number ): this; + + /** + * Subtracts v from this vector. + */ + sub( v: Vector2 ): this; + + /** + * Subtracts s from this vector's x and y components. + */ + subScalar( s: number ): this; + + /** + * Sets this vector to a - b. + */ + subVectors( a: Vector2, b: Vector2 ): this; + + /** + * Multiplies this vector by v. + */ + multiply( v: Vector2 ): this; + + /** + * Multiplies this vector by scalar s. + */ + multiplyScalar( scalar: number ): this; + + /** + * Divides this vector by v. + */ + divide( v: Vector2 ): this; + + /** + * Divides this vector by scalar s. + * Set vector to ( 0, 0 ) if s == 0. + */ + divideScalar( s: number ): this; + + /** + * Multiplies this vector (with an implicit 1 as the 3rd component) by m. + */ + applyMatrix3( m: Matrix3 ): this; + + /** + * If this vector's x or y value is greater than v's x or y value, replace that value with the corresponding min value. + */ + min( v: Vector2 ): this; + + /** + * If this vector's x or y value is less than v's x or y value, replace that value with the corresponding max value. + */ + max( v: Vector2 ): this; + + /** + * If this vector's x or y value is greater than the max vector's x or y value, it is replaced by the corresponding value. + * If this vector's x or y value is less than the min vector's x or y value, it is replaced by the corresponding value. + * @param min the minimum x and y values. + * @param max the maximum x and y values in the desired range. + */ + clamp( min: Vector2, max: Vector2 ): this; + + /** + * If this vector's x or y values are greater than the max value, they are replaced by the max value. + * If this vector's x or y values are less than the min value, they are replaced by the min value. + * @param min the minimum value the components will be clamped to. + * @param max the maximum value the components will be clamped to. + */ + clampScalar( min: number, max: number ): this; + + /** + * If this vector's length is greater than the max value, it is replaced by the max value. + * If this vector's length is less than the min value, it is replaced by the min value. + * @param min the minimum value the length will be clamped to. + * @param max the maximum value the length will be clamped to. + */ + clampLength( min: number, max: number ): this; + + /** + * The components of the vector are rounded down to the nearest integer value. + */ + floor(): this; + + /** + * The x and y components of the vector are rounded up to the nearest integer value. + */ + ceil(): this; + + /** + * The components of the vector are rounded to the nearest integer value. + */ + round(): this; + + /** + * The components of the vector are rounded towards zero (up if negative, down if positive) to an integer value. + */ + roundToZero(): this; + + /** + * Inverts this vector. + */ + negate(): this; + + /** + * Computes dot product of this vector and v. + */ + dot( v: Vector2 ): number; + + /** + * Computes cross product of this vector and v. + */ + cross( v: Vector2 ): number; + + /** + * Computes squared length of this vector. + */ + lengthSq(): number; + + /** + * Computes length of this vector. + */ + length(): number; + + /** + * @deprecated Use {@link Vector2#manhattanLength .manhattanLength()} instead. + */ + lengthManhattan(): number; + + /** + * Computes the Manhattan length of this vector. + * + * @return {number} + * + * @see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} + */ + manhattanLength(): number; + + /** + * Normalizes this vector. + */ + normalize(): this; + + /** + * computes the angle in radians with respect to the positive x-axis + */ + angle(): number; + + /** + * Computes distance of this vector to v. + */ + distanceTo( v: Vector2 ): number; + + /** + * Computes squared distance of this vector to v. + */ + distanceToSquared( v: Vector2 ): number; + + /** + * @deprecated Use {@link Vector2#manhattanDistanceTo .manhattanDistanceTo()} instead. + */ + distanceToManhattan( v: Vector2 ): number; + + /** + * Computes the Manhattan length (distance) from this vector to the given vector v + * + * @param {Vector2} v + * + * @return {number} + * + * @see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} + */ + manhattanDistanceTo( v: Vector2 ): number; + + /** + * Normalizes this vector and multiplies it by l. + */ + setLength( length: number ): this; + + /** + * Linearly interpolates between this vector and v, where alpha is the distance along the line - alpha = 0 will be this vector, and alpha = 1 will be v. + * @param v vector to interpolate towards. + * @param alpha interpolation factor in the closed interval [0, 1]. + */ + lerp( v: Vector2, alpha: number ): this; + + /** + * Sets this vector to be the vector linearly interpolated between v1 and v2 where alpha is the distance along the line connecting the two vectors - alpha = 0 will be v1, and alpha = 1 will be v2. + * @param v1 the starting vector. + * @param v2 vector to interpolate towards. + * @param alpha interpolation factor in the closed interval [0, 1]. + */ + lerpVectors( v1: Vector2, v2: Vector2, alpha: number ): this; + + /** + * Checks for strict equality of this vector and v. + */ + equals( v: Vector2 ): boolean; + + /** + * Sets this vector's x and y value from the provided array. + * @param array the source array. + * @param offset (optional) offset into the array. Default is 0. + */ + fromArray( array: number[], offset?: number ): this; + + /** + * Sets this vector's x and y value from the provided array-like. + * @param array the source array-like. + * @param offset (optional) offset into the array-like. Default is 0. + */ + fromArray( array: ArrayLike, offset?: number ): this; + + /** + * Returns an array [x, y], or copies x and y into the provided array. + * @param array (optional) array to store the vector to. If this is not provided, a new array will be created. + * @param offset (optional) optional offset into the array. + * @return The created or provided array. + */ + toArray( array?: number[], offset?: number ): number[]; + + /** + * Copies x and y into the provided array-like. + * @param array array-like to store the vector to. + * @param offset (optional) optional offset into the array. + * @return The provided array-like. + */ + toArray( array: ArrayLike, offset?: number ): ArrayLike; + + /** + * Sets this vector's x and y values from the attribute. + * @param attribute the source attribute. + * @param index index in the attribute. + */ + fromBufferAttribute( attribute: BufferAttribute, index: number ): this; + + /** + * Rotates the vector around center by angle radians. + * @param center the point around which to rotate. + * @param angle the angle to rotate, in radians. + */ + rotateAround( center: Vector2, angle: number ): this; + + /** + * Computes the Manhattan length of this vector. + * + * @return {number} + * + * @see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} + */ + manhattanLength(): number; + + /** + * Computes the Manhattan length (distance) from this vector to the given vector v + * + * @param {Vector2} v + * + * @return {number} + * + * @see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} + */ + manhattanDistanceTo( v: Vector2 ): number; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Vector3.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Vector3.d.ts new file mode 100755 index 0000000..5829879 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Vector3.d.ts @@ -0,0 +1,289 @@ +import { Euler } from './Euler'; +import { Matrix3 } from './Matrix3'; +import { Matrix4 } from './Matrix4'; +import { Quaternion } from './Quaternion'; +import { Camera } from './../cameras/Camera'; +import { Spherical } from './Spherical'; +import { Cylindrical } from './Cylindrical'; +import { BufferAttribute } from './../core/BufferAttribute'; +import { Vector } from './Vector2'; +/** + * 3D vector. + * + * @example + * var a = new THREE.Vector3( 1, 0, 0 ); + * var b = new THREE.Vector3( 0, 1, 0 ); + * var c = new THREE.Vector3(); + * c.crossVectors( a, b ); + * + * @see src/math/Vector3.js + * + * ( class Vector3 implements Vector ) + */ +export class Vector3 implements Vector { + + constructor( x?: number, y?: number, z?: number ); + + x: number; + y: number; + z: number; + isVector3: true; + + /** + * Sets value of this vector. + */ + set( x: number, y: number, z: number ): this; + + /** + * Sets all values of this vector. + */ + setScalar( scalar: number ): this; + + /** + * Sets x value of this vector. + */ + setX( x: number ): Vector3; + + /** + * Sets y value of this vector. + */ + setY( y: number ): Vector3; + + /** + * Sets z value of this vector. + */ + setZ( z: number ): Vector3; + + setComponent( index: number, value: number ): this; + + getComponent( index: number ): number; + + /** + * Clones this vector. + */ + clone(): this; + + /** + * Copies value of v to this vector. + */ + copy( v: Vector3 ): this; + + /** + * Adds v to this vector. + */ + add( a: Vector3, b?: Vector3 ): this; + + addScalar( s: number ): this; + + addScaledVector( v: Vector3, s: number ): this; + + /** + * Sets this vector to a + b. + */ + addVectors( a: Vector3, b: Vector3 ): this; + + /** + * Subtracts v from this vector. + */ + sub( a: Vector3 ): this; + + subScalar( s: number ): this; + + /** + * Sets this vector to a - b. + */ + subVectors( a: Vector3, b: Vector3 ): this; + + multiply( v: Vector3 ): this; + + /** + * Multiplies this vector by scalar s. + */ + multiplyScalar( s: number ): this; + + multiplyVectors( a: Vector3, b: Vector3 ): this; + + applyEuler( euler: Euler ): this; + + applyAxisAngle( axis: Vector3, angle: number ): this; + + applyMatrix3( m: Matrix3 ): this; + + applyNormalMatrix( m: Matrix3 ): this; + + applyMatrix4( m: Matrix4 ): this; + + applyQuaternion( q: Quaternion ): this; + + project( camera: Camera ): this; + + unproject( camera: Camera ): this; + + transformDirection( m: Matrix4 ): this; + + divide( v: Vector3 ): this; + + /** + * Divides this vector by scalar s. + * Set vector to ( 0, 0, 0 ) if s == 0. + */ + divideScalar( s: number ): this; + + min( v: Vector3 ): this; + + max( v: Vector3 ): this; + + clamp( min: Vector3, max: Vector3 ): this; + + clampScalar( min: number, max: number ): this; + + clampLength( min: number, max: number ): this; + + floor(): this; + + ceil(): this; + + round(): this; + + roundToZero(): this; + + /** + * Inverts this vector. + */ + negate(): this; + + /** + * Computes dot product of this vector and v. + */ + dot( v: Vector3 ): number; + + /** + * Computes squared length of this vector. + */ + lengthSq(): number; + + /** + * Computes length of this vector. + */ + length(): number; + + /** + * Computes Manhattan length of this vector. + * http://en.wikipedia.org/wiki/Taxicab_geometry + * + * @deprecated Use {@link Vector3#manhattanLength .manhattanLength()} instead. + */ + lengthManhattan(): number; + + /** + * Computes the Manhattan length of this vector. + * + * @return {number} + * + * @see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} + */ + manhattanLength(): number; + + /** + * Computes the Manhattan length (distance) from this vector to the given vector v + * + * @param {Vector3} v + * + * @return {number} + * + * @see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} + */ + manhattanDistanceTo( v: Vector3 ): number; + + /** + * Normalizes this vector. + */ + normalize(): this; + + /** + * Normalizes this vector and multiplies it by l. + */ + setLength( l: number ): this; + lerp( v: Vector3, alpha: number ): this; + + lerpVectors( v1: Vector3, v2: Vector3, alpha: number ): this; + + /** + * Sets this vector to cross product of itself and v. + */ + cross( a: Vector3, w?: Vector3 ): this; + + /** + * Sets this vector to cross product of a and b. + */ + crossVectors( a: Vector3, b: Vector3 ): this; + projectOnVector( v: Vector3 ): this; + projectOnPlane( planeNormal: Vector3 ): this; + reflect( vector: Vector3 ): this; + angleTo( v: Vector3 ): number; + + /** + * Computes distance of this vector to v. + */ + distanceTo( v: Vector3 ): number; + + /** + * Computes squared distance of this vector to v. + */ + distanceToSquared( v: Vector3 ): number; + + /** + * @deprecated Use {@link Vector3#manhattanDistanceTo .manhattanDistanceTo()} instead. + */ + distanceToManhattan( v: Vector3 ): number; + + setFromSpherical( s: Spherical ): this; + setFromSphericalCoords( r: number, phi: number, theta:number ): this; + setFromCylindrical( s: Cylindrical ): this; + setFromCylindricalCoords( radius: number, theta: number, y: number ): this; + setFromMatrixPosition( m: Matrix4 ): this; + setFromMatrixScale( m: Matrix4 ): this; + setFromMatrixColumn( matrix: Matrix4, index: number ): this; + + /** + * Checks for strict equality of this vector and v. + */ + equals( v: Vector3 ): boolean; + + /** + * Sets this vector's x, y and z value from the provided array. + * @param array the source array. + * @param offset (optional) offset into the array. Default is 0. + */ + fromArray( array: number[], offset?: number ): this; + + /** + * Sets this vector's x, y and z value from the provided array-like. + * @param array the source array-like. + * @param offset (optional) offset into the array-like. Default is 0. + */ + fromArray( array: ArrayLike, offset?: number ): this; + + /** + * Returns an array [x, y, z], or copies x, y and z into the provided array. + * @param array (optional) array to store the vector to. If this is not provided, a new array will be created. + * @param offset (optional) optional offset into the array. + * @return The created or provided array. + */ + toArray( array?: number[], offset?: number ): number[]; + + /** + * Copies x, y and z into the provided array-like. + * @param array array-like to store the vector to. + * @param offset (optional) optional offset into the array-like. + * @return The provided array-like. + */ + toArray( array: ArrayLike, offset?: number ): ArrayLike; + + fromBufferAttribute( + attribute: BufferAttribute, + index: number, + offset?: number + ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Vector4.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Vector4.d.ts new file mode 100755 index 0000000..33d12aa --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/Vector4.d.ts @@ -0,0 +1,213 @@ +import { Matrix4 } from './Matrix4'; +import { Quaternion } from './Quaternion'; +import { Matrix3 } from './Matrix3'; +import { BufferAttribute } from './../core/BufferAttribute'; +import { Vector } from './Vector2'; + +/** + * 4D vector. + * + * ( class Vector4 implements Vector ) + */ +export class Vector4 implements Vector { + + constructor( x?: number, y?: number, z?: number, w?: number ); + + x: number; + y: number; + z: number; + w: number; + width: number; + height: number; + isVector4: true; + + /** + * Sets value of this vector. + */ + set( x: number, y: number, z: number, w: number ): this; + + /** + * Sets all values of this vector. + */ + setScalar( scalar: number ): this; + + /** + * Sets X component of this vector. + */ + setX( x: number ): this; + + /** + * Sets Y component of this vector. + */ + setY( y: number ): this; + + /** + * Sets Z component of this vector. + */ + setZ( z: number ): this; + + /** + * Sets w component of this vector. + */ + setW( w: number ): this; + + setComponent( index: number, value: number ): this; + + getComponent( index: number ): number; + + /** + * Clones this vector. + */ + clone(): this; + + /** + * Copies value of v to this vector. + */ + copy( v: Vector4 ): this; + + /** + * Adds v to this vector. + */ + add( v: Vector4, w?: Vector4 ): this; + + addScalar( scalar: number ): this; + + /** + * Sets this vector to a + b. + */ + addVectors( a: Vector4, b: Vector4 ): this; + + addScaledVector( v: Vector4, s: number ): this; + /** + * Subtracts v from this vector. + */ + sub( v: Vector4 ): this; + + subScalar( s: number ): this; + + /** + * Sets this vector to a - b. + */ + subVectors( a: Vector4, b: Vector4 ): this; + + /** + * Multiplies this vector by scalar s. + */ + multiplyScalar( s: number ): this; + + applyMatrix4( m: Matrix4 ): this; + + /** + * Divides this vector by scalar s. + * Set vector to ( 0, 0, 0 ) if s == 0. + */ + divideScalar( s: number ): this; + + /** + * http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm + * @param q is assumed to be normalized + */ + setAxisAngleFromQuaternion( q: Quaternion ): this; + + /** + * http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm + * @param m assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + */ + setAxisAngleFromRotationMatrix( m: Matrix3 ): this; + + min( v: Vector4 ): this; + max( v: Vector4 ): this; + clamp( min: Vector4, max: Vector4 ): this; + clampScalar( min: number, max: number ): this; + floor(): this; + ceil(): this; + round(): this; + roundToZero(): this; + + /** + * Inverts this vector. + */ + negate(): this; + + /** + * Computes dot product of this vector and v. + */ + dot( v: Vector4 ): number; + + /** + * Computes squared length of this vector. + */ + lengthSq(): number; + + /** + * Computes length of this vector. + */ + length(): number; + + /** + * Computes the Manhattan length of this vector. + * + * @return {number} + * + * @see {@link http://en.wikipedia.org/wiki/Taxicab_geometry|Wikipedia: Taxicab Geometry} + */ + manhattanLength(): number; + + /** + * Normalizes this vector. + */ + normalize(): this; + /** + * Normalizes this vector and multiplies it by l. + */ + setLength( length: number ): this; + + /** + * Linearly interpolate between this vector and v with alpha factor. + */ + lerp( v: Vector4, alpha: number ): this; + + lerpVectors( v1: Vector4, v2: Vector4, alpha: number ): this; + + /** + * Checks for strict equality of this vector and v. + */ + equals( v: Vector4 ): boolean; + + /** + * Sets this vector's x, y, z and w value from the provided array. + * @param array the source array. + * @param offset (optional) offset into the array. Default is 0. + */ + fromArray( array: number[], offset?: number ): this; + + /** + * Sets this vector's x, y, z and w value from the provided array-like. + * @param array the source array-like. + * @param offset (optional) offset into the array-like. Default is 0. + */ + fromArray( array: ArrayLike, offset?: number ): this; + + /** + * Returns an array [x, y, z, w], or copies x, y, z and w into the provided array. + * @param array (optional) array to store the vector to. If this is not provided, a new array will be created. + * @param offset (optional) optional offset into the array. + * @return The created or provided array. + */ + toArray( array?: number[], offset?: number ): number[]; + + /** + * Copies x, y, z and w into the provided array-like. + * @param array array-like to store the vector to. + * @param offset (optional) optional offset into the array-like. + * @return The provided array-like. + */ + toArray( array: ArrayLike, offset?: number ): ArrayLike; + + fromBufferAttribute( + attribute: BufferAttribute, + index: number, + offset?: number + ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/CubicInterpolant.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/CubicInterpolant.d.ts new file mode 100755 index 0000000..435d476 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/CubicInterpolant.d.ts @@ -0,0 +1,14 @@ +import { Interpolant } from '../Interpolant'; + +export class CubicInterpolant extends Interpolant { + + constructor( + parameterPositions: any, + samplesValues: any, + sampleSize: number, + resultBuffer?: any + ); + + interpolate_( i1: number, t0: number, t: number, t1: number ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/DiscreteInterpolant.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/DiscreteInterpolant.d.ts new file mode 100755 index 0000000..f553d17 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/DiscreteInterpolant.d.ts @@ -0,0 +1,14 @@ +import { Interpolant } from '../Interpolant'; + +export class DiscreteInterpolant extends Interpolant { + + constructor( + parameterPositions: any, + samplesValues: any, + sampleSize: number, + resultBuffer?: any + ); + + interpolate_( i1: number, t0: number, t: number, t1: number ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/LinearInterpolant.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/LinearInterpolant.d.ts new file mode 100755 index 0000000..e539a09 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/LinearInterpolant.d.ts @@ -0,0 +1,14 @@ +import { Interpolant } from '../Interpolant'; + +export class LinearInterpolant extends Interpolant { + + constructor( + parameterPositions: any, + samplesValues: any, + sampleSize: number, + resultBuffer?: any + ); + + interpolate_( i1: number, t0: number, t: number, t1: number ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/QuaternionLinearInterpolant.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/QuaternionLinearInterpolant.d.ts new file mode 100755 index 0000000..6519fd9 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/math/interpolants/QuaternionLinearInterpolant.d.ts @@ -0,0 +1,14 @@ +import { Interpolant } from '../Interpolant'; + +export class QuaternionLinearInterpolant extends Interpolant { + + constructor( + parameterPositions: any, + samplesValues: any, + sampleSize: number, + resultBuffer?: any + ); + + interpolate_( i1: number, t0: number, t: number, t1: number ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Bone.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Bone.d.ts new file mode 100755 index 0000000..d6fe386 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Bone.d.ts @@ -0,0 +1,11 @@ +import { Object3D } from './../core/Object3D'; + +// Objects ////////////////////////////////////////////////////////////////////////////////// + +export class Bone extends Object3D { + + constructor(); + isBone: true; + type: 'Bone'; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Group.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Group.d.ts new file mode 100755 index 0000000..294a40e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Group.d.ts @@ -0,0 +1,9 @@ +import { Object3D } from './../core/Object3D'; + +export class Group extends Object3D { + + constructor(); + type: 'Group'; + isGroup: true; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/InstancedMesh.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/InstancedMesh.d.ts new file mode 100755 index 0000000..650ee52 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/InstancedMesh.d.ts @@ -0,0 +1,25 @@ +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from '../core/BufferGeometry'; +import { Material } from './../materials/Material'; +import { BufferAttribute } from './../core/BufferAttribute'; +import { Mesh } from './Mesh'; +import { Matrix4 } from './../math/Matrix4'; + +export class InstancedMesh extends Mesh { + + constructor( + geometry: Geometry | BufferGeometry, + material: Material | Material[], + count: number + ); + + count: number; + instanceMatrix: BufferAttribute; + isInstancedMesh: true; + + getMatrixAt( index: number, matrix: Matrix4 ): void; + setMatrixAt( index: number, matrix: Matrix4 ): void; + + + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/LOD.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/LOD.d.ts new file mode 100755 index 0000000..4bd5a2f --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/LOD.d.ts @@ -0,0 +1,26 @@ +import { Object3D } from './../core/Object3D'; +import { Raycaster } from './../core/Raycaster'; +import { Camera } from './../cameras/Camera'; +import { Intersection } from '../core/Raycaster'; + +export class LOD extends Object3D { + + constructor(); + + type: 'LOD'; + + levels: { distance: number; object: Object3D }[]; + autoUpdate: boolean; + + addLevel( object: Object3D, distance?: number ): this; + getObjectForDistance( distance: number ): Object3D | null; + raycast( raycaster: Raycaster, intersects: Intersection[] ): void; + update( camera: Camera ): void; + toJSON( meta: any ): any; + + /** + * @deprecated Use {@link LOD#levels .levels} instead. + */ + objects: any[]; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Line.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Line.d.ts new file mode 100755 index 0000000..853074c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Line.d.ts @@ -0,0 +1,25 @@ +import { Geometry } from './../core/Geometry'; +import { Material } from './../materials/Material'; +import { Raycaster } from './../core/Raycaster'; +import { Object3D } from './../core/Object3D'; +import { BufferGeometry } from '../core/BufferGeometry'; +import { Intersection } from '../core/Raycaster'; + +export class Line extends Object3D { + + constructor( + geometry?: Geometry | BufferGeometry, + material?: Material | Material[], + mode?: number + ); + + geometry: Geometry | BufferGeometry; + material: Material | Material[]; + + type: 'Line' | 'LineLoop' | 'LineSegments'; + isLine: true; + + computeLineDistances(): this; + raycast( raycaster: Raycaster, intersects: Intersection[] ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/LineLoop.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/LineLoop.d.ts new file mode 100755 index 0000000..37bd91b --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/LineLoop.d.ts @@ -0,0 +1,16 @@ +import { Line } from './Line'; +import { Geometry } from './../core/Geometry'; +import { Material } from './../materials/Material'; +import { BufferGeometry } from '../core/BufferGeometry'; + +export class LineLoop extends Line { + + constructor( + geometry?: Geometry | BufferGeometry, + material?: Material | Material[] + ); + + type: 'LineLoop'; + isLineLoop: true; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/LineSegments.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/LineSegments.d.ts new file mode 100755 index 0000000..94381cc --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/LineSegments.d.ts @@ -0,0 +1,26 @@ +import { Geometry } from './../core/Geometry'; +import { Material } from './../materials/Material'; +import { Line } from './Line'; +import { BufferGeometry } from '../core/BufferGeometry'; + +/** + * @deprecated + */ +export const LineStrip: number; +/** + * @deprecated + */ +export const LinePieces: number; + +export class LineSegments extends Line { + + constructor( + geometry?: Geometry | BufferGeometry, + material?: Material | Material[], + mode?: number + ); + + type: 'LineSegments'; + isLineSegments: true; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Mesh.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Mesh.d.ts new file mode 100755 index 0000000..3a8b617 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Mesh.d.ts @@ -0,0 +1,28 @@ +import { Geometry } from './../core/Geometry'; +import { Material } from './../materials/Material'; +import { Raycaster } from './../core/Raycaster'; +import { Object3D } from './../core/Object3D'; +import { BufferGeometry } from '../core/BufferGeometry'; +import { Intersection } from '../core/Raycaster'; +import { TrianglesDrawModes } from '../constants'; + +export class Mesh extends Object3D { + + constructor( + geometry?: Geometry | BufferGeometry, + material?: Material | Material[] + ); + + geometry: Geometry | BufferGeometry; + material: Material | Material[]; + drawMode: TrianglesDrawModes; + morphTargetInfluences?: number[]; + morphTargetDictionary?: { [key: string]: number }; + isMesh: true; + type: string; + + setDrawMode( drawMode: TrianglesDrawModes ): void; + updateMorphTargets(): void; + raycast( raycaster: Raycaster, intersects: Intersection[] ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Points.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Points.d.ts new file mode 100755 index 0000000..c31f20e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Points.d.ts @@ -0,0 +1,42 @@ +import { Geometry } from './../core/Geometry'; +import { Material } from './../materials/Material'; +import { Raycaster } from './../core/Raycaster'; +import { Object3D } from './../core/Object3D'; +import { BufferGeometry } from '../core/BufferGeometry'; +import { Intersection } from '../core/Raycaster'; + +/** + * A class for displaying particles in the form of variable size points. For example, if using the WebGLRenderer, the particles are displayed using GL_POINTS. + * + * @see src/objects/ParticleSystem.js + */ +export class Points extends Object3D { + + /** + * @param geometry An instance of Geometry or BufferGeometry. + * @param material An instance of Material (optional). + */ + constructor( + geometry?: Geometry | BufferGeometry, + material?: Material | Material[] + ); + + type: 'Points'; + morphTargetInfluences?: number[]; + morphTargetDictionary?: { [key: string]: number }; + isPoints: true; + + /** + * An instance of Geometry or BufferGeometry, where each vertex designates the position of a particle in the system. + */ + geometry: Geometry | BufferGeometry; + + /** + * An instance of Material, defining the object's appearance. Default is a PointsMaterial with randomised colour. + */ + material: Material | Material[]; + + raycast( raycaster: Raycaster, intersects: Intersection[] ): void; + updateMorphTargets(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Skeleton.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Skeleton.d.ts new file mode 100755 index 0000000..44cc383 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Skeleton.d.ts @@ -0,0 +1,33 @@ +import { Bone } from './Bone'; +import { Matrix4 } from './../math/Matrix4'; +import { DataTexture } from './../textures/DataTexture'; + +/** + * @deprecated Use {@link Points THREE.Points} instead. + */ +/** + * @deprecated Use {@link Points THREE.Points} instead. + */ + +export class Skeleton { + + constructor( bones: Bone[], boneInverses?: Matrix4[] ); + + /** + * @deprecated This property has been removed completely. + */ + useVertexTexture: boolean; + identityMatrix: Matrix4; + bones: Bone[]; + boneTextureWidth: number; + boneTextureHeight: number; + boneMatrices: Float32Array; + boneTexture: DataTexture; + boneInverses: Matrix4[]; + + calculateInverses( bone: Bone ): void; + pose(): void; + update(): void; + clone(): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/SkinnedMesh.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/SkinnedMesh.d.ts new file mode 100755 index 0000000..fca0dac --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/SkinnedMesh.d.ts @@ -0,0 +1,26 @@ +import { Geometry } from './../core/Geometry'; +import { Material } from './../materials/Material'; +import { Matrix4 } from './../math/Matrix4'; +import { Skeleton } from './Skeleton'; +import { Mesh } from './Mesh'; +import { BufferGeometry } from '../core/BufferGeometry'; + +export class SkinnedMesh extends Mesh { + + constructor( + geometry?: Geometry | BufferGeometry, + material?: Material | Material[], + useVertexTexture?: boolean + ); + + bindMode: string; + bindMatrix: Matrix4; + bindMatrixInverse: Matrix4; + skeleton: Skeleton; + + bind( skeleton: Skeleton, bindMatrix?: Matrix4 ): void; + pose(): void; + normalizeSkinWeights(): void; + updateMatrixWorld( force?: boolean ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Sprite.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Sprite.d.ts new file mode 100755 index 0000000..5b901d4 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/objects/Sprite.d.ts @@ -0,0 +1,22 @@ +import { Vector2 } from './../math/Vector2'; +import { Raycaster } from './../core/Raycaster'; +import { Object3D } from './../core/Object3D'; +import { Intersection } from '../core/Raycaster'; +import { SpriteMaterial } from '../materials/Materials'; +import { BufferGeometry } from '../core/BufferGeometry'; + +export class Sprite extends Object3D { + + constructor( material?: SpriteMaterial ); + + type: 'Sprite'; + isSprite: true; + + geometry: BufferGeometry; + material: SpriteMaterial; + center: Vector2; + + raycast( raycaster: Raycaster, intersects: Intersection[] ): void; + copy( source: this ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/polyfills.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/polyfills.d.ts new file mode 100755 index 0000000..46ad994 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/polyfills.d.ts @@ -0,0 +1,16 @@ +// log handlers +export function warn( message?: any, ...optionalParams: any[] ): void; +export function error( message?: any, ...optionalParams: any[] ): void; +export function log( message?: any, ...optionalParams: any[] ): void; + +// typed array parameters +export type TypedArray = + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array; diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLMultisampleRenderTarget.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLMultisampleRenderTarget.d.ts new file mode 100755 index 0000000..7592f63 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLMultisampleRenderTarget.d.ts @@ -0,0 +1,14 @@ +import { + WebGLRenderTarget, + WebGLRenderTargetOptions, +} from './WebGLRenderTarget'; + +export class WebGLMultisampleRenderTarget extends WebGLRenderTarget { + + constructor( + width: number, + height: number, + options?: WebGLRenderTargetOptions + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLMultiviewRenderTarget.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLMultiviewRenderTarget.d.ts new file mode 100755 index 0000000..d1fc3f2 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLMultiviewRenderTarget.d.ts @@ -0,0 +1,17 @@ +import { + WebGLRenderTarget, + WebGLRenderTargetOptions, +} from './WebGLRenderTarget'; + +export class WebGLMultiviewRenderTarget extends WebGLRenderTarget { + + constructor( + width: number, + height: number, + numViews: number, + options?: WebGLRenderTargetOptions + ); + + setNumViews( numViews: number ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLRenderTarget.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLRenderTarget.d.ts new file mode 100755 index 0000000..754483c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLRenderTarget.d.ts @@ -0,0 +1,85 @@ +import { Vector4 } from './../math/Vector4'; +import { Texture } from './../textures/Texture'; +import { DepthTexture } from './../textures/DepthTexture'; +import { EventDispatcher } from './../core/EventDispatcher'; +import { Wrapping, TextureFilter, TextureDataType } from '../constants'; + +export interface WebGLRenderTargetOptions { + wrapS?: Wrapping; + wrapT?: Wrapping; + magFilter?: TextureFilter; + minFilter?: TextureFilter; + format?: number; // RGBAFormat; + type?: TextureDataType; // UnsignedByteType; + anisotropy?: number; // 1; + depthBuffer?: boolean; // true; + stencilBuffer?: boolean; // true; + generateMipmaps?: boolean; // true; + depthTexture?: DepthTexture; +} + +export class WebGLRenderTarget extends EventDispatcher { + + constructor( + width: number, + height: number, + options?: WebGLRenderTargetOptions + ); + + uuid: string; + width: number; + height: number; + scissor: Vector4; + scissorTest: boolean; + viewport: Vector4; + texture: Texture; + depthBuffer: boolean; + stencilBuffer: boolean; + depthTexture: DepthTexture; + /** + * @deprecated Use {@link Texture#wrapS texture.wrapS} instead. + */ + wrapS: any; + /** + * @deprecated Use {@link Texture#wrapT texture.wrapT} instead. + */ + wrapT: any; + /** + * @deprecated Use {@link Texture#magFilter texture.magFilter} instead. + */ + magFilter: any; + /** + * @deprecated Use {@link Texture#minFilter texture.minFilter} instead. + */ + minFilter: any; + /** + * @deprecated Use {@link Texture#anisotropy texture.anisotropy} instead. + */ + anisotropy: any; + /** + * @deprecated Use {@link Texture#offset texture.offset} instead. + */ + offset: any; + /** + * @deprecated Use {@link Texture#repeat texture.repeat} instead. + */ + repeat: any; + /** + * @deprecated Use {@link Texture#format texture.format} instead. + */ + format: any; + /** + * @deprecated Use {@link Texture#type texture.type} instead. + */ + type: any; + /** + * @deprecated Use {@link Texture#generateMipmaps texture.generateMipmaps} instead. + */ + generateMipmaps: any; + + setSize( width: number, height: number ): void; + clone(): this; + copy( source: WebGLRenderTarget ): this; + dispose(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLRenderTargetCube.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLRenderTargetCube.d.ts new file mode 100755 index 0000000..ac70bc4 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLRenderTargetCube.d.ts @@ -0,0 +1,15 @@ +import { WebGLRenderTargetOptions, WebGLRenderTarget } from './WebGLRenderTarget'; +import { WebGLRenderer } from './WebGLRenderer'; +import { Texture } from './../textures/Texture'; + +export class WebGLRenderTargetCube extends WebGLRenderTarget { + + constructor( + width: number, + height: number, + options?: WebGLRenderTargetOptions + ); + + fromEquirectangularTexture( renderer: WebGLRenderer, texture: Texture ): this; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLRenderer.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLRenderer.d.ts new file mode 100755 index 0000000..596b7ef --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/WebGLRenderer.d.ts @@ -0,0 +1,492 @@ +import { Scene } from './../scenes/Scene'; +import { Camera } from './../cameras/Camera'; +import { WebGLExtensions } from './webgl/WebGLExtensions'; +import { WebGLInfo } from './webgl/WebGLInfo'; +import { WebGLShadowMap } from './webgl/WebGLShadowMap'; +import { WebGLCapabilities } from './webgl/WebGLCapabilities'; +import { WebGLProperties } from './webgl/WebGLProperties'; +import { WebGLRenderLists } from './webgl/WebGLRenderLists'; +import { WebGLState } from './webgl/WebGLState'; +import { Vector2 } from './../math/Vector2'; +import { Vector4 } from './../math/Vector4'; +import { Color } from './../math/Color'; +import { WebGLRenderTarget } from './WebGLRenderTarget'; +import { Object3D } from './../core/Object3D'; +import { Material } from './../materials/Material'; +import { Fog } from './../scenes/Fog'; +import { ToneMapping, ShadowMapType, CullFace } from '../constants'; +import { WebVRManager } from '../renderers/webvr/WebVRManager'; +import { RenderTarget } from './webgl/WebGLRenderLists'; +import { Geometry } from './../core/Geometry'; +import { BufferGeometry } from './../core/BufferGeometry'; +import { Texture } from '../textures/Texture'; + +export interface Renderer { + domElement: HTMLCanvasElement; + + render( scene: Scene, camera: Camera ): void; + setSize( width: number, height: number, updateStyle?: boolean ): void; +} + +export interface WebGLRendererParameters { + /** + * A Canvas where the renderer draws its output. + */ + canvas?: HTMLCanvasElement | OffscreenCanvas; + + /** + * A WebGL Rendering Context. + * (https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext) + * Default is null + */ + context?: WebGLRenderingContext; + + /** + * shader precision. Can be "highp", "mediump" or "lowp". + */ + precision?: string; + + /** + * default is true. + */ + alpha?: boolean; + + /** + * default is true. + */ + premultipliedAlpha?: boolean; + + /** + * default is false. + */ + antialias?: boolean; + + /** + * default is true. + */ + stencil?: boolean; + + /** + * default is false. + */ + preserveDrawingBuffer?: boolean; + + /** + * Can be "high-performance", "low-power" or "default" + */ + powerPreference?: string; + + /** + * default is true. + */ + depth?: boolean; + + /** + * default is false. + */ + logarithmicDepthBuffer?: boolean; +} + +export interface WebGLDebug { + + /** + * Enables error checking and reporting when shader programs are being compiled. + */ + checkShaderErrors: boolean; + +} + +/** + * The WebGL renderer displays your beautifully crafted scenes using WebGL, if your device supports it. + * This renderer has way better performance than CanvasRenderer. + * + * @see src/renderers/WebGLRenderer.js + */ +export class WebGLRenderer implements Renderer { + + /** + * parameters is an optional object with properties defining the renderer's behaviour. The constructor also accepts no parameters at all. In all cases, it will assume sane defaults when parameters are missing. + */ + constructor( parameters?: WebGLRendererParameters ); + + /** + * A Canvas where the renderer draws its output. + * This is automatically created by the renderer in the constructor (if not provided already); you just need to add it to your page. + */ + domElement: HTMLCanvasElement; + + /** + * The HTML5 Canvas's 'webgl' context obtained from the canvas where the renderer will draw. + */ + context: WebGLRenderingContext; + + /** + * Defines whether the renderer should automatically clear its output before rendering. + */ + autoClear: boolean; + + /** + * If autoClear is true, defines whether the renderer should clear the color buffer. Default is true. + */ + autoClearColor: boolean; + + /** + * If autoClear is true, defines whether the renderer should clear the depth buffer. Default is true. + */ + autoClearDepth: boolean; + + /** + * If autoClear is true, defines whether the renderer should clear the stencil buffer. Default is true. + */ + autoClearStencil: boolean; + + /** + * Debug configurations. + */ + debug: WebGLDebug; + + /** + * Defines whether the renderer should sort objects. Default is true. + */ + sortObjects: boolean; + + clippingPlanes: any[]; + localClippingEnabled: boolean; + + extensions: WebGLExtensions; + + /** + * Default is false. + */ + gammaInput: boolean; + + /** + * Default is false. + */ + gammaOutput: boolean; + + physicallyCorrectLights: boolean; + toneMapping: ToneMapping; + toneMappingExposure: number; + toneMappingWhitePoint: number; + + /** + * Default is false. + */ + shadowMapDebug: boolean; + + /** + * Default is 8. + */ + maxMorphTargets: number; + + /** + * Default is 4. + */ + maxMorphNormals: number; + + info: WebGLInfo; + + shadowMap: WebGLShadowMap; + + pixelRatio: number; + + capabilities: WebGLCapabilities; + properties: WebGLProperties; + renderLists: WebGLRenderLists; + state: WebGLState; + + vr: WebVRManager; + + /** + * Return the WebGL context. + */ + getContext(): WebGLRenderingContext; + getContextAttributes(): any; + forceContextLoss(): void; + + /** + * @deprecated Use {@link WebGLCapabilities#getMaxAnisotropy .capabilities.getMaxAnisotropy()} instead. + */ + getMaxAnisotropy(): number; + + /** + * @deprecated Use {@link WebGLCapabilities#precision .capabilities.precision} instead. + */ + getPrecision(): string; + + getPixelRatio(): number; + setPixelRatio( value: number ): void; + + getDrawingBufferSize( target: Vector2 ): Vector2; + setDrawingBufferSize( width: number, height: number, pixelRatio: number ): void; + + getSize( target: Vector2 ): Vector2; + + /** + * Resizes the output canvas to (width, height), and also sets the viewport to fit that size, starting in (0, 0). + */ + setSize( width: number, height: number, updateStyle?: boolean ): void; + + getCurrentViewport( target: Vector4 ): Vector4; + + /** + * Copies the viewport into target. + */ + getViewport( target: Vector4 ): Vector4; + + /** + * Sets the viewport to render from (x, y) to (x + width, y + height). + * (x, y) is the lower-left corner of the region. + */ + setViewport( x: Vector4 | number, y?: number, width?: number, height?: number ): void; + + /** + * Copies the scissor area into target. + */ + getScissor( target: Vector4 ): Vector4; + + /** + * Sets the scissor area from (x, y) to (x + width, y + height). + */ + setScissor( x: Vector4 | number, y?: number, width?: number, height?: number ): void; + + /** + * Returns true if scissor test is enabled; returns false otherwise. + */ + getScissorTest(): boolean; + + /** + * Enable the scissor test. When this is enabled, only the pixels within the defined scissor area will be affected by further renderer actions. + */ + setScissorTest( enable: boolean ): void; + + /** + * Returns a THREE.Color instance with the current clear color. + */ + getClearColor(): Color; + + /** + * Sets the clear color, using color for the color and alpha for the opacity. + */ + setClearColor( color: Color, alpha?: number ): void; + setClearColor( color: string, alpha?: number ): void; + setClearColor( color: number, alpha?: number ): void; + + /** + * Returns a float with the current clear alpha. Ranges from 0 to 1. + */ + getClearAlpha(): number; + + setClearAlpha( alpha: number ): void; + + /** + * Tells the renderer to clear its color, depth or stencil drawing buffer(s). + * Arguments default to true + */ + clear( color?: boolean, depth?: boolean, stencil?: boolean ): void; + + clearColor(): void; + clearDepth(): void; + clearStencil(): void; + clearTarget( + renderTarget: WebGLRenderTarget, + color: boolean, + depth: boolean, + stencil: boolean + ): void; + + /** + * @deprecated Use {@link WebGLState#reset .state.reset()} instead. + */ + resetGLState(): void; + dispose(): void; + + /** + * Tells the shadow map plugin to update using the passed scene and camera parameters. + * + * @param scene an instance of Scene + * @param camera — an instance of Camera + */ + renderBufferImmediate( + object: Object3D, + program: Object, + material: Material + ): void; + + renderBufferDirect( + camera: Camera, + fog: Fog, + geometry: Geometry | BufferGeometry, + material: Material, + object: Object3D, + geometryGroup: any + ): void; + + /** + * A build in function that can be used instead of requestAnimationFrame. For WebVR projects this function must be used. + * @param callback The function will be called every available frame. If `null` is passed it will stop any already ongoing animation. + */ + setAnimationLoop( callback: Function | null ): void; + + /** + * @deprecated Use {@link WebGLRenderer#setAnimationLoop .setAnimationLoop()} instead. + */ + animate( callback: Function ): void; + + /** + * Compiles all materials in the scene with the camera. This is useful to precompile shaders before the first rendering. + */ + compile( + scene: Scene, + camera: Camera + ): void; + + /** + * Render a scene using a camera. + * The render is done to a previously specified {@link WebGLRenderTarget#renderTarget .renderTarget} set by calling + * {@link WebGLRenderer#setRenderTarget .setRenderTarget} or to the canvas as usual. + * + * By default render buffers are cleared before rendering but you can prevent this by setting the property + * {@link WebGLRenderer#autoClear autoClear} to false. If you want to prevent only certain buffers being cleared + * you can set either the {@link WebGLRenderer#autoClearColor autoClearColor}, + * {@link WebGLRenderer#autoClearStencil autoClearStencil} or {@link WebGLRenderer#autoClearDepth autoClearDepth} + * properties to false. To forcibly clear one ore more buffers call {@link WebGLRenderer#clear .clear}. + */ + render( + scene: Scene, + camera: Camera + ): void; + + /** + * Returns the current active cube face. + */ + getActiveCubeFace(): number; + + /** + * Returns the current active mipmap level. + */ + getActiveMipmapLevel(): number; + + /** + * Returns the current render target. If no render target is set, null is returned. + */ + getRenderTarget(): RenderTarget | null; + + /** + * @deprecated Use {@link WebGLRenderer#getRenderTarget .getRenderTarget()} instead. + */ + getCurrentRenderTarget(): RenderTarget | null; + + /** + * Sets the active render target. + * + * @param renderTarget The {@link WebGLRenderTarget renderTarget} that needs to be activated. When `null` is given, the canvas is set as the active render target instead. + * @param activeCubeFace Specifies the active cube side (PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5) of {@link WebGLRenderTargetCube}. + * @param activeMipmapLevel Specifies the active mipmap level. + */ + setRenderTarget( renderTarget: RenderTarget | null, activeCubeFace?: number, activeMipmapLevel?: number ): void; + + readRenderTargetPixels( + renderTarget: RenderTarget, + x: number, + y: number, + width: number, + height: number, + buffer: any, + activeCubeFaceIndex?: number + ): void; + + /** + * Copies a region of the currently bound framebuffer into the selected mipmap level of the selected texture. + * This region is defined by the size of the destination texture's mip level, offset by the input position. + * + * @param position Specifies the pixel offset from which to copy out of the framebuffer. + * @param texture Specifies the destination texture. + * @param level Specifies the destination mipmap level of the texture. + */ + copyFramebufferToTexture( position: Vector2, texture: Texture, level?: number ): void; + + /** + * Copies srcTexture to the specified level of dstTexture, offset by the input position. + * + * @param position Specifies the pixel offset into the dstTexture where the copy will occur. + * @param srcTexture Specifies the source texture. + * @param dstTexture Specifies the destination texture. + * @param level Specifies the destination mipmap level of the texture. + */ + copyTextureToTexture( position: Vector2, srcTexture: Texture, dstTexture: Texture, level?: number ): void; + + /** + * Initializes the given texture. Can be used to preload a texture rather than waiting until first render (which can cause noticeable lags due to decode and GPU upload overhead). + * + * @param texture The texture to Initialize. + */ + initTexture( texture: Texture ): void; + + /** + * @deprecated + */ + gammaFactor: number; + + /** + * @deprecated Use {@link WebGLShadowMap#enabled .shadowMap.enabled} instead. + */ + shadowMapEnabled: boolean; + + /** + * @deprecated Use {@link WebGLShadowMap#type .shadowMap.type} instead. + */ + shadowMapType: ShadowMapType; + + /** + * @deprecated Use {@link WebGLShadowMap#cullFace .shadowMap.cullFace} instead. + */ + shadowMapCullFace: CullFace; + + /** + * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'OES_texture_float' )} instead. + */ + supportsFloatTextures(): any; + + /** + * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'OES_texture_half_float' )} instead. + */ + supportsHalfFloatTextures(): any; + + /** + * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'OES_standard_derivatives' )} instead. + */ + supportsStandardDerivatives(): any; + + /** + * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'WEBGL_compressed_texture_s3tc' )} instead. + */ + supportsCompressedTextureS3TC(): any; + + /** + * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'WEBGL_compressed_texture_pvrtc' )} instead. + */ + supportsCompressedTexturePVRTC(): any; + + /** + * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'EXT_blend_minmax' )} instead. + */ + supportsBlendMinMax(): any; + + /** + * @deprecated Use {@link WebGLCapabilities#vertexTextures .capabilities.vertexTextures} instead. + */ + supportsVertexTextures(): any; + + /** + * @deprecated Use {@link WebGLExtensions#get .extensions.get( 'ANGLE_instanced_arrays' )} instead. + */ + supportsInstancedArrays(): any; + + /** + * @deprecated Use {@link WebGLRenderer#setScissorTest .setScissorTest()} instead. + */ + enableScissorTest( boolean: any ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/ShaderChunk.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/ShaderChunk.d.ts new file mode 100755 index 0000000..683c406 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/ShaderChunk.d.ts @@ -0,0 +1,120 @@ +// Renderers / Shaders ///////////////////////////////////////////////////////////////////// +export let ShaderChunk: { + [name: string]: string; + + alphamap_fragment: string; + alphamap_pars_fragment: string; + alphatest_fragment: string; + aomap_fragment: string; + aomap_pars_fragment: string; + begin_vertex: string; + beginnormal_vertex: string; + bsdfs: string; + bumpmap_pars_fragment: string; + clipping_planes_fragment: string; + clipping_planes_pars_fragment: string; + clipping_planes_pars_vertex: string; + clipping_planes_vertex: string; + color_fragment: string; + color_pars_fragment: string; + color_pars_vertex: string; + color_vertex: string; + common: string; + cube_frag: string; + cube_vert: string; + cube_uv_reflection_fragment: string; + defaultnormal_vertex: string; + depth_frag: string; + depth_vert: string; + distanceRGBA_frag: string; + distanceRGBA_vert: string; + displacementmap_vertex: string; + displacementmap_pars_vertex: string; + emissivemap_fragment: string; + emissivemap_pars_fragment: string; + encodings_pars_fragment: string; + encodings_fragment: string; + envmap_fragment: string; + envmap_common_pars_fragment: string + envmap_pars_fragment: string; + envmap_pars_vertex: string; + envmap_vertex: string; + equirect_frag: string; + equirect_vert: string; + fog_fragment: string; + fog_pars_fragment: string; + linedashed_frag: string; + linedashed_vert: string; + lightmap_fragment: string; + lightmap_pars_fragment: string; + lights_lambert_vertex: string; + lights_pars_begin: string; + envmap_physical_pars_fragment: string; + lights_pars_map: string; + lights_phong_fragment: string; + lights_phong_pars_fragment: string; + lights_physical_fragment: string; + lights_physical_pars_fragment: string; + lights_fragment_begin: string; + lights_fragment_maps: string; + lights_fragment_end: string; + logdepthbuf_fragment: string; + logdepthbuf_pars_fragment: string; + logdepthbuf_pars_vertex: string; + logdepthbuf_vertex: string; + map_fragment: string; + map_pars_fragment: string; + map_particle_fragment: string; + map_particle_pars_fragment: string; + meshbasic_frag: string; + meshbasic_vert: string; + meshlambert_frag: string; + meshlambert_vert: string; + meshphong_frag: string; + meshphong_vert: string; + meshphysical_frag: string; + meshphysical_vert: string; + metalnessmap_fragment: string; + metalnessmap_pars_fragment: string; + morphnormal_vertex: string; + morphtarget_pars_vertex: string; + morphtarget_vertex: string; + normal_flip: string; + normal_frag: string; + normal_fragment_begin: string; + normal_fragment_maps: string; + normal_vert: string; + normalmap_pars_fragment: string; + clearcoat_normal_fragment_begin: string; + clearcoat_normal_fragment_maps: string; + clearcoat_normalmap_pars_fragment: string; + packing: string; + points_frag: string; + points_vert: string; + shadow_frag: string; + shadow_vert: string; + + premultiplied_alpha_fragment: string; + project_vertex: string; + roughnessmap_fragment: string; + roughnessmap_pars_fragment: string; + shadowmap_pars_fragment: string; + shadowmap_pars_vertex: string; + shadowmap_vertex: string; + shadowmask_pars_fragment: string; + skinbase_vertex: string; + skinning_pars_vertex: string; + skinning_vertex: string; + skinnormal_vertex: string; + specularmap_fragment: string; + specularmap_pars_fragment: string; + tonemapping_fragment: string; + tonemapping_pars_fragment: string; + uv2_pars_fragment: string; + uv2_pars_vertex: string; + uv2_vertex: string; + uv_pars_fragment: string; + uv_pars_vertex: string; + uv_vertex: string; + worldpos_vertex: string; +}; diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/ShaderLib.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/ShaderLib.d.ts new file mode 100755 index 0000000..e2c31b9 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/ShaderLib.d.ts @@ -0,0 +1,27 @@ +import { IUniform } from './UniformsLib'; + +export interface Shader { + uniforms: { [uniform: string]: IUniform }; + vertexShader: string; + fragmentShader: string; +} + +export let ShaderLib: { + [name: string]: Shader; + basic: Shader; + lambert: Shader; + phong: Shader; + standard: Shader; + matcap: Shader; + points: Shader; + dashed: Shader; + depth: Shader; + normal: Shader; + sprite: Shader; + background: Shader; + cube: Shader; + equirect: Shader; + distanceRGBA: Shader; + shadow: Shader; + physical: Shader; +}; diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/UniformsLib.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/UniformsLib.d.ts new file mode 100755 index 0000000..ec36440 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/UniformsLib.d.ts @@ -0,0 +1,136 @@ +export interface IUniform { + value: any; +} + +export let UniformsLib: { + common: { + diffuse: IUniform; + opacity: IUniform; + map: IUniform; + uvTransform: IUniform; + alphaMap: IUniform; + }; + specularmap: { + specularMap: IUniform; + }; + envmap: { + envMap: IUniform; + flipEnvMap: IUniform; + reflectivity: IUniform; + refractionRatio: IUniform; + maxMipLevel: IUniform; + }; + aomap: { + aoMap: IUniform; + aoMapIntensity: IUniform; + }; + lightmap: { + lightMap: IUniform; + lightMapIntensity: IUniform; + }; + emissivemap: { + emissiveMap: IUniform; + }; + bumpmap: { + bumpMap: IUniform; + bumpScale: IUniform; + }; + normalmap: { + normalMap: IUniform; + normalScale: IUniform; + }; + displacementmap: { + displacementMap: IUniform; + displacementScale: IUniform; + displacementBias: IUniform; + }; + roughnessmap: { + roughnessMap: IUniform; + }; + metalnessmap: { + metalnessMap: IUniform; + }; + gradientmap: { + gradientMap: IUniform; + }; + fog: { + fogDensity: IUniform; + fogNear: IUniform; + fogFar: IUniform; + fogColor: IUniform; + }; + lights: { + ambientLightColor: IUniform; + directionalLights: { + value: any[]; + properties: { + direction: {}; + color: {}; + shadow: {}; + shadowBias: {}; + shadowRadius: {}; + shadowMapSize: {}; + }; + }; + directionalShadowMap: IUniform; + directionalShadowMatrix: IUniform; + spotLights: { + value: any[]; + properties: { + color: {}; + position: {}; + direction: {}; + distance: {}; + coneCos: {}; + penumbraCos: {}; + decay: {}; + shadow: {}; + shadowBias: {}; + shadowRadius: {}; + shadowMapSize: {}; + }; + }; + spotShadowMap: IUniform; + spotShadowMatrix: IUniform; + pointLights: { + value: any[]; + properties: { + color: {}; + position: {}; + decay: {}; + distance: {}; + shadow: {}; + shadowBias: {}; + shadowRadius: {}; + shadowMapSize: {}; + }; + }; + pointShadowMap: IUniform; + pointShadowMatrix: IUniform; + hemisphereLights: { + value: any[]; + properties: { + direction: {}; + skycolor: {}; + groundColor: {}; + }; + }; + rectAreaLights: { + value: any[]; + properties: { + color: {}; + position: {}; + width: {}; + height: {}; + }; + }; + }; + points: { + diffuse: IUniform; + opacity: IUniform; + size: IUniform; + scale: IUniform; + map: IUniform; + uvTransform: IUniform; + }; +}; diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/UniformsUtils.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/UniformsUtils.d.ts new file mode 100755 index 0000000..c8118b8 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/shaders/UniformsUtils.d.ts @@ -0,0 +1,9 @@ +export function cloneUniforms( uniforms_src: any ): any; +export function mergeUniforms( uniforms: any[] ): any; + +export namespace UniformsUtils { + export { + mergeUniforms as merge, + cloneUniforms as clone, + }; +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLAnimation.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLAnimation.d.ts new file mode 100755 index 0000000..0ffe0fd --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLAnimation.d.ts @@ -0,0 +1,11 @@ +export class WebGLAnimation { + + start(): void; + + stop(): void; + + setAnimationLoop( callback: Function ): void; + + setContext( value: WebGLRenderingContext | WebGL2RenderingContext ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLAttributes.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLAttributes.d.ts new file mode 100755 index 0000000..b338e97 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLAttributes.d.ts @@ -0,0 +1,19 @@ +import { BufferAttribute } from "../../core/BufferAttribute"; +import { InterleavedBufferAttribute } from "../../core/InterleavedBufferAttribute"; + +export class WebGLAttributes { + + constructor( gl: WebGLRenderingContext | WebGL2RenderingContext ); + + get( attribute: BufferAttribute | InterleavedBufferAttribute ): { + buffer: WebGLBuffer, + type: GLenum, + bytesPerElement: number, + version: number + }; + + remove( attribute: BufferAttribute | InterleavedBufferAttribute ): void; + + update( attribute: BufferAttribute | InterleavedBufferAttribute, bufferType: GLenum ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLBackground.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLBackground.d.ts new file mode 100755 index 0000000..521b6e2 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLBackground.d.ts @@ -0,0 +1,19 @@ + +import { Color } from '../../math/Color'; +import { WebGLRenderer } from '../WebGLRenderer'; +import { WebGLState } from './WebGLState'; +import { WebGLObjects } from './WebGLObjects'; +import { WebGLRenderLists } from './WebGLRenderLists'; +import { Scene } from '../../scenes/Scene'; + +export class WebGLBackground { + + constructor( renderer: WebGLRenderer, state: WebGLState, objects: WebGLObjects, premultipliedAlpha: any ); + + getClearColor(): void; + setClearColor( color: Color, alpha: any ): void; + getClearAlpha(): void; + setClearAlpha( alpha: any ): void; + render( renderList: WebGLRenderLists, scene: Scene, camera: any, forceClear: any ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLBufferRenderer.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLBufferRenderer.d.ts new file mode 100755 index 0000000..974f4a4 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLBufferRenderer.d.ts @@ -0,0 +1,10 @@ +// Renderers / WebGL ///////////////////////////////////////////////////////////////////// +export class WebGLBufferRenderer { + + constructor( _gl: WebGLRenderingContext, extensions: any, _infoRender: any ); + + setMode( value: any ): void; + render( start: any, count: number ): void; + renderInstances( geometry: any ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLCapabilities.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLCapabilities.d.ts new file mode 100755 index 0000000..306a452 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLCapabilities.d.ts @@ -0,0 +1,32 @@ +export interface WebGLCapabilitiesParameters { + precision?: any; + logarithmicDepthBuffer?: any; +} + +export class WebGLCapabilities { + + constructor( + gl: WebGLRenderingContext, + extensions: any, + parameters: WebGLCapabilitiesParameters + ); + + isWebGL2: boolean; + precision: any; + logarithmicDepthBuffer: any; + maxTextures: any; + maxVertexTextures: any; + maxTextureSize: any; + maxCubemapSize: any; + maxAttributes: any; + maxVertexUniforms: any; + maxVaryings: any; + maxFragmentUniforms: any; + vertexTextures: any; + floatFragmentTextures: any; + floatVertexTextures: any; + + getMaxAnisotropy(): number; + getMaxPrecision( precision: string ): string; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLClipping.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLClipping.d.ts new file mode 100755 index 0000000..fa93aaa --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLClipping.d.ts @@ -0,0 +1,19 @@ +import { Camera } from './../../cameras/Camera'; + +export class WebGLClipping { + + uniform: { value: any; needsUpdate: boolean }; + numPlanes: number; + + init( planes: any[], enableLocalClipping: boolean, camera: Camera ): boolean; + beginShadows(): void; + endShadows(): void; + setState( + planes: any[], + clipShadows: boolean, + camera: Camera, + cache: boolean, + fromCache: boolean + ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLExtensions.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLExtensions.d.ts new file mode 100755 index 0000000..50a094c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLExtensions.d.ts @@ -0,0 +1,7 @@ +export class WebGLExtensions { + + constructor( gl: WebGLRenderingContext ); + + get( name: string ): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLGeometries.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLGeometries.d.ts new file mode 100755 index 0000000..5000ce8 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLGeometries.d.ts @@ -0,0 +1,16 @@ +import { WebGLAttributes } from './WebGLAttributes'; +import { WebGLInfo } from './WebGLInfo'; +import { BufferAttribute } from '../../core/BufferAttribute'; +import { BufferGeometry } from '../../core/BufferGeometry'; +import { Geometry } from '../../core/Geometry'; +import { Object3D } from '../../core/Object3D'; + +export class WebGLGeometries { + + constructor( gl: WebGLRenderingContext, attributes: WebGLAttributes, info: WebGLInfo ); + + get( object: Object3D, geometry: Geometry | BufferGeometry ): BufferGeometry; + update( geometry: Geometry | BufferGeometry ): void; + getWireframeAttribute( geometry: Geometry | BufferGeometry ): BufferAttribute; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLIndexedBufferRenderer.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLIndexedBufferRenderer.d.ts new file mode 100755 index 0000000..0b0e306 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLIndexedBufferRenderer.d.ts @@ -0,0 +1,20 @@ +export class WebGLIndexedBufferRenderer { + + constructor( + gl: WebGLRenderingContext, + extensions: any, + info: any, + capabilities: any + ); + + setMode( value: any ): void; + setIndex( index: any ): void; + render( start: any, count: number ): void; + renderInstances( + geometry: any, + start: any, + count: number, + primcount: number + ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLInfo.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLInfo.d.ts new file mode 100755 index 0000000..df1b32e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLInfo.d.ts @@ -0,0 +1,26 @@ +import { WebGLProgram } from './WebGLProgram'; + +/** + * An object with a series of statistical information about the graphics board memory and the rendering process. + */ +export class WebGLInfo { + + constructor( gl: WebGLRenderingContext ); + + autoReset: boolean; + memory: { + geometries: number; + textures: number; + }; + programs: WebGLProgram[] | null; + render: { + calls: number; + frame: number; + lines: number; + points: number; + triangles: number; + }; + update( count: number, mode: GLenum, instanceCount: number ): void; + reset(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLLights.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLLights.d.ts new file mode 100755 index 0000000..9f3d595 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLLights.d.ts @@ -0,0 +1,42 @@ +export class WebGLLights { + + constructor( gl: WebGLRenderingContext, properties: any, info: any ); + + state: { + version: number; + + hash: { + directionalLength: number; + pointLength: number; + spotLength: number; + rectAreaLength: number; + hemiLength: number; + + numDirectionalShadows: number; + numPointShadows: number; + numSpotShadows: number; + }; + + ambient: Array; + probe: Array; + directional: Array; + directionalShadowMap: Array; + directionalShadowMatrix: Array; + spot: Array; + spotShadowMap: Array; + spotShadowMatrix: Array; + rectArea: Array; + point: Array; + pointShadowMap: Array; + pointShadowMatrix: Array; + hemi: Array; + + numDirectionalShadows: number; + numPointShadows: number; + numSpotShadows: number; + }; + + get( light: any ): any; + setup( lights: any, shadows: any, camera: any ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLMorphtargets.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLMorphtargets.d.ts new file mode 100755 index 0000000..473112c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLMorphtargets.d.ts @@ -0,0 +1,12 @@ +import { Object3D } from '../../core/Object3D'; +import { BufferGeometry } from '../../core/BufferGeometry'; +import { Material } from '../../materials/Material'; +import { WebGLProgram } from './WebGLProgram'; + +export class WebGLMorphtargets { + + constructor( gl: WebGLRenderingContext ); + + update( object: Object3D, geometry: BufferGeometry, material: Material, program: WebGLProgram ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLMultiview.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLMultiview.d.ts new file mode 100755 index 0000000..58ebd06 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLMultiview.d.ts @@ -0,0 +1,17 @@ +import { Camera } from './../../cameras/Camera'; +import { Object3D } from './../../core/Object3D'; +import { WebGLRenderer } from '../WebGLRenderer'; +import { WebGLUniforms } from './WebGLUniforms'; + +export class WebGLMultiview { + + constructor( renderer: WebGLRenderer, gl: WebGLRenderingContext ); + + isAvailable(): boolean; + attachCamera( camera: Camera ): void; + detachCamera( camera: Camera ): void; + updateCameraProjectionMatricesUniform( camera: Camera, uniforms: WebGLUniforms ): void; + updateCameraViewMatricesUniform( camera: Camera, uniforms: WebGLUniforms ): void; + updateObjectMatricesUniforms( object: Object3D, camera: Camera, uniforms: WebGLUniforms ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLObjects.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLObjects.d.ts new file mode 100755 index 0000000..73158d5 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLObjects.d.ts @@ -0,0 +1,13 @@ +export class WebGLObjects { + + constructor( + gl: WebGLRenderingContext, + geometries: any, + attributes: any, + info: any + ); + + update( object: any ): any; + dispose(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLProgram.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLProgram.d.ts new file mode 100755 index 0000000..24f4cbb --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLProgram.d.ts @@ -0,0 +1,37 @@ +import { WebGLRenderer, WebGLRendererParameters } from './../WebGLRenderer'; +import { ShaderMaterial } from './../../materials/ShaderMaterial'; +import { WebGLShader } from './WebGLShader'; +import { WebGLExtensions } from './WebGLExtensions'; +import { WebGLUniforms } from './WebGLUniforms'; + +export class WebGLProgram { + + constructor( + renderer: WebGLRenderer, + extensions: WebGLExtensions, + cacheKey: string, + material: ShaderMaterial, + shader: WebGLShader, + parameters: WebGLRendererParameters + ); + + id: number; + cacheKey: string; // unique identifier for this program, used for looking up compiled programs from cache. + usedTimes: number; + program: any; + vertexShader: WebGLShader; + fragmentShader: WebGLShader; + /** + * @deprecated Use {@link WebGLProgram#getUniforms getUniforms()} instead. + */ + uniforms: any; + /** + * @deprecated Use {@link WebGLProgram#getAttributes getAttributes()} instead. + */ + attributes: any; + + getUniforms(): WebGLUniforms; + getAttributes(): any; + destroy(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLPrograms.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLPrograms.d.ts new file mode 100755 index 0000000..d66e664 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLPrograms.d.ts @@ -0,0 +1,28 @@ +import { WebGLRenderer } from './../WebGLRenderer'; +import { WebGLProgram } from './WebGLProgram'; +import { WebGLCapabilities } from './WebGLCapabilities'; +import { WebGLExtensions } from './WebGLExtensions'; +import { Material } from './../../materials/Material'; + +export class WebGLPrograms { + + constructor( renderer: WebGLRenderer, extensions: WebGLExtensions, capabilities: WebGLCapabilities ); + + programs: WebGLProgram[]; + + getParameters( + material: Material, + lights: any, + fog: any, + nClipPlanes: number, + object: any + ): any; + getProgramCacheKey( material: Material, parameters: any ): string; + acquireProgram( + material: Material, + parameters: any, + cacheKey: string + ): WebGLProgram; + releaseProgram( program: WebGLProgram ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLProperties.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLProperties.d.ts new file mode 100755 index 0000000..66b76b1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLProperties.d.ts @@ -0,0 +1,10 @@ +export class WebGLProperties { + + constructor(); + + get( object: any ): any; + remove( object: any ): void; + update( object: any, key: any, value: any ): any; + dispose(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLRenderLists.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLRenderLists.d.ts new file mode 100755 index 0000000..05c4ad7 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLRenderLists.d.ts @@ -0,0 +1,53 @@ +import { Object3D } from './../../core/Object3D'; +import { Material } from './../../materials/Material'; +import { WebGLProgram } from './WebGLProgram'; +import { Group } from './../../objects/Group'; +import { Scene } from './../../scenes/Scene'; +import { Camera } from './../../cameras/Camera'; +import { BufferGeometry } from '../../core/BufferGeometry'; + +export interface RenderTarget {} // not defined in the code, used in LightShadow and WebGRenderer classes + +export interface RenderItem { + id: number; + object: Object3D; + geometry: BufferGeometry | null; + material: Material; + program: WebGLProgram; + groupOrder: number; + renderOrder: number; + z: number; + group: Group | null; +} + +export class WebGLRenderList { + + opaque: Array; + transparent: Array; + init(): void; + push( + object: Object3D, + geometry: BufferGeometry | null, + material: Material, + groupOrder: number, + z: number, + group: Group | null + ): void; + unshift( + object: Object3D, + geometry: BufferGeometry | null, + material: Material, + groupOrder: number, + z: number, + group: Group | null + ): void; + sort(): void; + +} + +export class WebGLRenderLists { + + dispose(): void; + get( scene: Scene, camera: Camera ): WebGLRenderList; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLRenderStates.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLRenderStates.d.ts new file mode 100755 index 0000000..5edb867 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLRenderStates.d.ts @@ -0,0 +1,25 @@ +import { Scene } from '../../scenes/Scene'; +import { Camera } from '../../cameras/Camera'; +import { Light } from '../../lights/Light'; +import { WebGLLights } from './WebGLLights'; + +interface WebGLRenderState { + + init(): void; + state: { + lightsArray: Light[]; + shadowsArray: Light[]; + lights: WebGLLights; + }; + setupLights( camera: Camera ): void; + pushLight( light: Light ): void; + pushShadow( shadowLight: Light ): void; + +} + +export class WebGLRenderStates { + + get( scene: Scene, camera: Camera ): WebGLRenderState; + dispose(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLShader.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLShader.d.ts new file mode 100755 index 0000000..e686a7e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLShader.d.ts @@ -0,0 +1,5 @@ +export class WebGLShader { + + constructor( gl: WebGLRenderingContext, type: string, string: string ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLShadowMap.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLShadowMap.d.ts new file mode 100755 index 0000000..2c0109c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLShadowMap.d.ts @@ -0,0 +1,27 @@ +import { Scene } from './../../scenes/Scene'; +import { Camera } from './../../cameras/Camera'; +import { WebGLRenderer } from '../WebGLRenderer'; +import { ShadowMapType } from '../../constants'; + +export class WebGLShadowMap { + + constructor( + _renderer: WebGLRenderer, + _lights: any[], + _objects: any[], + capabilities: any + ); + + enabled: boolean; + autoUpdate: boolean; + needsUpdate: boolean; + type: ShadowMapType; + + render( scene: Scene, camera: Camera ): void; + + /** + * @deprecated Use {@link WebGLShadowMap#renderReverseSided .shadowMap.renderReverseSided} instead. + */ + cullFace: any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLState.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLState.d.ts new file mode 100755 index 0000000..5e47488 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLState.d.ts @@ -0,0 +1,127 @@ +import { CullFace, Blending, BlendingEquation, BlendingSrcFactor, BlendingDstFactor, DepthModes } from '../../constants'; +import { WebGLCapabilities } from './WebGLCapabilities'; +import { WebGLExtensions } from './WebGLExtensions'; +import { Material } from '../../materials/Material'; +import { Vector4 } from '../../math/Vector4'; + +export class WebGLColorBuffer { + + constructor(); + + setMask( colorMask: boolean ): void; + setLocked( lock: boolean ): void; + setClear( r: number, g: number, b: number, a: number, premultipliedAlpha: boolean ): void; + reset(): void; + +} + +export class WebGLDepthBuffer { + + constructor(); + + setTest( depthTest: boolean ): void; + setMask( depthMask: boolean ): void; + setFunc( depthFunc: DepthModes ): void; + setLocked( lock: boolean ): void; + setClear( depth: number ): void; + reset(): void; + +} + +export class WebGLStencilBuffer { + + constructor(); + + setTest( stencilTest: boolean ): void; + setMask( stencilMask: number ): void; + setFunc( stencilFunc: number, stencilRef: number, stencilMask: number ): void; + setOp( stencilFail: number, stencilZFail: number, stencilZPass: number ): void; + setLocked( lock: boolean ): void; + setClear( stencil: number ): void; + reset(): void; + +} + +export class WebGLState { + + constructor( gl: WebGLRenderingContext, extensions: WebGLExtensions, capabilities: WebGLCapabilities ); + + buffers: { + color: WebGLColorBuffer; + depth: WebGLDepthBuffer; + stencil: WebGLStencilBuffer; + }; + + initAttributes(): void; + enableAttribute( attribute: number ): void; + enableAttributeAndDivisor( attribute: number, meshPerAttribute: number ): void; + disableUnusedAttributes(): void; + enable( id: number ): void; + disable( id: number ): void; + useProgram( program: any ): boolean; + setBlending( + blending: Blending, + blendEquation?: BlendingEquation, + blendSrc?: BlendingSrcFactor, + blendDst?: BlendingDstFactor, + blendEquationAlpha?: BlendingEquation, + blendSrcAlpha?: BlendingSrcFactor, + blendDstAlpha?: BlendingDstFactor, + premultiplyAlpha?: boolean + ): void; + setMaterial( material: Material, frontFaceCW: boolean ): void; + setFlipSided( flipSided: boolean ): void; + setCullFace( cullFace: CullFace ): void; + setLineWidth( width: number ): void; + setPolygonOffset( polygonoffset: boolean, factor: number, units: number ): void; + setScissorTest( scissorTest: boolean ): void; + activeTexture( webglSlot: number ): void; + bindTexture( webglType: number, webglTexture: any ): void; + unbindTexture(): void; + // Same interface as https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/compressedTexImage2D + compressedTexImage2D( + target: number, + level: number, + internalformat: number, + width: number, + height: number, + border: number, + data: ArrayBufferView + ): void; + // Same interface as https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texImage2D + texImage2D( + target: number, + level: number, + internalformat: number, + width: number, + height: number, + border: number, + format: number, + type: number, + pixels: ArrayBufferView | null + ): void; + texImage2D( + target: number, + level: number, + internalformat: number, + format: number, + type: number, + source: any + ): void; + texImage3D( + target: number, + level: number, + internalformat: number, + width: number, + height: number, + depth: number, + border: number, + format: number, + type: number, + pixels: any + ): void; + scissor( scissor: Vector4 ): void; + viewport( viewport: Vector4 ): void; + reset(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLTextures.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLTextures.d.ts new file mode 100755 index 0000000..7c508d9 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLTextures.d.ts @@ -0,0 +1,33 @@ +import { WebGLExtensions } from './WebGLExtensions'; +import { WebGLState } from './WebGLState'; +import { WebGLProperties } from './WebGLProperties'; +import { WebGLCapabilities } from './WebGLCapabilities'; +import { WebGLUtils } from './WebGLUtils'; +import { WebGLInfo } from './WebGLInfo'; + +export class WebGLTextures { + + constructor( + gl: WebGLRenderingContext, + extensions: WebGLExtensions, + state: WebGLState, + properties: WebGLProperties, + capabilities: WebGLCapabilities, + utils: WebGLUtils, + info: WebGLInfo + ); + + allocateTextureUnit(): void; + resetTextureUnits(): void; + setTexture2D( texture: any, slot: number ): void; + setTexture2DArray( texture: any, slot: number ): void; + setTexture3D( texture: any, slot: number ): void; + setTextureCube( texture: any, slot: number ): void; + setTextureCubeDynamic( texture: any, slot: number ): void; + setupRenderTarget( renderTarget: any ): void; + updateRenderTargetMipmap( renderTarget: any ): void; + updateMultisampleRenderTarget( renderTarget: any ): void; + safeSetTexture2D( texture: any, slot: number ): void; + safeSetTextureCube( texture: any, slot: number ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLUniforms.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLUniforms.d.ts new file mode 100755 index 0000000..b70f3ba --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLUniforms.d.ts @@ -0,0 +1,14 @@ +import { WebGLProgram } from './WebGLProgram'; +import { WebGLTextures } from './WebGLTextures'; + +export class WebGLUniforms { + + constructor( gl: WebGLRenderingContext, program: WebGLProgram ); + + setValue( gl: WebGLRenderingContext, name: string, value: any, textures: WebGLTextures ): void; + setOptional( gl: WebGLRenderingContext, object: any, name: string ): void; + + static upload( gl: WebGLRenderingContext, seq: any, values: any[], textures: WebGLTextures ): void; + static seqWithValue( seq: any, values: any[] ): any[]; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLUtils.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLUtils.d.ts new file mode 100755 index 0000000..a70856e --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webgl/WebGLUtils.d.ts @@ -0,0 +1,7 @@ +export class WebGLUtils { + + constructor( gl: WebGLRenderingContext | WebGL2RenderingContext, extensions: any, capabilities: any ); + + convert( p: any ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webvr/WebVRManager.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webvr/WebVRManager.d.ts new file mode 100755 index 0000000..6c2763b --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webvr/WebVRManager.d.ts @@ -0,0 +1,25 @@ +import { Object3D } from '../../core/Object3D'; +import { Group } from '../../objects/Group'; +import { PerspectiveCamera } from '../../cameras/PerspectiveCamera'; +import { ArrayCamera } from '../../cameras/ArrayCamera'; +import { Matrix4 } from '../../math/Matrix4'; + +export class WebVRManager { + + constructor( renderer: any ); + + enabled: boolean; + getController( id: number ): Group; + getDevice(): VRDisplay | null; + setDevice( device: VRDisplay | null ): void; + setFramebufferScaleFactor( value: number ): void; + setReferenceSpaceType( value: string ): void; + setPoseTarget( object: Object3D | null ): void; + getCamera( camera: PerspectiveCamera ): PerspectiveCamera | ArrayCamera; + getStandingMatrix(): Matrix4; + isPresenting: () => boolean; + setAnimationLoop( callback: Function ): void; + submitFrame(): void; + dispose(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webvr/WebVRUtils.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webvr/WebVRUtils.d.ts new file mode 100755 index 0000000..8e3e62a --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webvr/WebVRUtils.d.ts @@ -0,0 +1,3 @@ +import { Camera } from '../../cameras/Camera'; + +export function setProjectionFromUnion( camera: Camera, cameraL: Camera, cameraR: Camera ): void; diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webvr/WebXRManager.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webvr/WebXRManager.d.ts new file mode 100755 index 0000000..4cdfbd0 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/renderers/webvr/WebXRManager.d.ts @@ -0,0 +1,19 @@ +import { Group } from '../../objects/Group'; +import { Camera } from '../../cameras/Camera'; + +export class WebXRManager { + + constructor( renderer: any, gl: WebGLRenderingContext ); + + enabled: boolean; + getController( id: number ): Group; + setFramebufferScaleFactor( value: number ): void; + setReferenceSpaceType( value: string ): void; + getSession(): any; + setSession( value: any ): void; + getCamera( camera: Camera ): Camera; + isPresenting: () => boolean; + setAnimationLoop( callback: Function ): void; + dispose(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/scenes/Fog.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/scenes/Fog.d.ts new file mode 100755 index 0000000..e992d14 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/scenes/Fog.d.ts @@ -0,0 +1,38 @@ +import { Color } from './../math/Color'; + +export interface IFog { + name: string; + color: Color; + clone(): this; + toJSON(): any; +} + +/** + * This class contains the parameters that define linear fog, i.e., that grows linearly denser with the distance. + */ +export class Fog implements IFog { + + constructor( hex: number, near?: number, far?: number ); + + name: string; + + /** + * Fog color. + */ + color: Color; + + /** + * The minimum distance to start applying fog. Objects that are less than 'near' units from the active camera won't be affected by fog. + */ + near: number; + + /** + * The maximum distance at which fog stops being calculated and applied. Objects that are more than 'far' units away from the active camera won't be affected by fog. + * Default is 1000. + */ + far: number; + + clone(): this; + toJSON(): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/scenes/FogExp2.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/scenes/FogExp2.d.ts new file mode 100755 index 0000000..b9897b2 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/scenes/FogExp2.d.ts @@ -0,0 +1,22 @@ +import { Color } from './../math/Color'; +import { IFog } from './Fog'; +/** + * This class contains the parameters that define linear fog, i.e., that grows exponentially denser with the distance. + */ +export class FogExp2 implements IFog { + + constructor( hex: number | string, density?: number ); + + name: string; + color: Color; + + /** + * Defines how fast the fog will grow dense. + * Default is 0.00025. + */ + density: number; + + clone(): this; + toJSON(): any; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/scenes/Scene.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/scenes/Scene.d.ts new file mode 100755 index 0000000..1e77672 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/scenes/Scene.d.ts @@ -0,0 +1,32 @@ +import { IFog } from './Fog'; +import { Material } from './../materials/Material'; +import { Object3D } from './../core/Object3D'; +import { Color } from '../math/Color'; +import { Texture } from '../textures/Texture'; +// Scenes ///////////////////////////////////////////////////////////////////// + +/** + * Scenes allow you to set up what and where is to be rendered by three.js. This is where you place objects, lights and cameras. + */ +export class Scene extends Object3D { + + constructor(); + + type: 'Scene'; + + /** + * A fog instance defining the type of fog that affects everything rendered in the scene. Default is null. + */ + fog: IFog | null; + + /** + * If not null, it will force everything in the scene to be rendered with that material. Default is null. + */ + overrideMaterial: Material | null; + autoUpdate: boolean; + background: null | Color | Texture; + + toJSON( meta?: any ): any; + dispose(): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/CanvasTexture.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/CanvasTexture.d.ts new file mode 100755 index 0000000..67b0d27 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/CanvasTexture.d.ts @@ -0,0 +1,24 @@ +import { Texture } from './Texture'; +import { + Mapping, + Wrapping, + TextureFilter, + PixelFormat, + TextureDataType, +} from '../constants'; + +export class CanvasTexture extends Texture { + + constructor( + canvas: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement, + mapping?: Mapping, + wrapS?: Wrapping, + wrapT?: Wrapping, + magFilter?: TextureFilter, + minFilter?: TextureFilter, + format?: PixelFormat, + type?: TextureDataType, + anisotropy?: number + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/CompressedTexture.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/CompressedTexture.d.ts new file mode 100755 index 0000000..00b8d51 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/CompressedTexture.d.ts @@ -0,0 +1,30 @@ +import { Texture } from './Texture'; +import { + Mapping, + Wrapping, + TextureFilter, + CompressedPixelFormat, + TextureDataType, + TextureEncoding, +} from '../constants'; + +export class CompressedTexture extends Texture { + + constructor( + mipmaps: ImageData[], + width: number, + height: number, + format?: CompressedPixelFormat, + type?: TextureDataType, + mapping?: Mapping, + wrapS?: Wrapping, + wrapT?: Wrapping, + magFilter?: TextureFilter, + minFilter?: TextureFilter, + anisotropy?: number, + encoding?: TextureEncoding + ); + + image: { width: number; height: number }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/CubeTexture.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/CubeTexture.d.ts new file mode 100755 index 0000000..b2ae012 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/CubeTexture.d.ts @@ -0,0 +1,28 @@ +import { Texture } from './Texture'; +import { + Mapping, + Wrapping, + TextureFilter, + PixelFormat, + TextureDataType, + TextureEncoding, +} from '../constants'; + +export class CubeTexture extends Texture { + + constructor( + images?: any[], // HTMLImageElement or HTMLCanvasElement + mapping?: Mapping, + wrapS?: Wrapping, + wrapT?: Wrapping, + magFilter?: TextureFilter, + minFilter?: TextureFilter, + format?: PixelFormat, + type?: TextureDataType, + anisotropy?: number, + encoding?: TextureEncoding + ); + + images: any; // returns and sets the value of Texture.image in the codde ? + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DataTexture.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DataTexture.d.ts new file mode 100755 index 0000000..d778167 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DataTexture.d.ts @@ -0,0 +1,31 @@ +import { Texture } from './Texture'; +import { + Mapping, + Wrapping, + TextureFilter, + PixelFormat, + TextureDataType, + TextureEncoding, +} from '../constants'; +import { TypedArray } from '../polyfills'; + +export class DataTexture extends Texture { + + constructor( + data: TypedArray, + width: number, + height: number, + format?: PixelFormat, + type?: TextureDataType, + mapping?: Mapping, + wrapS?: Wrapping, + wrapT?: Wrapping, + magFilter?: TextureFilter, + minFilter?: TextureFilter, + anisotropy?: number, + encoding?: TextureEncoding + ); + + image: ImageData; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DataTexture2DArray.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DataTexture2DArray.d.ts new file mode 100755 index 0000000..62de15c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DataTexture2DArray.d.ts @@ -0,0 +1,13 @@ +import { Texture } from './Texture'; +import { TypedArray } from '../polyfills'; + +export class DataTexture2DArray extends Texture { + + constructor( + data: TypedArray, + width: number, + height: number, + depth: number + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DataTexture3D.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DataTexture3D.d.ts new file mode 100755 index 0000000..6bdcc9a --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DataTexture3D.d.ts @@ -0,0 +1,13 @@ +import { Texture } from './Texture'; +import { TypedArray } from '../polyfills'; + +export class DataTexture3D extends Texture { + + constructor( + data: TypedArray, + width: number, + height: number, + depth: number + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DepthTexture.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DepthTexture.d.ts new file mode 100755 index 0000000..c9b4d37 --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/DepthTexture.d.ts @@ -0,0 +1,25 @@ +import { Texture } from './Texture'; +import { + Mapping, + Wrapping, + TextureFilter, + TextureDataType, +} from '../constants'; + +export class DepthTexture extends Texture { + + constructor( + width: number, + heighht: number, + type?: TextureDataType, + mapping?: Mapping, + wrapS?: Wrapping, + wrapT?: Wrapping, + magFilter?: TextureFilter, + minFilter?: TextureFilter, + anisotropy?: number + ); + + image: { width: number; height: number }; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/Texture.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/Texture.d.ts new file mode 100755 index 0000000..4854f6c --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/Texture.d.ts @@ -0,0 +1,65 @@ +import { Vector2, Vector } from './../math/Vector2'; +import { EventDispatcher } from './../core/EventDispatcher'; +import { + Mapping, + Wrapping, + TextureFilter, + PixelFormat, + TextureDataType, + TextureEncoding, +} from '../constants'; + +// Textures ///////////////////////////////////////////////////////////////////// +export let TextureIdCount: number; + +export class Texture extends EventDispatcher { + + constructor( + image?: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement, + mapping?: Mapping, + wrapS?: Wrapping, + wrapT?: Wrapping, + magFilter?: TextureFilter, + minFilter?: TextureFilter, + format?: PixelFormat, + type?: TextureDataType, + anisotropy?: number, + encoding?: TextureEncoding + ); + + id: number; + uuid: string; + name: string; + sourceFile: string; + image: any; // HTMLImageElement or ImageData or { width: number, height: number } in some children; + mipmaps: ImageData[]; + mapping: Mapping; + wrapS: Wrapping; + wrapT: Wrapping; + magFilter: TextureFilter; + minFilter: TextureFilter; + anisotropy: number; + format: PixelFormat; + type: TextureDataType; + offset: Vector2; + repeat: Vector2; + center: Vector2; + rotation: number; + generateMipmaps: boolean; + premultiplyAlpha: boolean; + flipY: boolean; + unpackAlignment: number; + encoding: TextureEncoding; + version: number; + needsUpdate: boolean; + onUpdate: () => void; + static DEFAULT_IMAGE: any; + static DEFAULT_MAPPING: any; + + clone(): this; + copy( source: Texture ): this; + toJSON( meta: any ): any; + dispose(): void; + transformUv( uv: Vector ): void; + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/VideoTexture.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/VideoTexture.d.ts new file mode 100755 index 0000000..f64103a --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/textures/VideoTexture.d.ts @@ -0,0 +1,24 @@ +import { Texture } from './Texture'; +import { + Mapping, + Wrapping, + TextureFilter, + PixelFormat, + TextureDataType, +} from '../constants'; + +export class VideoTexture extends Texture { + + constructor( + video: HTMLVideoElement, + mapping?: Mapping, + wrapS?: Wrapping, + wrapT?: Wrapping, + magFilter?: TextureFilter, + minFilter?: TextureFilter, + format?: PixelFormat, + type?: TextureDataType, + anisotropy?: number + ); + +} diff --git a/apps/module-ts/src/spine-ts/threejs/src/threejs/utils.d.ts b/apps/module-ts/src/spine-ts/threejs/src/threejs/utils.d.ts new file mode 100755 index 0000000..d74f7bf --- /dev/null +++ b/apps/module-ts/src/spine-ts/threejs/src/threejs/utils.d.ts @@ -0,0 +1,2 @@ +export function arrayMin( array: number[] ): number; +export function arrayMax( array: number[] ): number; diff --git a/apps/module-ts/src/spine-ts/tsconfig.canvas.json b/apps/module-ts/src/spine-ts/tsconfig.canvas.json new file mode 100755 index 0000000..18a2192 --- /dev/null +++ b/apps/module-ts/src/spine-ts/tsconfig.canvas.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "none", + "noImplicitAny": true, + "removeComments": true, + "preserveConstEnums": true, + "outFile": "build/spine-canvas.js", + "sourceMap": true, + "declaration": true + }, + "include": [ + "core/src/**/*", + "canvas/src/**/*" + ], + "exclude": [ + "webgl", + "widget", + "threejs", + "build" + ] +} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/tsconfig.core.json b/apps/module-ts/src/spine-ts/tsconfig.core.json new file mode 100755 index 0000000..9f8d925 --- /dev/null +++ b/apps/module-ts/src/spine-ts/tsconfig.core.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "none", + "noImplicitAny": true, + "removeComments": true, + "preserveConstEnums": true, + "outFile": "build/spine-core.js", + "sourceMap": true, + "declaration": true + }, + "include": [ + "core/src/**/*" + ], + "exclude": [ + "webgl", + "widget", + "canvas", + "threejs", + "build" + ] +} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/tsconfig.json b/apps/module-ts/src/spine-ts/tsconfig.json new file mode 100755 index 0000000..1352d1d --- /dev/null +++ b/apps/module-ts/src/spine-ts/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "module": "none", + "noImplicitAny": true, + "removeComments": true, + "preserveConstEnums": true, + "outFile": "build/spine-all.js", + "sourceMap": true, + "declaration": true, + "lib": [ + "DOM", + "ES2015", + "WebWorker.ImportScripts" + ] + }, + "include": [ + "core/src/**/*", + "canvas/src/**/*", + "webgl/src/**/*", + "threejs/src/**/*", + "player/src/**/*" + ], + "exclude": [ + "build" + ] +} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/tsconfig.player.json b/apps/module-ts/src/spine-ts/tsconfig.player.json new file mode 100755 index 0000000..a1f6b1a --- /dev/null +++ b/apps/module-ts/src/spine-ts/tsconfig.player.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "none", + "noImplicitAny": true, + "removeComments": true, + "preserveConstEnums": true, + "outFile": "build/spine-player.js", + "sourceMap": true, + "declaration": true + }, + "include": [ + "core/src/**/*", + "webgl/src/**/*", + "player/src/**/*" + ], + "exclude": [ + "canvas", + "threejs", + "build" + ] +} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/tsconfig.threejs.json b/apps/module-ts/src/spine-ts/tsconfig.threejs.json new file mode 100755 index 0000000..073623e --- /dev/null +++ b/apps/module-ts/src/spine-ts/tsconfig.threejs.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "none", + "noImplicitAny": true, + "removeComments": true, + "preserveConstEnums": true, + "outFile": "build/spine-threejs.js", + "sourceMap": true, + "declaration": true + }, + "include": [ + "core/src/**/*", + "threejs/src/**/*" + ], + "exclude": [ + "canvas", + "webgl", + "widget", + "build" + ] +} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/tsconfig.webgl.json b/apps/module-ts/src/spine-ts/tsconfig.webgl.json new file mode 100755 index 0000000..c26c7f8 --- /dev/null +++ b/apps/module-ts/src/spine-ts/tsconfig.webgl.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "none", + "noImplicitAny": true, + "removeComments": true, + "preserveConstEnums": true, + "outFile": "build/spine-webgl.js", + "sourceMap": true, + "declaration": true + }, + "include": [ + "core/src/**/*", + "webgl/src/**/*" + ], + "exclude": [ + "canvas", + "widget", + "threejs", + "build" + ] +} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/additiveblending.html b/apps/module-ts/src/spine-ts/webgl/demos/additiveblending.html new file mode 100755 index 0000000..c8ab6b8 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/additiveblending.html @@ -0,0 +1,19 @@ + + +IK Constraints - Spine Demo + + + + + + + +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/additiveblending.js b/apps/module-ts/src/spine-ts/webgl/demos/additiveblending.js new file mode 100755 index 0000000..d279f23 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/additiveblending.js @@ -0,0 +1,160 @@ +var additiveBlendingDemo = function(canvas, bgColor) { + var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5); + var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8); + var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5); + var COLOR_OUTER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.8); + var HANDLE_SIZE = 0.10; + + var gl, renderer, input, assetManager; + var skeleton, state, bounds; + var timeKeeper, loadingScreen; + var target = null; + var dragging = false; + var handle = new spine.Vector2(); + var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2(), temp3 = new spine.webgl.Vector3(); + var isPlaying = true; + + var left, right, up, down; + var cursor; + + var clientMouseX = 0, clientMouseY = 0, mouseMoved; + + var DEMO_NAME = "AdditiveBlendingDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function isMobileDevice() { + return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); + }; + + function init () { + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + + renderer = new spine.webgl.SceneRenderer(canvas, gl); + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas2.png"); + assetManager.loadText(DEMO_NAME, "atlas2.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + timeKeeper = new spine.TimeKeeper(); + + cursor = document.getElementById("cursor"); + } + + function loadingComplete () { + var atlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "atlas2.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(atlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json")["owl"]); + skeleton = new spine.Skeleton(skeletonData); + state = new spine.AnimationState(new spine.AnimationStateData(skeleton.data)); + + state.setAnimation(0, "idle", true); + state.setAnimation(1, "blink", true); + left = state.setAnimation(2, "left", true); + right = state.setAnimation(3, "right", true); + up = state.setAnimation(4, "up", true); + down = state.setAnimation(5, "down", true); + left.mixBlend = spine.MixBlend.add; + right.mixBlend = spine.MixBlend.add; + up.mixBlend = spine.MixBlend.add; + down.mixBlend = spine.MixBlend.add; + left.alpha = 0; + right.alpha = 0; + up.alpha = 0; + down.alpha = 0; + + state.apply(skeleton); + skeleton.updateWorldTransform(); + var offset = new spine.Vector2(); + bounds = new spine.Vector2(); + skeleton.getBounds(offset, bounds, []); + + renderer.camera.position.x = offset.x + bounds.x / 2; + renderer.camera.position.y = offset.y + bounds.y / 2; + + renderer.skeletonDebugRenderer.drawMeshHull = false; + renderer.skeletonDebugRenderer.drawMeshTriangles = false; + + setupInput(); + } + + function calculateBlend (x, y, isPageCoords) { + var canvasBounds = canvas.getBoundingClientRect(); + var centerX = canvasBounds.x + canvasBounds.width / 2; + var centerY = canvasBounds.y + canvasBounds.height / 2; + right.alpha = x < centerX ? 1 - x / centerX : 0; + left.alpha = x > centerX ? (x - centerX) / (window.innerWidth - centerX): 0; + up.alpha = y < centerY ? 1 - y / centerY : 0; + down.alpha = y > centerY ? (y - centerY) / (window.innerHeight - centerY): 0; + } + + function setupInput () { + if (!isMobileDevice()) { + document.addEventListener("mousemove", function (event) { + clientMouseX = event.clientX; + clientMouseY = event.clientY; + mouseMoved = true; + }, false); + } else { + var input = new spine.webgl.Input(canvas); + input.addListener({ + down: function(x, y) { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(handle.x, handle.y, 0).distance(coords) < canvas.width * HANDLE_SIZE) { + dragging = true; + } + }, + up: function(x, y) { + dragging = false; + }, + dragged: function(x, y) { + if (dragging && x > 0 && x < canvas.width && y > 0 && y < canvas.height) { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + handle.x = coords.x; + handle.y = coords.y; + calculateBlend(x, y, false); + } + } + }); + } + } + + function render () { + if (!isMobileDevice() && mouseMoved) calculateBlend(clientMouseX, clientMouseY, true); + + timeKeeper.update(); + var delta = timeKeeper.delta; + + state.update(delta); + state.apply(skeleton); + skeleton.updateWorldTransform(); + + renderer.camera.viewportWidth = bounds.x * 1.4; + renderer.camera.viewportHeight = bounds.y * 1.4; + renderer.resize(spine.webgl.ResizeMode.Fit); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + renderer.begin(); + renderer.drawSkeleton(skeleton, true); + + if (isMobileDevice()) { + gl.lineWidth(2); + renderer.circle(true, handle.x, handle.y, canvas.width * HANDLE_SIZE, COLOR_INNER); + renderer.circle(false, handle.x, handle.y, canvas.width * HANDLE_SIZE, COLOR_OUTER); + gl.lineWidth(1); + } + + renderer.end(); + } + + additiveBlendingDemo.loadingComplete = loadingComplete; + additiveBlendingDemo.render = render; + additiveBlendingDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas1.atlas b/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas1.atlas new file mode 100755 index 0000000..6caaa55 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas1.atlas @@ -0,0 +1,1048 @@ + +atlas1.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +alien/back-foot + rotate: false + xy: 351, 765 + size: 5, 3 + orig: 5, 3 + offset: 0, 0 + index: -1 +alien/back-shin + rotate: false + xy: 669, 602 + size: 13, 15 + orig: 13, 15 + offset: 0, 0 + index: -1 +alien/back-thigh + rotate: false + xy: 96, 172 + size: 15, 15 + orig: 15, 15 + offset: 0, 0 + index: -1 +alien/backarmor + rotate: true + xy: 437, 59 + size: 50, 56 + orig: 50, 56 + offset: 0, 0 + index: -1 +alien/body + rotate: true + xy: 578, 288 + size: 61, 73 + orig: 61, 73 + offset: 0, 0 + index: -1 +alien/burst01 + rotate: true + xy: 304, 167 + size: 89, 96 + orig: 89, 96 + offset: 0, 0 + index: -1 +alien/burst02 + rotate: true + xy: 902, 168 + size: 96, 112 + orig: 96, 112 + offset: 0, 0 + index: -1 +alien/burst03-bg + rotate: false + xy: 669, 423 + size: 171, 140 + orig: 171, 140 + offset: 0, 0 + index: -1 +alien/burst03-fg + rotate: false + xy: 296, 468 + size: 210, 185 + orig: 210, 185 + offset: 0, 0 + index: -1 +alien/eye + rotate: false + xy: 743, 22 + size: 47, 47 + orig: 47, 47 + offset: 0, 0 + index: -1 +alien/eye-highlight + rotate: false + xy: 669, 587 + size: 13, 13 + orig: 13, 13 + offset: 0, 0 + index: -1 +alien/eye-pupil + rotate: false + xy: 669, 574 + size: 11, 11 + orig: 11, 11 + offset: 0, 0 + index: -1 +alien/eye-stalk + rotate: false + xy: 235, 24 + size: 49, 41 + orig: 49, 41 + offset: 0, 0 + index: -1 +alien/front-foot + rotate: false + xy: 351, 770 + size: 6, 4 + orig: 6, 4 + offset: 0, 0 + index: -1 +alien/front-lower-arm + rotate: false + xy: 861, 125 + size: 34, 39 + orig: 34, 39 + offset: 0, 0 + index: -1 +alien/front-shin + rotate: false + xy: 1003, 270 + size: 15, 17 + orig: 15, 17 + offset: 0, 0 + index: -1 +alien/front-thigh + rotate: false + xy: 1003, 289 + size: 17, 17 + orig: 17, 17 + offset: 0, 0 + index: -1 +alien/front-upper-arm + rotate: false + xy: 794, 404 + size: 35, 17 + orig: 35, 17 + offset: 0, 0 + index: -1 +alien/head + rotate: false + xy: 117, 158 + size: 92, 84 + orig: 92, 84 + offset: 0, 0 + index: -1 +alien/metaljaw + rotate: false + xy: 902, 113 + size: 75, 53 + orig: 75, 53 + offset: 0, 0 + index: -1 +alien/splat01 + rotate: false + xy: 508, 497 + size: 159, 156 + orig: 159, 156 + offset: 0, 0 + index: -1 +alien/splat01-fg + rotate: false + xy: 435, 175 + size: 126, 82 + orig: 126, 82 + offset: 0, 0 + index: -1 +alien/splat02 + rotate: false + xy: 2, 447 + size: 228, 158 + orig: 228, 158 + offset: 0, 0 + index: -1 +alien/splat03 + rotate: false + xy: 232, 361 + size: 224, 105 + orig: 224, 105 + offset: 0, 0 + index: -1 +alien/upper-back-arm + rotate: false + xy: 274, 471 + size: 19, 27 + orig: 19, 27 + offset: 0, 0 + index: -1 +dragon/L_front_leg + rotate: false + xy: 194, 364 + size: 21, 14 + orig: 21, 14 + offset: 0, 0 + index: -1 +dragon/L_front_thigh + rotate: false + xy: 257, 4 + size: 21, 18 + orig: 21, 18 + offset: 0, 0 + index: -1 +dragon/L_rear_leg + rotate: false + xy: 601, 25 + size: 52, 44 + orig: 52, 44 + offset: 0, 0 + index: -1 +dragon/L_rear_thigh + rotate: true + xy: 933, 730 + size: 23, 37 + orig: 23, 37 + offset: 0, 0 + index: -1 +dragon/L_wing01 + rotate: true + xy: 677, 70 + size: 48, 64 + orig: 48, 64 + offset: 0, 0 + index: -1 +dragon/L_wing02 + rotate: true + xy: 368, 71 + size: 45, 67 + orig: 45, 67 + offset: 0, 0 + index: -1 +dragon/L_wing03 + rotate: true + xy: 301, 54 + size: 47, 52 + orig: 47, 52 + offset: 0, 0 + index: -1 +dragon/L_wing04 + rotate: true + xy: 174, 109 + size: 47, 34 + orig: 47, 34 + offset: 0, 0 + index: -1 +dragon/L_wing05 + rotate: false + xy: 958, 58 + size: 55, 53 + orig: 55, 53 + offset: 0, 0 + index: -1 +dragon/L_wing06 + rotate: true + xy: 678, 120 + size: 48, 83 + orig: 48, 83 + offset: 0, 0 + index: -1 +dragon/L_wing07 + rotate: true + xy: 235, 67 + size: 40, 64 + orig: 40, 64 + offset: 0, 0 + index: -1 +dragon/L_wing08 + rotate: true + xy: 957, 15 + size: 41, 45 + orig: 41, 45 + offset: 0, 0 + index: -1 +dragon/L_wing09 + rotate: false + xy: 841, 26 + size: 51, 42 + orig: 51, 42 + offset: 0, 0 + index: -1 +dragon/R_front_leg + rotate: false + xy: 149, 2 + size: 25, 22 + orig: 25, 22 + offset: 0, 0 + index: -1 +dragon/R_rear_leg + rotate: false + xy: 402, 177 + size: 29, 25 + orig: 29, 25 + offset: 0, 0 + index: -1 +dragon/R_rear_thigh + rotate: true + xy: 110, 4 + size: 23, 37 + orig: 23, 37 + offset: 0, 0 + index: -1 +dragon/R_wing01 + rotate: true + xy: 402, 118 + size: 55, 78 + orig: 55, 78 + offset: 0, 0 + index: -1 +dragon/R_wing02 + rotate: true + xy: 96, 105 + size: 51, 76 + orig: 51, 76 + offset: 0, 0 + index: -1 +dragon/R_wing03 + rotate: false + xy: 482, 111 + size: 68, 62 + orig: 68, 62 + offset: 0, 0 + index: -1 +dragon/R_wing04 + rotate: false + xy: 931, 270 + size: 70, 36 + orig: 70, 36 + offset: 0, 0 + index: -1 +dragon/R_wing05 + rotate: true + xy: 618, 71 + size: 63, 57 + orig: 63, 57 + offset: 0, 0 + index: -1 +dragon/R_wing06 + rotate: true + xy: 2, 137 + size: 50, 92 + orig: 50, 92 + offset: 0, 0 + index: -1 +dragon/R_wing07 + rotate: true + xy: 763, 71 + size: 50, 66 + orig: 50, 66 + offset: 0, 0 + index: -1 +dragon/R_wing08 + rotate: true + xy: 552, 75 + size: 59, 64 + orig: 59, 64 + offset: 0, 0 + index: -1 +dragon/R_wing09 + rotate: false + xy: 831, 70 + size: 62, 51 + orig: 62, 51 + offset: 0, 0 + index: -1 +dragon/back + rotate: false + xy: 655, 22 + size: 48, 46 + orig: 48, 46 + offset: 0, 0 + index: -1 +dragon/chin + rotate: false + xy: 54, 27 + size: 54, 37 + orig: 54, 37 + offset: 0, 0 + index: -1 +dragon/front_toeA + rotate: false + xy: 351, 776 + size: 7, 13 + orig: 7, 13 + offset: 0, 0 + index: -1 +dragon/front_toeB + rotate: false + xy: 669, 619 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 +dragon/head + rotate: false + xy: 148, 380 + size: 74, 65 + orig: 74, 65 + offset: 0, 0 + index: -1 +dragon/rear-toe + rotate: false + xy: 495, 4 + size: 27, 19 + orig: 27, 19 + offset: 0, 0 + index: -1 +dragon/tail02 + rotate: true + xy: 894, 2 + size: 24, 30 + orig: 24, 30 + offset: 0, 0 + index: -1 +dragon/tail03 + rotate: true + xy: 613, 5 + size: 18, 23 + orig: 18, 23 + offset: 0, 0 + index: -1 +dragon/tail04 + rotate: false + xy: 669, 635 + size: 14, 18 + orig: 14, 18 + offset: 0, 0 + index: -1 +dragon/tail05 + rotate: false + xy: 280, 590 + size: 13, 15 + orig: 13, 15 + offset: 0, 0 + index: -1 +dragon/tail06 + rotate: false + xy: 2, 5 + size: 24, 17 + orig: 24, 17 + offset: 0, 0 + index: -1 +raptor/back-arm + rotate: false + xy: 584, 6 + size: 27, 17 + orig: 27, 17 + offset: 0, 0 + index: -1 +raptor/back-bracer + rotate: false + xy: 28, 5 + size: 23, 17 + orig: 23, 17 + offset: 0, 0 + index: -1 +raptor/back-hand + rotate: false + xy: 85, 5 + size: 22, 20 + orig: 22, 20 + offset: 0, 0 + index: -1 +raptor/back-knee + rotate: true + xy: 232, 469 + size: 29, 40 + orig: 29, 40 + offset: 0, 0 + index: -1 +raptor/back-thigh + rotate: false + xy: 148, 364 + size: 23, 14 + orig: 23, 14 + offset: 0, 0 + index: -1 +raptor/dust01 + rotate: false + xy: 990, 404 + size: 29, 22 + orig: 29, 22 + offset: 0, 0 + index: -1 +raptor/dust02 + rotate: false + xy: 67, 109 + size: 26, 26 + orig: 26, 26 + offset: 0, 0 + index: -1 +raptor/dust03 + rotate: false + xy: 173, 362 + size: 19, 16 + orig: 19, 16 + offset: 0, 0 + index: -1 +raptor/front-arm + rotate: false + xy: 464, 5 + size: 29, 18 + orig: 29, 18 + offset: 0, 0 + index: -1 +raptor/front-bracer + rotate: false + xy: 231, 5 + size: 24, 17 + orig: 24, 17 + offset: 0, 0 + index: -1 +raptor/front-hand + rotate: false + xy: 926, 3 + size: 25, 23 + orig: 25, 23 + offset: 0, 0 + index: -1 +raptor/front-thigh + rotate: false + xy: 841, 7 + size: 34, 17 + orig: 34, 17 + offset: 0, 0 + index: -1 +raptor/gun + rotate: false + xy: 302, 103 + size: 64, 62 + orig: 64, 62 + offset: 0, 0 + index: -1 +raptor/gun-nohand + rotate: false + xy: 2, 74 + size: 63, 61 + orig: 63, 61 + offset: 0, 0 + index: -1 +raptor/head + rotate: true + xy: 211, 161 + size: 81, 89 + orig: 81, 89 + offset: 0, 0 + index: -1 +raptor/lower-leg + rotate: true + xy: 174, 63 + size: 44, 59 + orig: 44, 59 + offset: 0, 0 + index: -1 +raptor/mouth-grind + rotate: false + xy: 524, 5 + size: 28, 18 + orig: 28, 18 + offset: 0, 0 + index: -1 +raptor/mouth-smile + rotate: false + xy: 554, 5 + size: 28, 18 + orig: 28, 18 + offset: 0, 0 + index: -1 +raptor/neck + rotate: false + xy: 280, 576 + size: 11, 12 + orig: 11, 12 + offset: 0, 0 + index: -1 +raptor/raptor-arm-back + rotate: true + xy: 495, 60 + size: 49, 52 + orig: 49, 52 + offset: 0, 0 + index: -1 +raptor/raptor-body + rotate: false + xy: 362, 850 + size: 379, 171 + orig: 379, 171 + offset: 0, 0 + index: -1 +raptor/raptor-front-arm + rotate: true + xy: 895, 62 + size: 49, 61 + orig: 49, 61 + offset: 0, 0 + index: -1 +raptor/raptor-front-leg + rotate: true + xy: 148, 244 + size: 115, 154 + orig: 115, 154 + offset: 0, 0 + index: -1 +raptor/raptor-hindleg-back + rotate: true + xy: 304, 258 + size: 101, 129 + orig: 101, 129 + offset: 0, 0 + index: -1 +raptor/raptor-horn + rotate: true + xy: 686, 739 + size: 109, 48 + orig: 109, 48 + offset: 0, 0 + index: -1 +raptor/raptor-horn-back + rotate: true + xy: 232, 500 + size: 105, 46 + orig: 105, 46 + offset: 0, 0 + index: -1 +raptor/raptor-jaw + rotate: true + xy: 931, 308 + size: 92, 86 + orig: 92, 86 + offset: 0, 0 + index: -1 +raptor/raptor-jaw-tooth + rotate: true + xy: 54, 3 + size: 22, 29 + orig: 22, 29 + offset: 0, 0 + index: -1 +raptor/raptor-mouth-inside + rotate: true + xy: 204, 3 + size: 21, 25 + orig: 21, 25 + offset: 0, 0 + index: -1 +raptor/raptor-saddle-noshadow + rotate: false + xy: 687, 170 + size: 98, 113 + orig: 98, 113 + offset: 0, 0 + index: -1 +raptor/raptor-saddle-strap-front + rotate: true + xy: 405, 23 + size: 34, 57 + orig: 34, 57 + offset: 0, 0 + index: -1 +raptor/raptor-saddle-w-shadow + rotate: true + xy: 787, 166 + size: 98, 113 + orig: 98, 113 + offset: 0, 0 + index: -1 +raptor/raptor-tail-shadow + rotate: false + xy: 563, 136 + size: 113, 38 + orig: 113, 38 + offset: 0, 0 + index: -1 +raptor/raptor-tongue + rotate: true + xy: 979, 115 + size: 51, 38 + orig: 51, 38 + offset: 0, 0 + index: -1 +raptor/stirrup-back + rotate: false + xy: 176, 3 + size: 26, 21 + orig: 26, 21 + offset: 0, 0 + index: -1 +raptor/torso + rotate: false + xy: 705, 13 + size: 32, 55 + orig: 32, 55 + offset: 0, 0 + index: -1 +raptor/visor + rotate: false + xy: 211, 109 + size: 78, 50 + orig: 78, 50 + offset: 0, 0 + index: -1 +spineboy/crosshair + rotate: false + xy: 355, 21 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +spineboy/eye-indifferent + rotate: false + xy: 549, 25 + size: 50, 48 + orig: 50, 48 + offset: 0, 0 + index: -1 +spineboy/eye-surprised + rotate: false + xy: 2, 24 + size: 50, 48 + orig: 50, 48 + offset: 0, 0 + index: -1 +spineboy/front-bracer + rotate: false + xy: 368, 122 + size: 31, 43 + orig: 31, 43 + offset: 0, 0 + index: -1 +spineboy/front-fist-closed + rotate: true + xy: 286, 11 + size: 41, 44 + orig: 41, 44 + offset: 0, 0 + index: -1 +spineboy/front-fist-open + rotate: true + xy: 792, 22 + size: 46, 47 + orig: 46, 47 + offset: 0, 0 + index: -1 +spineboy/front-foot + rotate: false + xy: 67, 66 + size: 68, 37 + orig: 68, 37 + offset: 0, 0 + index: -1 +spineboy/front-shin + rotate: false + xy: 458, 367 + size: 44, 99 + orig: 44, 99 + offset: 0, 0 + index: -1 +spineboy/front-thigh + rotate: false + xy: 990, 428 + size: 26, 60 + orig: 26, 60 + offset: 0, 0 + index: -1 +spineboy/front-upper-arm + rotate: false + xy: 402, 204 + size: 29, 52 + orig: 29, 52 + offset: 0, 0 + index: -1 +spineboy/goggles + rotate: false + xy: 435, 259 + size: 141, 90 + orig: 141, 90 + offset: 0, 0 + index: -1 +spineboy/gun + rotate: false + xy: 2, 189 + size: 113, 110 + orig: 113, 110 + offset: 0, 0 + index: -1 +spineboy/head + rotate: false + xy: 842, 402 + size: 146, 161 + orig: 146, 161 + offset: 0, 0 + index: -1 +spineboy/hoverboard-board + rotate: true + xy: 933, 755 + size: 266, 82 + orig: 266, 82 + offset: 0, 0 + index: -1 +spineboy/hoverglow-small + rotate: true + xy: 979, 605 + size: 148, 41 + orig: 148, 41 + offset: 0, 0 + index: -1 +spineboy/muzzle-glow + rotate: false + xy: 578, 176 + size: 107, 107 + orig: 107, 107 + offset: 0, 0 + index: -1 +spineboy/muzzle-ring + rotate: false + xy: 990, 490 + size: 26, 113 + orig: 26, 113 + offset: 0, 0 + index: -1 +spineboy/muzzle01 + rotate: true + xy: 743, 728 + size: 293, 188 + orig: 293, 188 + offset: 0, 0 + index: -1 +spineboy/muzzle02 + rotate: false + xy: 2, 607 + size: 292, 182 + orig: 292, 182 + offset: 0, 0 + index: -1 +spineboy/muzzle03 + rotate: false + xy: 2, 791 + size: 358, 230 + orig: 358, 230 + offset: 0, 0 + index: -1 +spineboy/muzzle04 + rotate: false + xy: 362, 655 + size: 322, 193 + orig: 322, 193 + offset: 0, 0 + index: -1 +spineboy/muzzle05 + rotate: false + xy: 686, 565 + size: 291, 161 + orig: 291, 161 + offset: 0, 0 + index: -1 +spineboy/neck + rotate: false + xy: 526, 36 + size: 19, 22 + orig: 19, 22 + offset: 0, 0 + index: -1 +spineboy/portal-bg + rotate: false + xy: 508, 351 + size: 144, 144 + orig: 144, 144 + offset: 0, 0 + index: -1 +spineboy/portal-flare1 + rotate: false + xy: 464, 25 + size: 60, 32 + orig: 60, 32 + offset: 0, 0 + index: -1 +spineboy/portal-flare2 + rotate: false + xy: 296, 657 + size: 62, 33 + orig: 62, 33 + offset: 0, 0 + index: -1 +spineboy/portal-flare3 + rotate: false + xy: 110, 29 + size: 62, 32 + orig: 62, 32 + offset: 0, 0 + index: -1 +spineboy/portal-shade + rotate: false + xy: 2, 301 + size: 144, 144 + orig: 144, 144 + offset: 0, 0 + index: -1 +spineboy/portal-streaks1 + rotate: true + xy: 654, 285 + size: 136, 138 + orig: 136, 138 + offset: 0, 0 + index: -1 +spineboy/portsl-streaks2 + rotate: false + xy: 794, 266 + size: 135, 134 + orig: 135, 134 + offset: 0, 0 + index: -1 +spineboy/rear-bracer + rotate: false + xy: 137, 64 + size: 30, 39 + orig: 30, 39 + offset: 0, 0 + index: -1 +spineboy/rear-foot + rotate: false + xy: 894, 28 + size: 61, 32 + orig: 61, 32 + offset: 0, 0 + index: -1 +spineboy/rear-shin + rotate: true + xy: 763, 123 + size: 41, 96 + orig: 41, 96 + offset: 0, 0 + index: -1 +spineboy/rear-thigh + rotate: true + xy: 174, 26 + size: 35, 56 + orig: 35, 56 + offset: 0, 0 + index: -1 +spineboy/rear-upper-arm + rotate: false + xy: 117, 252 + size: 25, 47 + orig: 25, 47 + offset: 0, 0 + index: -1 +spineboy/torso + rotate: false + xy: 296, 692 + size: 53, 97 + orig: 53, 97 + offset: 0, 0 + index: -1 + +atlas12.png +size: 512,512 +format: RGBA8888 +filter: Linear,Linear +repeat: none +alien/blown-up-neck + rotate: false + xy: 158, 475 + size: 47, 32 + orig: 47, 32 + offset: 0, 0 + index: -1 +alien/lower-back-arm + rotate: true + xy: 366, 476 + size: 31, 28 + orig: 31, 28 + offset: 0, 0 + index: -1 +dragon/R_front_thigh + rotate: false + xy: 454, 450 + size: 27, 27 + orig: 27, 27 + offset: 0, 0 + index: -1 +dragon/chest + rotate: false + xy: 330, 476 + size: 34, 31 + orig: 34, 31 + offset: 0, 0 + index: -1 +dragon/tail01 + rotate: true + xy: 253, 477 + size: 30, 38 + orig: 30, 38 + offset: 0, 0 + index: -1 +raptor/eyes-open + rotate: true + xy: 454, 479 + size: 28, 27 + orig: 28, 27 + offset: 0, 0 + index: -1 +raptor/front-open-hand + rotate: false + xy: 483, 481 + size: 26, 26 + orig: 26, 26 + offset: 0, 0 + index: -1 +raptor/raptor-saddle-strap-rear + rotate: true + xy: 207, 475 + size: 32, 44 + orig: 32, 44 + offset: 0, 0 + index: -1 +raptor/stirrup-front + rotate: false + xy: 396, 477 + size: 27, 30 + orig: 27, 30 + offset: 0, 0 + index: -1 +raptor/stirrup-strap + rotate: true + xy: 425, 478 + size: 29, 27 + orig: 29, 27 + offset: 0, 0 + index: -1 +spineboy/hoverboard-thruster + rotate: true + xy: 293, 475 + size: 32, 35 + orig: 32, 35 + offset: 0, 0 + index: -1 +spineboy/mouth-grind + rotate: false + xy: 2, 475 + size: 50, 32 + orig: 50, 32 + offset: 0, 0 + index: -1 +spineboy/mouth-oooo + rotate: false + xy: 54, 475 + size: 50, 32 + orig: 50, 32 + offset: 0, 0 + index: -1 +spineboy/mouth-smile + rotate: false + xy: 106, 475 + size: 50, 32 + orig: 50, 32 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas1.png b/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas1.png new file mode 100755 index 0000000..43c4b21 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas1.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas12.png b/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas12.png new file mode 100755 index 0000000..5376368 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas12.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas2.atlas b/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas2.atlas new file mode 100755 index 0000000..ffe6f63 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas2.atlas @@ -0,0 +1,1252 @@ + +atlas2.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +armorgirl/Layer 100 + rotate: false + xy: 964, 281 + size: 31, 40 + orig: 31, 40 + offset: 0, 0 + index: -1 +armorgirl/Layer 101 + rotate: false + xy: 2, 151 + size: 53, 24 + orig: 53, 24 + offset: 0, 0 + index: -1 +armorgirl/Layer 102 + rotate: true + xy: 917, 902 + size: 60, 33 + orig: 60, 33 + offset: 0, 0 + index: -1 +armorgirl/Layer 103 + rotate: true + xy: 767, 9 + size: 57, 93 + orig: 57, 93 + offset: 0, 0 + index: -1 +armorgirl/Layer 104 + rotate: false + xy: 957, 451 + size: 31, 42 + orig: 31, 42 + offset: 0, 0 + index: -1 +armorgirl/Layer 106 + rotate: false + xy: 593, 492 + size: 38, 53 + orig: 38, 53 + offset: 0, 0 + index: -1 +armorgirl/Layer 107 + rotate: false + xy: 695, 13 + size: 70, 127 + orig: 70, 127 + offset: 0, 0 + index: -1 +armorgirl/Layer 108 + rotate: false + xy: 748, 264 + size: 92, 94 + orig: 92, 94 + offset: 0, 0 + index: -1 +armorgirl/Layer 109 + rotate: false + xy: 999, 867 + size: 20, 32 + orig: 20, 32 + offset: 0, 0 + index: -1 +armorgirl/Layer 110 + rotate: true + xy: 900, 318 + size: 84, 29 + orig: 84, 29 + offset: 0, 0 + index: -1 +armorgirl/Layer 111 + rotate: true + xy: 801, 737 + size: 87, 62 + orig: 87, 62 + offset: 0, 0 + index: -1 +armorgirl/Layer 112 + rotate: false + xy: 983, 973 + size: 31, 46 + orig: 31, 46 + offset: 0, 0 + index: -1 +armorgirl/Layer 113 + rotate: false + xy: 987, 754 + size: 33, 32 + orig: 33, 32 + offset: 0, 0 + index: -1 +armorgirl/Layer 114 + rotate: true + xy: 120, 9 + size: 20, 26 + orig: 20, 26 + offset: 0, 0 + index: -1 +armorgirl/Layer 115 + rotate: false + xy: 2, 4 + size: 26, 25 + orig: 26, 25 + offset: 0, 0 + index: -1 +armorgirl/Layer 116 + rotate: false + xy: 931, 323 + size: 40, 45 + orig: 40, 45 + offset: 0, 0 + index: -1 +armorgirl/Layer 117 + rotate: false + xy: 996, 614 + size: 23, 31 + orig: 23, 31 + offset: 0, 0 + index: -1 +armorgirl/Layer 118 + rotate: false + xy: 456, 163 + size: 40, 49 + orig: 40, 49 + offset: 0, 0 + index: -1 +armorgirl/Layer 66 + rotate: true + xy: 662, 240 + size: 118, 84 + orig: 118, 84 + offset: 0, 0 + index: -1 +armorgirl/Layer 68 + rotate: false + xy: 274, 11 + size: 31, 35 + orig: 31, 35 + offset: 0, 0 + index: -1 +armorgirl/Layer 69 + rotate: false + xy: 414, 153 + size: 40, 59 + orig: 40, 59 + offset: 0, 0 + index: -1 +armorgirl/Layer 70 + rotate: false + xy: 917, 874 + size: 57, 26 + orig: 57, 26 + offset: 0, 0 + index: -1 +armorgirl/Layer 72 + rotate: true + xy: 805, 369 + size: 31, 25 + orig: 31, 25 + offset: 0, 0 + index: -1 +armorgirl/Layer 73 + rotate: false + xy: 865, 779 + size: 43, 90 + orig: 43, 90 + offset: 0, 0 + index: -1 +armorgirl/Layer 74 + rotate: false + xy: 133, 159 + size: 51, 66 + orig: 51, 66 + offset: 0, 0 + index: -1 +armorgirl/Layer 75 + rotate: true + xy: 957, 59 + size: 41, 32 + orig: 41, 32 + offset: 0, 0 + index: -1 +armorgirl/Layer 76 + rotate: false + xy: 593, 475 + size: 33, 15 + orig: 33, 15 + offset: 0, 0 + index: -1 +armorgirl/Layer 77 + rotate: true + xy: 443, 23 + size: 35, 27 + orig: 35, 27 + offset: 0, 0 + index: -1 +armorgirl/Layer 78 + rotate: false + xy: 964, 525 + size: 23, 46 + orig: 23, 46 + offset: 0, 0 + index: -1 +armorgirl/Layer 79 + rotate: false + xy: 313, 483 + size: 17, 82 + orig: 17, 82 + offset: 0, 0 + index: -1 +armorgirl/Layer 80 + rotate: false + xy: 964, 573 + size: 30, 41 + orig: 30, 41 + offset: 0, 0 + index: -1 +armorgirl/Layer 81 + rotate: false + xy: 323, 301 + size: 8, 9 + orig: 8, 9 + offset: 0, 0 + index: -1 +armorgirl/Layer 82 + rotate: false + xy: 827, 629 + size: 29, 15 + orig: 29, 15 + offset: 0, 0 + index: -1 +armorgirl/Layer 84 + rotate: false + xy: 379, 9 + size: 29, 16 + orig: 29, 16 + offset: 0, 0 + index: -1 +armorgirl/Layer 85 + rotate: false + xy: 733, 489 + size: 15, 12 + orig: 15, 12 + offset: 0, 0 + index: -1 +armorgirl/Layer 851 + rotate: false + xy: 733, 475 + size: 15, 12 + orig: 15, 12 + offset: 0, 0 + index: -1 +armorgirl/Layer 86 + rotate: false + xy: 680, 699 + size: 13, 4 + orig: 13, 4 + offset: 0, 0 + index: -1 +armorgirl/Layer 87 + rotate: false + xy: 323, 324 + size: 9, 10 + orig: 9, 10 + offset: 0, 0 + index: -1 +armorgirl/Layer 871 + rotate: false + xy: 323, 312 + size: 9, 10 + orig: 9, 10 + offset: 0, 0 + index: -1 +armorgirl/Layer 88 + rotate: false + xy: 313, 430 + size: 7, 6 + orig: 7, 6 + offset: 0, 0 + index: -1 +armorgirl/Layer 89 + rotate: false + xy: 865, 769 + size: 9, 8 + orig: 9, 8 + offset: 0, 0 + index: -1 +armorgirl/Layer 90 + rotate: false + xy: 760, 151 + size: 66, 111 + orig: 66, 111 + offset: 0, 0 + index: -1 +armorgirl/Layer 91 + rotate: true + xy: 64, 9 + size: 20, 29 + orig: 20, 29 + offset: 0, 0 + index: -1 +armorgirl/Layer 92 + rotate: true + xy: 548, 698 + size: 134, 130 + orig: 134, 130 + offset: 0, 0 + index: -1 +armorgirl/Layer 93 + rotate: false + xy: 801, 826 + size: 56, 98 + orig: 56, 98 + offset: 0, 0 + index: -1 +armorgirl/Layer 94 + rotate: false + xy: 522, 14 + size: 17, 23 + orig: 17, 23 + offset: 0, 0 + index: -1 +armorgirl/Layer 95 + rotate: false + xy: 957, 15 + size: 30, 42 + orig: 30, 42 + offset: 0, 0 + index: -1 +armorgirl/Layer 96 + rotate: false + xy: 349, 21 + size: 28, 37 + orig: 28, 37 + offset: 0, 0 + index: -1 +armorgirl/Layer 97 + rotate: false + xy: 989, 505 + size: 27, 32 + orig: 27, 32 + offset: 0, 0 + index: -1 +armorgirl/Layer 98 + rotate: true + xy: 349, 2 + size: 17, 20 + orig: 17, 20 + offset: 0, 0 + index: -1 +armorgirl/Layer 99 + rotate: false + xy: 390, 315 + size: 19, 35 + orig: 19, 35 + offset: 0, 0 + index: -1 +greengirl/Layer 17 + rotate: true + xy: 390, 472 + size: 222, 120 + orig: 222, 120 + offset: 0, 0 + index: -1 +greengirl/Layer 20 + rotate: false + xy: 2, 642 + size: 190, 377 + orig: 190, 377 + offset: 0, 0 + index: -1 +greengirl/Layer 21 + rotate: false + xy: 906, 964 + size: 43, 55 + orig: 43, 55 + offset: 0, 0 + index: -1 +greengirl/Layer 22 + rotate: false + xy: 390, 352 + size: 18, 38 + orig: 18, 38 + offset: 0, 0 + index: -1 +greengirl/Layer 23 + rotate: false + xy: 95, 6 + size: 23, 23 + orig: 23, 23 + offset: 0, 0 + index: -1 +greengirl/Layer 24 + rotate: false + xy: 390, 392 + size: 20, 37 + orig: 20, 37 + offset: 0, 0 + index: -1 +greengirl/Layer 25 + rotate: true + xy: 203, 12 + size: 17, 29 + orig: 17, 29 + offset: 0, 0 + index: -1 +greengirl/Layer 26 + rotate: false + xy: 972, 619 + size: 19, 26 + orig: 19, 26 + offset: 0, 0 + index: -1 +greengirl/Layer 27 + rotate: false + xy: 964, 498 + size: 18, 25 + orig: 18, 25 + offset: 0, 0 + index: -1 +greengirl/Layer 28 + rotate: false + xy: 996, 582 + size: 18, 30 + orig: 18, 30 + offset: 0, 0 + index: -1 +greengirl/Layer 29 + rotate: false + xy: 503, 7 + size: 17, 30 + orig: 17, 30 + offset: 0, 0 + index: -1 +greengirl/Layer 30 + rotate: false + xy: 1000, 719 + size: 17, 33 + orig: 17, 33 + offset: 0, 0 + index: -1 +greengirl/Layer 32 + rotate: false + xy: 313, 438 + size: 19, 43 + orig: 19, 43 + offset: 0, 0 + index: -1 +greengirl/Layer 33 + rotate: true + xy: 148, 13 + size: 16, 31 + orig: 16, 31 + offset: 0, 0 + index: -1 +greengirl/Layer 34 + rotate: false + xy: 1000, 684 + size: 17, 33 + orig: 17, 33 + offset: 0, 0 + index: -1 +greengirl/Layer 35 + rotate: true + xy: 919, 477 + size: 16, 30 + orig: 16, 30 + offset: 0, 0 + index: -1 +greengirl/Layer 36 + rotate: false + xy: 999, 834 + size: 20, 31 + orig: 20, 31 + offset: 0, 0 + index: -1 +greengirl/Layer 37 + rotate: false + xy: 910, 780 + size: 22, 39 + orig: 22, 39 + offset: 0, 0 + index: -1 +greengirl/Layer 38 + rotate: true + xy: 648, 360 + size: 110, 100 + orig: 110, 100 + offset: 0, 0 + index: -1 +greengirl/Layer 39 + rotate: false + xy: 938, 756 + size: 30, 63 + orig: 30, 63 + offset: 0, 0 + index: -1 +greengirl/Layer 40 + rotate: true + xy: 944, 209 + size: 60, 30 + orig: 60, 30 + offset: 0, 0 + index: -1 +greengirl/Layer 41 + rotate: true + xy: 935, 544 + size: 70, 27 + orig: 70, 27 + offset: 0, 0 + index: -1 +greengirl/Layer 42 + rotate: true + xy: 882, 721 + size: 56, 54 + orig: 56, 54 + offset: 0, 0 + index: -1 +greengirl/Layer 43 + rotate: false + xy: 456, 151 + size: 27, 10 + orig: 27, 10 + offset: 0, 0 + index: -1 +greengirl/Layer 44 + rotate: false + xy: 865, 759 + size: 9, 8 + orig: 9, 8 + offset: 0, 0 + index: -1 +greengirl/Layer 45 + rotate: false + xy: 30, 9 + size: 32, 20 + orig: 32, 20 + offset: 0, 0 + index: -1 +greengirl/Layer 46 + rotate: true + xy: 450, 5 + size: 16, 19 + orig: 16, 19 + offset: 0, 0 + index: -1 +greengirl/Layer 47 + rotate: false + xy: 858, 631 + size: 19, 13 + orig: 19, 13 + offset: 0, 0 + index: -1 +greengirl/Layer 48 + rotate: false + xy: 957, 419 + size: 31, 30 + orig: 31, 30 + offset: 0, 0 + index: -1 +greengirl/Layer 49 + rotate: true + xy: 512, 475 + size: 70, 79 + orig: 70, 79 + offset: 0, 0 + index: -1 +greengirl/Layer 50 + rotate: false + xy: 741, 882 + size: 57, 42 + orig: 57, 42 + offset: 0, 0 + index: -1 +greengirl/Layer 51 + rotate: true + xy: 824, 538 + size: 88, 60 + orig: 88, 60 + offset: 0, 0 + index: -1 +greengirl/Layer 52 + rotate: false + xy: 562, 113 + size: 98, 156 + orig: 98, 156 + offset: 0, 0 + index: -1 +greengirl/Layer 53 + rotate: true + xy: 661, 879 + size: 140, 78 + orig: 140, 78 + offset: 0, 0 + index: -1 +greengirl/Layer 54 + rotate: true + xy: 767, 68 + size: 81, 80 + orig: 81, 80 + offset: 0, 0 + index: -1 +greengirl/Layer 55 + rotate: false + xy: 999, 802 + size: 20, 30 + orig: 20, 30 + offset: 0, 0 + index: -1 +orangegirl/Layer 14 + rotate: false + xy: 2, 227 + size: 187, 184 + orig: 187, 184 + offset: 0, 0 + index: -1 +orangegirl/Layer 15 + rotate: false + xy: 733, 503 + size: 89, 100 + orig: 89, 100 + offset: 0, 0 + index: -1 +orangegirl/Layer 16 + rotate: false + xy: 989, 539 + size: 28, 32 + orig: 28, 32 + offset: 0, 0 + index: -1 +orangegirl/Layer 17 + rotate: false + xy: 181, 4 + size: 20, 25 + orig: 20, 25 + offset: 0, 0 + index: -1 +orangegirl/Layer 18 + rotate: false + xy: 390, 299 + size: 19, 14 + orig: 19, 14 + offset: 0, 0 + index: -1 +orangegirl/Layer 19 + rotate: false + xy: 125, 150 + size: 13, 7 + orig: 13, 7 + offset: 0, 0 + index: -1 +orangegirl/Layer 20 + rotate: true + xy: 976, 875 + size: 24, 19 + orig: 24, 19 + offset: 0, 0 + index: -1 +orangegirl/Layer 21 + rotate: true + xy: 750, 402 + size: 99, 80 + orig: 99, 80 + offset: 0, 0 + index: -1 +orangegirl/Layer 22 + rotate: false + xy: 862, 39 + size: 50, 82 + orig: 50, 82 + offset: 0, 0 + index: -1 +orangegirl/Layer 23 + rotate: false + xy: 827, 646 + size: 53, 89 + orig: 53, 89 + offset: 0, 0 + index: -1 +orangegirl/Layer 24 + rotate: false + xy: 237, 13 + size: 35, 33 + orig: 35, 33 + offset: 0, 0 + index: -1 +orangegirl/Layer 25 + rotate: true + xy: 952, 959 + size: 60, 29 + orig: 60, 29 + offset: 0, 0 + index: -1 +orangegirl/Layer 26 + rotate: true + xy: 957, 102 + size: 51, 29 + orig: 51, 29 + offset: 0, 0 + index: -1 +orangegirl/Layer 27 + rotate: false + xy: 842, 307 + size: 56, 82 + orig: 56, 82 + offset: 0, 0 + index: -1 +orangegirl/Layer 28 + rotate: true + xy: 842, 264 + size: 41, 75 + orig: 41, 75 + offset: 0, 0 + index: -1 +orangegirl/Layer 29 + rotate: true + xy: 935, 664 + size: 55, 33 + orig: 55, 33 + offset: 0, 0 + index: -1 +orangegirl/Layer 30 + rotate: false + xy: 859, 871 + size: 56, 78 + orig: 56, 78 + offset: 0, 0 + index: -1 +orangegirl/Layer 31 + rotate: true + xy: 322, 60 + size: 88, 167 + orig: 88, 167 + offset: 0, 0 + index: -1 +orangegirl/Layer 32 + rotate: true + xy: 938, 722 + size: 32, 47 + orig: 32, 47 + offset: 0, 0 + index: -1 +orangegirl/Layer 33 + rotate: false + xy: 548, 876 + size: 111, 143 + orig: 111, 143 + offset: 0, 0 + index: -1 +orangegirl/Layer 34 + rotate: true + xy: 882, 663 + size: 56, 51 + orig: 56, 51 + offset: 0, 0 + index: -1 +orangegirl/Layer 35 + rotate: false + xy: 849, 123 + size: 66, 69 + orig: 66, 69 + offset: 0, 0 + index: -1 +orangegirl/Layer 36 + rotate: true + xy: 633, 605 + size: 91, 102 + orig: 91, 102 + offset: 0, 0 + index: -1 +orangegirl/Layer 37 + rotate: false + xy: 680, 705 + size: 56, 172 + orig: 56, 172 + offset: 0, 0 + index: -1 +orangegirl/Layer 38 + rotate: true + xy: 548, 836 + size: 38, 85 + orig: 38, 85 + offset: 0, 0 + index: -1 +orangegirl/Layer 39 + rotate: false + xy: 886, 542 + size: 47, 51 + orig: 47, 51 + offset: 0, 0 + index: -1 +orangegirl/Layer 40 + rotate: false + xy: 635, 835 + size: 42, 39 + orig: 42, 39 + offset: 0, 0 + index: -1 +orangegirl/Layer 41 + rotate: false + xy: 562, 271 + size: 84, 199 + orig: 84, 199 + offset: 0, 0 + index: -1 +orangegirl/Layer 42 + rotate: true + xy: 2, 177 + size: 48, 129 + orig: 48, 129 + offset: 0, 0 + index: -1 +orangegirl/Layer 43 + rotate: false + xy: 390, 431 + size: 20, 39 + orig: 20, 39 + offset: 0, 0 + index: -1 +orangegirl/Layer 44 + rotate: false + xy: 738, 732 + size: 61, 145 + orig: 61, 145 + offset: 0, 0 + index: -1 +orangegirl/Layer 45 + rotate: true + xy: 866, 404 + size: 64, 49 + orig: 64, 49 + offset: 0, 0 + index: -1 +orangegirl/Layer 46 + rotate: true + xy: 960, 833 + size: 39, 37 + orig: 39, 37 + offset: 0, 0 + index: -1 +orangegirl/Layer 47 + rotate: false + xy: 379, 27 + size: 32, 31 + orig: 32, 31 + offset: 0, 0 + index: -1 +orangegirl/Layer 48 + rotate: false + xy: 866, 470 + size: 51, 66 + orig: 51, 66 + offset: 0, 0 + index: -1 +orangegirl/Layer 49 + rotate: true + xy: 191, 299 + size: 112, 130 + orig: 112, 130 + offset: 0, 0 + index: -1 +owl/L_eye-closed + rotate: true + xy: 919, 271 + size: 45, 43 + orig: 45, 43 + offset: 0, 0 + index: -1 +owl/L_eye-iris + rotate: true + xy: 919, 495 + size: 45, 43 + orig: 45, 43 + offset: 0, 0 + index: -1 +owl/L_eye-light + rotate: false + xy: 323, 348 + size: 11, 10 + orig: 11, 10 + offset: 0, 0 + index: -1 +owl/L_eye-pupil + rotate: false + xy: 973, 338 + size: 31, 30 + orig: 31, 30 + offset: 0, 0 + index: -1 +owl/L_foot + rotate: false + xy: 57, 151 + size: 32, 24 + orig: 32, 24 + offset: 0, 0 + index: -1 +owl/L_wing + rotate: false + xy: 914, 66 + size: 41, 55 + orig: 41, 55 + offset: 0, 0 + index: -1 +owl/R_eye-closed + rotate: true + xy: 927, 616 + size: 45, 43 + orig: 45, 43 + offset: 0, 0 + index: -1 +owl/R_eye-iris + rotate: true + xy: 931, 370 + size: 45, 43 + orig: 45, 43 + offset: 0, 0 + index: -1 +owl/R_eye-light + rotate: false + xy: 323, 336 + size: 11, 10 + orig: 11, 10 + offset: 0, 0 + index: -1 +owl/R_eye-pupil + rotate: false + xy: 976, 387 + size: 31, 30 + orig: 31, 30 + offset: 0, 0 + index: -1 +owl/R_foot + rotate: false + xy: 91, 151 + size: 32, 24 + orig: 32, 24 + offset: 0, 0 + index: -1 +owl/R_wing + rotate: false + xy: 914, 9 + size: 41, 55 + orig: 41, 55 + offset: 0, 0 + index: -1 +owl/beak + rotate: false + xy: 836, 928 + size: 19, 21 + orig: 19, 21 + offset: 0, 0 + index: -1 +owl/beak-down + rotate: false + xy: 410, 2 + size: 18, 20 + orig: 18, 20 + offset: 0, 0 + index: -1 +owl/body + rotate: true + xy: 633, 472 + size: 124, 98 + orig: 124, 98 + offset: 0, 0 + index: -1 +owl/feather-1 + rotate: false + xy: 472, 7 + size: 29, 30 + orig: 29, 30 + offset: 0, 0 + index: -1 +owl/feather-2 + rotate: false + xy: 972, 647 + size: 31, 33 + orig: 31, 33 + offset: 0, 0 + index: -1 +owl/feather-3 + rotate: false + xy: 970, 682 + size: 28, 38 + orig: 28, 38 + offset: 0, 0 + index: -1 +owl/head-base + rotate: true + xy: 512, 547 + size: 149, 119 + orig: 149, 119 + offset: 0, 0 + index: -1 +owl/leaf-1 + rotate: false + xy: 917, 417 + size: 38, 51 + orig: 38, 51 + offset: 0, 0 + index: -1 +owl/leaf-2 + rotate: false + xy: 952, 910 + size: 33, 47 + orig: 33, 47 + offset: 0, 0 + index: -1 +owl/leaf-3 + rotate: true + xy: 886, 595 + size: 66, 39 + orig: 66, 39 + offset: 0, 0 + index: -1 +owl/leaf-4 + rotate: true + xy: 322, 13 + size: 45, 25 + orig: 45, 25 + offset: 0, 0 + index: -1 +owl/leaf-5 + rotate: true + xy: 750, 373 + size: 27, 53 + orig: 27, 53 + offset: 0, 0 + index: -1 +owl/leaf-6 + rotate: false + xy: 898, 204 + size: 44, 58 + orig: 44, 58 + offset: 0, 0 + index: -1 +owl/leaf-7 + rotate: false + xy: 970, 788 + size: 27, 43 + orig: 27, 43 + offset: 0, 0 + index: -1 +owl/wood + rotate: false + xy: 2, 413 + size: 309, 152 + orig: 309, 152 + offset: 0, 0 + index: -1 +stretchyman/back arm + rotate: true + xy: 491, 39 + size: 72, 202 + orig: 72, 202 + offset: 0, 0 + index: -1 +stretchyman/back leg + rotate: true + xy: 2, 48 + size: 100, 318 + orig: 100, 318 + offset: 0, 0 + index: -1 +stretchyman/body + rotate: false + xy: 194, 567 + size: 141, 452 + orig: 141, 452 + offset: 0, 0 + index: -1 +stretchyman/front arm + rotate: true + xy: 191, 150 + size: 145, 221 + orig: 145, 221 + offset: 0, 0 + index: -1 +stretchyman/head + rotate: false + xy: 738, 628 + size: 87, 102 + orig: 87, 102 + offset: 0, 0 + index: -1 +tank/antenna + rotate: false + xy: 323, 360 + size: 6, 76 + orig: 6, 76 + offset: 0, 0 + index: -1 +tank/cannon + rotate: false + xy: 2, 31 + size: 233, 15 + orig: 233, 15 + offset: 0, 0 + index: -1 +tank/cannonConnector + rotate: false + xy: 413, 24 + size: 28, 34 + orig: 28, 34 + offset: 0, 0 + index: -1 +tank/ground + rotate: true + xy: 414, 214 + size: 256, 88 + orig: 256, 88 + offset: 0, 0 + index: -1 +tank/guntower + rotate: false + xy: 2, 568 + size: 183, 72 + orig: 183, 72 + offset: 0, 0 + index: -1 +tank/machinegun + rotate: false + xy: 737, 612 + size: 83, 14 + orig: 83, 14 + offset: 0, 0 + index: -1 +tank/machinegun-mount + rotate: false + xy: 662, 116 + size: 18, 24 + orig: 18, 24 + offset: 0, 0 + index: -1 +tank/rock + rotate: true + xy: 832, 391 + size: 145, 32 + orig: 145, 32 + offset: 0, 0 + index: -1 +tank/tankBottom + rotate: true + xy: 477, 698 + size: 321, 69 + orig: 321, 69 + offset: 0, 0 + index: -1 +tank/tankBottom-shadow + rotate: true + xy: 390, 696 + size: 323, 85 + orig: 323, 85 + offset: 0, 0 + index: -1 +tank/tankTop + rotate: true + xy: 504, 118 + size: 352, 56 + orig: 352, 56 + offset: 0, 0 + index: -1 +tank/tread + rotate: false + xy: 750, 363 + size: 24, 8 + orig: 24, 8 + offset: 0, 0 + index: -1 +tank/tread-inside + rotate: false + xy: 313, 421 + size: 6, 7 + orig: 6, 7 + offset: 0, 0 + index: -1 +tank/wheel-big + rotate: false + xy: 910, 821 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +tank/wheel-big-overlay + rotate: false + xy: 917, 155 + size: 47, 47 + orig: 47, 47 + offset: 0, 0 + index: -1 +tank/wheel-mid + rotate: false + xy: 987, 937 + size: 34, 34 + orig: 34, 34 + offset: 0, 0 + index: -1 +tank/wheel-mid-overlay + rotate: false + xy: 987, 901 + size: 34, 34 + orig: 34, 34 + offset: 0, 0 + index: -1 +tank/wheel-small + rotate: false + xy: 430, 3 + size: 18, 18 + orig: 18, 18 + offset: 0, 0 + index: -1 +transforms/wheel-big + rotate: false + xy: 662, 142 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +transforms/wheel-big-overlay + rotate: false + xy: 741, 926 + size: 93, 93 + orig: 93, 93 + offset: 0, 0 + index: -1 +transforms/wheel-mid + rotate: false + xy: 828, 194 + size: 68, 68 + orig: 68, 68 + offset: 0, 0 + index: -1 +transforms/wheel-mid-overlay + rotate: false + xy: 836, 951 + size: 68, 68 + orig: 68, 68 + offset: 0, 0 + index: -1 +vine/vine + rotate: false + xy: 337, 297 + size: 51, 722 + orig: 51, 722 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas2.png b/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas2.png new file mode 100755 index 0000000..e4b8749 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/demos/assets/atlas2.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/demos/assets/demos.json b/apps/module-ts/src/spine-ts/webgl/demos/assets/demos.json new file mode 100755 index 0000000..292d43e --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/assets/demos.json @@ -0,0 +1 @@ +{"alien":{"skeleton":{"hash":"c8ff/A1QLYztDf5mTWGuPov/LOg","spine":"3.8.14-beta","x":-191.3,"y":-4.51,"width":368.26,"height":384.69},"bones":[{"name":"root"},{"name":"hip","parent":"root","x":-8.17,"y":73.5},{"name":"back-thigh","parent":"hip","length":44.3,"rotation":-54.08,"x":-2.82,"y":-2.64},{"name":"back-shin","parent":"back-thigh","length":31.17,"rotation":-50.15,"x":44.3,"y":0.06},{"name":"back-foot","parent":"back-shin","length":11.75,"rotation":91.8,"x":31.17,"y":0.09},{"name":"body","parent":"root","length":116.25,"rotation":99.84,"x":-42.45,"y":77.7},{"name":"front-thigh","parent":"hip","length":52.72,"rotation":-55.89,"x":-42.79,"y":4.11},{"name":"front-shin","parent":"front-thigh","length":34.38,"rotation":-45.22,"x":52.73,"y":0.06},{"name":"front-foot","parent":"front-shin","length":13.58,"rotation":86.84,"x":34.36,"y":-0.12},{"name":"front-upper-arm","parent":"body","length":47.09,"rotation":121.33,"x":90.9,"y":42.96},{"name":"front-lower-arm","parent":"front-upper-arm","length":75.87,"rotation":71.97,"x":47.09,"y":-0.29},{"name":"head","parent":"body","length":213.84,"rotation":-36.34,"x":116.68,"y":2.67},{"name":"upper-back-arm","parent":"body","length":50.28,"rotation":172.11,"x":50.4,"y":-84.36},{"name":"lower-back-arm","parent":"upper-back-arm","length":65.27,"rotation":74.17,"x":50.28,"y":-0.11},{"name":"metaljaw","parent":"root","length":75.82,"rotation":-74.86,"x":-37.1,"y":230.8},{"name":"splat","parent":"root","x":-11.45,"y":318.24,"scaleX":0.6213,"scaleY":0.6213},{"name":"eye-root","parent":"root"},{"name":"eye","parent":"eye-root","rotation":63.5,"x":51.29,"y":236.96},{"name":"eyeball","parent":"eye","scaleX":0.6231,"scaleY":0.6231},{"name":"eye-pupil","parent":"eyeball","x":18.46,"y":-41.33,"scaleX":1.3321,"scaleY":1.3321},{"name":"eye-veins-controller","parent":"eyeball"},{"name":"eye-stalk-root","parent":"eyeball","rotation":-10.63,"x":-75.66,"y":16.9},{"name":"eye-stalk","parent":"eye-stalk-root","length":16.14,"rotation":179.1,"x":-9.1,"y":-2.42},{"name":"eye-stalk2","parent":"eye-stalk","length":16.14,"x":16.14},{"name":"eye-stalk3","parent":"eye-stalk2","length":16.14,"x":16.14},{"name":"eye-stalk4","parent":"eye-stalk3","length":16.14,"x":16.14},{"name":"eye-splat","parent":"root","x":256.36,"y":-17.76,"scaleX":-2.33,"scaleY":1.99},{"name":"eye-highlight","parent":"eye","x":16.4,"y":-5.7}],"slots":[{"name":"metaljaw-bg","bone":"metaljaw","attachment":"alien/metaljaw"},{"name":"eye-splat","bone":"eye-splat"},{"name":"burst-bg","bone":"head","color":"aaff80ff","dark":"000000"},{"name":"splat-bg","bone":"splat"},{"name":"upper-back-arm","bone":"upper-back-arm","attachment":"alien/upper-back-arm"},{"name":"lower-back-arm","bone":"lower-back-arm","attachment":"alien/lower-back-arm"},{"name":"back-thigh","bone":"back-thigh","attachment":"alien/back-thigh"},{"name":"back-foot","bone":"back-foot","attachment":"alien/back-foot"},{"name":"back-shin","bone":"back-shin","attachment":"alien/back-shin"},{"name":"backarmor","bone":"body","attachment":"alien/backarmor"},{"name":"eyeball","bone":"eyeball","color":"dfa921ff","dark":"c57c1e","attachment":"alien/eye"},{"name":"eye-pupil","bone":"eye-pupil","color":"000000ff","attachment":"alien/eye-pupil"},{"name":"eye-highlight","bone":"eye-highlight","color":"ffffffc8","attachment":"alien/eye-highlight","blend":"additive"},{"name":"eye-stalk","bone":"eye-stalk-root","dark":"000000"},{"name":"splat-fg","bone":"splat"},{"name":"head","bone":"head","attachment":"alien/head"},{"name":"body","bone":"body","attachment":"alien/body"},{"name":"metaljaw","bone":"metaljaw","attachment":"alien/metaljaw"},{"name":"front-thigh","bone":"front-thigh","attachment":"alien/front-thigh"},{"name":"front-foot","bone":"front-foot","attachment":"alien/front-foot"},{"name":"front-shin","bone":"front-shin","attachment":"alien/front-shin"},{"name":"front-upper-arm","bone":"front-upper-arm","attachment":"alien/front-upper-arm"},{"name":"front-lower-arm","bone":"front-lower-arm","attachment":"alien/front-lower-arm"}],"transform":[{"name":"eye","order":2,"bones":["eye"],"target":"head","x":91.94,"y":-84.12},{"name":"eye-root","bones":["eye-root"],"target":"head","rotation":-63.5,"x":-143,"y":-143.95,"rotateMix":0,"scaleMix":0},{"name":"jaw","order":1,"bones":["metaljaw"],"target":"head","rotation":-138.36,"x":47,"y":-7.76,"rotateMix":0,"scaleMix":0}],"skins":[{"name":"default","attachments":{"back-foot":{"alien/back-foot":{"x":4.53,"y":2.76,"rotation":12.42,"width":16,"height":11}},"back-shin":{"alien/back-shin":{"x":9.6,"y":0.84,"rotation":104.23,"width":42,"height":48}},"back-thigh":{"alien/back-thigh":{"x":21.8,"y":-0.35,"rotation":54.08,"width":47,"height":47}},"backarmor":{"alien/backarmor":{"x":121.41,"y":-18.48,"rotation":-99.84,"width":162,"height":182}},"body":{"alien/body":{"x":96.07,"y":-9.51,"rotation":-99.84,"width":196,"height":235}},"burst-bg":{"alien/burst03-bg":{"type":"mesh","uvs":[0.10357,0.21935,0.18465,0.07668,0.27288,0.01093,0.35907,0.03574,0.42894,0.13623,0.51308,0.0438,0.64058,0.01155,0.75065,0.03004,0.76009,0.09807,0.76726,0.14971,0.79281,0.16059,0.84556,0.20354,0.80039,0.21646,0.77961,0.32105,0.79923,0.43056,0.82924,0.40178,0.79577,0.30912,0.80399,0.2203,0.85017,0.2073,0.94358,0.28336,0.9308,0.33775,1,0.50248,1,0.58796,0.93591,0.63613,0.85286,0.83817,0.6791,1,0.42356,1,0.1642,0.776,0.09312,0.68855,0,0.57397,0,0.46449,0.15811,0.25358,0.05714,0.33546,0.21907,0.41635,0.4003,0.21573,0.70676,0.18972,0.7821,0.45969,0.86576,0.32396,0.91039,0.44964,0.89678,0.50703,0.85623,0.54472,0.56516,0.20173,0.60087,0.11642,0.27445,0.05938,0.27264,0.17616,0.28517,0.2429,0.13458,0.37415,0.11928,0.49774,0.14964,0.5664],"triangles":[43,2,3,1,2,43,42,5,6,8,42,6,8,6,7,4,5,42,44,1,43,44,43,3,44,3,4,35,42,8,35,8,9,41,4,42,41,42,35,34,44,4,34,4,41,12,10,11,0,1,44,45,44,34,31,0,44,45,31,44,10,12,9,9,12,35,13,35,12,37,18,19,17,18,37,16,17,37,32,0,31,20,37,19,46,32,31,15,16,37,33,31,45,46,31,33,33,45,34,37,38,15,20,38,37,36,13,14,35,13,36,32,30,0,30,32,46,47,30,46,47,46,33,38,20,21,38,14,15,39,38,21,39,14,38,36,14,39,40,36,39,48,47,33,29,30,47,29,47,48,39,21,22,23,39,22,40,39,23,28,29,48,36,26,27,28,48,27,24,36,40,24,40,23,34,36,33,33,36,48,48,36,27,41,35,36,41,36,34,25,26,36,24,25,36],"vertices":[243.87,224.76,312.76,212.12,354.77,183.53,363.03,140.82,340.13,92.86,391.14,70.52,428.74,18.79,444.15,-33.56,421.01,-49.08,403.45,-60.86,404.6,-74.1,399.44,-104.85,385.57,-86.77,342.87,-94.82,306.52,-121.77,323.17,-130.43,350.52,-100.07,384.88,-89.02,398.99,-107.54,389.84,-161.98,367.24,-165.28,320.56,-223.6,289.1,-237.78,258.43,-217.08,167.3,-213.42,72.66,-162.46,21.08,-48.05,51.2,105.25,69.05,151.58,92.43,212.29,132.73,230.45,242.28,194.65,191.76,226.28,194.66,140.35,305.09,92.5,376.51,-40.41,292.34,-118.94,359.19,-133.87,321.93,-174.71,298.05,-178.14,276,-166.23,343.51,21,382.13,19.17,337.24,174.79,293.89,156.22,271.85,139.53,193.15,185.19,144.56,171.53,125.42,146.55],"hull":31}},"eye-highlight":{"alien/eye-highlight":{"width":43,"height":43}},"eye-pupil":{"alien/eye-pupil":{"type":"mesh","uvs":[0.33333,0,0.66667,0,1,0.33333,1,0.66667,0.66667,1,0.33333,1,0,0.66667,0,0.33333,0.33333,0.33333,0.66667,0.33333,0.33333,0.66667,0.66667,0.66667],"triangles":[8,0,1,7,0,8,2,9,1,8,1,9,6,7,8,10,8,9,6,8,10,11,9,2,10,9,11,11,2,3,5,6,10,4,10,11,5,10,4,4,11,3],"vertices":[-5.83,17.5,5.83,17.5,17.5,5.83,17.5,-5.83,5.83,-17.5,-5.83,-17.5,-17.5,-5.83,-17.5,5.83,-5.83,5.83,5.83,5.83,-5.83,-5.83,5.83,-5.83],"hull":8}},"eye-splat":{"alien/splat03":{"type":"mesh","uvs":[0,0,0.33333,0,0.66667,0,1,0,1,1,0.66667,1,0.33333,1,0,1],"triangles":[0,7,1,1,7,6,1,6,2,2,6,5,2,5,3,3,5,4],"vertices":[-112.07,10.93,-38.11,17.26,38.11,16.81,108,10.03,114.33,-17.26,33.14,-26.75,-39.01,-31.27,-114.33,-17.26],"hull":8}},"eye-stalk":{"alien/eye-stalk":{"type":"mesh","uvs":[1,0.17186,0.87544,0.29277,0.89315,0.69314,1,0.90273,1,1,0.7891,1,0.5655,0.70926,0.44374,0.59641,0.34633,0.55745,0.27217,0.58566,0.2124,0.55341,0.13048,0.57894,0,0.57625,0,0.46609,0.1327,0.46206,0.23011,0.43922,0.26995,0.46877,0.3574,0.45265,0.43489,0.46743,0.49134,0.42712,0.58764,0.22829,0.83891,0,1,0],"triangles":[11,14,10,11,12,13,14,11,13,10,14,15,8,16,17,9,10,16,8,9,16,10,15,16,8,17,18,8,18,7,21,22,0,1,21,0,20,21,1,19,2,6,1,19,20,2,19,1,7,19,6,5,6,2,5,2,3,5,3,4,7,18,19],"vertices":[1,21,79.5,42.99,1,1,21,59.69,27.15,1,1,21,62.51,-25.3,1,1,21,79.5,-52.76,1,1,21,79.5,-65.5,1,1,21,45.97,-65.5,1,3,21,10.41,-27.41,0.70014,22,-19.9,24.68,0.25564,23,-36.04,24.68,0.04422,4,21,-8.95,-12.63,0.39574,22,-0.31,10.2,0.4047,23,-16.45,10.2,0.19226,24,-32.6,10.2,0.0073,4,21,-24.43,-7.53,0.15434,22,15.26,5.34,0.37965,23,-0.89,5.34,0.35628,24,-17.03,5.34,0.10973,5,21,-36.23,-11.22,0.02406,22,26.99,9.22,0.22083,23,10.84,9.22,0.43184,24,-5.3,9.22,0.25041,25,-21.44,9.22,0.07286,4,22,36.56,5.15,0.06689,23,20.41,5.15,0.29978,24,4.27,5.15,0.3765,25,-11.88,5.15,0.25684,3,23,33.38,8.7,0.13576,24,17.24,8.7,0.31231,25,1.09,8.7,0.55192,3,23,54.13,8.67,0.01597,24,37.99,8.67,0.22361,25,21.84,8.67,0.76041,3,23,54.36,-5.76,0.0282,24,38.22,-5.76,0.22512,25,22.07,-5.76,0.74668,3,23,33.27,-6.62,0.15732,24,17.13,-6.62,0.33196,25,0.98,-6.62,0.51072,4,22,33.98,-9.85,0.07948,23,17.83,-9.85,0.31806,24,1.69,-9.85,0.37309,25,-14.46,-9.85,0.22937,5,21,-36.58,4.09,0.01783,22,27.58,-6.08,0.25225,23,11.44,-6.08,0.42239,24,-4.71,-6.08,0.2484,25,-20.85,-6.08,0.05913,4,21,-22.67,6.2,0.13761,22,13.71,-8.41,0.43417,23,-2.43,-8.41,0.32491,24,-18.58,-8.41,0.10331,4,21,-10.35,4.27,0.36851,22,1.36,-6.67,0.45713,23,-14.78,-6.67,0.16417,24,-30.93,-6.67,0.0102,3,21,-1.38,9.55,0.67485,22,-7.53,-12.09,0.29353,23,-23.67,-12.09,0.03163,2,21,13.93,35.59,0.8884,22,-22.43,-38.37,0.1116,1,21,53.89,65.5,1,1,21,79.5,65.5,1],"hull":23}},"eyeball":{"alien/eye":{"type":"mesh","uvs":[0.85047,0.13875,0.98667,0.3431,0.98667,0.47303,0.98667,0.61454,0.94572,0.71073,0.87413,0.83398,0.77706,0.9087,0.64923,0.98667,0.4973,0.98667,0.35595,0.98667,0.23924,0.92448,0.14613,0.8644,0.07706,0.75411,0.01333,0.63014,0.01333,0.50033,0.01333,0.37742,0.07112,0.26126,0.12819,0.14655,0.24031,0.08097,0.35595,0.01333,0.5103,0.01333,0.65547,0.01333,0.366,0.90333,0.6247,0.89943,0.8132,0.79283,0.9159,0.61083,0.9159,0.36513,0.808,0.19483,0.6325,0.09083,0.379,0.08433,0.1905,0.20133,0.0826,0.38333,0.0865,0.61473,0.2022,0.80973,0.50622,0.08759,0.29444,0.13681,0.13626,0.29283,0.08455,0.49897,0.13693,0.69972,0.27542,0.85157,0.49981,0.90131,0.72342,0.8436,0.87136,0.68977,0.9159,0.47303,0.91047,0.22878,0.85853,0.27458,0.76322,0.08263,0.72248,0.14415,0.50307,0.48708,0.33447,0.33295,0.28782,0.37309,0.26812,0.4291,0.2617,0.49394,0.27452,0.55711,0.29889,0.60566,0.34608,0.65543,0.38241,0.68026,0.43365,0.69791,0.50138,0.70162,0.56522,0.69777,0.62072,0.67742,0.66618,0.64788,0.69809,0.59441,0.71324,0.55008,0.72398,0.47956,0.71325,0.42499,0.68781,0.37664,0.65111,0.3452,0.60899,0.32153,0.56154,0.30809,0.50458,0.29603,0.44539,0.29983,0.39825,0.31109],"triangles":[48,71,70,48,70,69,72,71,48,49,72,48,50,49,48,51,50,48,48,69,68,48,68,67,48,67,66,48,66,65,48,65,64,52,51,48,63,48,64,53,52,48,62,48,63,54,53,48,61,48,62,55,54,48,48,56,55,61,60,48,56,48,57,60,59,48,48,58,57,59,58,48,21,0,46,29,19,20,18,19,29,34,29,20,28,20,21,28,21,46,34,20,28,35,18,29,47,28,46,27,46,0,47,46,27,30,17,18,30,18,35,1,44,0,27,0,44,16,17,30,45,27,44,36,16,30,34,71,29,69,70,34,29,72,35,34,70,71,28,69,34,68,69,28,71,72,29,49,30,35,47,68,28,72,49,35,50,36,30,26,45,44,67,68,47,67,47,27,66,67,27,1,26,44,49,50,30,45,66,27,31,16,36,15,16,31,65,66,45,65,45,26,51,36,50,31,36,51,2,43,26,65,26,43,2,26,1,64,65,43,51,37,31,52,37,51,14,15,31,14,31,37,25,43,2,63,64,43,25,63,43,25,2,3,53,32,37,53,37,52,14,37,32,13,14,32,42,63,25,62,63,42,38,32,53,38,53,54,4,25,3,42,25,4,12,13,32,12,32,38,42,61,62,24,61,42,55,33,38,55,38,54,12,38,33,5,42,4,24,42,5,41,61,24,60,61,41,39,33,55,39,55,56,11,12,33,41,59,60,23,59,41,40,57,58,40,58,59,23,40,59,22,39,56,22,56,57,22,57,40,6,41,24,6,24,5,10,33,39,10,39,22,11,33,10,9,10,22,8,22,40,9,22,8,6,7,23,6,23,41,8,40,23,7,8,23],"vertices":[1,18,52.57,54.19,1,1,18,73,23.53,1,1,18,73,4.05,1,1,18,73,-17.18,1,1,18,66.86,-31.61,1,1,18,58.65,-50.88,1,1,18,41.56,-61.3,1,1,18,22.38,-73,1,1,18,-0.4,-73,1,1,18,-21.61,-73,1,1,18,-38.33,-63.87,1,1,18,-54.84,-54.86,1,1,18,-63.44,-38.12,1,1,18,-73,-19.52,1,1,18,-73,-0.05,1,1,18,-73,18.39,1,1,18,-64.33,35.81,1,1,18,-55.77,53.02,1,1,18,-38.95,62.85,1,1,18,-21.61,73,1,1,18,1.55,73,1,1,18,23.32,73,1,2,18,-20.1,-60.5,0.79808,20,-20.1,-60.5,0.20192,2,18,18.71,-59.91,0.79438,20,18.71,-59.91,0.20562,2,18,46.98,-43.92,0.79438,20,46.98,-43.92,0.20562,2,18,62.39,-16.62,0.79808,20,62.39,-16.62,0.20192,2,18,62.39,20.23,0.79808,20,62.39,20.23,0.20192,2,18,46.2,45.78,0.79438,20,46.2,45.78,0.20562,2,18,19.88,61.38,0.79808,20,19.88,61.38,0.20192,2,18,-18.15,62.35,0.79808,20,-18.15,62.35,0.20192,2,18,-46.42,44.8,0.79438,20,-46.42,44.8,0.20562,2,18,-62.61,17.5,0.79808,20,-62.61,17.5,0.20192,2,18,-62.02,-17.21,0.79808,20,-62.02,-17.21,0.20192,2,18,-44.67,-46.46,0.79438,20,-44.67,-46.46,0.20562,2,18,0.93,61.86,0.79808,20,0.93,61.86,0.20192,2,18,-30.83,54.48,0.79728,20,-30.83,54.48,0.20272,2,18,-54.56,31.08,0.79728,20,-54.56,31.08,0.20272,2,18,-62.32,0.15,0.79808,20,-62.32,0.15,0.20192,2,18,-54.46,-29.96,0.79728,20,-54.46,-29.96,0.20272,2,18,-33.69,-52.74,0.79728,20,-33.69,-52.74,0.20272,2,18,-0.03,-60.2,0.79728,20,-0.03,-60.2,0.20272,2,18,33.51,-51.54,0.79648,20,33.51,-51.54,0.20352,2,18,55.7,-28.47,0.79728,20,55.7,-28.47,0.20272,2,18,62.39,4.05,0.79808,20,62.39,4.05,0.20192,1,18,61.57,40.68,1,2,18,53.78,33.81,0.79728,20,53.78,33.81,0.20272,1,18,39.48,62.61,1,2,18,33.37,53.38,0.79728,20,33.37,53.38,0.20272,2,18,0.46,1.94,0.33108,20,0.46,1.94,0.66892,2,18,-24.83,25.06,0.38094,20,-24.83,25.06,0.61906,2,18,-31.83,19.04,0.38174,20,-31.83,19.04,0.61826,2,18,-34.78,10.63,0.38544,20,-34.78,10.63,0.61456,2,18,-35.74,0.91,0.38624,20,-35.74,0.91,0.61376,2,18,-33.82,-8.57,0.38544,20,-33.82,-8.57,0.61456,2,18,-30.17,-15.85,0.38174,20,-30.17,-15.85,0.61826,2,18,-23.09,-23.32,0.38094,20,-23.09,-23.32,0.61906,2,18,-17.64,-27.04,0.38174,20,-17.64,-27.04,0.61826,2,18,-9.95,-29.69,0.38464,20,-9.95,-29.69,0.61536,2,18,0.21,-30.24,0.38174,20,0.21,-30.24,0.61826,2,18,9.78,-29.67,0.38014,20,9.78,-29.67,0.61986,2,18,18.11,-26.61,0.37724,20,18.11,-26.61,0.62276,2,18,24.93,-22.18,0.38014,20,24.93,-22.18,0.61986,2,18,29.71,-14.16,0.38174,20,29.71,-14.16,0.61826,2,18,31.99,-7.51,0.38544,20,31.99,-7.51,0.61456,2,18,33.6,3.07,0.38624,20,33.6,3.07,0.61376,2,18,31.99,11.25,0.38544,20,31.99,11.25,0.61456,2,18,28.17,18.5,0.38174,20,28.17,18.5,0.61826,2,18,22.67,23.22,0.38094,20,22.67,23.22,0.61906,2,18,16.35,26.77,0.38174,20,16.35,26.77,0.61826,2,18,9.23,28.79,0.38544,20,9.23,28.79,0.61456,2,18,0.69,30.6,0.38624,20,0.69,30.6,0.61376,2,18,-8.19,30.03,0.38544,20,-8.19,30.03,0.61456,2,18,-15.26,28.34,0.38174,20,-15.26,28.34,0.61826],"hull":22}},"front-foot":{"alien/front-foot":{"x":5.11,"y":2.54,"rotation":14.27,"width":19,"height":12}},"front-lower-arm":{"alien/front-lower-arm":{"x":52.88,"y":5.47,"rotation":102.64,"width":110,"height":125}},"front-shin":{"alien/front-shin":{"x":10.32,"y":1.86,"rotation":101.12,"width":49,"height":56}},"front-thigh":{"alien/front-thigh":{"x":26.99,"y":0.4,"rotation":55.89,"width":54,"height":54}},"front-upper-arm":{"alien/front-upper-arm":{"x":35.92,"y":6.58,"rotation":174.62,"width":113,"height":55}},"head":{"alien/burst01":{"type":"mesh","uvs":[0.36349,0,0.20193,0.04228,0.05938,0.15467,0,0.30323,0,0.40237,0,0.45545,0,0.63455,0.0731,0.79288,0.20404,0.93264,0.38778,1,0.51283,1,0.56457,0.93822,0.54979,0.8053,0.58569,0.74861,0.60681,0.79064,0.77682,0.77402,0.92887,0.60983,0.9925,0.45944,1,0.44173,1,0.25017,0.78522,0.0547,0.55713,0,0.6308,0.6872,0.512,0.63474,0.30885,0.46497,0.30864,0.24042,0.42904,0.1072,0.71787,0.2181,0.76391,0.39125,0.71579,0.53877,0.62069,0.66092,0.54219,0.60911,0.44912,0.49953,0.40608,0.42094,0.40336,0.36818,0.42572,0.30955,0.47773,0.26688,0.5624,0.24828,0.66793,0.28394,0.71224,0.33292,0.06316,0.46033,0.03888,0.30945,0.0805,0.1714,0.21751,0.07028,0.37554,0.07911,0.60541,0.06136,0.76431,0.09983,0.90739,0.28282,0.64139,0.06273,0.60291,0.06727,0.64106,0.08235,0.60234,0.65202,0.36457,0.15883,0.51743,0.07211,0.51605,0.06855,0.2901,0.34409,0.46451,0.65207,0.5742,0.67639,0.57697,0.6685,0.62787,0.70305,0.67394,0.65823,0.84092,0.61257,0.35144,0.15357,0.29883,0.23755,0.19781,0.27899,0.67524,0.60437,0.7023,0.61751,0.73997,0.54751,0.75917,0.47179,0.73584,0.46801,0.73809,0.39256,0.73511,0.32459,0.68329,0.26738,0.63055,0.23751,0.56328,0.22615,0.51191,0.23162,0.46692,0.24929,0.43645,0.26948,0.40962,0.30229,0.3919,0.33509,0.38417,0.36538,0.381,0.39693,0.38829,0.42807,0.40647,0.47477,0.43147,0.50927,0.47783,0.56691,0.52692,0.62035,0.49518,0.55385,0.42788,0.46075,0.40459,0.39214,0.41534,0.33676,0.45452,0.28593,0.51781,0.25363,0.6201,0.25937,0.64837,0.19561,0.56718,0.16332,0.495,0.17556,0.44329,0.22733,0.42043,0.26462,0.35067,0.39764,0.35427,0.35979,0.36329,0.32417,0.37652,0.29356,0.38856,0.25794,0.41983,0.20951,0.47696,0.14996,0.56838,0.12992,0.65498,0.16221,0.05343,0.39989],"triangles":[48,45,21,20,48,21,45,54,21,54,0,21,49,54,45,43,1,0,53,54,49,44,0,54,43,0,44,50,45,48,49,45,50,46,48,20,50,48,46,26,44,54,26,54,53,106,53,49,105,26,53,105,53,106,62,43,44,52,62,44,42,2,1,26,52,44,27,107,50,106,49,50,107,106,50,106,96,105,95,106,107,43,42,1,95,96,106,94,95,107,104,52,26,104,26,105,104,105,96,46,27,50,94,107,27,74,96,95,74,95,94,97,104,96,75,96,74,97,96,75,73,74,94,63,43,62,64,42,43,25,63,62,25,62,52,37,75,74,93,37,74,76,97,75,47,46,20,47,27,46,92,75,37,36,76,75,103,52,104,98,103,104,25,52,103,73,93,74,97,98,104,77,98,97,92,36,75,72,94,27,73,94,72,38,93,73,76,77,97,91,77,76,63,64,43,20,19,47,72,38,73,36,91,76,102,25,103,78,103,98,78,98,77,35,78,77,102,103,78,3,2,42,41,3,42,64,41,42,91,35,77,101,25,102,28,71,27,72,27,71,39,38,72,71,39,72,79,102,78,101,102,79,90,78,35,79,78,90,55,64,63,55,63,25,55,25,101,100,55,101,100,101,79,80,100,79,34,79,90,80,79,34,47,28,27,89,34,90,70,71,28,39,71,70,81,100,80,89,81,80,89,80,34,99,55,100,99,100,81,108,41,64,4,3,41,4,41,108,88,33,89,81,89,33,82,81,33,47,19,18,17,28,47,5,4,108,18,17,47,55,40,108,5,108,40,91,90,35,88,90,91,88,89,90,24,55,99,70,87,39,28,69,70,68,28,17,68,69,28,88,82,33,83,82,88,92,32,88,84,83,88,32,84,88,70,69,87,67,29,69,68,67,69,92,91,36,91,92,88,37,87,32,37,32,92,93,87,37,87,93,38,87,38,39,85,32,87,84,32,85,87,29,31,69,29,87,65,31,29,17,61,68,61,67,68,17,16,61,66,65,29,66,29,67,66,67,61,86,87,31,85,87,86,6,5,40,55,108,64,23,85,86,24,84,85,24,83,84,99,81,82,24,99,82,24,82,83,85,23,24,51,31,65,56,24,23,65,30,51,65,66,30,60,66,61,30,66,22,58,31,51,86,31,58,23,86,58,57,23,58,56,23,57,66,60,22,58,51,30,22,58,30,22,57,58,59,57,22,59,22,60,13,57,59,15,60,61,59,60,15,15,61,16,14,13,59,14,59,15,40,24,6,24,40,55,7,24,56,7,6,24,13,12,56,13,56,57,8,7,56,9,8,56,12,9,56,11,9,12,10,9,11],"vertices":[219.99,58.9,187.68,94.42,138.41,115.41,89.75,110.13,62.33,96.46,47.65,89.14,-1.87,64.45,-36.32,23.9,-58.26,-28.87,-53.44,-85.18,-37.48,-117.19,-13.79,-121.92,21.07,-99.81,41.33,-101.18,32.4,-112.38,58.69,-153.6,123.5,-169.88,173.21,-165.43,179.06,-164.91,232.03,-138.5,258.68,-56.58,244.7,9.34,64.06,-104.26,63.41,-66.62,84.43,8.78,146.5,39.79,198.71,27.34,204.9,-61.87,162.89,-97.52,115.95,-105.55,70.04,-98.04,74.35,-70.81,92.77,-31.88,109.01,-10.03,123.26,-2.07,142.33,0.29,160.77,-7.13,176.71,-26.24,180.32,-58.16,172.42,-76.26,54.36,72.3,92.99,99.32,136.48,107.7,181.92,86.57,199.65,44.91,233.89,-11.47,243.53,-57.45,211.18,-119.3,238.1,-20.87,231.94,-11.65,232.64,-23.49,70.16,-92.12,176.2,36.72,219.69,9.56,220.5,10.4,115.47,30.24,52.56,-56.85,59.83,-88.28,62.37,-87.9,59.31,-105.69,77.58,-111.3,111.52,-147.75,175.98,40.81,146.04,42.7,121.69,62.84,92.64,-104.21,92.46,-112.95,116.62,-112.94,140.01,-107.41,138.08,-100.92,159.23,-91.1,177.65,-80.96,186.86,-59.81,188.39,-42.19,182.95,-23.41,174.88,-11.02,164.25,-1.94,154.78,3.08,142.28,5.42,130.95,5.43,121.58,3.23,112.45,-0.31,104.77,-6.46,94.18,-17.55,87.83,-28.71,77.81,-48.52,69.3,-68.45,83.63,-51.16,100.79,-21.1,116.79,-5.68,133.48,-0.8,152.54,-3.82,169.55,-15.56,181.01,-42.53,202.25,-40.98,200.82,-15.75,188.22,1.04,167.31,7.14,154.08,7.84,108.39,7.36,119.31,11.65,130.32,14.26,140.47,15.09,151.86,16.92,169.24,15.6,193,9.19,210.21,-11.45,212.33,-38.07,69.83,83.12],"hull":22},"alien/burst02":{"type":"mesh","uvs":[0.01285,0.25357,0.07336,0.15544,0.18165,0.07341,0.34988,0.01536,0.44435,1.0E-5,0.55991,1.0E-5,0.66539,0.01591,0.76543,0.05169,0.85764,0.10606,0.91801,0.17116,0.96506,0.23283,0.99999,0.34882,0.9955,0.46319,0.93625,0.55954,0.87565,0.63112,0.7364,0.78076,0.54858,0.80724,0.53834,0.9205,0.51102,1,0.33333,1,0.20881,0.9205,0.13881,0.819,0.0688,0.66603,0.04281,0.4682,0.00892,0.36404,0.33333,0.66666,0.63526,0.66666,0.64751,0.11218,0.55601,0.09848,0.36572,0.13683,0.2736,0.24127,0.28087,0.39269,0.37057,0.51592,0.48573,0.60782,0.62878,0.63393,0.76212,0.57649,0.85304,0.47519,0.88455,0.36972,0.85788,0.25693,0.78515,0.1713,0.34671,0.12165,0.28479,0.16702,0.31315,0.177,0.2599,0.31162,0.32067,0.4637,0.42253,0.56627,0.46648,0.10604,0.55897,0.63574,0.70162,0.61337,0.81727,0.52695,0.87372,0.41999,0.87524,0.30618,0.82405,0.21485,0.72533,0.14046,0.24368,0.23084,0.22764,0.31199,0.24649,0.40276,0.28977,0.4821,0.34979,0.54281,0.40911,0.58729,0.4754,0.63177,0.55495,0.66302,0.70705,0.64077,0.7824,0.59448,0.83822,0.54037,0.88147,0.48386,0.90589,0.42736,0.91495,0.37085,0.90727,0.30233,0.88564,0.25124,0.85353,0.20075,0.80538,0.15567,0.74188,0.1166,0.65465,0.08414,0.55557,0.07153,0.44603,0.08296,0.60235,0.3294,0.4498,0.01929,0.35621,0.03605,0.19861,0.09679,0.08963,0.17114,0.03818,0.25247,0.03342,0.36103,0.06749,0.46077,0.12146,0.61502,0.55968,0.01782,0.65932,0.0404,0.75598,0.08041,0.8399,0.12881,0.89909,0.18883,0.94031,0.24756,0.97328,0.34953,0.96055,0.45732,0.91583,0.55182,0.8566,0.62597,0.72506,0.70338],"triangles":[5,77,4,85,5,6,85,77,5,78,3,4,78,4,77,86,85,6,86,6,7,74,77,85,74,85,86,79,2,3,87,86,7,75,78,77,75,77,74,73,74,86,73,86,87,78,79,3,28,74,73,46,75,74,28,46,74,87,7,8,27,28,73,72,73,87,53,27,73,40,79,78,40,78,75,88,87,8,71,72,87,29,40,75,29,75,46,72,53,73,80,1,2,88,71,87,41,79,40,79,80,2,88,8,9,39,72,71,53,72,39,42,41,40,42,40,29,89,88,9,70,88,89,71,88,70,52,71,70,39,71,52,54,79,41,80,79,54,89,9,10,30,54,41,30,41,42,90,89,10,69,70,89,69,89,90,81,1,80,81,0,1,38,70,69,52,70,38,68,69,90,51,38,69,51,69,68,43,54,30,55,80,54,55,54,43,81,80,55,76,28,27,76,27,53,76,53,39,76,39,52,76,52,38,76,38,51,46,28,76,29,46,76,42,29,76,30,42,76,43,30,76,91,90,10,91,68,90,10,11,91,82,0,81,82,81,55,24,0,82,37,51,68,67,37,68,91,67,68,31,43,76,56,55,43,56,43,31,82,55,56,37,50,76,37,76,51,66,50,37,67,66,37,92,67,91,66,67,92,83,82,56,12,91,11,92,91,12,44,31,76,23,82,83,24,82,23,36,76,50,57,31,44,56,31,57,65,50,66,65,66,92,36,50,65,32,44,76,49,76,36,64,49,36,64,36,65,58,44,32,57,44,58,93,65,92,64,65,93,13,93,92,13,92,12,45,32,76,76,33,45,58,32,45,49,35,76,59,58,45,63,35,49,63,49,64,47,33,76,59,45,33,35,48,76,57,84,83,57,83,56,94,64,93,63,64,94,14,94,93,14,93,13,60,59,33,48,34,76,34,47,76,63,62,48,63,48,35,34,48,62,47,60,33,61,60,47,84,23,83,22,23,84,25,57,58,25,58,59,84,57,25,26,34,62,61,47,34,26,61,34,95,62,63,26,62,95,95,63,94,15,95,94,15,94,14,16,60,61,16,61,26,95,15,16,95,16,26,21,84,25,22,84,21,20,21,25,60,16,25,25,16,19,20,25,19,60,25,59,17,19,16,18,19,17],"vertices":[136.81,147.92,176.91,146.88,218.44,129.95,260.54,92.48,278.6,68.66,294.63,36.49,304.13,4.57,306.45,-29.04,301.68,-63.45,289.02,-90.74,275.62,-113.77,242.99,-142.17,205.42,-159.34,166.07,-158.36,134.54,-153.03,66.87,-138.36,32.26,-90.35,-5.75,-105.74,-35.22,-110.94,-59.87,-61.48,-51.46,-14.02,-28.39,21.8,11.31,65.92,71.62,105.01,100.57,131.22,47.81,-7.8,89.7,-91.84,270.55,-5.96,262.28,21.72,223.49,68.5,176.96,77.32,129.05,50.91,101.68,6.11,87.97,-40.75,99.38,-84.76,136.44,-112.63,181.78,-121.62,220.23,-113.41,252.97,-87.82,270.54,-53.78,225.75,76.24,202.5,86.17,203.22,76.67,152.33,69.81,111.63,28.4,92.62,-16.46,247.41,45.42,89.11,-65.63,116.13,-101.73,160.09,-120,202.48,-118.49,239.46,-100.58,261.87,-71.62,272.21,-32.17,176.18,87.33,147.74,78.73,121.03,58.86,101.4,34.04,90.11,7.56,83.97,-16.11,78.8,-41.73,79.74,-68.9,108.03,-107.65,133.44,-121.17,158.66,-127.99,182.92,-130.93,204.57,-128.63,224.08,-122.05,245.15,-108.88,258.66,-94.63,270.52,-77.56,278.4,-56.9,282.21,-32.93,280.6,-3.43,270.93,26.18,252.03,54.83,194.1,-28.37,273.13,64.04,254.73,87.38,213.24,121.47,174.1,139.82,140.68,141.05,104.95,124.89,77.45,99.34,35.1,59.48,288.85,33.69,295.38,2.32,295.86,-31.03,291.87,-62.18,280.69,-88.32,267.43,-109.25,239.06,-134.85,202.47,-148.67,165.73,-151.44,133.56,-146.89,90.3,-122.75],"hull":25},"alien/burst03-fg":{"type":"mesh","uvs":[0.01705,0.37617,0.03578,0.31601,0.04982,0.2824,0.07323,0.26382,0.14111,0.25586,0.17778,0.27438,0.21991,0.29567,0.27687,0.3452,0.32369,0.41686,0.39937,0.4894,0.47115,0.53717,0.54215,0.56105,0.61315,0.54513,0.68728,0.50267,0.74813,0.43544,0.79027,0.35759,0.8324,0.30717,0.88702,0.28505,0.94553,0.30717,0.97908,0.34609,0.98767,0.39918,0.98532,0.45136,0.9705,0.44694,0.96738,0.49382,0.9549,0.53009,0.92057,0.56017,0.91198,0.51593,0.88233,0.5062,0.84566,0.5407,0.81055,0.59997,0.77388,0.65659,0.72005,0.73797,0.66231,0.79105,0.53747,0.80697,0.52577,0.86182,0.53279,0.9317,0.5164,1,0.43214,1,0.27921,0.90959,0.20899,0.68136,0.15437,0.62297,0.11848,0.56724,0.09196,0.5407,0.04514,0.54513,0.03422,0.5177,0,0.46905,0,0.43367,0.02564,0.43544,0.05372,0.33547,0.08805,0.32044,0.10034,0.42296,0.15048,0.42864,0.13937,0.33164,0.18794,0.3569,0.07709,0.48133,0.06456,0.42893,0.11053,0.29308,0.15838,0.30331,0.07621,0.37514,0.11978,0.37747,0.91413,0.3556,0.8863,0.4052,0.84631,0.44805,0.80123,0.49275,0.74882,0.55125,0.19534,0.4595,0.24507,0.51256,0.30776,0.58177,0.43623,0.62736,0.54559,0.66048,0.70193,0.60669,0.61673,0.63601,0.37946,0.75892],"triangles":[36,37,35,35,37,34,34,37,72,37,38,72,38,39,72,34,72,33,33,72,69,33,69,32,69,71,32,32,71,31,71,70,31,31,70,30,69,68,11,69,11,71,70,64,30,30,64,29,11,12,71,71,12,70,12,13,70,70,13,64,29,64,28,64,13,63,25,26,24,24,26,23,23,26,22,63,62,27,22,26,27,61,22,27,61,27,62,21,22,20,22,61,20,62,15,61,15,16,61,61,60,20,61,16,60,60,19,20,16,17,60,60,18,19,60,17,18,64,63,28,28,63,27,13,14,63,63,14,62,14,15,62,40,41,66,41,65,66,41,42,65,43,44,42,44,54,42,51,42,54,42,51,65,44,45,54,54,47,55,47,54,45,45,46,47,51,54,50,54,55,50,55,47,0,47,46,0,55,58,50,55,0,58,50,59,51,50,58,59,0,48,58,0,1,48,59,58,49,58,48,49,51,53,65,65,7,8,65,53,7,51,59,53,59,52,53,52,59,49,52,57,53,53,57,6,53,6,7,6,57,5,48,1,49,49,56,52,52,56,57,1,2,49,49,2,56,56,4,57,57,4,5,2,3,56,56,3,4,69,72,68,39,67,72,72,67,68,39,40,67,68,10,11,67,9,68,68,9,10,40,66,67,67,66,9,66,8,9,66,65,8],"vertices":[97.36,198.53,124.34,201.87,140.19,202.19,152.33,195.6,170,167.75,170.84,148.37,171.81,126.1,165.19,92.05,147.96,58.17,136.6,11.64,133.86,-28.49,140.06,-63.74,161.44,-91.42,193.63,-115.4,232.39,-128.94,271.18,-132.35,299.5,-140.99,319.71,-160.4,323.89,-189.92,316.28,-211.83,297.88,-225.64,277.47,-234.55,275.96,-227.3,257.4,-234.86,240.87,-236.36,222,-227.24,237.02,-215.11,234.34,-200.44,213.27,-191.14,183.09,-187.23,153.58,-182.13,110.93,-174.33,78.23,-159.45,45.24,-108.49,21.79,-113.86,-3.35,-130.19,-32.94,-136.09,-51.11,-99.65,-49.6,-16.31,22.32,57.47,32.82,92.2,46.34,118.32,50.74,134.84,38.96,154.24,47.07,164.18,58.25,188.24,71.75,194.97,76.6,183.54,120.79,190.41,133.93,178.42,97.47,153.6,106.11,130.84,140.72,154.09,141.55,128.28,70.19,152.56,87.47,167.95,149.21,173.9,155.62,151.26,110.5,173.14,119.01,153.85,298.64,-185.55,273.72,-182.94,248.75,-173.8,221.98,-162.8,188.36,-151.26,104.01,105.57,94.5,73.97,81.61,33.69,91.93,-30.54,102.87,-84.14,157.1,-141.53,127.55,-110.25,29.5,-31.01],"hull":47},"alien/head":{"type":"mesh","uvs":[0.89327,0.1264,0.74405,0.05875,0.63411,0.0089,0.42766,0,0.32866,0.01774,0.25087,0.03168,0.09383,0.20554,0.01257,0.39859,0,0.55806,0.02575,0.68996,0.13995,0.87222,0.35629,1,0.50563,1,0.56603,0.92378,0.5792,0.73073,0.63301,0.7715,0.68133,0.68636,0.80761,0.75831,0.90535,0.66478,0.94997,0.5523,1,0.42617,1,0.40756,1,0.38901,1,0.29427,0.75883,0.43332,0.29543,0.28915,0.24432,0.36077,0.4232,0.55331,0.66598,0.62865,0.77076,0.57656,0.53883,0.36488,0.54487,0.33895,0.3925,0.20994,0.45361,0.12275,0.57257,0.13075,0.71598,0.2304,0.6679,0.33361,0.84124,0.22315,0.30431,0.16244,0.87994,0.42216,0.90528,0.50053,0.54287,0.353,0.40207,0.32233,0.6688,0.40531,0.32187,0.44424,0.53578,0.58825,0.76798,0.54323,0.6016,0.3844,0.71826,0.4207,0.71612,0.60373,0.36884,0.4948,0.46578,0.34215,0.34463,0.30446,0.27573,0.39459,0.25505,0.34573,0.29336,0.37153,0.35076,0.40032,0.41173,0.42726,0.48074,0.461,0.56158,0.5,0.66515,0.53303,0.74896,0.43025,0.75395,0.50853,0.73793,0.50764,0.66772,0.49101,0.57596,0.46382,0.49686,0.43328,0.42748,0.40246,0.36609,0.37703,0.30903,0.35103,0.45113,0.44382,0.47881,0.4652,0.55762,0.53179,0.62626,0.56881,0.66063,0.55615,0.69923,0.53245,0.61932,0.61417,0.42705,0.4337,0.46724,0.48153,0.54566,0.55765,0.62306,0.59843,0.66652,0.58571,0.72143,0.53688,0.75628,0.54223,0.52256,0.47952,0.53727,0.44888,0.61411,0.51822,0.62226,0.47754,0.45021,0.46126,0.46213,0.41785,0.51782,0.49906,0.50571,0.51887,0.58949,0.55521,0.58467,0.5782,0.46856,0.45658,0.48828,0.50196,0.502,0.48431,0.45893,0.4501,0.4411,0.45042,0.04802,0.40368,0.13052,0.19803,0.26396,0.06233,0.3249,0.0401,0.43162,0.02742,0.62131,0.03827,0.76313,0.09103,0.87141,0.1678,0.95269,0.27308,0.97734,0.38722,0.97265,0.41089,0.92473,0.54092],"triangles":[104,103,3,4,3,103,2,104,3,102,5,4,102,4,103,104,2,1,101,5,102,0,105,1,104,1,105,34,33,103,104,34,103,38,101,102,106,105,0,100,5,101,100,101,38,100,6,5,102,33,38,33,102,103,32,38,33,37,105,106,105,34,104,35,105,37,35,34,105,23,107,0,106,0,107,37,106,107,25,100,38,38,52,25,52,38,42,51,38,41,38,51,42,36,34,35,34,32,33,31,34,36,34,31,32,38,32,41,54,100,25,69,25,52,54,25,69,31,41,32,26,100,54,30,51,41,55,54,69,68,52,42,69,52,68,41,36,108,43,47,41,30,41,47,108,107,23,37,107,108,36,35,37,108,36,37,36,41,31,108,23,22,55,26,54,53,26,55,56,69,68,55,69,56,67,42,51,68,42,67,99,7,6,99,6,100,108,43,41,108,22,21,43,39,48,109,108,21,89,67,51,89,51,30,43,108,39,109,39,108,109,21,20,57,68,67,56,68,57,61,48,39,66,89,30,24,61,39,77,57,67,77,67,89,70,77,89,58,97,70,56,53,55,44,53,56,85,66,30,85,30,47,58,70,66,98,77,70,98,70,97,58,94,97,70,89,66,88,98,97,88,97,94,65,85,47,71,94,58,87,47,43,65,47,87,84,66,85,58,66,84,78,88,94,78,94,71,96,58,84,71,58,96,78,71,96,64,87,43,64,43,48,57,44,56,50,44,57,98,50,57,98,57,77,50,98,88,90,96,84,65,84,85,59,84,65,90,84,59,40,39,109,95,78,96,95,96,90,63,48,61,62,63,61,64,48,63,24,62,61,87,59,65,86,87,64,86,59,87,91,95,90,72,90,59,72,59,86,91,90,72,75,64,63,60,86,64,60,64,75,82,75,63,109,20,110,109,110,40,46,83,62,63,62,83,82,63,83,24,46,62,24,39,46,46,39,40,19,110,20,27,50,88,27,88,78,27,78,95,92,72,86,74,86,60,73,92,86,74,60,75,79,91,72,79,72,92,8,7,99,74,73,86,29,46,40,29,40,110,93,79,92,93,92,73,81,74,75,73,74,81,81,75,82,45,91,79,45,79,93,27,95,91,45,27,91,80,93,73,80,73,81,49,81,82,49,82,83,29,49,83,29,83,46,76,93,80,45,93,76,28,80,81,28,81,49,76,80,28,110,17,29,18,110,19,16,28,49,44,9,8,14,45,76,16,14,76,18,17,110,49,29,17,16,49,17,16,15,14,28,16,76,26,99,100,53,99,26,53,8,99,50,9,44,27,9,50,53,44,8,9,27,10,45,14,27,11,10,27,14,11,27,13,11,14,12,11,13],"vertices":[231.28,-119.66,227.98,-71.79,225.55,-36.52,200.36,19.43,182.93,43.59,169.22,62.58,106.09,83.22,48.33,81.4,7.84,65.39,-20.84,42.54,-50.08,-9.93,-52.52,-82.93,-32.73,-122.63,-6.17,-129.44,42.56,-109.51,39.76,-128.76,66.89,-131.27,66.11,-173.57,101.82,-188.2,135.11,-186.41,172.45,-184.4,176.98,-182.15,181.49,-179.9,204.56,-168.4,138.75,-121.17,112.45,19.49,88.24,24.39,65.08,-46.52,78.9,-120.19,105.47,-141.72,126.27,-54.39,133.38,-52.84,144.59,3.3,173.92,-2.35,187.73,-34.95,182.47,-85.16,150.98,-84.9,200.84,-117.57,144.47,32.5,157.52,-152.01,141.8,-168.25,129.69,-54.02,118.5,-12.87,133.64,-93.84,78.2,-6.35,71.49,-80.68,113.21,-136.94,129.83,-73.44,136.45,-108.85,91.61,-130.49,72.12,-24.97,122.12,-32.21,115.24,4.56,84.17,11.93,93.32,23.36,92.12,10.04,92.72,-8.7,94.24,-28.17,95.17,-50.61,96.39,-76.83,102.07,-108.37,138.19,-118.17,119.8,-129,117.89,-124.63,112.63,-103.95,107.1,-76.26,104.06,-51.53,102.37,-29.35,100.42,-9.94,99.19,8.37,95.43,-40.66,93.9,-50.61,88.13,-79.63,88.21,-102.37,95.84,-109.97,106.72,-117.36,76.24,-106.03,94.7,-33.03,88.39,-49.52,80.25,-79.59,80.57,-105.11,89.42,-115.12,108.59,-123.8,111.9,-133.71,96.21,-63.97,105.61,-64.17,98.91,-93,109.89,-90.23,91.07,-42.53,103.21,-40.43,90.82,-65.09,84.39,-64.27,86.65,-90.95,80.41,-92.46,94.64,-46.84,86.2,-57.59,92.32,-59.09,94.94,-43.49,92.5,-38.79,51.79,71.36,112.78,74.38,163.49,55.38,176.99,41.88,194.21,15.05,216.7,-36.68,222.65,-80.78,218.31,-118.87,203.45,-153.25,178.92,-173.66,172.55,-175.28,134.54,-178.32],"hull":24}},"lower-back-arm":{"alien/lower-back-arm":{"x":42.34,"y":10.93,"rotation":-5.4,"width":101,"height":91}},"metaljaw":{"alien/metaljaw":{"x":85.12,"y":55.13,"rotation":64.15,"width":243,"height":172}},"metaljaw-bg":{"alien/metaljaw":{"color":"7a7a7aff","x":101.82,"y":83.41,"scaleX":0.693,"scaleY":0.9431,"rotation":66.62,"width":243,"height":172}},"splat-bg":{"alien/splat01":{"x":109.41,"y":290.86,"scaleX":1.702,"scaleY":1.702,"rotation":7.05,"width":514,"height":503},"alien/splat02":{"x":75.9,"y":342.4,"scaleX":1.7457,"scaleY":1.7457,"width":734,"height":511}},"splat-fg":{"alien/splat01-fg":{"x":134.75,"y":95.12,"scaleX":1.7236,"scaleY":1.7236,"rotation":8.63,"width":406,"height":264},"alien/splat03":{"type":"mesh","uvs":[1,0.74645,0.78576,1,0.65397,1,0.45628,1,0.25552,1,0,1,0.03484,0.33136,0.24862,0.05845,0.45117,0.08768,0.65627,0.11728,1,0.50786],"triangles":[9,3,8,7,4,6,8,4,7,5,6,4,3,4,8,3,9,2,9,10,2,0,2,10,1,2,0],"vertices":[461.11,62.25,265.75,-46.16,145.56,-46.16,-34.71,-46.16,-217.78,-46.16,-450.79,-46.16,-419.02,239.73,-224.07,356.42,-39.37,343.92,147.66,331.27,461.11,164.27],"hull":11}},"upper-back-arm":{"alien/upper-back-arm":{"x":38.71,"y":2.9,"rotation":68.76,"width":60,"height":86}}}}],"events":{"squish":{}},"animations":{"death":{"slots":{"burst-bg":{"twoColor":[{"time":1.3,"light":"aaff80ff","dark":"083e00"}],"attachment":[{"time":1.3,"name":"alien/burst03-bg"}]},"eye-highlight":{"color":[{"color":"ffffff0e","curve":0.732,"c2":0.01,"c3":0.831,"c4":0.89},{"time":0.8333,"color":"ffffff86"},{"time":1.3333,"color":"ffffff4a"},{"time":1.9333,"color":"ffffff40"}],"attachment":[{"name":null},{"time":0.3,"name":"alien/eye-highlight"}]},"eye-splat":{"attachment":[{"time":1.9333,"name":"alien/splat03"}]},"eye-stalk":{"twoColor":[{"time":1.3,"light":"ffffffff","dark":"000000"},{"time":2,"light":"ffffffff","dark":"193400"}],"attachment":[{"time":1.3,"name":"alien/eye-stalk"}]},"eyeball":{"twoColor":[{"light":"d5a905ff","dark":"787625"},{"time":0.2333,"light":"ffcb07ff","dark":"787625"}]},"head":{"color":[{"time":0.2333,"color":"ffffffff","curve":0.846,"c2":0.01,"c3":0.75},{"time":1.2667,"color":"f6ff85ff"},{"time":1.4,"color":"ffffffff"}],"attachment":[{"time":0.2333,"name":"alien/burst01"},{"time":0.4667,"name":"alien/burst02"},{"time":1.3,"name":"alien/burst03-fg"}]},"splat-bg":{"attachment":[{"time":1.3,"name":"alien/splat01"},{"time":1.4,"name":"alien/splat02"},{"time":1.5,"name":null}]},"splat-fg":{"attachment":[{"time":1.2667,"name":"alien/splat01-fg"},{"time":1.4,"name":null},{"time":1.5,"name":"alien/splat03"}]}},"bones":{"head":{"rotate":[{},{"time":0.1,"angle":8.46},{"time":0.8333,"angle":8.59},{"time":0.8667,"angle":3.12},{"time":0.9,"angle":7.81},{"time":0.9333,"angle":4.16},{"time":0.9667,"angle":9.05},{"time":1,"angle":4.21},{"time":1.0333,"angle":8.65},{"time":1.0667,"angle":2.32},{"time":1.1,"angle":5.07},{"time":1.1333,"angle":1.87},{"time":1.1667,"angle":8.86},{"time":1.2,"angle":3.18},{"time":1.2333,"angle":9.6},{"time":1.2667,"angle":5.68}],"scale":[{"time":0.4667},{"time":0.8333,"x":1.507,"y":1.474,"curve":"stepped"},{"time":1.2333,"x":1.507,"y":1.474},{"time":1.2667,"x":1.571,"y":1.536}]},"hip":{"translate":[{},{"time":0.1333,"y":-9.23,"curve":"stepped"},{"time":1.4,"y":-9.23},{"time":1.5,"x":-20.27,"y":-19.1},{"time":1.6333,"x":-39.1,"y":-19.1}]},"back-thigh":{"rotate":[{"angle":-4.38},{"time":0.1333,"angle":-1.22,"curve":"stepped"},{"time":1.4,"angle":-1.22},{"time":1.5,"angle":14.85}],"scale":[{},{"time":0.1333,"x":0.92}]},"body":{"rotate":[{"angle":0.36},{"time":0.8333,"angle":-7.59},{"time":0.8667,"angle":-10.51},{"time":0.9,"angle":-7.73},{"time":0.9667,"angle":-11.74},{"time":1,"angle":-8.24},{"time":1.0667,"angle":-8.24},{"time":1.1,"angle":-3.25},{"time":1.1333,"angle":-5.07},{"time":1.3667,"angle":-0.93},{"time":1.5,"angle":30.29},{"time":1.6333,"angle":74.27}],"translate":[{},{"time":0.2,"x":-1.55,"y":-14.45}]},"front-thigh":{"rotate":[{"angle":-15.6},{"time":0.1333,"angle":-5.96,"curve":"stepped"},{"time":0.8333,"angle":-5.96},{"time":1.4,"angle":6.79},{"time":1.4667,"angle":7.9},{"time":1.5,"angle":19.67},{"time":1.6333,"angle":23.38}]},"back-shin":{"rotate":[{"angle":12.88},{"time":0.1333,"angle":48.03,"curve":"stepped"},{"time":1.4,"angle":48.03},{"time":1.5,"angle":39.59}]},"front-shin":{"rotate":[{"angle":-20.49},{"time":0.1333,"angle":-46.7,"curve":"stepped"},{"time":0.8333,"angle":-46.7},{"time":1.4,"angle":-52.98},{"time":1.5,"angle":-55.88},{"time":1.6,"angle":-20.01},{"time":1.6333,"angle":27.07}]},"front-upper-arm":{"rotate":[{"angle":-37.4,"curve":0.647,"c3":0.93,"c4":0.87},{"time":0.4,"angle":-41.66,"curve":0.216,"c2":0.28,"c3":0.574,"c4":0.65},{"time":0.6,"angle":-17.17,"curve":0.317,"c2":0.35,"c3":0.653,"c4":0.68},{"time":0.9,"angle":30.9,"curve":0.329,"c2":0.35,"c3":0.662,"c4":0.68},{"time":0.9667,"angle":17.57,"curve":0.33,"c2":0.35,"c3":0.664,"c4":0.69},{"time":1.0333,"angle":22.26,"curve":0.332,"c2":0.36,"c3":0.666,"c4":0.7},{"time":1.1,"angle":8.16,"curve":0.334,"c2":0.37,"c3":0.668,"c4":0.71},{"time":1.1667,"angle":11.83,"curve":0.335,"c2":0.4,"c3":0.669,"c4":0.73},{"time":1.2333,"angle":-1.09,"curve":0.339,"c2":0.57,"c3":0.674,"c4":0.92},{"time":1.3333,"angle":0.3,"curve":0.423,"c2":0.01,"c3":0.721,"c4":0.99},{"time":1.4667,"angle":-23.3},{"time":1.5,"angle":-11.1},{"time":1.6,"angle":43.86},{"time":1.6333,"angle":50.52}]},"upper-back-arm":{"rotate":[{"angle":-327.38,"curve":0.518,"c3":0.872,"c4":0.77},{"time":0.5667,"angle":-13.54,"curve":0.189,"c2":0.36,"c3":0.59},{"time":0.6333,"angle":-18.33,"curve":0.501,"c3":0.75},{"time":0.8333,"angle":-10.06},{"time":1.3667,"angle":-13.54},{"time":1.4667,"angle":-21.13},{"time":1.5,"angle":-36.05},{"time":1.6,"angle":-52.59}],"translate":[{},{"time":0.5667,"x":14.08,"y":-3.26,"curve":"stepped"},{"time":1.4667,"x":14.08,"y":-3.26},{"time":1.5,"x":7.82,"y":9.2},{"time":1.6,"x":0.17,"y":15.5}]},"back-foot":{"rotate":[{},{"time":0.1333,"angle":-38,"curve":"stepped"},{"time":0.6333,"angle":-38},{"time":0.8333,"angle":-46.36}],"scale":[{},{"time":0.1333,"x":0.69}]},"front-foot":{"rotate":[{"angle":25.3},{"time":0.1333,"angle":41.81,"curve":"stepped"},{"time":0.8333,"angle":41.81},{"time":1.4,"angle":14.08},{"time":1.4667,"angle":27.15},{"time":1.5,"angle":27.54},{"time":1.6,"angle":-5.57},{"time":1.6667,"angle":-34.27}]},"front-lower-arm":{"rotate":[{"curve":0.647,"c3":0.93,"c4":0.87},{"time":0.4333,"angle":-33.51,"curve":0.204,"c2":0.28,"c3":0.572,"c4":0.67},{"time":0.8667,"angle":-26.79},{"time":0.9,"angle":-40.59},{"time":0.9667,"angle":-29.11},{"time":1,"angle":-24.38},{"time":1.0333,"angle":-26.62},{"time":1.0667,"angle":-18.33},{"time":1.1,"angle":-22.08},{"time":1.1333,"angle":-17.4},{"time":1.2,"angle":-25.04},{"time":1.3333,"angle":-16.61,"curve":0.423,"c2":0.01,"c3":0.721,"c4":0.99},{"time":1.4667,"angle":16.55},{"time":1.5,"angle":20.52},{"time":1.6333,"angle":-18.51},{"time":1.7333,"angle":-32.15}],"translate":[{},{"time":1.8,"x":-2.43,"y":9.7}]},"lower-back-arm":{"rotate":[{"curve":0.518,"c3":0.872,"c4":0.77},{"time":0.5667,"angle":-70.85,"curve":0.189,"c2":0.36,"c3":0.59},{"time":0.6333,"angle":-75.64,"curve":0.501,"c3":0.75},{"time":0.8333,"angle":-67.37},{"time":1.3667,"angle":-70.85},{"time":1.4,"angle":-81.64},{"time":1.5,"angle":-70.07},{"time":1.6,"angle":-61.11}]},"metaljaw":{"rotate":[{"curve":0.366,"c3":0.853,"c4":0.74},{"time":0.1667,"angle":-21.58,"curve":0.155,"c2":0.33,"c3":0.652,"c4":0.99},{"time":0.2333,"angle":-13.04,"curve":0.25,"c3":0.833,"c4":0.76},{"time":0.3333,"angle":-17.51},{"time":0.6,"angle":-15.89},{"time":0.8333,"angle":-16.29,"curve":0.178,"c2":0.6,"c3":0.832,"c4":0.94},{"time":1.2667,"angle":-9.16},{"time":1.3,"angle":-7.37},{"time":1.3333,"angle":36.46},{"time":1.4,"angle":58.99},{"time":1.4667,"angle":54.61},{"time":1.5,"angle":36.01},{"time":1.5667,"angle":-4.41,"curve":0.2,"c2":0.32,"c3":0.708},{"time":1.7,"angle":-36.18,"curve":0.537,"c2":0.01,"c3":0.643},{"time":1.8667,"angle":25.47,"curve":0.2,"c2":0.32,"c3":0.708},{"time":1.9333,"angle":17.92},{"time":1.9667,"angle":15.04},{"time":2,"angle":18.05}],"translate":[{"x":23.96,"y":-2.74},{"time":0.8333,"x":11.46,"y":27.02,"curve":0.178,"c2":0.6,"c3":0.832,"c4":0.94},{"time":1.2667,"x":1.42,"y":23.67},{"time":1.3,"x":74.86,"y":-64.13},{"time":1.3333,"x":166.87,"y":-115.22},{"time":1.4,"x":280.71,"y":-140.52,"curve":0.417,"c2":0.56,"c3":0.831,"c4":0.9},{"time":1.4667,"x":367.6,"y":-169.48},{"time":1.5333,"x":488.01,"y":-110.44},{"time":1.5667,"x":524.98,"y":-68.19},{"time":1.6667,"x":611.02,"y":-21.24},{"time":1.7,"x":621.11,"y":-17.87},{"time":1.7333,"x":611.73,"y":-23.45},{"time":1.7667,"x":577.67,"y":-38.01},{"time":1.8,"x":539.3,"y":-72.95},{"time":1.8333,"x":516.09,"y":-116.3},{"time":1.8667,"x":508.58,"y":-132.73},{"time":1.9,"x":515.31,"y":-120.95},{"time":1.9333,"x":518.67,"y":-115.9},{"time":1.9667,"x":525.2,"y":-112.64},{"time":2,"x":519.49,"y":-116.72}]},"splat":{"rotate":[{"time":1.3,"angle":5.59},{"time":1.6,"angle":2.33}],"translate":[{"time":0.4,"x":0.36,"y":11.28},{"time":0.8333,"x":-20.56,"y":-10.54,"curve":"stepped"},{"time":1.2667,"x":25.93,"y":45.92,"curve":"stepped"},{"time":1.3,"x":10.4,"y":73},{"time":1.3667,"x":-11.66,"y":52.21,"curve":"stepped"},{"time":1.4,"x":-47.48,"y":155.58,"curve":0.39,"c3":0.846,"c4":0.77},{"time":1.4927,"x":-84.49,"y":305.24,"curve":"stepped"},{"time":1.5,"x":-89.36,"y":464.81,"curve":0.796,"c3":0.939,"c4":0.75},{"time":1.7,"x":-84.17,"y":-342.24}],"scale":[{"time":1.2667,"x":0.827,"y":0.827},{"time":1.3,"x":1.135,"y":0.885},{"time":1.3667,"x":1.248,"y":1.766,"curve":"stepped"},{"time":1.4,"x":1.371,"y":1.373},{"time":1.4927,"x":1.908,"y":1.581,"curve":"stepped"},{"time":1.5,"x":2.663,"y":1.949},{"time":1.6333,"x":3.152,"y":1.544},{"time":1.7,"x":3.599,"y":0.648}]},"eye-pupil":{"rotate":[{"time":0.2333},{"time":0.4333,"angle":21.87},{"time":0.6,"angle":43.08},{"time":0.6667,"angle":71.18},{"time":0.8667,"angle":36.34},{"time":0.9,"angle":-13.68},{"time":1.2,"angle":3.13},{"time":1.9333,"angle":-30.81}],"translate":[{},{"time":0.4333,"x":-56.97,"y":20.88},{"time":0.6,"x":-46.98,"y":25.19},{"time":0.6667,"x":-32.81,"y":64.25,"curve":"stepped"},{"time":0.8667,"x":-32.81,"y":64.25},{"time":0.9333,"x":-35.12,"y":22.56},{"time":1,"x":28.07,"y":40.3},{"time":1.3333,"x":26.59,"y":39.3},{"time":1.9,"x":13.33,"y":42.72},{"time":1.9333,"x":11.79,"y":43.73}],"scale":[{},{"time":0.4333,"x":0.9,"y":1.21},{"time":0.6,"x":0.991,"y":0.691},{"time":0.6667,"x":0.774,"y":0.781},{"time":0.8333,"x":0.753,"y":0.804},{"time":0.9,"x":0.745,"y":1.156},{"time":0.9333,"x":0.814,"y":0.751},{"time":0.9667,"x":1.118,"y":0.698},{"time":1,"x":1.06,"y":1.244},{"time":1.2667,"x":1.21,"y":1.582},{"time":1.3333,"x":0.98,"y":1.281},{"time":1.9,"x":0.936,"y":1.043},{"time":1.9333,"x":0.699,"y":1.043}]},"eye-root":{"translate":[{"time":1.3,"curve":0.09,"c2":0.26,"c3":0.84,"c4":0.9},{"time":1.7667,"x":218.25}],"scale":[{"time":1.2667,"x":1.507,"y":1.474},{"time":1.9234,"x":1.507,"y":1.509},{"time":1.9333,"x":1.507,"y":1.312}]},"eye":{"rotate":[{"time":1.2667,"angle":-3.61},{"time":1.3,"angle":5.53,"curve":0.344,"c3":0.86,"c4":0.89},{"time":1.5333,"angle":-120},{"time":1.6667,"angle":120},{"time":1.8},{"time":1.9333,"angle":-120}],"translate":[{},{"time":0.1,"x":15.53,"y":15.38},{"time":0.2333,"x":1.7,"y":30.31},{"time":0.4667,"x":4.88,"y":94.3},{"time":0.5,"x":1.83,"y":78.16},{"time":0.8333,"x":20.47,"y":66.06},{"time":0.8667,"x":11.22,"y":65.46},{"time":0.9333,"x":14.59,"y":71.02},{"time":1,"x":17.11,"y":72.83},{"time":1.1333,"x":17.48,"y":77.21},{"time":1.1667,"x":23.34,"y":81.63},{"time":1.2,"x":21.32,"y":81.54},{"time":1.2333,"x":31.33,"y":90.55},{"time":1.2667,"x":30.28,"y":90.51},{"time":1.3,"x":8.02,"y":89.55,"curve":0.158,"c2":0.57,"c3":0.75},{"time":1.6333,"x":-16.07,"y":716.51,"curve":0.439,"c2":0.01,"c3":0.967,"c4":0.76},{"time":1.9333,"x":-9.43,"y":-209.96}],"scale":[{},{"time":0.2333,"x":1.624,"y":1.624},{"time":0.5,"x":2.418,"y":2.418},{"time":1.2333,"x":2.89,"y":3.311},{"time":1.2667,"x":3.246,"y":3.735},{"time":1.3,"x":3.342,"y":3.735},{"time":1.3093,"x":3.648,"y":2.369},{"time":1.4333,"x":3.005,"y":3.269},{"time":1.6333,"x":3.005,"y":2.437},{"time":1.9333,"x":3.005,"y":3.474}],"shear":[{"time":1.3},{"time":1.6333,"x":-18.53,"y":-22.38},{"time":1.9333}]},"eye-stalk-root":{"rotate":[{"time":1.9,"angle":-2.98},{"time":1.9333,"angle":-5.88},{"time":2,"angle":-7.23},{"time":2.0333,"angle":-3.79},{"time":2.1,"angle":-1.88},{"time":2.1333,"angle":-3.78}],"translate":[{"time":1.3,"x":-12.25,"y":-2.31},{"time":1.9,"x":-9.79,"y":3.48},{"time":1.9333,"x":-2.84,"y":2.01},{"time":2.0333,"x":-6.22,"y":11.69},{"time":2.1,"x":-9.3,"y":4.57},{"time":2.1333,"x":-7.89,"y":6.42}]},"eye-stalk":{"rotate":[{"time":1.3,"angle":-343.39},{"time":1.4333,"angle":-289.47},{"time":1.9333,"angle":-10.51},{"time":2,"angle":-38.96,"curve":0.385,"c2":0.68,"c3":0.73},{"time":2.1,"angle":-33.95}],"translate":[{"time":1.3,"x":43.2,"y":9.63},{"time":1.3333,"curve":"stepped"},{"time":1.9333},{"time":2,"x":4.51,"y":6.41}]},"eye-stalk2":{"rotate":[{"time":1.3,"angle":16.61},{"time":1.4333,"angle":38.16},{"time":1.8,"angle":-3.77},{"time":1.9333,"angle":12.66},{"time":2,"angle":-52.98,"curve":0.654,"c2":0.01,"c3":0.866,"c4":0.76},{"time":2.1,"angle":-48.29}]},"eye-stalk3":{"rotate":[{"time":1.3,"angle":16.61},{"time":1.4333,"angle":38.16},{"time":1.8,"angle":34.04},{"time":1.9333,"angle":12.66},{"time":2,"angle":-51.44,"curve":0.385,"c2":0.68,"c3":0.73},{"time":2.1,"angle":-39.73}]},"eye-stalk4":{"rotate":[{"time":1.3,"angle":16.61},{"time":1.4333,"angle":-7.55},{"time":1.8,"angle":57.92},{"time":1.9333,"angle":26.58},{"time":2,"angle":-53.31,"curve":0.385,"c2":0.68,"c3":0.73},{"time":2.1,"angle":-41.6}]},"eye-splat":{"scale":[{"time":1.9333,"x":0.852,"y":0.852},{"time":1.9667,"x":1.561,"y":1.561}]},"eye-veins-controller":{"translate":[{},{"time":0.4333,"x":-28.05,"y":-14.26},{"time":0.6,"x":-34.12,"y":-15.46},{"time":0.6667,"x":-19.62,"y":28.02},{"time":0.8667,"x":-23.86,"y":-22.58},{"time":0.9333,"x":-19.65,"y":-19.72},{"time":1,"x":40.46,"y":-0.58}]},"eye-highlight":{"rotate":[{},{"time":0.4333,"angle":-13.54},{"time":0.5667,"angle":-10.36},{"time":0.7,"angle":-17.94},{"time":0.7333,"angle":-45.23},{"time":0.8,"angle":-36.85},{"time":1.3,"angle":-97.35},{"time":1.3333,"angle":-57.95},{"time":1.3667,"angle":-35.03},{"time":1.4,"angle":-20.02},{"time":1.4333,"angle":-9.95},{"time":1.4667,"angle":5.7},{"time":1.5,"angle":37.38},{"time":1.5333,"angle":65.52},{"time":1.5667,"angle":73.86},{"time":1.6,"angle":139.11},{"time":1.6333,"angle":-143.91},{"time":1.7667,"angle":-83.17},{"time":1.8,"angle":-45.13},{"time":1.8333,"angle":-3.24},{"time":1.8667,"angle":12.9},{"time":1.9,"angle":53.9},{"time":1.9333,"angle":-79.36}],"translate":[{"x":12.34,"y":-1.22},{"time":0.3,"x":-0.93,"y":-12.41},{"time":0.8333,"x":-5.02,"y":-11.48},{"time":0.8667,"x":-5.83,"y":1.64},{"time":0.9,"x":-4.65,"y":-12.12},{"time":0.9333,"x":-5.83,"y":-1.98},{"time":0.9667,"x":-5.4,"y":-7.79},{"time":1,"x":-5.28,"y":-4.32},{"time":1.0333,"x":-4.49,"y":-11.5},{"time":1.0667,"x":-5.24,"y":0.9},{"time":1.1,"x":-2.86,"y":-12.6},{"time":1.1333,"x":-3.22,"y":-4.14},{"time":1.1667,"x":-3.7,"y":-15.7},{"time":1.2,"x":-3.38,"y":-7.7},{"time":1.2333,"x":-7.24,"y":-19.81},{"time":1.2667,"x":-4.91,"y":-9.91},{"time":1.3,"x":2.27,"y":-14.68},{"time":1.3333,"x":11.81,"y":-18.48},{"time":1.3667,"x":19.66,"y":-9.43},{"time":1.4,"x":21.7,"y":-4.62},{"time":1.4333,"x":22.89,"y":3.64},{"time":1.4667,"x":21.16,"y":13.24},{"time":1.5,"x":17.41,"y":17.68},{"time":1.5333,"x":11.32,"y":21.18},{"time":1.5667,"x":4.03,"y":27.71},{"time":1.6,"x":-6.09,"y":25.49},{"time":1.6333,"x":-15.72,"y":15.02},{"time":1.6667,"x":-17.19,"y":-2.44},{"time":1.7,"x":-8.29,"y":-15.02},{"time":1.7333,"x":1.29,"y":-17.8},{"time":1.7667,"x":11.62,"y":-14.37},{"time":1.8,"x":13.84,"y":-5.83},{"time":1.8333,"x":17.54,"y":10.85},{"time":1.8667,"x":15.56,"y":15.83},{"time":1.9,"x":9.28,"y":22.98},{"time":1.9333,"x":-1.92,"y":27.57}],"scale":[{"x":0.743,"y":1.34},{"time":0.3,"x":0.623,"y":0.653},{"time":0.5333,"x":0.345,"y":0.362},{"time":0.6667,"x":0.433,"y":0.454},{"time":0.8333,"x":0.527,"y":0.552},{"time":0.9333,"x":0.407,"y":0.427},{"time":0.9667,"x":0.274,"y":0.287},{"time":1.0333,"x":0.407,"y":0.427},{"time":1.0667,"x":0.349,"y":0.366},{"time":1.1,"x":0.392,"y":0.41},{"time":1.1333,"x":0.353,"y":0.37},{"time":1.1667,"x":0.434,"y":0.455},{"time":1.2,"x":0.353,"y":0.37},{"time":1.2333,"x":0.455,"y":0.477},{"time":1.2667,"x":0.372,"y":0.39},{"time":1.3333,"x":0.244,"y":0.251},{"time":1.3667,"x":0.184,"y":0.192},{"time":1.4333,"x":0.165,"y":0.209},{"time":1.5667,"x":0.271,"y":0.344},{"time":1.6,"x":0.318,"y":0.344},{"time":1.6667,"x":0.436,"y":0.472},{"time":1.7,"x":0.341,"y":0.369},{"time":1.7667,"x":0.282,"y":0.306},{"time":1.8,"x":0.221,"y":0.239},{"time":1.8333,"x":0.171,"y":0.186},{"time":1.9,"x":0.302,"y":0.378},{"time":1.9333,"x":0.401,"y":0.517}]}},"transform":{"eye":[{"rotateMix":0,"translateMix":0,"scaleMix":0,"shearMix":0}],"eye-root":[{"translateMix":0,"curve":"stepped"},{"time":1.2667,"translateMix":0,"scaleMix":0},{"time":1.3,"rotateMix":0,"translateMix":0,"scaleMix":0,"shearMix":0}],"jaw":[{"rotateMix":0,"scaleMix":0,"curve":"stepped"},{"time":1.2667,"rotateMix":0,"translateMix":0,"scaleMix":0,"shearMix":0}]},"deform":{"default":{"burst-bg":{"alien/burst03-bg":[{"time":1.3,"offset":46,"vertices":[0.68384,5.64643,41.70734,46.50797,26.72791,67.89645]},{"time":1.3333,"vertices":[-1.73277,76.35558,-2.70367,88.34904,7.16451,81.63237,9.10474,71.60054,26.89132,41.93319,33.82707,14.16541,42.66042,2.01306,46.27941,-10.28481,40.8448,-13.92924,36.71939,-16.69566,36.99004,-19.80729,35.77646,-27.02861,32.51794,-22.78155,22.48866,-24.67291,17.67539,-78.5826,16.74049,-86.95723,33.88027,-93.50364,44.06644,-106.10403,38.59086,-115.00684,17.31061,-128.65402,6.34872,-121.58191,-23.11713,-102.43536,-44.83045,-86.50071,-38.39915,-54.1526,16.74898,10.60439,-7.97856,43.28199,0,0,-46.02549,22.32263,-41.83277,33.20684,-42.38047,80.06304,-32.91348,84.33014,-0.21538,78.17695,-19.0481,83.3494,-18.36562,63.1656,18.65974,41.84681,30.39143,-11.8921,16.57042,-72.18506,21.1253,-102.59708,-2.00249,-93.5976,-7.29897,-84.15235,-5.88057,-72.98954,22.63989,2.5323,31.70975,2.10254,3.04899,79.57899,16.0296,56.81528,10.8523,52.89594,-18.72171,73.69634,-30.13412,70.48869,-34.63183,64.61971]},{"time":1.3667,"vertices":[-28.63036,36.53115,-35.20681,39.71266,-34.16557,29.09573,-39.9383,22.02063,-31.8683,-0.66902,-36.18404,-31.92518,-39.46505,-44.94416,-45.83144,-54.46854,-51.44376,-52.82608,-55.70403,-51.5793,-57.68414,-53.54662,-47.87902,-55.91557,-62.2854,-52.18085,-69.32556,-46.38197,-64.856,-74.20721,-73.91029,-84.11636,-57.97267,-108.61402,-56.66564,-134.3905,-72.063,-140.7236,-108.18388,-132.31097,-111.6678,-115.80203,-138.59677,-66.23582,-149.73697,-34.55333,-122.68817,-4.89592,-46.63315,37.9272,-21.80757,67.6336,-19.94474,-4.60975,-42.24004,-1.19647,-42.70224,0.25723,-54.4291,31.54441,-53.01079,55.72008,-33.87254,45.68143,-45.22352,54.63241,-47.81532,37.10542,-36.64058,4.92978,-56.03099,-44.48704,-60.28207,-64.93195,-82.92386,-108.36906,-104.27381,-75.09884,-102.24123,-57.96945,-89.95052,-44.92264,-50.57152,-30.90934,-45.67356,-37.37893,-37.93099,30.74406,-27.8756,15.30476,-33.52905,16.61335,-46.03555,45.07694,-50.16603,32.58026,-44.19556,25.76055]},{"time":1.4,"vertices":[-85.06468,-33.90498,-101.8331,-38.83959,-112.78791,-50.47047,-126.45663,-50.92437,-127.01215,-61.43593,-146.0162,-92.23505,-163.93832,-101.35416,-180.9555,-103.55012,-184.62927,-95.59962,-187.41797,-89.56448,-191.58801,-89.26762,-171.10568,-84.34687,-194.57843,-82.7303,-194.96826,-69.07529,-178.86887,-66.78349,-196.6018,-76.86019,-185.05325,-119.74084,-195.25043,-157.60983,-220.47452,-159.54361,-268.10382,-125.68286,-262.18945,-100.70921,-281.1634,-20.07929,-278.5943,26.06285,-230.66162,49.32256,-132.58997,66.78984,-53.07204,87.58773,-39.88947,-9.2195,-52.80638,-43.75304,-59.20331,-55.2477,-82.96741,-46.30116,-92.66891,-5.33385,-96.56309,-15.88346,-95.87802,-6.14105,-101.76718,-13.39593,-125.39429,-50.537,-179.73691,-82.21091,-167.9089,-55.52215,-221.00143,-107.68742,-236.25949,-49.5895,-225.28995,-25.78461,-201.40793,-12.69044,-159.03928,-74.99959,-161.5159,-86.89804,-114.6363,-44.59824,-105.05503,-50.20983,-109.14633,-42.54154,-97.87101,-11.87038,-90.83913,-31.73106,-73.43052,-37.16026]},{"time":1.4667,"vertices":[-119.68082,-102.37854,-149.89587,-110.40956,-172.77509,-117.52663,-190.96182,-108.04595,-194.19272,-102.98049,-227.02118,-126.63018,-257.14905,-125.33231,-280.99283,-115.65919,-279.93173,-102.56793,-279.1262,-92.63052,-284.35373,-89.16964,-270.5389,-80.7443,-283.44174,-78.4277,-273.88754,-60.30602,-256.70236,-50.08109,-276.6675,-56.01134,-275.07828,-101.33076,-293.96286,-136.64569,-319.4999,-132.74673,-357.70126,-87.02367,-345.37234,-64.4873,-347.38345,20.00406,-334.4379,63.11477,-284.41574,74.71045,-185.04947,86.74957,-92.86766,94.20273,-69.16657,-1.32112,-70.14582,-63.49519,-74.40994,-83.94076,-88.93673,-89.82903,-97.40413,-65.52103,-129.96956,-80.05418,-113.19644,-72.6012,-130.69727,-59.55135,-184.04749,-89.93822,-263.6749,-88.68695,-243.20096,-41.40928,-308.054,-81.0432,-309.8206,-19.73067,-293.41415,1.41627,-266.63583,8.92852,-231.32803,-94.52206,-243.33133,-108.23704,-170.86154,-108.49509,-157.24203,-104.50037,-156.9343,-91.46993,-121.21587,-68.245,-109.71011,-75.48093,-95.92812,-74.18189]},{"time":1.5333,"vertices":[-145.09042,-120.86653,-194.807,-124.12709,-227.58821,-123.64662,-245.38031,-109.42378,-241.22562,-98.32921,-300.08417,-98.24397,-341.96143,-86.69765,-372.27563,-67.88405,-366.50287,-53.5891,-362.12085,-42.73803,-368.32843,-37.11354,-366.9734,-25.57621,-363.53375,-25.39778,-337.1137,-11.72807,-331.9942,-34.44117,-361.1655,-27.75139,-406.08472,-61.58719,-454.9775,-82.32776,-487.42798,-56.00835,-499.3933,15.00478,-466.21674,30.42004,-401.37433,108.20853,-355.24493,142.60115,-317.21164,112.3073,-216.67148,120.82071,-112.34171,116.20989,-78.34355,17.64208,-68.12334,-64.39978,-70.4538,-90.65836,-102.69727,-118.85889,-122.5974,-95.52684,-172.15723,-83.88164,-149.11832,-91.07712,-140.44006,-71.20289,-240.89162,-83.7411,-339.13574,-43.50141,-297.22635,-2.45705,-434.9395,-15.80909,-381.72412,39.40601,-345.54404,49.90036,-310.70377,48.50959,-295.627,-60.86879,-316.96753,-72.19572,-232.74759,-111.47705,-199.5794,-108.69385,-194.88446,-94.21463,-152.81549,-81.31654,-129.98297,-92.74498,-99.23401,-82.98563]},{"time":1.6333,"vertices":[-158.85898,-157.88821,-222.41895,-171.88745,-265.61752,-163.54323,-295.0162,-162.22234,-298.79596,-131.13844,-362.79938,-138.7018,-433.25107,-98.61046,-477.58896,-33.0961,-464.7487,-16.99556,-455.00192,-4.77399,-462.6796,4.09592,-465.00198,23.43459,-452.06088,17.27241,-418.03323,32.78734,-397.86447,53.22706,-423.10776,55.14351,-445.94412,15.30367,-485.93863,-8.62939,-511.99594,3.77512,-526.6751,57.78288,-498.78177,71.13768,-459.2037,145.88376,-421.043,175.42703,-366.40555,168.70264,-264.10452,171.92749,-141.5528,149.22067,-92.10904,46.08691,-65.08963,-65.75665,-64.51958,-100.73477,-57.10714,-135.81528,-63.258,-136.1058,-166.01343,-130.57944,-110.04475,-140.76263,-155.05429,-88.68021,-270.2941,-110.81262,-420.71603,-12.59779,-378.2645,55.97136,-471.31558,44.54113,-439.99777,98.30469,-410.42368,110.83441,-376.80576,107.88126,-360.46457,-47.26363,-381.6778,-75.78871,-260.41815,-159.90727,-228.69894,-152.92683,-221.67581,-132.34021,-132.3599,-116.78691,-109.39954,-110.22609,-104.19286,-96.19125]}]},"eye-pupil":{"alien/eye-pupil":[{"time":1.9311},{"time":1.9333,"offset":2,"vertices":[4.47624,1.75668,-5.43562,-0.09229,-6.1716,-0.11565,3.39568,0.18896]}]},"eyeball":{"alien/eye":[{"time":1.9234},{"time":1.9333,"vertices":[2.30195,4.84045,-6.24465,24.31509,-18.24174,22.2739,-30.77019,23.47581,-33.87926,23.45443,-38.95153,23.98627,-34.9502,18.64992,-30.14416,12.82236,-21.8173,-2.96754,-13.31968,1.1067,-2.10858,1.39288,2.42243,-1.84196,5.94919,-4.52369,9.8671,-7.50283,12.31492,-9.3641,14.6324,-11.12628,15.38972,-11.70213,16.13764,-12.27084,14.59378,-11.09693,13.00154,-9.88621,9.17395,-6.97573,5.57406,-4.23845,-9.94695,0.20264,-9.94721,0.20223,-25.47261,11.38448,-25.47296,11.38448,-31.46003,19.05132,-31.4604,19.05161,-27.36235,20.51298,-27.36279,20.51315,-9.49651,17.27551,-9.49667,17.27538,-1.68325,1.85822,-1.68365,1.85748,3.8709,-2.94338,3.87091,-2.94342,10.27974,-7.8166,10.27979,-7.81664,12.74799,-9.69339,12.74804,-9.69345,11.99189,-9.11849,11.99193,-9.11852,7.5319,-5.72716,7.53192,-5.72721,0.38781,-0.3073,0.38766,-0.30762,7.06353,-5.37103,7.06358,-5.37108,11.38696,-8.65849,11.38698,-8.65854,12.36788,-9.40434,12.36791,-9.4045,9.76295,-7.42364,9.76303,-7.42368,4.6788,-3.55771,4.67889,-3.55776,-1.80754,1.19403,-1.80772,1.19377,-19.09809,2.46482,-19.09858,2.46502,-28.60839,15.39989,-28.60876,15.40005,-29.13958,19.87903,-29.1399,19.87918,-16.33226,19.23055,-16.33257,19.23074,3.91371,13.28555,-4.99462,8.72512,-4.99503,8.72488,0.48935,-0.51892,-0.96208,0.58485,-0.96218,0.58458,-8.55228,8.23908,-8.55267,8.23903,2.68275,-2.08037,2.68275,-2.08083,3.48771,-2.65166,3.48763,-2.65211,2.74517,-2.11385,2.74507,-2.11432,1.22514,-1.01873,1.22504,-1.01915,-1.78653,1.18036,-1.78666,1.1801,-3.90304,0.99792,-3.90348,0.99728,-8.0176,3.28572,-8.01794,3.28543,-10.92476,5.07293,-10.92514,5.0727,-14.40496,7.53363,-14.40521,7.53322,-18.1622,10.59957,-18.16252,10.59935,-22.38956,14.13091,-22.38988,14.13076,-24.60171,16.46433,-24.60199,16.46445,-25.20555,17.09343,-25.20588,17.09342,-22.75626,17.1347,-22.75659,17.13467,-21.20954,17.0104,-21.20993,17.01039,-17.62271,16.1749,-17.62304,16.1748,-15.49942,15.71741,-15.49973,15.71711,-11.04413,13.37115,-11.04425,13.37096,-8.16751,11.73045,-8.16785,11.73016,-4.56702,9.33353,-4.56739,9.33321,-1.3697,7.00007,-1.37008,6.99982,-2.7477,1.81529,-2.74784,1.815,-0.36564,0.09844,-0.36574,0.09808,1.04679,-0.91141,1.04672,-0.91181],"curve":0.612,"c3":0.961,"c4":0.85},{"time":2.0333,"vertices":[3.24275,7.91407,-10.90369,19.33402,-18.24174,22.2739,-30.77019,23.47581,-33.87926,23.45443,-38.95153,23.98627,-34.9502,18.64992,-30.14416,12.82236,-20.97651,2.92524,-14.81287,0.26187,-2.10858,1.39288,-0.4933,4.43934,-0.07114,5.34762,0.3979,6.35674,1.12204,6.63992,1.80758,6.90797,2.65722,6.49156,3.49633,6.08028,4.25356,4.92377,5.03446,3.73087,5.57333,1.94191,6.08008,0.25922,-11.13084,-0.60674,-11.13115,-0.60712,-25.47261,11.38448,-25.47296,11.38448,-31.46003,19.05132,-31.4604,19.05161,-27.36235,20.51298,-27.36279,20.51315,-9.49651,17.27551,-9.49667,17.27538,-0.40323,5.37477,-0.40364,5.37405,5.67802,-0.01979,5.67812,-0.01985,4.82932,2.93262,4.82941,2.93254,3.51867,4.86237,3.51881,4.8623,2.12682,5.71601,2.12693,5.71597,0.8497,5.16611,0.84982,5.16597,0.16973,3.38345,0.16969,3.38303,5.25523,1.45103,5.25537,1.45089,4.24138,3.79829,4.24154,3.79819,2.81897,5.29156,2.81905,5.29148,1.48856,5.4412,1.48872,5.44109,0.55169,4.39623,0.55186,4.39612,-1.80754,1.19403,-1.80772,1.19377,-19.09809,2.46482,-19.09858,2.46502,-28.60839,15.39989,-28.60876,15.40005,-29.13958,19.87903,-29.1399,19.87918,-16.33226,19.23055,-16.33257,19.23074,-1.51704,11.7206,-4.92833,11.02434,-4.92876,11.0241,4.60013,-0.04099,4.35205,-0.18725,4.35202,-0.18759,-8.55228,8.23908,-8.55267,8.23903,3.38354,1.49375,3.38358,1.49323,3.39127,1.68725,3.39128,1.68668,2.738,2.00672,2.738,2.00632,1.74714,2.39383,1.74712,2.39344,0.59517,2.73257,0.59512,2.73225,-3.90304,0.99792,-3.90348,0.99728,-8.0176,3.28572,-8.01794,3.28543,-10.92476,5.07293,-10.92514,5.0727,-14.40496,7.53363,-14.40521,7.53322,-18.1622,10.59957,-18.16252,10.59935,-22.38956,14.13091,-22.38988,14.13076,-24.60171,16.46433,-24.60199,16.46445,-25.20555,17.09343,-25.20588,17.09342,-22.75626,17.1347,-22.75659,17.13467,-21.20954,17.0104,-21.20993,17.01039,-17.62271,16.1749,-17.62304,16.1748,-15.49942,15.71741,-15.49973,15.71711,-11.04413,13.37115,-11.04425,13.37096,-8.16751,11.73045,-8.16785,11.73016,-4.56702,9.33353,-4.56739,9.33321,-1.3697,7.00007,-1.37008,6.99982,1.81303,1.42351,1.81299,1.42317,2.54668,1.37999,2.54664,1.37957,2.96464,1.409,2.96464,1.40857]},{"time":2.1,"vertices":[3.24275,7.91407,-10.90369,19.33402,-18.24174,22.2739,-30.77019,23.47581,-33.87926,23.45443,-38.95153,23.98627,-34.9502,18.64992,-30.14416,12.82236,-20.97651,2.92524,-14.81287,0.26187,-2.10858,1.39288,0.47545,-0.3615,1.21325,-0.92252,2.03287,-1.5458,2.54498,-1.93515,3.0298,-2.30381,3.18821,-2.42429,3.34468,-2.54327,3.0217,-2.29768,2.68859,-2.04442,1.88788,-1.43551,1.13477,-0.8629,-11.13084,-0.60674,-11.13115,-0.60712,-25.47261,11.38448,-25.47296,11.38448,-31.46003,19.05132,-31.4604,19.05161,-27.36235,20.51298,-27.36279,20.51315,-9.49651,17.27551,-9.49667,17.27538,-0.40323,5.37477,-0.40364,5.37405,0.77848,-0.59193,0.7785,-0.59198,2.11919,-1.61148,2.11925,-1.61153,2.63555,-2.00404,2.6356,-2.0041,2.47738,-1.8838,2.47744,-1.88381,1.54435,-1.1743,1.54437,-1.17445,-0.08939,0.05556,-0.08952,0.0552,1.44635,-1.09981,1.44643,-1.0999,2.35082,-1.78755,2.35091,-1.78761,2.55606,-1.94357,2.55609,-1.94361,2.01108,-1.52922,2.01118,-1.52928,0.94748,-0.72044,0.94757,-0.72051,-1.80754,1.19403,-1.80772,1.19377,-19.09809,2.46482,-19.09858,2.46502,-28.60839,15.39989,-28.60876,15.40005,-29.13958,19.87903,-29.1399,19.87918,-16.33226,19.23055,-16.33257,19.23074,-1.51704,11.7206,-4.92833,11.02434,-4.92876,11.0241,-1.09258,0.68392,-1.43501,0.94445,-1.43511,0.94416,-8.55228,8.23908,-8.55267,8.23903,0.207,-0.19785,0.207,-0.19832,0.69833,-0.53062,0.69828,-0.53114,0.3305,-0.27785,0.33043,-0.27822,-0.46798,0.26863,-0.46804,0.2683,-1.78653,1.18036,-1.78666,1.1801,-3.90304,0.99792,-3.90348,0.99728,-8.0176,3.28572,-8.01794,3.28543,-10.92476,5.07293,-10.92514,5.0727,-14.40496,7.53363,-14.40521,7.53322,-18.1622,10.59957,-18.16252,10.59935,-22.38956,14.13091,-22.38988,14.13076,-24.60171,16.46433,-24.60199,16.46445,-25.20555,17.09343,-25.20588,17.09342,-22.75626,17.1347,-22.75659,17.13467,-21.20954,17.0104,-21.20993,17.01039,-17.62271,16.1749,-17.62304,16.1748,-15.49942,15.71741,-15.49973,15.71711,-11.04413,13.37115,-11.04425,13.37096,-8.16751,11.73045,-8.16785,11.73016,-4.56702,9.33353,-4.56739,9.33321,-1.3697,7.00007,-1.37008,6.99982,-2.7477,1.81529,-2.74784,1.815,-1.53276,0.98591,-1.53285,0.98552,-0.72917,0.43901,-0.72926,0.43862]},{"time":2.1667,"vertices":[3.24275,7.91407,-10.90369,19.33402,-18.24174,22.2739,-30.77019,23.47581,-33.87926,23.45443,-38.95153,23.98627,-34.9502,18.64992,-30.14416,12.82236,-20.97651,2.92524,-14.81287,0.26187,-2.10858,1.39288,-1.74232,1.39981,-0.33504,1.14755,1.22828,0.86729,2.52186,0.44093,3.74653,0.03722,4.60654,-0.45946,5.45589,-0.94996,5.53217,-1.3887,5.6108,-1.84122,4.8163,-2.14865,4.06898,-2.43792,-11.13084,-0.60674,-11.13115,-0.60712,-25.47261,11.38448,-25.47296,11.38448,-31.46003,19.05132,-31.4604,19.05161,-27.36235,20.51298,-27.36279,20.51315,-9.49651,17.27551,-9.49667,17.27538,-0.40323,5.37477,-0.40364,5.37405,3.24374,-2.20052,3.24379,-2.20058,4.61343,-1.71692,4.61352,-1.717,4.41793,-0.95703,4.41801,-0.95714,3.15983,-0.14434,3.15992,-0.14439,0.83397,0.60798,0.83404,0.6078,-1.96106,1.21719,-1.96115,1.21683,3.92605,-1.95956,3.92619,-1.95968,4.52572,-1.37605,4.52586,-1.37612,3.78548,-0.54843,3.78557,-0.5485,1.99743,0.23164,1.99757,0.23158,-0.27251,0.78668,-0.27241,0.78658,-1.80754,1.19403,-1.80772,1.19377,-19.09809,2.46482,-19.09858,2.46502,-28.60839,15.39989,-28.60876,15.40005,-29.13958,19.87903,-29.1399,19.87918,-16.33226,19.23055,-16.33257,19.23074,-1.51704,11.7206,-4.92833,11.02434,-4.92876,11.0241,1.4674,-1.45463,0.75603,-1.12101,0.75596,-1.12132,-8.55228,8.23908,-8.55267,8.23903,1.20663,-0.8295,1.20665,-0.83001,1.4439,-0.86632,1.44389,-0.86688,0.74517,-0.46391,0.74515,-0.46432,-0.4279,0.16244,-0.42794,0.16207,-2.09786,1.05663,-2.09795,1.05634,-3.90304,0.99792,-3.90348,0.99728,-8.0176,3.28572,-8.01794,3.28543,-10.92476,5.07293,-10.92514,5.0727,-14.40496,7.53363,-14.40521,7.53322,-18.1622,10.59957,-18.16252,10.59935,-22.38956,14.13091,-22.38988,14.13076,-24.60171,16.46433,-24.60199,16.46445,-25.20555,17.09343,-25.20588,17.09342,-22.75626,17.1347,-22.75659,17.13467,-21.20954,17.0104,-21.20993,17.01039,-17.62271,16.1749,-17.62304,16.1748,-15.49942,15.71741,-15.49973,15.71711,-11.04413,13.37115,-11.04425,13.37096,-8.16751,11.73045,-8.16785,11.73016,-4.56702,9.33353,-4.56739,9.33321,-1.3697,7.00007,-1.37008,6.99982,-2.7477,1.81529,-2.74784,1.815,-0.29255,-0.23069,-0.29261,-0.23111,0.42445,-0.52553,0.42439,-0.52595]}]},"head":{"alien/head":[{},{"time":0.2,"vertices":[13.75111,4.85142,24.32014,1.12376,26.01038,9.53201,30.68427,18.44095,24.90535,25.67038,8.98901,37.05399,1.21941,32.73833,2.0E-5,1.0E-5,2.0E-5,2.0E-5,1.0E-5,2.0E-5,0,1.0E-5,0,1.0E-5,0,0,0,0,-6.6898,9.80194,-5.05742,9.26561,-4.96629,11.48915,-6.59993,23.32903,-12.01232,20.66869,-16.25858,19.40443,-12.71413,14.54102,-5.93674,14.7163,0.11565,15.91503,5.36177,14.31557,4.48566,-2.46352,-1.42722,-2.03418,-1.0E-5,0,0,0,-3.61057,7.04752,-3.51703,9.89339,30.78316,3.77597,79.82353,18.92043,55.77951,17.95429,50.40761,34.94055,50.55713,39.23791,61.27519,44.92727,79.54408,32.56362,18.54898,18.91411,6.64247,30.16319,-16.43497,10.62154,-13.17729,14.75938,51.7993,-0.26025,18.34035,2.16159,28.03456,7.0585,3.33049,-2.35816,2.00232,0.76244,11.03924,5.39703,31.70125,3.61331,19.72183,2.9424,-3.03603,7.64153,1.0E-5,1.0E-5,25.98085,4.27312,8.4198,0.44305,-6.60401,-1.06753,0,0,0,0,4.6051,0.5287,9.93486,10.03566,27.98062,7.05276,38.33069,6.80178,31.15146,9.09935,12.24789,4.55832,11.94951,6.85835,17.77548,7.54866,30.17921,-0.17654,38.40248,6.66553,28.92384,10.24368,16.81825,6.69662,9.21013,1.0574,2.04581,-0.27795,13.95413,15.73528,-1.43007,0.10522,-2.08388,0.08258,0,0,1.17355,0.34741,18.39603,0.88033,0,0,11.41278,11.51308,-2.88608,1.10176,-1.57054,-0.07635,-0.16765,-0.08842,0,0,7.97186,1.1478,3.2681,4.46464,36.27831,5.03716,36.27831,5.03716,36.66379,8.15264,37.1739,6.85481,-1.85954,3.00225,23.87404,7.3959,-1.38234,0.20156,-2.22337,-0.03172,-1.65433,-0.1206,-2.57883,-0.60804,-0.02429,1.84338,-2.52748,0.95428,-1.16122,0.25819,6.62007,11.85163,4.22813,10.46403,0,0,-1.81659,32.37084,9.25679,35.75591,26.71053,23.73249,32.4342,19.81351,29.77367,7.60575,24.80023,8.73225,13.30579,10.78311,-0.70573,5.85449,-1.23865,14.09991,-15.53979,14.14754,-18.412,20.94823]}],"alien/burst01":[{"time":0.2333,"offset":44,"vertices":[12.08273,0.42989,5.85635,-3.15448,-14.58395,-14.16644,-42.0544,-27.86382,-61.27995,-40.99558,-54.93826,-31.80959,-24.33878,-17.19197,-6.21338,-8.34913,8.88202,-1.20689,2.66962,-4.62145,-10.58348,-11.60531,-20.12813,-16.53806,-26.57732,-19.76444,-33.7876,-23.26907,-39.09344,-25.70451,-41.505,-26.56489,-37.31277,-24.04845,-31.3895,-20.91614,0,0,4.10197,6.42991,0.58853,3.21655,5.11995,1.45657,2.49861,11.11131,0,0,0,0,0,0,0,0,-68.36334,-38.3297,-67.35854,-38.94537,7.82242,-1.80934,-54.96565,-36.99145,-65.9529,-39.90656,0,0,-29.34291,-21.60076,0,0,0,0,9.88068,-0.88555,0,0,0,0,0,0,12.89357,21.77497,3.83153,26.02618,-0.55229,28.95589,1.87724,-4.479,3.44228,-3.58939,-5.18176,-7.73711,-14.47705,-12.29416,-14.90198,-12.60027,-24.13503,-17.19472,-32.4474,-21.35122,-39.36365,-25.00894,-42.93295,-27.00154,-44.21417,-27.91209,-43.46233,-27.74467,-41.228,-26.81248,-38.70844,-25.67925,-34.65059,-23.76439,-30.60744,-21.8201,-26.88924,-19.99747,-23.02391,-18.08309,-19.22693,-16.16058,-13.5432,-13.25327,-9.36305,-11.06808,-2.38658,-7.40237,4.07083,-3.98443,-4.01335,-8.14338,-15.29329,-14.03935,-23.64859,-18.29926,-30.44191,-21.64285,-36.72517,-24.61744,-40.77979,-26.38342,-40.24191,-25.70207,-53.38672,-32.65142,-58.2805,-35.49346,-54.82005,-36.28709,-45.14799,-29.4385,-40.00992,-25.16666,-22.88824,-18.13795,-27.52473,-20.43511,-31.89749,-22.57889,-35.66429,-24.40355,-40.04185,-26.53755,-46.29327,-30.89571,-56.60077,-38.35271,-61.87022,-38.36944,-59.29791,-35.64544]},{"time":0.4333,"vertices":[40.54706,18.65558,38.06252,24.40632,27.65821,24.06248,16.09364,21.12307,6.57109,-0.3765,20.56963,-20.16034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.57057,1.29805,0,0,1.18316,12.96902,11.88604,5.83296,19.81404,-0.12758,31.30681,4.98151,27.94331,0.83968,45.36443,5.16258,44.82766,19.18138,39.82458,-0.78847,0.56605,27.18461,4.84359,27.031,9.96158,40.96053,14.51502,35.36584,43.19155,-23.34477,46.56367,-22.69795,41.00872,-11.5978,38.11973,0.52029,10.31166,18.63938,3.20829,35.77074,3.08008,42.51454,7.03522,50.63188,32.48734,61.44403,50.61159,45.50713,56.06839,27.62417,58.40731,-3.67759,54.33757,-12.62103,26.68567,-7.81141,17.76682,23.94729,19.63043,27.02727,19.98313,30.44666,37.22532,28.55745,44.63566,19.18997,38.74739,-2.13748,14.80871,-11.43229,46.14268,15.4712,24.31715,12.62191,30.52795,-10.37407,22.00648,14.14368,5.84632,41.59464,16.12791,29.77016,45.7781,21.164,11.69496,43.37859,-0.82077,2.58945,-0.68969,-0.1915,19.50694,8.32717,-3.03913,-0.59166,2.29238,-1.61308,2.24205,7.7463,27.09621,42.43314,13.94484,47.09381,7.50664,30.2716,38.78389,-4.95724,40.50175,-8.41444,39.27843,-11.80223,42.26198,-18.93701,41.15641,-15.96172,45.61419,-19.41041,54.82236,-15.52848,58.18858,-5.62221,58.66469,8.2961,55.00331,27.52796,53.25496,34.06676,52.82998,44.95584,32.88763,61.04887,24.56279,61.63552,18.94136,60.29522,6.14145,53.07735,0.90195,45.72404,2.73484,44.77526,4.4589,40.7398,2.99844,38.01129,2.40748,29.50703,7.3909,17.21804,2.4403,27.30689,5.64411,39.70188,1.59144,42.72276,17.94904,59.72688,34.41533,58.73611,54.58006,33.30026,59.33932,9.6127,47.43507,6.32447,40.40736,21.28833,32.71583,39.14765,29.18468,52.61752,25.54237,57.98509,8.51183,47.33889,6.32254,48.8425,6.83596,54.05988,8.63521,55.39858,12.18268,55.04446,25.42243,49.9039,29.89964,34.52418,34.39793,18.36047,42.0993,4.18422,20.75233,6.80875]},{"time":0.4667,"vertices":[47.3049,21.76485,44.40627,28.47404,32.26791,28.0729,18.77591,24.64358,0,0,6.15318,19.76164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.83234,1.5144,0,0,1.38036,15.13052,13.86705,6.80511,23.11638,-0.14884,36.52461,5.81176,32.60052,0.97962,52.92517,6.02301,52.29893,22.37827,45.13234,-1.49643,0.36846,31.73622,8.76564,33.39234,19.31503,51.92636,27.37635,46.68877,60.23064,-22.43886,59.06487,-24.12051,49.56319,-12.64415,43.6768,0.30326,12.26945,22.01128,6.19104,43.16184,7.63224,51.85173,13.32143,61.85971,44.21729,75.05798,66.24655,56.87083,73.01474,36.15078,75.04478,-0.78735,69.30954,-11.74341,6.99788,18.18582,20.0443,26.86685,22.80408,30.99572,22.46033,35.27834,43.01311,31.46513,52.07494,22.3883,45.20529,-2.49372,17.27682,-13.33767,53.83313,18.04973,39.67324,20.46646,46.62216,-6.53596,25.05461,16.29762,16.19243,53.46538,29.99724,40.46952,53.40778,24.69133,19.21873,53.70358,-0.95757,3.02103,-0.80464,-0.22341,21.79544,9.35772,-3.54565,-0.69027,2.67444,-1.88193,2.61572,9.03735,29.46332,45.87617,15.63039,50.60509,8.84979,30.49088,45.61912,-5.54185,47.36246,-9.72351,47.37259,-12.98466,52.4026,-20.54906,51.18359,-17.02686,57.92318,-20.2846,70.05144,-15.06292,75.13141,-2.89599,76.28175,13.67413,72.22368,36.26307,70.05863,43.86377,69.19043,56.41232,45.50443,74.99865,35.11581,75.36394,27.88362,73.4762,12.33069,64.75158,5.57372,55.85366,7.07925,54.42634,8.14337,49.23374,5.74281,45.68628,3.89062,35.15369,8.62836,20.24689,4.20003,32.71037,9.8178,48.15385,6.48223,52.38819,26.69831,72.78359,46.9562,72.12347,71.15749,42.74264,76.62032,14.9936,64.92282,12.31555,57.53946,30.24706,47.98927,51.2152,42.25758,65.78861,37.15187,71.33881,14.4293,57.7468,12.64787,59.88387,13.97566,66.32811,16.70258,68.19404,21.57089,68.13657,38.05918,62.8656,44.90455,46.17664,51.12674,27.31055,59.68296,10.3176]}],"alien/burst02":[{},{"time":0.4667,"vertices":[8.44717,-2.62617,-1.66246,-4.14964,2.94254,-7.04154,5.43728,-12.78315,6.10036,-18.48962,5.03693,-22.15525,6.39308,-34.54789,1.08167,-12.05763,0.60547,-7.26038,2.70239,-7.06268,0.03775,-4.26562,-1.33082,-5.03856,-7.04628,-8.33144,-1.5994,-7.02762,-4.01076,-8.73213,-6.70195,-2.17461,-5.16911,-3.3867,0,0,0,0,0,1.0E-5,0,0,0,0,53.98294,8.16872,4.19673,-12.93417,5.58393,-0.11341,2.0E-5,2.0E-5,3.54045,2.07458,-15.35167,-4.98116,-15.42085,-5.00362,-13.12766,-4.25951,-8.88725,-2.88364,-3.40128,-1.10363,0,0,0,0,0,0,0,0,-3.08499,-1.00098,-7.07841,-2.29671,-11.06462,-3.59012,-13.84425,-4.49206,-13.59177,-4.41013,-11.64641,-3.77888,-11.41626,-3.70422,-6.25803,-2.03055,-0.99994,-0.32445,0,0,-14.72412,-4.77753,-0.06894,0.21213,0,0,-1.03012,-0.33424,-5.19464,-1.68551,-9.35083,-3.03407,-12.43961,-4.03627,-14.68713,-4.76553,-9.12651,-2.96127,-6.09276,-1.9769,-2.87253,-0.93205,-0.18369,-0.05959,0,0,0,0,0.63629,0.20649,2.61421,0.61389,0,0,0,0,-0.63936,-0.20744,-2.90279,-0.94186,-5.07756,-1.64752,-7.18002,-2.3297,-9.64198,-3.12851,-11.40277,-3.69983,-13.09242,-4.24809,-14.50929,-4.70782,-15.63478,-5.07301,-16.40764,-5.32377,-16.40135,-5.32175,-15.46948,-5.0194,-7.22081,-2.34293,5.35602,-16.36661,3.39207,-12.22933,5.45975,-6.70846,-2.92706,-5.23907,4.60506,-4.3091,4.54066,-2.75301,8.24759,-13.26923,36.28853,8.47557,2.93465,-22.105,3.06993,-32.32308,4.05841,-8.09658,1.39204,-3.86498,2.66722,0.06961,-1.26559,-1.43877,-3.96754,-2.06429,-4.6916,-3.65018,-1.49208,-4.39505,-1.9169,-4.33731,-8.59688,-3.35921]},{"time":0.5667,"offset":2,"vertices":[0.55742,4.5388,4.61954,11.94549,19.69821,11.25572,17.98706,9.40695,18.03621,4.71638,16.60943,-4.66644,12.07512,-4.87935,8.63758,-1.62173,11.13341,-1.9513,9.96385,-3.6386,10.91671,-5.69052,2.31715,-4.1672,0,0,0,0,0,0,0,0,0,0,0,0,0,1.0E-5,0,0,14.68109,-2.59258,46.7749,-16.08387,-11.40092,-22.3923,-14.34756,-5.54877,2.0E-5,2.0E-5,8.12662,0.38493,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.04826,0.14849,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.4454,0.14454,1.82995,0.42972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15.96719,9.33518,16.30797,12.00871,7.02026,10.42611,1.17055,5.32005,-0.68335,1.22897,-6.86345,-5.12416,1.56529,-11.20049,36.93623,-9.74122,15.83783,4.29235,14.99457,-2.1606,12.00398,-2.84351,9.549,-2.46903,8.39969,-3.43277,8.83499,-3.87868,7.49269,-6.96484]},{"time":0.8,"vertices":[-0.26183,5.74663,-2.28078,7.20129,5.75565,14.6267,23.17381,9.11411,26.18849,3.43199,22.84949,2.17424,22.67816,-7.66858,20.79485,-5.90974,19.69392,0.13771,13.30333,-9.10894,15.08726,-8.277,-0.23314,-22.08472,-11.88261,-14.95191,-2.10322,-12.20714,-4.33761,-9.91582,0,0,0,0,0,0,0,0,0,1.0E-5,0,0,0,0,38.42324,-12.28841,-12.92033,-4.63375,-3.80882,7.19092,2.0E-5,2.0E-5,24.66497,1.41425,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.62634,5.77114,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,18.23075,7.88931,19.32123,6.37689,19.32123,6.37689,19.32123,6.37689,24.49674,5.37766,19.34924,10.11178,8.89436,12.75521,0.25719,6.51787,-3.04557,5.42747,-2.94852,5.1211,-9.0126,-3.34344,19.91956,-11.78638,21.28212,2.96197,21.91681,-4.27737,20.64548,-1.31097,20.69061,3.78262,14.9139,-6.25056,15.20506,-7.17007,1.61307,-20.79971,-5.61815,-14.72208,-1.40562,-12.31559,-3.77174,-9.03355]},{"time":1.2667,"vertices":[-0.60118,40.21666,13.21951,39.18164,29.47369,45.0315,56.76008,32.39156,63.27009,21.81733,62.03564,15.01811,64.11848,-1.57637,62.48392,-5.05509,62.0004,-3.32251,53.43962,-21.25206,49.83433,-22.08006,26.56342,-42.88687,6.75268,-37.41826,11.62914,-34.05639,3.79571,-30.49985,1.76681,-5.8581,3.41879,-2.25661,0,0,0,0,0,1.0E-5,0,0,0,0,20.66207,1.18949,-38.5212,-16.28236,-28.98003,29.90348,2.0E-5,2.0E-5,54.44005,-6.72733,76.40656,18.00246,72.74952,28.6037,61.75354,48.36436,52.07378,54.99824,44.73683,49.02092,38.58128,33.86156,43.56477,18.99028,49.0436,2.25867,58.29994,-10.54558,67.76347,-17.15362,75.02335,-17.88821,79.06823,-10.23586,79.9537,0.7427,61.61975,50.98802,56.37247,56.29552,57.21532,52.81435,47.85279,54.11208,43.02682,42.18958,42.66728,27.4078,68.10815,38.25859,45.63157,9.92648,53.55116,-5.10542,63.43682,-14.96118,71.54783,-17.55838,77.39485,-13.83996,79.59405,-5.05167,78.67317,8.41954,51.17966,58.6673,46.29943,57.67178,42.59077,52.48447,40.6232,44.98309,40.39751,36.26408,40.96192,28.17683,41.85824,19.31689,44.05618,9.44077,52.41975,-6.643,58.35233,-13.4062,63.75209,-17.73891,68.67623,-20.59882,72.70447,-21.37257,76.00245,-20.44646,76.86877,-16.17442,78.71053,-12.37278,80.48174,-7.37115,81.70876,-0.96352,80.67078,7.40256,76.75462,20.30871,74.09646,29.57249,68.3063,41.31281,59.06873,14.56583,60.39012,23.31939,51.33841,32.70986,32.27072,41.44254,15.71152,37.21485,6.32091,36.14613,-22.47176,26.23696,-28.75047,-8.63012,2.37231,-1.98877,61.72414,16.07718,64.43069,2.65221,66.21148,1.35978,67.08562,0.58398,57.63603,-20.88151,52.01707,-22.67115,28.06324,-40.17508,13.56615,-35.38068,12.38645,-33.03455,4.29317,-28.45454,9.75845,-17.98366]}],"alien/burst03-fg":[{"time":1.3},{"time":1.3333,"vertices":[4.92407,33.99561,5.00798,33.57872,5.12328,33.00543,5.48637,31.20123,6.74828,24.92905,7.53403,21.02349,8.43697,16.53606,9.75219,9.99911,10.97427,3.92524,-2.0E-5,0,-2.0E-5,0,-2.0E-5,0,6.69909,2.38814,23.66046,-7.08865,22.70099,-22.82669,25.84168,-38.43984,25.64882,-49.91971,20.14206,-58.28368,8.67352,-60.34131,-1.09209,-57.56573,-8.83326,-50.35564,-14.82484,-42.2756,-12.06253,-41.57684,-17.29308,-34.22359,-19.82881,-27.60732,-18.33358,-19.91221,-11.6693,-25.78771,-6.03783,-24.52315,-4.7291,-15.94568,-6.66511,-3.77949,3.41057,-5.9924,-4.38662,-6.14209,-2.0E-5,0,-2.0E-5,0,-2.0E-5,0,-2.0E-5,0,-2.0E-5,0,-2.0E-5,0,-2.0E-5,0,-2.0E-5,0,8.67569,15.34931,7.7352,20.02387,7.10682,23.14697,6.23163,27.49693,5.89768,29.15663,5.02141,33.51196,4.86009,34.3138,5.35844,31.83678,5.43989,31.43188,6.02796,28.50932,6.73043,25.01767,7.71515,20.12349,7.06047,23.37724,8.10455,18.18814,6.55185,25.90531,6.07323,28.28412,6.33308,26.99249,7.29481,22.21268,6.05077,28.39568,6.89485,24.20049,7.49718,-50.14923,5.64434,-40.11147,6.43589,-29.96807,7.76658,-19.08035,8.51981,-5.43632,8.71392,15.15949,9.90703,9.22946,-2.0E-5,0,-2.0E-5,0,-2.0E-5,0,4.88259,-2.24099]},{"time":1.3667,"vertices":[-70.41705,34.37442,-78.85695,44.50488,-83.04317,50.59951,-83.03895,55.86251,-75.4558,61.44423,-66.91991,62.35073,-56.43176,52.79782,-49.40193,42.13981,-38.02593,31.36853,-36.40095,25.16965,-30.55515,4.87659,-28.86868,-3.53624,-19.78248,-62.75611,-37.32115,-73.26339,-60.33855,-92.66755,-86.04379,-111.39024,-105.67757,-124.10738,-126.65024,-124.89159,-144.66449,-110.3586,-151.47311,-95.54165,-147.43042,-81.09411,-139.5922,-68.56383,-134.87042,-71.95443,-127.46339,-60.85379,-118.12346,-53.82679,-101.78126,-51.71567,-103.03056,-58.85463,-94.39997,-64.4724,-81.31036,-60.19676,-66.38394,-51.08508,-57.89868,-27.74495,-43.89296,3.38737,-32.66597,23.82576,-22.28335,10.90652,-14.9893,4.4808,-11.54865,12.23211,-0.40178,14.2431,-2.0E-5,0,-2.0E-5,0,-11.02068,-9.72176,-3.22299,19.71565,-14.78654,20.99318,-28.6498,21.94137,-34.75952,15.69332,-41.48957,17.95427,-55.62792,20.16899,-62.22404,24.79391,-58.0971,27.66769,-72.57096,44.13479,-70.28927,50.25853,-49.35699,38.34693,-46.55645,35.51911,-61.3503,49.97305,-53.62879,46.21342,-41.91972,27.90186,-53.5436,33.23147,-72.78381,52.92426,-64.69146,54.7669,-61.84596,41.67316,-54.95725,46.64687,-126.91089,-103.25671,-110.28194,-95.31543,-90.1948,-90.92423,-73.04885,-77.37818,-51.17789,-63.47858,-35.13591,37.52227,-23.79946,28.8777,-26.21375,17.88486,-44.01949,5.75304,-45.86902,6.67058,-40.1846,-33.0392,-49.56657,-2.09372,-25.76036,3.62906]},{"time":1.4,"vertices":[-131.45187,-51.45319,-148.6036,-31.17475,-157.28079,-18.14236,-158.10901,-3.50842,-145.73499,23.1334,-130.38083,34.89569,-111.24065,27.88556,-98.81904,19.49816,-80.39163,21.4846,-69.79592,33.42732,-69.73902,21.37726,-75.4065,3.71175,-75.45967,-33.76716,-104.78784,-42.37991,-145.88391,-72.17972,-196.42032,-103.78943,-233.52261,-122.97195,-274.29242,-115.09692,-310.17548,-74.71429,-323.07007,-38.21873,-313.74908,-6.95321,-296.78574,18.41047,-287.35056,8.77947,-271.37347,31.06201,-251.72612,43.2858,-218.07848,41.48261,-224.05377,25.88311,-207.60165,9.11362,-181.51706,11.20023,-150.47711,23.30289,-121.16852,39.72626,-84.64459,50.34229,-64.03001,58.64463,-49.08698,21.39314,-29.97859,8.96159,-23.09727,24.46422,-0.80354,28.48621,-2.0E-5,0,-2.0E-5,0,-22.04134,-19.44353,-8.44522,-28.56804,-26.14128,-40.86536,-52.5583,-47.01276,-62.81779,-70.08608,-75.57105,-70.08508,-101.96013,-77.13113,-114.84211,-70.43469,-107.6982,-58.59265,-136.96852,-26.33374,-133.73901,-7.18115,-93.29829,-20.74547,-89.84132,-13.69598,-118.09528,5.3364,-104.90922,11.42681,-77.94287,-42.83564,-100.19595,-38.87466,-139.40984,1.65357,-125.33388,17.3967,-116.82629,-23.16144,-104.92984,-2.90322,-273.27762,-65.72347,-238.62474,-54.36601,-197.13762,-52.49186,-166.77441,-32.02632,-125.5725,-12.32875,-68.02176,-1.8007,-49.42844,3.08038,-47.80422,9.75848,-88.03896,11.50607,-81.04648,23.43208,-104.64706,9.40743,-91.47524,18.19736,-51.5207,7.25812]},{"time":1.4333,"vertices":[-141.69418,-89.91953,-162.94035,-73.22871,-174.02481,-61.96138,-176.70424,-47.25473,-165.87697,-15.46182,-150.31453,0.60798,-127.95433,3.29795,-107.35299,8.17166,-84.27829,13.87565,-73.79984,33.52156,-93.42509,20.00843,-104.14333,8.25272,-119.50783,-11.15981,-152.42647,-6.79323,-196.82411,-16.03884,-248.4448,-34.77563,-292.5845,-39.65245,-334.42374,-28.66984,-362.43875,2.27655,-369.7325,31.38538,-355.0198,54.85098,-335.47263,74.67649,-317.94748,65.71158,-301.67886,80.76504,-285.0823,90.70033,-254.27272,92.3989,-258.01846,76.11541,-247.27003,62.99675,-222.94234,58.88057,-192.16331,61.03712,-161.14046,66.73997,-119.14156,67.93156,-93.84712,67.74237,-63.30359,29.2448,-46.31255,24.5336,-34.45641,40.38158,-12.44804,47.10272,-4.58382,31.15228,-2.0E-5,0,-28.90098,-28.60614,-18.64926,-40.53111,-33.24733,-53.89742,-55.80206,-67.21851,-64.24731,-93.07156,-78.21889,-96.00934,-106.27556,-109.26358,-121.19909,-105.41518,-114.80692,-91.7137,-150.78009,-65.6193,-149.56157,-45.37782,-103.61493,-49.86674,-98.50516,-37.39895,-133.44264,-26.61807,-118.11534,-13.91721,-84.11749,-68.81604,-108.97595,-69.91183,-156.42957,-35.92745,-142.50053,-15.33772,-129.09789,-57.74816,-118.51842,-34.38369,-322.1694,9.66158,-285.97684,16.62874,-246.23688,16.78676,-212.51012,19.22134,-169.27168,26.47505,-77.05382,-18.21582,-54.9422,-8.34502,-43.95517,9.95325,-102.89044,9.74546,-106.88592,19.99181,-139.58008,33.09819,-117.31013,24.49653,-53.92569,7.67862]},{"time":1.4667,"vertices":[-151.93654,-128.386,-177.27715,-115.28283,-190.76888,-105.78056,-195.29955,-91.00121,-186.01903,-54.05718,-170.2483,-33.67986,-144.66808,-21.28976,-115.88697,-3.15488,-88.16496,6.26667,-77.80376,33.6158,-117.11124,18.6396,-132.88025,12.79369,-159.7973,3.90851,-195.60782,6.3617,-244.76602,3.83169,-294.06616,-7.86333,-335.26804,-6.50256,-376.0525,8.01762,-396.54102,38.43305,-399.33905,69.30361,-381.08762,92.64108,-360.7377,113.81663,-336.11017,102.47171,-320.78897,115.28491,-308.1643,126.82421,-281.5598,134.00885,-283.22552,112.60371,-272.02405,92.61847,-247.27502,87.17693,-212.6863,87.1832,-179.44025,88.79045,-136.88281,86.75306,-107.59129,77.63562,-77.52026,37.09649,-62.64655,40.10567,-45.81557,56.299,-24.09258,65.7193,-9.16763,62.30466,-2.0E-5,0,-35.76065,-37.76878,-28.85333,-52.49422,-40.35339,-66.92953,-59.04583,-87.42433,-65.67684,-116.05714,-80.86673,-121.93368,-110.591,-141.39613,-127.55609,-140.3958,-121.91566,-124.83486,-164.59172,-104.905,-165.38417,-83.57462,-113.93161,-78.98813,-107.16903,-61.10201,-148.79005,-58.57266,-131.32152,-39.26133,-90.29212,-94.79652,-117.75597,-100.9491,-173.44936,-73.50861,-159.66725,-48.07225,-141.36952,-92.33501,-132.10704,-65.86427,-355.24713,47.61027,-319.47357,53.08123,-283.15186,52.52898,-249.21744,44.0771,-207.43579,47.6265,-86.08591,-34.631,-60.45599,-19.77045,-40.10611,10.14803,-117.74198,7.98483,-132.72545,16.55154,-171.94208,51.63213,-143.14511,30.79572,-56.33069,8.09913]},{"time":1.5,"vertices":[-151.93654,-128.386,-178.15945,-120.69106,-192.92516,-113.44209,-190.94879,-101.02086,-192.72208,-73.83811,-177.91005,-58.05946,-156.84607,-41.63752,-124.71217,-15.88078,-88.16496,6.26667,-77.80376,33.6158,-117.11124,18.6396,-132.88025,12.79369,-166.30356,17.1678,-202.37338,33.99169,-248.4867,39.35126,-298.22083,35.41038,-342.2739,38.15667,-376.2425,57.15323,-394.76685,89.66321,-396.4634,117.82472,-366.11874,131.6904,-350.1521,145.58844,-337.18158,136.10063,-322.84595,147.00995,-307.85916,152.25815,-286.51025,148.05208,-289.30066,126.24805,-280.40997,110.64816,-250.5748,99.70715,-213.0011,95.76285,-181.55362,94.97186,-136.88281,86.75306,-107.59129,77.63562,-77.52026,37.09649,-62.64655,40.10567,-45.81557,56.299,-24.09258,65.7193,-9.16763,62.30466,-2.0E-5,0,-35.76065,-37.76878,-28.85333,-52.49422,-40.35339,-66.92953,-59.04583,-87.42433,-65.67684,-116.05714,-80.86673,-121.93368,-110.591,-141.39613,-127.55609,-140.3958,-121.91566,-124.83486,-165.76842,-113.96886,-167.63979,-101.10149,-115.25388,-90.41172,-109.6324,-68.44429,-153.7794,-79.7434,-136.24835,-53.94591,-92.79071,-99.00262,-119.34332,-105.12422,-176.21503,-88.60848,-164.40157,-68.65309,-142.85818,-104.04455,-135.7806,-84.29303,-355.13516,87.35067,-323.20538,85.13422,-291.3755,76.85062,-249.22365,71.40271,-207.7596,63.4704,-90.05422,-43.44156,-60.45599,-19.77045,-40.10611,10.14803,-117.74198,7.98483,-132.72545,16.55154,-172.88249,59.08895,-143.14511,30.79572,-56.33069,8.09913]},{"time":1.5667,"vertices":[-141.01382,-98.47987,-163.29068,-91.81051,-175.38876,-85.46864,-172.25879,-78.55413,-175.35114,-57.08593,-162.90741,-46.73228,-145.45776,-37.89273,-118.06281,-20.81581,-88.16496,6.26667,-77.80376,33.6158,-117.11124,18.6396,-132.88025,12.79369,-166.30356,17.1678,-202.37338,33.99169,-248.4867,39.35126,-298.22083,35.41038,-342.2739,38.15667,-376.2425,57.15323,-394.76685,89.66321,-396.4634,117.82472,-366.11874,131.6904,-350.1521,145.58844,-337.18158,136.10063,-322.84595,147.00995,-307.85916,152.25815,-286.51025,148.05208,-289.30066,126.24805,-280.40997,110.64816,-250.5748,99.70715,-213.0011,95.76285,-181.55362,94.97186,-136.88281,86.75306,-107.59129,77.63562,-77.52026,37.09649,-62.64655,40.10567,-45.81557,56.299,-24.09258,65.7193,-9.16763,62.30466,-2.0E-5,0,-35.76065,-37.76878,-28.85333,-52.49422,-40.33588,-57.6875,-59.49745,-72.73655,-68.22011,-94.07352,-81.45741,-97.65981,-108.25979,-110.71755,-122.1894,-108.98652,-115.76294,-97.5073,-153.2168,-87.96709,-155.53464,-79.2407,-109.34637,-73.36073,-104.9814,-56.50557,-144.15125,-65.16235,-127.87166,-46.01543,-90.04642,-79.55262,-112.61389,-82.94587,-161.67697,-69.71903,-152.07272,-56.18338,-133.82422,-82.11716,-127.63764,-68.04272,-355.13516,87.35067,-323.20538,85.13422,-291.3755,76.85062,-249.22365,71.40271,-207.7596,63.4704,-86.68856,-37.81656,-60.45599,-19.77045,-40.10611,10.14803,-117.74198,7.98483,-132.72545,16.55154,-172.88249,59.08895,-143.14511,30.79572,-56.33069,8.09913]},{"time":1.6,"vertices":[-126.68488,-112.62257,-153.16333,-110.64824,-163.77899,-100.76437,-164.26962,-88.73792,-168.4284,-60.11137,-164.98157,-48.24212,-151.00478,-40.58978,-119.63441,-19.75203,-90.57693,4.81735,-77.80376,33.6158,-117.11124,18.6396,-132.88025,12.79369,-166.30356,17.1678,-202.37338,33.99169,-248.4867,39.35126,-298.22083,35.41038,-342.2739,38.15667,-376.2425,57.15323,-394.76685,89.66321,-396.4634,117.82472,-366.11874,131.6904,-350.1521,145.58844,-337.18158,136.10063,-322.84595,147.00995,-307.85916,152.25815,-286.51025,148.05208,-289.30066,126.24805,-280.40997,110.64816,-250.5748,99.70715,-213.0011,95.76285,-181.55362,94.97186,-136.88281,86.75306,-107.59129,77.63562,-77.52026,37.09649,-62.64655,40.10567,-45.81557,56.299,-24.09258,65.7193,-9.16763,62.30466,-2.0E-5,0,-35.76065,-37.76878,-28.85333,-52.49422,-43.02149,-59.61117,-60.27876,-66.33749,-66.19814,-95.96494,-75.72632,-99.5706,-99.12891,-126.89813,-111.4478,-118.78793,-108.13398,-108.09357,-144.74487,-100.57414,-148.9693,-85.6284,-109.34637,-73.36073,-104.97292,-53.80267,-144.15125,-65.16235,-127.87166,-46.01543,-89.42258,-80.5159,-105.08825,-88.26041,-154.57571,-76.8546,-155.04297,-57.3479,-127.3371,-86.70671,-127.63764,-68.04272,-355.13516,87.35067,-323.20538,85.13422,-291.3755,76.85062,-249.22365,71.40271,-207.7596,63.4704,-86.68856,-37.81656,-60.45599,-19.77045,-40.10611,10.14803,-117.74198,7.98483,-132.72545,16.55154,-172.88249,59.08895,-143.14511,30.79572,-56.33069,8.09913]},{"time":1.6333,"vertices":[-108.63416,-124.91017,-133.87291,-124.251,-142.6294,-115.84753,-143.20923,-102.44234,-148.82416,-70.71955,-137.87033,-52.09589,-131.98907,-38.28564,-115.27725,-15.78029,-90.57693,4.81735,-77.80376,33.6158,-117.11124,18.6396,-132.88025,12.79369,-166.30356,17.1678,-202.37338,33.99169,-248.4867,39.35126,-298.22083,35.41038,-342.2739,38.15667,-376.2425,57.15323,-394.76685,89.66321,-396.4634,117.82472,-366.11874,131.6904,-350.1521,145.58844,-337.18158,136.10063,-322.84595,147.00995,-307.85916,152.25815,-286.51025,148.05208,-289.30066,126.24805,-280.40997,110.64816,-250.5748,99.70715,-213.0011,95.76285,-181.55362,94.97186,-136.88281,86.75306,-107.59129,77.63562,-77.52026,37.09649,-62.64655,40.10567,-45.81557,56.299,-24.09258,65.7193,-9.16763,62.30466,-2.0E-5,0,-35.76065,-37.76878,-28.85333,-52.49422,-43.02149,-59.61117,-49.74921,-69.9977,-55.65605,-99.59956,-62.96867,-105.93137,-85.68259,-135.36412,-94.51278,-130.98228,-92.37325,-118.09144,-126.38745,-112.6104,-130.97462,-96.28339,-94.80884,-79.84474,-92.80672,-56.23335,-127.23772,-71.82628,-112.56506,-46.76895,-75.99547,-86.58072,-89.98784,-95.99784,-136.7193,-86.29273,-136.30603,-63.55061,-110.68084,-96.0786,-112.13541,-75.23594,-355.13516,87.35067,-323.20538,85.13422,-291.3755,76.85062,-249.22365,71.40271,-207.7596,63.4704,-83.78013,-35.61229,-60.45599,-19.77045,-40.10611,10.14803,-117.74198,7.98483,-132.72545,16.55154,-172.88249,59.08895,-143.14511,30.79572,-56.33069,8.09913]}]},"splat-fg":{"alien/splat03":[{"time":1.4667,"offset":2,"vertices":[10.0782,-14.45856,5.80107,-64.63068,-4.33017,-85.72516,-0.56895,-26.34158,20.55198,46.75519,1.0E-5,-6.0E-5,5.4104,-18.72467]},{"time":1.6667,"vertices":[-30.33957,-86.29268,19.83765,-119.15993,3.91198,-199.36053,-24.9324,-176.0454,-23.386,-111.6241,19.24028,18.19496,-75.0881,-2.30758,13.37083,35.55253,-3.13088,47.11062,46.50816,-10.46628,29.48812,-24.96087]},{"time":1.7,"vertices":[47.91341,-94.33224,64.14584,-71.34769,45.37762,-89.88364,-20.35247,-63.58272,-19.63882,-19.61007,20.59519,91.7681,-76.96143,-48.30743,-7.3912,-76.66309,-7.51576,-60.56274,37.98726,-119.19406,-35.91211,-79.69955]}]}}},"drawOrder":[{"time":1.4333,"offsets":[{"slot":"burst-bg","offset":6},{"slot":"splat-bg","offset":6}]},{"time":1.6333,"offsets":[{"slot":"burst-bg","offset":7},{"slot":"backarmor","offset":-9},{"slot":"splat-fg","offset":8}]},{"time":1.6667,"offsets":[{"slot":"metaljaw-bg","offset":21},{"slot":"burst-bg","offset":6},{"slot":"backarmor","offset":-9},{"slot":"splat-fg","offset":6},{"slot":"metaljaw","offset":5}]},{"time":1.7667,"offsets":[{"slot":"metaljaw-bg","offset":10},{"slot":"burst-bg","offset":7},{"slot":"backarmor","offset":-8},{"slot":"splat-fg","offset":-14},{"slot":"metaljaw","offset":-6}]}],"events":[{"time":1.2667,"name":"squish"}]}}},"armorgirl":{"skeleton":{"hash":"WOi4+iHTtSxv3YWXZCiH1RWbHEk","spine":"3.8.14-beta","x":-850.9,"y":-54.15,"width":1732.04,"height":2099.97},"bones":[{"name":"root"},{"name":"center","parent":"root","x":69.86,"y":1114.48},{"name":"pelvis","parent":"center","x":58.56,"y":72.24},{"name":"Layer 102","parent":"pelvis","x":-43.71,"y":31.16},{"name":"Layer 103","parent":"pelvis","length":155.59,"rotation":113.96,"x":3,"y":43.88},{"name":"Layer 108","parent":"pelvis","length":389.93,"rotation":-130.38,"x":83.88,"y":-53.92},{"name":"Layer 111","parent":"pelvis","length":419,"rotation":-149.77,"x":-62.91,"y":-14.57},{"name":"Layer 112","parent":"pelvis","length":106.1,"rotation":-100.27,"x":-47.43,"y":3.65},{"name":"Layer 93","parent":"pelvis","length":170.66,"rotation":-95.4,"x":121.17,"y":-149.19},{"name":"Layer 104","parent":"Layer 108","length":618.07,"rotation":18.02,"x":420.03,"y":7.01},{"name":"Layer 110","parent":"Layer 111","length":310.77,"rotation":153.8,"x":390.74,"y":21.86},{"name":"bone","parent":"Layer 103","length":190.38,"rotation":-21.49,"x":178.7,"y":-7.3},{"name":"bone20","parent":"Layer 93","length":132.1,"rotation":35.62,"x":193.56,"y":14.55},{"name":"bone22","parent":"Layer 112","length":79.74,"rotation":-15.83,"x":118.47,"y":-0.76},{"name":"Layer 100","parent":"bone","length":70.75,"rotation":175.5,"x":108.02,"y":21.03},{"name":"Layer 106","parent":"Layer 104","length":179.68,"rotation":-6.29,"x":681.14,"y":9.41},{"name":"Layer 118","parent":"Layer 104","x":444.57,"y":54.99},{"name":"Layer 119","parent":"Layer 104","x":599.79,"y":38.31},{"name":"Layer 120","parent":"Layer 104","x":279.41,"y":77.92},{"name":"Layer 70","parent":"bone","length":229.41,"rotation":-103.72,"x":199.56,"y":-127.96},{"name":"Layer 91","parent":"bone","length":233.65,"rotation":173.71,"x":187.32,"y":110.63},{"name":"Layer 96","parent":"bone","length":70.86,"rotation":153.98,"x":115.58,"y":85.61},{"name":"bone2","parent":"bone","length":61.76,"rotation":11.14,"x":211.2,"y":-4.62},{"name":"bone21","parent":"bone20","length":134.59,"rotation":3.63,"x":155.44,"y":-0.71},{"name":"Layer 66","parent":"Layer 70","length":419.75,"rotation":-10.7,"x":32.09,"y":124.48},{"name":"Layer 69","parent":"Layer 70","length":268.66,"rotation":-105.41,"x":255.41,"y":-18.25},{"name":"Layer 80","parent":"bone2","length":47.79,"rotation":-0.9,"x":79.44,"y":-2},{"name":"Layer 90","parent":"Layer 91","length":402.4,"rotation":-10.7,"x":-88.18,"y":-21.48},{"name":"Layer 95","parent":"Layer 91","length":178.02,"rotation":-9.46,"x":272.72,"y":1.71},{"name":"bone27","parent":"Layer 100","length":62.89,"rotation":-2.73,"x":76.64,"y":-0.58},{"name":"bone28","parent":"Layer 96","length":59.62,"rotation":-15.41,"x":76.36,"y":-1.9},{"name":"Layer 116","parent":"Layer 66","rotation":10.7,"x":43.48,"y":-92.63},{"name":"Layer 117","parent":"Layer 66","rotation":10.7,"x":178.61,"y":-85.3},{"name":"Layer 121","parent":"Layer 66","rotation":10.7,"x":330.76,"y":-81.93},{"name":"Layer 122","parent":"Layer 66","rotation":30.51,"x":476.57,"y":25.35},{"name":"Layer 123","parent":"Layer 90","x":136.06,"y":-56.42},{"name":"Layer 124","parent":"Layer 90","x":284.26,"y":-55.01},{"name":"Layer 125","parent":"Layer 90","rotation":5.19,"x":418.42,"y":-56.5,"scaleX":0.8562,"scaleY":0.8562},{"name":"Layer 68","parent":"Layer 69","length":112.08,"rotation":6.74,"x":295.92,"y":-2.88},{"name":"Layer 74","parent":"Layer 80","length":57.98,"rotation":-169.73,"x":150.78,"y":-112.15},{"name":"Layer 75","parent":"Layer 80","length":65.59,"rotation":-45.92,"x":178.16,"y":-93.68},{"name":"Layer 76","parent":"Layer 80","length":58.88,"rotation":56.52,"x":177.24,"y":-81.08},{"name":"Layer 77","parent":"Layer 80","length":63,"rotation":90,"x":179,"y":-67.71},{"name":"Layer 78","parent":"Layer 80","length":61.69,"rotation":146.63,"x":125.1,"y":44.7},{"name":"Layer 79","parent":"Layer 80","length":92.84,"rotation":175.5,"x":158.1,"y":-100.03},{"name":"Layer 81","parent":"Layer 80","x":73.44,"y":26.61},{"name":"Layer 82","parent":"Layer 80","x":93.64,"y":13.08},{"name":"Layer 85","parent":"Layer 80","x":69.69,"y":-28.87},{"name":"Layer 86","parent":"Layer 80","length":40.43,"rotation":-101.14,"x":97.02,"y":-11.99},{"name":"Layer 87","parent":"Layer 80","x":98.29,"y":40.61},{"name":"Layer 88","parent":"Layer 80","length":28.8,"rotation":39.31,"x":110.67,"y":28.76},{"name":"Layer 89","parent":"Layer 80","x":26.82,"y":40.04},{"name":"Layer 92","parent":"Layer 95","length":412.64,"rotation":-28.86,"x":279.68,"y":0.14,"scaleX":1.0527,"scaleY":1.0527},{"name":"bone5","parent":"Layer 80","length":44.53,"rotation":136.62,"x":172.32,"y":-73.3},{"name":"bone12","parent":"Layer 78","length":54.28,"rotation":12.43,"x":65.83,"y":-0.4},{"name":"bone14","parent":"Layer 74","length":75.55,"rotation":-27.65,"x":69.18,"y":-3.69},{"name":"bone16","parent":"Layer 79","length":95.63,"rotation":-18.71,"x":101.76,"y":-1.52},{"name":"bone3","parent":"Layer 77","length":42.12,"rotation":28.17,"x":66.13,"y":0.94},{"name":"bone38","parent":"Layer 78","x":49.61,"y":-6.24},{"name":"bone6","parent":"bone5","length":42.67,"rotation":-2.25,"x":50.39,"y":-0.4},{"name":"bone7","parent":"Layer 76","length":51.25,"rotation":43.61,"x":63.77,"y":2.86},{"name":"bone9","parent":"Layer 75","length":68.88,"rotation":50.15,"x":70.12,"y":2.12},{"name":"bone10","parent":"bone9","length":67.83,"rotation":54.68,"x":71.12,"y":3.03},{"name":"bone13","parent":"bone12","length":55.22,"rotation":26.02,"x":60.32,"y":0.91},{"name":"bone15","parent":"bone14","length":68.67,"rotation":12.53,"x":79.94,"y":1.19},{"name":"bone17","parent":"bone16","length":79.81,"rotation":8.51,"x":107.21,"y":-0.01},{"name":"bone29","parent":"bone16","x":52.45,"y":-4.91},{"name":"bone39","parent":"bone12","x":38.6,"y":-4.41},{"name":"bone4","parent":"bone3","length":40.08,"rotation":20.06,"x":44.8,"y":-1.1},{"name":"bone8","parent":"bone7","length":58.73,"rotation":16.24,"x":54.71,"y":3.01},{"name":"bone11","parent":"bone10","length":70.4,"rotation":26.75,"x":74.78,"y":2.12},{"name":"bone18","parent":"bone17","length":95.86,"rotation":12.86,"x":92.73,"y":3.63},{"name":"bone23","parent":"bone15","length":79.65,"rotation":12,"x":79.87,"y":3.54},{"name":"bone30","parent":"bone17","x":42.28,"y":-9.6},{"name":"bone40","parent":"bone13","x":36.76,"y":-11.93},{"name":"bone41","parent":"bone13","x":29.19,"y":32.28},{"name":"bone19","parent":"bone18","length":61.86,"rotation":23.2,"x":101.53,"y":-0.01},{"name":"bone24","parent":"bone23","length":89.61,"rotation":5.84,"x":93.5,"y":1.84},{"name":"bone31","parent":"bone18","x":10.65,"y":6.24},{"name":"bone25","parent":"bone24","length":79.88,"rotation":-14.14,"x":98.42,"y":1.75},{"name":"bone32","parent":"bone19","x":-12.84,"y":13.36},{"name":"bone33","parent":"bone24","x":43.05,"y":7.14},{"name":"bone26","parent":"bone25","length":97,"rotation":-14.14,"x":84.54,"y":-4.49},{"name":"bone34","parent":"bone25","x":21.78,"y":26.36},{"name":"bone35","parent":"bone25","x":27.08,"y":-31.99},{"name":"bone36","parent":"bone26","x":21.58,"y":30.12},{"name":"bone37","parent":"bone26","x":20.48,"y":-36.24}],"slots":[{"name":"Layer 93","bone":"Layer 93","attachment":"armorgirl/Layer 93"},{"name":"Layer 73","bone":"Layer 74","attachment":"armorgirl/Layer 73"},{"name":"Layer 90","bone":"Layer 90","attachment":"armorgirl/Layer 90"},{"name":"Layer 92","bone":"Layer 92","attachment":"armorgirl/Layer 92"},{"name":"Layer 78","bone":"Layer 78","attachment":"armorgirl/Layer 78"},{"name":"Layer 91","bone":"Layer 91","attachment":"armorgirl/Layer 91"},{"name":"Layer 74","bone":"Layer 74","attachment":"armorgirl/Layer 74"},{"name":"Layer 95","bone":"Layer 95","attachment":"armorgirl/Layer 95"},{"name":"Layer 94","bone":"Layer 91","attachment":"armorgirl/Layer 94"},{"name":"Layer 101","bone":"Layer 102","attachment":"armorgirl/Layer 101"},{"name":"Layer 110","bone":"Layer 110","attachment":"armorgirl/Layer 110"},{"name":"Layer 111","bone":"Layer 111","attachment":"armorgirl/Layer 111"},{"name":"Layer 112","bone":"Layer 112","attachment":"armorgirl/Layer 112"},{"name":"Layer 109","bone":"Layer 106","attachment":"armorgirl/Layer 109"},{"name":"Layer 104","bone":"Layer 104","attachment":"armorgirl/Layer 104"},{"name":"Layer 108","bone":"Layer 108","attachment":"armorgirl/Layer 108"},{"name":"Layer 107","bone":"Layer 104","attachment":"armorgirl/Layer 107"},{"name":"Layer 106","bone":"Layer 106","attachment":"armorgirl/Layer 106"},{"name":"Layer 103","bone":"Layer 103","attachment":"armorgirl/Layer 103"},{"name":"Layer 102","bone":"Layer 102","attachment":"armorgirl/Layer 102"},{"name":"Layer 96","bone":"Layer 96","attachment":"armorgirl/Layer 96"},{"name":"Layer 100","bone":"Layer 100","attachment":"armorgirl/Layer 100"},{"name":"Layer 97","bone":"Layer 96","attachment":"armorgirl/Layer 97"},{"name":"Layer 98","bone":"bone","attachment":"armorgirl/Layer 98"},{"name":"Layer 99","bone":"Layer 100","attachment":"armorgirl/Layer 99"},{"name":"Layer 80","bone":"Layer 80","attachment":"armorgirl/Layer 80"},{"name":"Layer 89","bone":"Layer 89","attachment":"armorgirl/Layer 89"},{"name":"Layer 87","bone":"Layer 87"},{"name":"Layer 88","bone":"Layer 88","attachment":"armorgirl/Layer 88"},{"name":"Layer 85","bone":"Layer 85","attachment":"armorgirl/Layer 85"},{"name":"Layer 86","bone":"Layer 86","attachment":"armorgirl/Layer 86"},{"name":"Layer 84","bone":"Layer 82","attachment":"armorgirl/Layer 84"},{"name":"Layer 82","bone":"Layer 82","attachment":"armorgirl/Layer 82"},{"name":"Layer 81","bone":"Layer 81","attachment":"armorgirl/Layer 81"},{"name":"Layer 77","bone":"Layer 77","attachment":"armorgirl/Layer 77"},{"name":"Layer 76","bone":"Layer 76","attachment":"armorgirl/Layer 76"},{"name":"Layer 75","bone":"Layer 75","attachment":"armorgirl/Layer 75"},{"name":"Layer 72","bone":"Layer 68","attachment":"armorgirl/Layer 72"},{"name":"Layer 70","bone":"Layer 70","attachment":"armorgirl/Layer 70"},{"name":"Layer 79","bone":"Layer 79","attachment":"armorgirl/Layer 79"},{"name":"Layer 69","bone":"Layer 69","attachment":"armorgirl/Layer 69"},{"name":"Layer 68","bone":"Layer 68","attachment":"armorgirl/Layer 68"},{"name":"Layer 66","bone":"Layer 66","attachment":"armorgirl/Layer 66"},{"name":"Layer 118","bone":"Layer 118","attachment":"armorgirl/Layer 118","blend":"additive"},{"name":"Layer 119","bone":"Layer 119","attachment":"armorgirl/Layer 118","blend":"additive"},{"name":"Layer 120","bone":"Layer 120","attachment":"armorgirl/Layer 118","blend":"additive"},{"name":"Layer 117","bone":"Layer 123","attachment":"armorgirl/Layer 117","blend":"additive"},{"name":"Layer 124","bone":"Layer 124","attachment":"armorgirl/Layer 117","blend":"additive"},{"name":"Layer 125","bone":"Layer 125","attachment":"armorgirl/Layer 117","blend":"additive"},{"name":"Layer 116","bone":"Layer 116","attachment":"armorgirl/Layer 116","blend":"additive"},{"name":"Layer 121","bone":"Layer 117","attachment":"armorgirl/Layer 116","blend":"additive"},{"name":"Layer 122","bone":"Layer 121","attachment":"armorgirl/Layer 116","blend":"additive"},{"name":"Layer 123","bone":"Layer 122","attachment":"armorgirl/Layer 116","blend":"additive"},{"name":"Layer 115","bone":"bone","attachment":"armorgirl/Layer 115","blend":"additive"},{"name":"Layer 114","bone":"Layer 96","attachment":"armorgirl/Layer 114","blend":"additive"},{"name":"Layer 113","bone":"Layer 100","attachment":"armorgirl/Layer 113","blend":"additive"},{"name":"Layer 851","bone":"root"},{"name":"Layer 871","bone":"root"}],"skins":[{"name":"default","attachments":{"Layer 100":{"armorgirl/Layer 100":{"type":"mesh","uvs":[0.80325,0.11836,1,0.4541,1,0.62829,0.93434,0.83529,0.76065,1,0.47224,1,0.1609,0.94384,0,0.78228,0,0.5778,0.09208,0.39604,0.2035,0.18399,0.22645,0,0.60334,0,0.36737,0.41624,0.26905,0.64848,0.40998,0.7848,0.70493,0.71412,0.76065,0.52731,0.60989,0.34303],"triangles":[1,17,0,18,12,0,17,1,2,8,9,14,16,17,2,15,14,13,7,8,14,16,15,13,3,16,2,6,7,14,6,14,15,5,15,16,6,15,5,4,16,3,5,16,4,17,18,0,18,10,12,17,13,18,12,10,11,18,13,10,9,10,13,14,9,13,16,13,17],"vertices":[2,29,-100.8,49.15,0.16208,11,125.48,-33.82,0.83792,3,14,51.58,89.58,0.13899,29,-29.31,88.86,0.35654,11,49.56,-64.22,0.50448,3,14,90.23,90.95,0.14831,29,9.23,92.07,0.61132,11,10.93,-62.55,0.24036,2,14,136.55,81.36,0.11262,29,55.95,84.69,0.88738,1,29,94.86,58.13,1,1,29,98.95,8.98,1,1,29,90.94,-45.11,1,2,14,130.46,-78.73,0.11701,29,57.47,-75.51,0.88299,2,14,85.09,-80.34,0.31574,29,12.24,-79.27,0.68426,2,14,44.21,-66.04,0.63711,29,-29.28,-66.93,0.36289,1,14,-3.51,-48.66,1,1,14,-44.47,-46.19,1,1,11,153.21,-0.8,1,2,14,47.02,-18.83,0.87805,29,-28.72,-19.64,0.12195,2,14,99.14,-33.81,0.12024,29,24.06,-32.12,0.87976,1,29,52.22,-5.59,1,2,14,111.06,41.2,0.33592,29,32.4,43.37,0.66408,2,14,69.28,49.25,0.66731,29,-9.72,49.42,0.33269,2,14,29.31,22.04,0.83333,29,-48.35,20.34,0.16667],"hull":13}},"Layer 101":{"armorgirl/Layer 101":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[193.81,-6.91,-102.19,-6.91,-102.19,124.09,193.81,124.09],"hull":4}},"Layer 102":{"armorgirl/Layer 102":{"type":"mesh","uvs":[1,0.5169,0.88927,0.76154,0.6342,0.93844,0.51101,0.97494,0.42644,1,0.28861,1,0.15902,0.90457,0.10189,0.8329,0,0.70509,0,0.58088,0.08085,0.26473,0.11945,0.34141,0.15285,0.40775,0.39764,0.43786,0.4758,0.48303,0.66094,0.38141,0.80905,0.13676,0.80699,0,1,0],"triangles":[16,17,18,16,18,0,15,16,0,9,10,11,7,9,11,7,8,9,1,15,0,11,12,7,6,7,12,6,13,4,12,13,6,1,2,14,1,14,15,13,14,4,2,3,14,4,5,6,14,3,4],"vertices":[216.81,21.01,179.94,-23.51,95,-55.71,53.98,-62.35,25.82,-66.91,-20.08,-66.91,-63.23,-49.54,-82.26,-36.5,-116.19,-13.24,-116.19,9.37,-89.26,66.91,-76.41,52.95,-65.29,40.88,16.23,35.4,42.26,27.18,103.91,45.67,153.23,90.2,152.54,115.09,216.81,115.09],"hull":19}},"Layer 103":{"armorgirl/Layer 103":{"type":"mesh","uvs":[0.50054,0.09398,0.76689,0.10018,0.84781,0.20983,0.84444,0.37223,0.74161,0.54394,0.83264,0.69496,1,0.80978,0.97471,0.91011,0.75678,0.98345,0.36399,1,0.0892,0.9308,0.16001,0.81909,0.05717,0.70013,0,0.50463,0,0.29982,0,0.16535,0.08415,0.1157,0.16169,0.11777,0.13135,0.05881,0.26453,0,0.43816,0,0.64214,0.78288,0.49548,0.53463,0.3977,0.35878,0.43985,0.20466,0.31004,0.05984,0.13472,0.20155,0.62866,0.23259,0.05549,0.32982,0.25104,0.73944,0.5186,0.69807,0.34713,0.87081,0.67417,0.39602],"triangles":[25,19,20,18,19,25,17,18,25,0,25,20,24,25,0,26,17,25,24,26,25,27,0,1,27,1,2,24,0,27,2,32,27,26,16,17,15,16,26,14,15,26,28,14,26,23,26,24,28,26,23,3,32,2,23,24,27,32,23,27,13,14,28,22,23,32,13,28,23,22,13,23,4,32,3,22,32,4,22,29,13,30,22,4,21,30,4,29,12,13,30,29,22,5,21,4,11,12,29,31,29,30,11,29,31,31,30,21,7,5,6,8,21,5,8,5,7,9,31,21,9,21,8,10,11,31,9,10,31],"vertices":[1,22,30.6,-58.45,1,2,11,245.72,-140.01,0.1153,22,7.71,-139.51,0.8847,2,11,188.21,-163.14,0.24869,22,-53.18,-151.09,0.75131,2,11,104.7,-158.5,0.58707,22,-134.23,-130.4,0.41293,2,4,150.43,-127.55,0.40316,11,17.74,-122.25,0.59684,1,4,67.67,-122.28,1,1,4,-7.83,-146.63,1,1,4,-51.82,-118.36,1,1,4,-58.4,-40.09,1,1,4,-15.82,76.81,1,1,4,51.98,141.72,1,1,4,95.49,97.92,1,2,4,164.67,102.76,0.71777,11,-53.38,97.27,0.28223,1,11,47.98,111.01,1,1,11,153.36,106.51,1,2,11,222.55,103.54,0.7827,22,32.04,103.93,0.2173,2,11,246.96,75.89,0.59617,22,50.64,72.08,0.40383,2,11,244.85,51.45,0.34922,22,43.85,48.51,0.65078,1,22,75.62,50.7,1,1,22,95.17,2.67,1,1,22,82.27,-50.66,1,1,4,50.71,-48.89,1,2,4,186.37,-58.41,0.19135,11,25.86,-44.75,0.80865,1,11,117.65,-17.76,1,2,11,196.39,-34.46,0.29234,22,-20.3,-26.41,0.70766,1,22,61.83,-4.07,1,2,11,202.1,61.81,0.85301,22,3.91,66.93,0.14699,2,11,179.47,-93.45,0.35844,22,-48.3,-81.02,0.64156,1,11,137.18,89.65,1,1,4,121.31,54.99,1,1,4,106.47,-30.93,1,1,4,47.15,54.69,1,2,11,94.76,-104.22,0.76533,22,-133.49,-75.23,0.23467],"hull":21}},"Layer 104":{"armorgirl/Layer 104":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[124.69,131.12,190.5,-28.88,-24.99,-117.5,-90.79,42.49],"hull":4}},"Layer 106":{"armorgirl/Layer 106":{"type":"mesh","uvs":[0.93109,0.06754,1,0.30434,1,0.49531,0.7537,0.79577,0.21087,1,0.09988,0.92869,0,0.86452,0.3315,0.50804,0.52308,0.19994,0.57985,0,0.79982,0,0.81401,0.11846,0.86368,0.37563,0.56566,0.70156],"triangles":[11,10,0,9,10,11,8,9,11,11,0,1,12,11,1,8,11,12,12,1,2,13,8,12,7,8,13,3,13,12,3,12,2,5,6,7,5,7,13,4,5,13,4,13,3],"vertices":[-38.78,-24.11,15.35,22.02,64.63,48.93,167.06,45.66,274.66,-26.08,267.49,-56.68,261.03,-84.22,135.52,-73.07,36.65,-81.01,-20.68,-98.67,-42.93,-57.94,-13.8,-38.61,47.53,6.83,161.77,-2.43],"hull":11}},"Layer 107":{"armorgirl/Layer 107":{"type":"mesh","uvs":[0.91234,0.0904,0.8968,0.1563,1,0.33536,0.24665,1,0,1,0,0.85393,0.34508,0.08324,0.41502,0.08467,0.3943,0,0.80614,0,0.78968,0.14037,0.13268,0.90693],"triangles":[7,8,9,10,7,9,10,9,0,1,10,0,11,5,6,11,6,7,11,7,10,4,5,11,3,11,10,2,3,10,2,10,1,4,11,3],"vertices":[4.92,56.58,50.32,68.68,152.05,154.15,698.67,60.48,735.36,-28.71,639.85,-68,84.61,-150.47,75.14,-124.8,22.86,-155.06,-38.39,-6.13,55.84,25.66,654.77,-5.76],"hull":10}},"Layer 108":{"armorgirl/Layer 108":{"type":"mesh","uvs":[0.95902,0.15271,0.95902,0.4183,0.78472,0.59487,0.53767,0.80407,0.29669,1,0,1,0,0.78033,0.17241,0.51474,0.39369,0.21354,0.52706,0.04588,0.8408,0,0.17999,0.83375,0.44522,0.52365,0.75895,0.18832,0.83444,0.33491,0.69606,0.49956],"triangles":[13,9,10,13,10,0,14,13,0,14,0,1,13,8,9,15,13,14,13,12,8,12,7,8,13,15,12,2,15,14,2,14,1,3,12,15,3,15,2,11,7,12,11,12,3,6,7,11,5,6,11,4,11,3,5,11,4],"vertices":[-142.08,72.4,-36.26,162.38,91.9,154.22,257.19,128.73,415.18,101.12,513.58,-14.61,426.06,-89.03,263.06,-111.76,69.66,-127.49,-41.38,-132.27,-163.71,-25.44,387.65,-0.73,176.12,-2.33,-61.54,6.43,-28.16,85.54,83.33,87.35],"hull":11}},"Layer 109":{"armorgirl/Layer 109":{"type":"mesh","uvs":[0.64441,0.82366,0.3858,0.90272,0.05444,0.82366,0,0,0.53552,0,0.82815,0,0.71246,0.47262,0.33135,0.4684],"triangles":[7,3,4,6,4,5,7,4,6,2,3,7,0,7,6,1,2,7,0,6,5,0,1,7],"vertices":[91.02,92.85,116.94,74.59,122.13,35.89,-2.95,-39.24,-31.19,12.46,-46.62,40.71,32.9,69.64,52.34,32.48],"hull":6}},"Layer 110":{"armorgirl/Layer 110":{"type":"mesh","uvs":[1,0.36495,0.85815,0.7017,0.50179,1,0,1,0,0.55529,0.1321,0.24293,0.44184,0.077,0.76822,0,1,0,0.23202,0.75051,0.63334,0.48208],"triangles":[10,7,8,10,6,7,0,10,8,5,6,10,9,4,5,1,10,0,10,9,5,3,4,9,2,9,10,2,10,1,3,9,2],"vertices":[399.72,-11.57,330.04,-60.35,161.07,-96.05,-72.18,-79.7,-67.24,-9.17,-2.36,36.07,143.47,52.29,296.04,53.87,403.78,46.32,38.44,-47.69,227.98,-18.19],"hull":9}},"Layer 111":{"armorgirl/Layer 111":{"type":"mesh","uvs":[1,0.4933,0.83919,0.69964,0.502,0.79159,0.38907,0.87906,0.22936,1,0.06157,1,0,0.81626,0.04867,0.59871,0.28582,0.32734,0.69076,0,1,0,0.27292,0.60768,0.49394,0.39911,0.18096,0.76244,0.79798,0.44155],"triangles":[12,8,9,12,9,10,14,12,10,14,10,0,11,7,8,11,8,12,1,14,0,13,7,11,2,12,14,2,14,1,11,12,2,3,13,11,6,7,13,2,3,11,5,6,13,4,5,13,3,4,13],"vertices":[13.17,115.93,115.94,138.68,272.1,84.53,334.27,83.34,421.71,80.82,491.44,40.2,485.03,-29.64,426.92,-82.9,281.09,-106.61,55.78,-106.43,-72.75,-31.55,335.28,-25.92,207.09,-34.76,400.45,-1.92,88.12,51.54],"hull":11}},"Layer 112":{"armorgirl/Layer 112":{"type":"mesh","uvs":[1,0.4542,0.9049,0.70935,0.6443,1,0,0.92934,0.29486,0.56411,0.20602,0.28932,0,0.10875,0,0,1,0],"triangles":[3,4,2,2,4,1,1,4,0,4,5,0,5,8,0,8,5,7,5,6,7],"vertices":[2,7,45.78,75.89,0.66667,13,-90.84,53.93,0.33333,2,7,113.45,71.63,0.33333,13,-24.56,68.28,0.66667,1,13,62.38,61.24,1,1,13,94.46,-45.72,1,2,7,95.18,-37.7,0.33333,13,-12.34,-41.88,0.66667,2,7,28.13,-65.29,0.66667,13,-69.33,-86.71,0.33333,1,7,-11.43,-108.26,1,1,7,-39.04,-113.26,1,1,7,-69.53,54.99,1],"hull":9}},"Layer 113":{"armorgirl/Layer 113":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[160.18,87.43,166.77,-98.46,-11.11,-104.77,-17.71,81.11],"hull":4}},"Layer 114":{"armorgirl/Layer 114":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[142.78,22.78,187.92,-80.81,53.16,-139.53,8.02,-35.94],"hull":4}},"Layer 115":{"armorgirl/Layer 115":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[98.73,-11.31,104.84,131.56,241.71,125.7,235.6,-17.17],"hull":4}},"Layer 116":{"armorgirl/Layer 116":{"x":-29.52,"y":-31.85,"rotation":11.24,"width":221,"height":248}},"Layer 117":{"armorgirl/Layer 117":{"x":-9.72,"y":-11.91,"rotation":104.52,"width":126,"height":173}},"Layer 118":{"armorgirl/Layer 118":{"x":-39.67,"y":7.7,"rotation":112.35,"width":222,"height":271}},"Layer 119":{"armorgirl/Layer 118":{"x":-31.33,"y":8.92,"scaleX":0.8331,"scaleY":0.8331,"rotation":106.02,"width":222,"height":271}},"Layer 120":{"armorgirl/Layer 118":{"x":-36.97,"y":7.47,"rotation":112.35,"width":222,"height":271}},"Layer 121":{"armorgirl/Layer 116":{"x":-29.52,"y":-31.85,"rotation":11.24,"width":221,"height":248}},"Layer 122":{"armorgirl/Layer 116":{"x":-29.52,"y":-31.85,"rotation":11.24,"width":221,"height":248}},"Layer 123":{"armorgirl/Layer 116":{"x":40.81,"y":-18.63,"scaleX":-1,"rotation":11.24,"width":221,"height":248}},"Layer 124":{"armorgirl/Layer 117":{"x":-9.72,"y":-11.91,"rotation":104.52,"width":126,"height":173}},"Layer 125":{"armorgirl/Layer 117":{"x":-9.72,"y":-11.91,"rotation":104.52,"width":126,"height":173}},"Layer 66":{"armorgirl/Layer 66":{"type":"mesh","uvs":[0.32569,0.08313,0.89643,0.50963,1,0.66624,1,0.78119,0.83076,1,0.59434,1,0.17285,0.77786,0.04853,0.64366,0,0.59126,0.05304,0.28835,0.07614,0.15643,0.23972,0,0.31017,0,0.74837,0.69123,0.09047,0.31804,0.06863,0.48759,0.80064,0.88714],"triangles":[11,12,0,10,11,0,14,10,0,9,10,14,15,9,14,8,9,15,7,8,15,13,0,1,13,1,2,14,0,13,15,14,13,6,7,15,15,16,6,13,2,3,16,13,3,16,15,13,5,6,16,4,16,3,5,16,4],"vertices":[26.16,178.05,446.44,132.15,536.56,89.44,556.66,39.53,492.41,-96.75,349.21,-154.43,55.07,-160.83,-43.7,-132.9,-82.26,-122,-103.1,22.44,-112.17,85.34,-40.45,193.16,2.22,210.35,388.52,17.19,-75.24,18.68,-58.82,-60.25,454.44,-55.1],"hull":13}},"Layer 68":{"armorgirl/Layer 68":{"type":"mesh","uvs":[1,0.09862,0.93031,0.29841,0.91447,0.53388,1,0.73367,1,0.90135,0.89863,0.82286,0.8036,0.67659,0.83132,0.85854,0.81548,1,0.68482,1,0.63334,0.83,0.59771,0.64805,0.51455,0.79789,0.38389,1,0.20967,1,0.3443,0.69086,0.39973,0.54101,0.19779,0.67659,0,0.74794,0,0.63021,0.21759,0.45896,0.38785,0.34122,0.59375,0,0.7838,0,1,0,0.56603,0.43755],"triangles":[23,24,0,1,23,0,25,21,22,25,22,23,1,25,23,2,25,1,16,21,25,20,21,16,6,11,25,16,25,11,2,6,25,17,19,20,17,20,16,15,16,11,6,2,3,18,19,17,12,15,11,5,6,3,10,11,6,7,10,6,5,3,4,13,14,15,12,13,15,9,10,7,8,9,7],"vertices":[-14.58,45.73,25.59,47.46,69.03,60.29,100.06,87.27,130.33,98.23,122.13,76.61,101.33,51.59,132.54,68,159.01,74.67,166.71,53.42,139.06,33.93,108.31,16.23,140.26,12.51,184.44,4.48,194.71,-23.86,130.97,-22.19,100.66,-22.97,137.03,-46.95,161.57,-74.45,140.32,-82.15,96.58,-57.96,65.29,-37.97,-8.44,-26.8,-19.64,4.11,-32.38,39.28,72.18,-2.69],"hull":25}},"Layer 69":{"armorgirl/Layer 69":{"type":"mesh","uvs":[1,0.24681,1,0.54871,0.9533,0.66322,0.76006,0.68196,0.48917,0.86726,0.48917,1,0.09685,1,0,0.78814,0.19026,0.71527,0.28679,0.50707,0.21206,0.33425,0.4736,0.26555,0.53276,0.09898,0.66665,0,0.80988,0,1,0,0.35217,0.76524,0.5421,0.46751,0.66042,0.27179,0.89706,0.34675],"triangles":[14,15,0,18,12,13,11,12,18,18,13,14,19,14,0,18,14,19,17,11,18,9,10,11,9,11,17,19,0,1,1,3,19,19,17,18,2,3,1,3,17,19,16,9,17,4,16,17,8,9,16,3,4,17,6,7,8,6,8,16,16,4,5,6,16,5],"vertices":[11.55,62.6,100.33,107.14,138.61,114.85,163.18,79.61,244.4,53.68,283.43,73.27,322.13,-3.88,269.39,-54.18,229.19,-27.52,158.44,-39.25,114.99,-79.44,68.99,-38.15,14.17,-51.09,-28.15,-39.36,-42.28,-11.2,-61.03,26.19,227.91,11.69,121.62,5.12,52.39,-0.49,51.09,57.1],"hull":16}},"Layer 70":{"armorgirl/Layer 70":{"type":"mesh","uvs":[0.75656,0.14669,1,0.43486,1,0.86475,0.52171,1,0.24553,0.80807,0.16072,1,0,1,0,0.33093,0,0,0.41515,0,0.19552,0.18448,0.58042,0.30258],"triangles":[10,8,9,11,9,0,10,9,11,7,8,10,11,0,1,4,10,11,7,10,4,11,1,2,3,4,11,6,7,4,5,6,4,2,3,11],"vertices":[192.19,54.39,275.54,28.35,287.69,-32.79,143.74,-81.39,52.99,-71.05,32.21,-103.55,-17.45,-113.42,-36.35,-18.27,-45.71,28.8,82.56,54.29,19.91,14.57,142.17,21.4],"hull":10}},"Layer 72":{"armorgirl/Layer 72":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[147.8,105.62,206.39,-56.09,73.83,-104.13,15.23,57.58],"hull":4}},"Layer 73":{"armorgirl/Layer 73":{"type":"mesh","uvs":[0.54026,0.15173,0.71477,0.28124,0.84787,0.41215,1,0.56276,1,0.78798,0.77984,0.91326,0.51955,1,0.43674,1,0.3273,0.94705,0.19715,0.76968,0.09067,0.59232,0,0.45437,0,0,0.43378,0,0.20307,0.33895,0.27701,0.47267,0.4042,0.65567,0.47815,0.79643,0.3835,0.26434,0.54913,0.40652,0.70294,0.55995,0.74139,0.73309,0.68223,0.84851,0.49589,0.88652],"triangles":[9,16,17,7,23,6,6,23,22,7,8,23,8,17,23,8,9,17,23,17,22,17,16,20,9,15,16,22,21,5,5,21,4,6,22,5,22,17,21,21,3,4,21,20,3,21,17,20,20,2,3,20,1,2,10,11,15,9,10,15,16,19,20,16,15,19,11,14,15,20,19,1,15,18,19,15,14,18,18,0,19,14,12,18,19,0,1,11,12,14,18,13,0,18,12,13],"vertices":[1,72,6.46,54.38,1,3,72,81.16,71.38,0.44444,81,-48.25,63.29,0.22222,83,-139.02,14.95,0.33333,4,72,153.19,78.91,0.11111,81,24.17,63.45,0.22222,83,-68.83,32.78,0.55556,85,-164.71,-0.54,0.11111,3,81,107.4,63.41,0.11111,83,11.88,53.06,0.55556,85,-91.4,38.83,0.33333,3,83,121.76,30.57,0.33333,85,20.63,43.84,0.55556,86,21.73,110.19,0.11111,3,83,172.41,-33.05,0.11111,85,85.29,-5.49,0.55556,86,86.38,60.87,0.33333,2,85,131.19,-65.17,0.33333,86,132.28,1.18,0.66667,2,85,132.07,-84.78,0.11111,86,133.16,-18.43,0.88889,2,84,162.09,-83.14,0.11111,86,107.98,-45.51,0.88889,2,84,69.38,-95.65,0.33333,86,21.13,-80.27,0.66667,3,72,176.64,-120.35,0.11111,84,-22.21,-102.66,0.55556,86,-65.96,-109.43,0.33333,3,72,104.73,-117.23,0.44444,84,-93.82,-109.94,0.44444,86,-133.62,-133.96,0.11111,1,72,-108.1,-40.39,1,1,72,-73.19,56.31,1,2,81,-74.94,-58.45,0.83333,84,-140.48,-51.27,0.16667,3,81,-7.33,-71.53,0.66667,84,-71.73,-47.45,0.22222,86,-127.46,-67.98,0.11111,3,81,87.86,-83.89,0.33333,84,23.59,-36.19,0.33333,86,-37.78,-33.8,0.33333,3,81,158.62,-98.49,0.11111,84,95.78,-33.08,0.22222,86,31.46,-13.16,0.66667,2,81,-89.88,-3.81,0.83333,83,-163,-60.28,0.16667,3,81,-9.05,0.87,0.66667,83,-85.77,-36.02,0.22222,85,-164.34,-71.39,0.11111,3,81,75.6,0.58,0.33333,83,-3.61,-15.63,0.33333,85,-89.65,-31.56,0.33333,3,81,157.25,-28.6,0.11111,83,82.69,-23.99,0.22222,85,-3.93,-18.6,0.66667,2,83,136.19,-49.25,0.16667,85,54.11,-30.03,0.83333,2,84,140.57,-37.95,0.16667,86,76.08,-6.95,0.83333],"hull":14}},"Layer 74":{"armorgirl/Layer 74":{"type":"mesh","uvs":[0.70897,0.7891,0.6428,0.49787,0.15833,0.40629,0.2245,0.15535,0.61916,0.08758,0.88148,0.1407,1,0.32936,1,0.61876,1,0.92282,0.88385,1,0.76805,1],"triangles":[0,1,7,1,4,5,1,5,6,3,4,1,2,3,1,1,6,7,9,10,0,8,9,0,0,7,8],"vertices":[3,39,166.8,-92.65,0.33333,64,39.13,-44.27,0.33333,72,-49.8,-38.3,0.33333,1,26,79.14,-55.89,1,1,26,142.58,71.83,1,1,26,228.73,33,1,1,26,228.3,-82.59,1,1,26,192.68,-151.46,1,1,26,117.32,-169.21,1,2,39,141.41,8.51,0.5,64,-11.76,46.76,0.5,3,39,244.71,-35.28,0.11111,64,99.38,31.44,0.22222,72,24.88,23.23,0.66667,2,64,123.05,-5.36,0.22222,72,40.38,-17.69,0.77778,3,39,245.04,-107.47,0.11111,64,118.53,-38.17,0.22222,72,29.14,-48.84,0.66667],"hull":11}},"Layer 75":{"armorgirl/Layer 75":{"type":"mesh","uvs":[0.86632,0.12428,1,0.38338,1,0.69377,0.90163,0.8962,0.76039,1,0.66484,1,0.77493,0.79094,0.8227,0.53453,0.66484,0.26193,0.34497,0.17826,0.05002,0.27002,0.29097,0,0.63576,0],"triangles":[8,12,0,8,0,1,9,12,8,10,11,9,9,11,12,7,1,2,7,8,1,6,7,2,3,4,6,4,5,6,3,6,2],"vertices":[3,61,83.63,-13.62,0.33333,70,-82.34,16.9,0.11111,62,-6.36,-19.83,0.55556,3,40,112.66,6.75,0.11111,61,30.81,-29.69,0.55556,62,-49.99,13.98,0.33333,3,40,66.7,-23.34,0.44444,61,-21.74,-13.7,0.44444,62,-67.32,66.11,0.11111,1,40,24.34,-24.04,1,1,40,-8.82,-6.93,1,1,40,-20.86,11.45,1,3,40,23.96,10.54,0.66667,61,-23.12,40.82,0.22222,62,-23.63,98.75,0.11111,4,40,67.94,26.21,0.33333,61,17.09,17.1,0.33333,70,-61.86,87.28,0.11111,62,-19.74,52.23,0.22222,4,40,88.41,83,0.11111,61,73.81,37.79,0.22222,70,-32.96,34.28,0.33333,62,29.92,17.9,0.33333,3,61,109.39,103.85,0.11111,70,37.67,8.94,0.66667,62,104.4,27.05,0.22222,2,70,107.13,15.15,0.77778,62,163.64,63.85,0.22222,2,70,45.37,-24.08,0.66667,62,126.13,1.03,0.33333,3,61,120.1,30.7,0.11111,70,-33.08,-12.56,0.33333,62,50.89,-23.98,0.55556],"hull":13}},"Layer 76":{"armorgirl/Layer 76":{"type":"mesh","uvs":[1,0.51489,0.7327,0.34594,0.5198,0.47411,0.35623,0.75376,0.18487,1,0,1,0.14852,0.64889,0.3017,0.23525,0.49383,0,0.68337,0,0.91704,0,1,0],"triangles":[2,3,7,3,6,7,4,5,6,3,4,6,7,8,2,1,8,9,1,2,8,0,1,10,11,0,10,1,9,10],"vertices":[1,41,-13.31,6.4,1,3,41,37.59,10.91,0.4375,60,-13.4,23.89,0.45313,69,-59.55,39.09,0.10938,3,41,70.48,34.65,0.125,60,26.78,18.38,0.53125,69,-22.51,22.56,0.34375,2,60,63.42,27.85,0.33333,69,15.31,21.41,0.66667,2,60,100.31,34.23,0.10938,69,52.51,17.22,0.89063,1,69,78.93,-4.21,1,2,60,95.31,5.1,0.10938,69,39.57,-9.35,0.89063,2,60,56.18,-15.23,0.33333,69,-3.69,-17.93,0.66667,3,41,88.75,0,0.10938,60,16.11,-19.3,0.54688,69,-43.3,-10.63,0.34375,3,41,56.15,-12.38,0.375,60,-16.04,-5.78,0.51563,69,-70.38,11.34,0.10938,2,41,15.96,-27.65,0.77778,60,-55.67,10.9,0.22222,1,41,1.69,-33.07,1],"hull":12}},"Layer 77":{"armorgirl/Layer 77":{"type":"mesh","uvs":[0.92165,0.08911,1,0.40653,0.95859,0.73677,0.86501,1,0.83546,0.75922,0.64092,0.81693,0.39221,0.78807,0.15088,0.74318,0,0.65341,0,0.53157,0.08685,0.27187,0.30602,0.06026,0.49071,0,0.70741,0,0.89456,0.52516,0.87486,0.22698,0.24692,0.43859,0.42914,0.25584,0.51041,0.55722,0.61137,0.37767,0.6754,0.57325,0.75912,0.36485],"triangles":[3,4,2,6,18,5,5,20,4,5,18,20,4,14,2,4,20,14,18,19,20,18,17,19,2,14,1,20,21,14,20,19,21,1,14,15,14,21,15,15,0,1,19,13,21,21,13,15,15,13,0,18,6,16,6,7,16,16,7,9,7,8,9,9,10,16,16,10,17,16,17,18,10,11,17,17,11,12,19,17,13,13,17,12],"vertices":[1,53,-17.59,14.54,1,2,53,15.34,51.74,0.79432,59,-37.08,50.72,0.20568,2,53,61.76,69.92,0.40011,59,8.58,70.72,0.59989,2,53,104.76,74.31,0.3243,59,51.37,76.8,0.6757,2,53,76.82,51.08,0.32471,59,24.38,52.49,0.67529,1,59,52.11,25.48,1,2,68,38.53,49.57,0.41668,59,74.72,-17.35,0.58332,1,68,55.44,5.4,1,1,68,57.98,-26.68,1,1,68,42.11,-35.51,1,2,57,58.47,-38.26,0.3298,68,0.11,-39.59,0.6702,2,42,87.32,-26.59,0.15143,57,5.69,-34.27,0.84857,2,42,50.4,-27.46,0.84555,57,-27.28,-17.61,0.15445,1,42,9.39,-18.21,1,2,53,40.98,43.16,0.64747,59,-11.13,43.15,0.35253,1,53,4.71,17.21,1,2,57,51.25,0.85,0.22603,68,6.72,-0.38,0.77397,2,42,70.43,7.09,0.24388,57,6.7,3.4,0.75612,3,57,24.17,47.67,0.1335,68,-2.67,52.89,0.1305,59,33.39,-16.8,0.736,3,42,39.94,32.58,0.10382,53,50.09,-15.31,0.47929,59,0.29,-14.9,0.41689,1,59,18,11.36,1,1,53,33.83,8.37,1],"hull":14}},"Layer 78":{"armorgirl/Layer 78":{"type":"mesh","uvs":[1,0.11899,0.80052,0.3588,0.91307,0.50369,1,0.6156,1,0.78366,0.46308,1,0.19767,0.90262,0,0.70246,0,0.43622,0.23559,0.20585,0.37208,0,0.69436,0,0.49341,0.22662,0.31142,0.44755,0.34554,0.64204,0.60715,0.80254],"triangles":[14,1,2,15,2,3,15,14,2,4,15,3,5,15,4,7,13,14,6,7,14,6,14,15,5,6,15,8,9,13,1,14,13,7,8,13,12,10,11,9,10,12,1,11,0,12,11,1,13,9,12,1,13,12],"vertices":[1,58,-60.89,59.06,1,3,58,4.74,56.96,0.58101,67,-38.8,56.8,0.13461,75,-61,40.52,0.28439,1,75,-21.76,42.83,1,1,75,8.54,44.61,1,2,74,41.46,75.83,0.11772,75,49.03,31.62,0.88228,2,74,72.92,-5.31,0.25019,75,80.48,-49.52,0.74981,4,58,160.28,34.44,0.14558,67,108.24,1.31,0.11347,74,39.24,-29.63,0.17813,75,46.8,-73.84,0.56282,4,58,121.69,-6.74,0.29778,67,61.69,-30.58,0.13872,74,-16.59,-37.87,0.14577,75,-9.02,-82.08,0.41773,4,58,58.67,-30.51,0.52863,67,-4.98,-40.22,0.13951,74,-80.73,-17.3,0.11036,75,-73.16,-61.51,0.22149,2,58,-6.34,-23.3,0.89169,75,-119.59,-15.44,0.10831,1,58,-61.14,-25.59,1,1,58,-75.47,12.4,1,2,58,-12.89,8.95,0.84823,67,-66.36,13.71,0.15177,4,58,47.5,7.22,0.47371,67,-7.76,-0.98,0.1925,74,-66.01,19.19,0.11561,75,-58.45,-25.02,0.21817,4,58,92.02,28.61,0.24136,67,40.33,10.32,0.13652,74,-17.84,8.25,0.10545,75,-10.28,-35.96,0.51667,3,58,118.39,73.78,0.137,74,30.89,27.24,0.12308,75,38.46,-16.97,0.73992],"hull":12}},"Layer 79":{"armorgirl/Layer 79":{"type":"mesh","uvs":[0.86271,0.06676,1,0.20997,1,0.372,1,0.52254,0.73566,0.65739,0.85763,0.77969,1,0.8696,1,1,0.55778,0.97622,0.25285,0.92291,0.14612,0.79119,0,0.6438,0,0.49222,0.10038,0.33646,0.19694,0.22461,0.25793,0.09708,0.11563,0,0.61877,0,0.84747,0.94695,0.695,0.87378,0.53745,0.76192,0.46122,0.59676,0.66451,0.43473,0.39007,0.81419,0.2376,0.63857,0.30875,0.44518,0.46775,0.88924],"triangles":[15,17,22,22,17,0,22,0,1,15,16,17,25,14,15,8,18,7,8,19,18,18,6,7,9,26,8,9,23,26,8,26,19,18,5,6,18,19,5,9,10,23,26,20,19,26,23,20,19,20,5,20,4,5,10,24,23,10,11,24,20,21,4,23,24,21,23,21,20,11,12,24,21,22,4,24,12,25,24,25,21,13,14,25,4,22,3,25,12,13,21,25,22,22,2,3,22,25,15,2,22,1],"vertices":[1,44,17.06,37.52,1,1,44,83.68,40.95,1,2,66,-10.38,52.82,0.79032,44,156.97,30.38,0.20968,2,66,57.26,65.35,0.45368,73,-30.86,69.02,0.54632,4,66,122.38,52.14,0.23117,73,31.59,46.33,0.30092,78,-21.67,30.23,0.28998,80,-76.24,64.51,0.17794,3,73,87.05,59.72,0.10467,78,35.39,30.95,0.3932,80,-23.52,42.7,0.50213,1,80,18.01,30.77,1,1,80,67.38,-2.61,1,1,80,35.09,-30.96,1,2,78,88.94,-37.22,0.31088,80,-1.15,-41.06,0.68912,2,78,27.94,-35.72,0.6964,80,-56.63,-15.65,0.3036,4,66,128.87,-16.99,0.16705,73,27.78,-23,0.37845,78,-40.8,-36.51,0.33273,80,-120.12,10.71,0.12176,2,66,60.75,-29.6,0.39984,73,-41.45,-25.4,0.60016,2,66,-10.96,-33.29,0.83703,44,128.82,-51,0.16297,1,44,79.53,-34.72,1,1,44,22.66,-20.72,1,1,44,-23.16,-27.63,1,1,44,-16.41,19.18,1,1,80,39.26,-0.91,1,1,80,3.53,5.95,1,3,73,79.98,29.36,0.12971,78,21.74,2.92,0.31167,80,-47.11,22.32,0.55862,3,66,99.83,21.73,0.25055,73,4.79,19.58,0.30857,78,-53.74,10.12,0.44088,2,66,23.54,27.03,0.77683,73,-69.88,36.11,0.22317,2,78,42.58,-15.18,0.45967,80,-35.08,-2.54,0.54033,4,66,122.45,4.54,0.24472,73,24.62,-0.76,0.30188,78,-38.94,-14.13,0.29643,80,-109.59,30.55,0.15697,2,66,34.33,-4.98,0.78466,73,-63.94,2.86,0.21534,1,80,-2.58,-15.7,1],"hull":18}},"Layer 80":{"armorgirl/Layer 80":{"type":"mesh","uvs":[1,0.16977,1,0.58014,0.87686,0.77907,0.66261,0.9307,0.3906,1,0.25086,1,0.14839,0.90288,0.03102,0.76377,0,0.59266,0.06642,0.16003,0.32911,0,0.72223,0,0.03288,0.39652,0.35892,0.24906,0.2993,0.53145,0.21547,0.63022,0.27322,0.72482,0.26577,0.81663,0.56386,0.79437,0.72036,0.5245,0.71291,0.20037],"triangles":[20,10,11,20,11,0,13,10,20,9,10,13,12,9,13,19,20,0,13,20,19,14,12,13,14,13,19,19,0,1,12,8,9,15,8,12,14,15,12,16,15,14,7,8,15,7,15,16,2,19,1,18,14,19,18,19,2,16,14,18,17,7,16,17,16,18,6,7,17,3,18,2,5,6,17,5,17,18,4,5,18,4,18,3],"vertices":[139.35,-109.59,49.27,-89.3,10.15,-59.29,-15.23,-16.68,-20.4,31.33,-15.24,54.23,9.86,66.22,44.72,78.58,83.43,75.21,175.94,42.94,201.37,-8.02,186.87,-72.45,125.27,60.13,145.6,-0.6,85.82,23.13,67.23,41.75,44.33,36.96,24.46,42.72,18.34,-7.23,71.8,-46.22,143.23,-61.02],"hull":12}},"Layer 81":{"armorgirl/Layer 81":{"type":"mesh","uvs":[1,1,0.2941,1,0,1,0,0,0.6466,0,1,0,0.2001,0.45902,0.60743,0.14901],"triangles":[7,3,4,6,3,7,2,3,6,0,1,6,2,6,1,7,4,5,0,7,5,0,6,7],"vertices":[-33.33,-13.39,-26.81,15.54,-24.1,27.59,26.63,16.16,20.67,-10.33,17.4,-24.81,1.5,13.21,13.47,-7.02],"hull":6}},"Layer 82":{"armorgirl/Layer 82":{"type":"mesh","uvs":[1,1,0.37291,1,0,1,0,0,0.44126,0,1,0],"triangles":[1,2,3,4,1,3,4,5,0,1,4,0],"vertices":[-74.73,-78.14,-52.83,19.14,-39.8,76.98,44.1,58.09,28.69,-10.36,9.17,-97.03],"hull":6}},"Layer 84":{"armorgirl/Layer 84":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[-86.02,-82.77,-50.66,74.3,35.19,54.97,-0.17,-102.1],"hull":4}},"Layer 85":{"armorgirl/Layer 85":{"type":"mesh","uvs":[0.41346,0.1743,0.88406,0.25305,1,0.69776,0.71707,1,0.25027,1,0,0.73018,0,0.45688],"triangles":[5,6,0,4,5,0,3,4,0,0,2,3,2,0,1],"vertices":[26.33,-1.58,12.52,-38.51,-19.09,-41.25,-33.99,-13.83,-25.48,23.97,-3.01,40.21,15.12,36.12],"hull":7},"armorgirl/Layer 851":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[-43.71,-27.86,-22.35,43.49,43.02,24.88,21.66,-46.47],"hull":4}},"Layer 86":{"armorgirl/Layer 86":{"x":23.5,"y":2.29,"rotation":-1.57,"width":73,"height":24}},"Layer 87":{"armorgirl/Layer 87":{"type":"mesh","uvs":[1,0.43028,0.72036,1,0.36598,1,0,0.7509,0,0.32903,0.36598,0],"triangles":[4,2,3,5,2,4,5,0,2,1,2,0],"vertices":[1.29,-22.34,-26.88,-2.24,-23.15,14.36,-5.68,28.43,17.37,23.24,31.49,2.05],"hull":6},"armorgirl/Layer 871":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[-33.25,-9.66,-19.59,36.36,34.09,20.42,20.43,-25.59],"hull":4}},"Layer 88":{"armorgirl/Layer 88":{"x":16.06,"y":-2.17,"rotation":-142.02,"width":40,"height":32}},"Layer 89":{"armorgirl/Layer 89":{"type":"mesh","uvs":[1,0.41565,1,0.5663,1,0.76488,0.64921,1,0.16359,1,0,0.53891,0.11765,0.40195,0,0.16913,0.1439,0,0.67546,0,0.34052,0.34728,0.67844,0.56217,0.56366,0.38479,0.49679,0.59181,0.30285,0.54994],"triangles":[10,8,9,7,8,10,12,10,9,6,7,10,12,9,0,14,6,10,11,12,0,10,12,11,11,0,1,13,10,11,14,10,13,11,1,2,14,5,6,4,5,14,4,14,13,3,13,11,3,11,2,4,13,3],"vertices":[-4.28,-26.95,-11.04,-25.43,-19.96,-23.42,-26.81,-4.62,-21.69,18.12,0.73,21.13,5.64,14.23,17.32,17.39,23.4,8.94,17.79,-15.95,5.74,3.24,-7.47,-10.41,1.7,-6.83,-6.88,-1.6,-2.96,7.06],"hull":10}},"Layer 90":{"armorgirl/Layer 90":{"type":"mesh","uvs":[0.72202,0,0.76658,0.01533,0.82912,0.03685,1,0.15265,0.47693,0.87753,0.09183,1,0,0.91879,0,0.78996,0.2801,0.09148,0.26127,0.04116,0.55223,0,0.31604,0.12872,0.44612,0.27768],"triangles":[8,9,10,1,8,10,1,10,0,11,8,1,11,1,2,12,11,2,12,2,3,7,8,11,6,7,11,4,12,3,12,6,11,12,5,6,4,5,12],"vertices":[-135.4,26.01,-130.28,44.09,-123.09,69.46,-69.28,147.64,412.81,75.76,521.33,-40.94,481.04,-85.9,403.84,-105.88,-40.27,-115.53,-68.71,-129.97,-119.91,-33.82,-21.23,-97.09,56.16,-28.14],"hull":11}},"Layer 91":{"armorgirl/Layer 91":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[98.02,67.29,105.46,-44.46,-53.18,-55.03,-60.63,56.72],"hull":4}},"Layer 92":{"armorgirl/Layer 92":{"type":"mesh","uvs":[1,0.20499,0.70391,0.51834,0.69438,0.75894,0.56914,0.9366,0.39626,1,0.23019,1,0.1594,0.97717,0.12129,0.86526,0.25605,0.75475,0.33092,0.76174,0.45207,0.71698,0.50516,0.61346,0.46432,0.55751,0.34453,0.54772,0.22746,0.63025,0.23291,0.75475,0.08453,0.85826,0,0.78272,0,0.66102,0,0.53792,0.04778,0.39384,0.20841,0.28053,0.40171,0.24416,0.51333,0.28473,0.8305,0,0.96799,0,1,0,0.5705,0.39664,0.43301,0.35047,0.2615,0.39664,0.11992,0.49316,0.04642,0.68061,0.28736,0.83868,0.37448,0.85407,0.5038,0.78692,0.54328,0.65962,0.51469,0.5715],"triangles":[25,26,0,28,22,23,29,21,22,29,22,28,20,21,29,27,23,24,28,23,27,27,24,25,30,20,29,0,1,27,0,27,25,19,20,30,13,29,28,30,29,13,12,28,27,36,12,27,13,28,12,1,36,27,11,12,36,14,30,13,35,36,1,11,36,35,31,18,19,30,31,19,14,31,30,10,11,35,31,14,15,2,35,1,17,18,31,34,10,35,34,35,2,32,8,9,33,9,10,33,10,34,32,9,33,16,31,15,17,31,16,3,34,2,33,34,3,32,6,7,32,7,8,5,6,32,4,33,3,32,33,4,5,32,4],"vertices":[18.54,100.59,334.56,89.41,468.5,201.02,626.39,218.21,746.72,153.61,829.61,61.98,852.68,11.84,811.62,-63.55,685.02,-42.87,651.41,1.84,566.9,46.94,484.83,25.96,475.17,-23.75,529.7,-94.6,632.44,-119.11,696.57,-55.63,826.21,-87.22,827.84,-170.55,762.5,-229.66,696.4,-289.45,595.2,-333.07,454.19,-299.48,338.18,-210.49,304.25,-129.2,-6.93,-92.49,-75.55,-16.63,-91.53,1.03,335.8,-43.3,379.64,-141.58,490.03,-213.79,612.51,-245.02,749.84,-194.54,714.46,15.17,679.24,70.72,578.64,109.46,490.59,69.41,457.54,10.83],"hull":27}},"Layer 93":{"armorgirl/Layer 93":{"type":"mesh","uvs":[0.56763,0.24616,0.5579,0.43351,0.71046,0.5819,0.86952,0.70247,1,0.78965,1,1,0.62931,1,0.5157,0.89353,0.51245,0.80449,0.32418,0.68949,0.15213,0.54851,0.05151,0.33334,0.07098,0.14971,0.44428,0,0.65852,0],"triangles":[6,3,5,3,4,5,3,6,8,3,8,2,8,6,7,2,8,1,8,9,1,9,10,1,10,11,1,1,11,0,0,11,12,0,12,13,0,13,14],"vertices":[1,8,75.15,76.36,1,2,8,177.27,82.95,0.16747,12,26.58,65.11,0.83253,2,12,120.56,65.48,0.76523,23,-30.62,68.27,0.23477,1,23,51.71,72.84,1,1,23,113.93,80.15,1,1,23,209.35,16.19,1,1,23,144.94,-79.89,1,1,23,76.9,-76.97,1,1,23,35.95,-50.74,1,2,12,110.69,-68.25,0.88095,23,-48.93,-64.57,0.11905,2,8,251.69,-37.18,0.15407,12,17.15,-75.91,0.84593,1,8,137.67,-79.49,1,1,8,37.28,-82.86,1,1,8,-55.05,25.41,1,1,8,-61.33,91.96,1],"hull":15}},"Layer 94":{"armorgirl/Layer 94":{"x":217.35,"y":13.61,"rotation":93.82,"width":93,"height":127}},"Layer 95":{"armorgirl/Layer 95":{"type":"mesh","uvs":[1,0.37744,0.78568,0.55015,0.57649,1,0.21963,1,0,1,0,0.90436,0.10888,0.35987,0,0,0.59289,0,1,0,0.36319,0.35402],"triangles":[10,7,8,6,7,10,8,9,0,1,10,8,0,1,8,3,4,5,3,6,10,2,3,10,3,5,6,1,2,10],"vertices":[33.95,84.1,81.51,58.55,191.98,48.73,205.67,-9.27,214.1,-44.96,192.32,-50.1,64.14,-61.68,-13.64,-98.73,-36.39,-2.36,-52.01,63.81,53.05,-20.66],"hull":10}},"Layer 96":{"armorgirl/Layer 96":{"type":"mesh","uvs":[1,0.8766,0.79176,1,0.42533,1,0.11997,0.92629,0,0.79378,0,0.47906,0.20619,0.28581,0.46485,0.1533,0.68398,0,1,0,0.23852,0.65851,0.40377,0.42937,0.69476,0.26373,0.50436,0.75789,0.78457,0.64746],"triangles":[1,14,0,12,8,9,14,9,0,13,14,1,4,5,10,3,4,10,2,10,13,3,10,2,2,13,1,7,8,12,11,6,7,11,7,12,14,12,9,11,12,14,10,6,11,13,11,14,5,6,10,10,11,13],"vertices":[1,11,-25.72,50.14,1,2,30,48.27,92.11,0.66667,11,-49.34,83.67,0.33333,1,30,84.2,47.65,1,1,30,102.51,1.19,1,2,21,158.32,-55.88,0.11111,30,93.35,-30.27,0.88889,2,21,99.75,-81.4,0.33333,30,43.67,-70.43,0.66667,2,21,50.94,-67.58,0.66667,30,-7.06,-70.07,0.33333,3,21,10.16,-41.33,0.55556,30,-53.35,-55.6,0.11111,11,124.58,127.21,0.33333,1,11,154.19,91.72,1,1,11,152.07,42.46,1,2,21,118.28,-32.73,0.65278,30,48.61,-18.59,0.34722,2,21,65.34,-27.68,0.76852,30,-3.77,-27.78,0.23148,1,21,16.38,0.5,1,2,21,120.21,13.34,0.5,30,38.23,26.34,0.5,2,21,82.2,44.46,0.5,30,-6.68,46.25,0.5],"hull":10}},"Layer 97":{"armorgirl/Layer 97":{"type":"mesh","uvs":[1,0.12219,0.69443,0.37056,0.57113,0.49156,0.56366,0.73674,0.44784,0.87048,0.45158,1,0.32829,1,0.10785,1,0.0817,0.90232,0,0.85137,0,0.68261,0.0817,0.47245,0.33949,0.35464,0.53377,0.21772,0.82145,0,1,0,0.26104,0.81953,0.37686,0.63485,0.40301,0.44698,0.6197,0.29414],"triangles":[19,14,15,19,13,14,0,19,15,1,19,0,18,12,13,18,13,19,2,18,19,2,19,1,18,11,12,17,18,2,17,11,18,10,11,17,3,17,2,16,10,17,8,9,10,4,17,3,16,17,4,16,8,10,7,8,16,6,16,4,7,16,6,6,4,5],"vertices":[-30.39,2.62,28,-21.94,54.91,-30.39,94.91,-14.18,123.43,-20.71,144.11,-11.09,151.49,-28.04,164.7,-58.35,150.51,-68.82,147.18,-83.63,119.95,-95.5,81.15,-99.04,46.69,-71.87,12.96,-54.78,-39.41,-30.53,-50.1,-5.97,126.4,-49.98,89.67,-47.03,57.79,-56.64,20.14,-37.59],"hull":16}},"Layer 98":{"armorgirl/Layer 98":{"type":"mesh","uvs":[1,0.32854,1,0.6285,0.87248,0.86532,0.45407,1,0.21747,0.86401,0,0.73901,0,0.33643,0.40349,0,0.80811,0.03158,0.65178,0.71139,0.8265,0.36406,0.63798,0.07199],"triangles":[11,7,8,10,8,0,11,8,10,10,0,1,9,11,10,9,10,1,5,6,4,7,9,6,11,9,7,9,4,6,2,9,1,3,4,9,3,9,2],"vertices":[189.12,-1.17,155.25,0.28,129.04,13.78,115.57,54.98,131.91,77.25,146.92,97.73,192.37,95.78,228.68,55.05,223.44,15.99,147.34,34.43,185.82,15.82,219.58,32.67],"hull":9}},"Layer 99":{"armorgirl/Layer 99":{"type":"mesh","uvs":[0.65084,0.23617,0.80172,0.42011,1,0.58105,0.88794,0.81096,0.92027,1,0.69395,1,0.10658,1,0.13892,0.85407,0,0.72187,0,0.50058,0.18741,0.38274,0.1928,0.22755,0.11197,0,0.48379,0,0.59695,0,0.50534,0.23617,0.65623,0.42585,0.79633,0.60116,0.65084,0.80809,0.39189,0.39842,0.40242,0.79337],"triangles":[11,12,13,15,13,14,11,13,15,15,14,0,19,11,15,10,11,19,16,0,1,15,0,16,17,16,1,17,1,2,8,9,10,16,20,19,16,19,15,18,20,16,17,18,16,3,17,2,18,17,3,7,8,10,5,18,3,20,18,5,10,19,20,7,10,20,6,7,20,6,20,5,5,3,4],"vertices":[5.42,15.58,40.71,32.53,71.34,54.26,116.56,44.2,153.28,48.87,154.12,25.34,156.28,-35.7,127.72,-33.35,102.47,-48.71,59.35,-50.24,35.69,-31.57,5.43,-32.08,-38.61,-42.06,-39.99,-3.42,-40.4,8.35,5.96,0.46,42.37,17.45,76.01,33.23,116.88,19.54,38,-10.21,114.92,-6.39],"hull":15}}}}],"animations":{"animation":{"slots":{"Layer 85":{"attachment":[{"name":"armorgirl/Layer 85"},{"time":1.5667,"name":"armorgirl/Layer 851"},{"time":1.6,"name":"armorgirl/Layer 85"}]},"Layer 87":{"attachment":[{"name":"armorgirl/Layer 87"},{"time":1.5667,"name":"armorgirl/Layer 871"},{"time":1.6,"name":"armorgirl/Layer 87"}]},"Layer 113":{"color":[{"color":"ffffffff","curve":0.25,"c3":0.75},{"time":1,"color":"ffffff2c","curve":0.25,"c3":0.75},{"time":2,"color":"ffffffff"}]},"Layer 114":{"color":[{"color":"ffffffff","curve":0.25,"c3":0.75},{"time":1,"color":"ffffff0e","curve":0.25,"c3":0.75},{"time":2,"color":"ffffffff"}]},"Layer 115":{"color":[{"color":"ffffffff","curve":0.264,"c2":0.06,"c3":0.752},{"time":1,"color":"ffffff00","curve":0.25,"c3":0.75},{"time":2,"color":"ffffffff"}]},"Layer 116":{"color":[{"color":"ffffffff","curve":0.25,"c3":0.75},{"time":1,"color":"ffffff96","curve":0.25,"c3":0.75},{"time":2,"color":"ffffffff"}]},"Layer 117":{"color":[{"color":"ffffffff","curve":0.25,"c3":0.75},{"time":1,"color":"ffffff6a","curve":0.25,"c3":0.75},{"time":2,"color":"ffffffff"}]},"Layer 118":{"color":[{"color":"ffffff6a","curve":0.25,"c3":0.75},{"time":1,"color":"ffffffff","curve":0.25,"c3":0.75},{"time":2,"color":"ffffff6a"}]},"Layer 119":{"color":[{"color":"ffffff6a","curve":0.25,"c3":0.75},{"time":1,"color":"ffffffff","curve":0.25,"c3":0.75},{"time":2,"color":"ffffff6a"}]},"Layer 120":{"color":[{"color":"ffffff6a","curve":0.25,"c3":0.75},{"time":1,"color":"ffffffff","curve":0.25,"c3":0.75},{"time":2,"color":"ffffff6a"}]},"Layer 121":{"color":[{"color":"ffffffff","curve":0.25,"c3":0.75},{"time":1,"color":"ffffff94","curve":0.25,"c3":0.75},{"time":2,"color":"ffffffff"}]},"Layer 122":{"color":[{"color":"ffffffff","curve":0.25,"c3":0.75},{"time":1,"color":"ffffff3f","curve":0.25,"c3":0.75},{"time":2,"color":"ffffffff"}]},"Layer 123":{"color":[{"color":"ffffff28","curve":0.25,"c3":0.75},{"time":1,"color":"ffffffff","curve":0.25,"c3":0.75},{"time":2,"color":"ffffff28"}]},"Layer 124":{"color":[{"color":"ffffffff","curve":0.25,"c3":0.75},{"time":1,"color":"ffffff6a","curve":0.25,"c3":0.75},{"time":2,"color":"ffffffff"}]},"Layer 125":{"color":[{"color":"ffffffff","curve":0.25,"c3":0.75},{"time":1,"color":"ffffff6a","curve":0.25,"c3":0.75},{"time":2,"color":"ffffffff"}]}},"bones":{"center":{"rotate":[{"angle":10.91,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"angle":11.16,"curve":0.25,"c3":0.75},{"time":1.1667,"angle":9.17,"curve":0.25,"c3":0.75},{"time":2,"angle":10.91}],"translate":[{"x":-2.28,"y":10.01,"curve":0.311,"c2":0.25,"c3":0.757},{"time":0.8333,"x":-23.66,"y":103.8,"curve":0.25,"c3":0.75},{"time":1.8333,"curve":0.29,"c3":0.629,"c4":0.38},{"time":2,"x":-2.28,"y":10.01}]},"Layer 108":{"rotate":[{"angle":6.56,"curve":0.352,"c2":0.65,"c3":0.687},{"time":0.0667,"angle":6.33,"curve":0.25,"c3":0.75},{"time":1.0667,"angle":-4.19,"curve":0.246,"c3":0.723,"c4":0.88},{"time":2,"angle":6.56}],"translate":[{"x":2.91,"y":-8.71,"curve":0.354,"c2":0.65,"c3":0.688},{"time":0.0667,"x":3.43,"y":-8.95,"curve":0.25,"c3":0.75},{"time":1.1333,"x":-27.95,"y":3.29,"curve":0.246,"c3":0.721,"c4":0.87},{"time":2,"x":2.91,"y":-8.71}]},"Layer 104":{"rotate":[{"angle":-3.36,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.5,"angle":0.02,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-9.75,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"angle":-3.36}]},"Layer 106":{"rotate":[{"angle":-2.37,"curve":0.351,"c2":0.4,"c3":0.757},{"time":0.6667,"angle":10.71,"curve":0.25,"c3":0.75},{"time":1.6667,"angle":-7.55,"curve":0.265,"c3":0.618,"c4":0.43},{"time":2,"angle":-2.37}]},"Layer 103":{"rotate":[{"angle":8.97,"curve":0.25,"c3":0.75},{"time":1,"angle":0.93,"curve":0.25,"c3":0.75},{"time":2,"angle":8.97}],"translate":[{"x":4.01,"y":-10.74,"curve":0.344,"c2":0.66,"c3":0.677},{"time":0.0333,"x":3.98,"y":-10.85,"curve":0.25,"c3":0.75},{"time":1.0333,"x":5.99,"y":-1.26,"curve":0.248,"c3":0.736,"c4":0.94},{"time":2,"x":4.01,"y":-10.74}]},"bone":{"rotate":[{"angle":-17.29,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"angle":-16.88,"curve":0.25,"c3":0.75},{"time":1.1667,"angle":-19.19,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"angle":-17.29}]},"bone2":{"rotate":[{"angle":-9.89,"curve":0.25,"c3":0.75},{"time":1.1667,"angle":-8.57,"curve":0.25,"c3":0.75},{"time":2,"angle":-9.89}]},"Layer 80":{"rotate":[{"angle":13.52,"curve":0.25,"c3":0.75},{"time":1,"angle":11.08,"curve":0.25,"c3":0.75},{"time":2,"angle":13.52}],"translate":[{"x":-4.23,"y":5.82,"curve":0.25,"c3":0.75},{"time":1,"x":-4.13,"y":25.09,"curve":0.25,"c3":0.75},{"time":2,"x":-4.23,"y":5.82}]},"Layer 91":{"rotate":[{"angle":4.77,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"angle":5.78,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-2.96,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"angle":4.77}],"translate":[{"x":0.47,"y":0.84,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"x":0.35,"y":3.37,"curve":0.25,"c3":0.75},{"time":1.1667,"x":1.6,"y":-22.77,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"x":0.47,"y":0.84}]},"Layer 95":{"rotate":[{"angle":0.95,"curve":0.351,"c2":0.4,"c3":0.757},{"time":0.6667,"angle":3.07,"curve":0.25,"c3":0.75},{"time":1.6667,"angle":0.55,"curve":0.265,"c3":0.618,"c4":0.43},{"time":2,"angle":0.95}]},"Layer 92":{"rotate":[{"angle":-19.89,"curve":0.25,"c3":0.75},{"time":1,"angle":-3.44,"curve":0.25,"c3":0.75},{"time":2,"angle":-19.89}]},"Layer 70":{"rotate":[{"angle":3.54,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"angle":2.57,"curve":0.25,"c3":0.75},{"time":1.1667,"angle":12.55,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"angle":3.54}],"translate":[{"x":-0.17,"y":3.04,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"curve":0.25,"c3":0.75},{"time":1.1667,"x":-1.76,"y":31.47,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"x":-0.17,"y":3.04}]},"Layer 69":{"rotate":[{"angle":-1.62,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"angle":-0.17,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-6.11,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"angle":-1.62}],"translate":[{"x":21.84,"y":18.58}]},"Layer 68":{"rotate":[{"angle":8.87,"curve":0.25,"c3":0.75},{"time":1,"angle":-6.97,"curve":0.25,"c3":0.75},{"time":2,"angle":8.87}]},"Layer 90":{"rotate":[{"angle":-3.86,"curve":0.25,"c3":0.75},{"time":1,"angle":2.12,"curve":0.25,"c3":0.75},{"time":2,"angle":-3.86}],"translate":[{},{"time":1,"x":-0.49,"y":3.13},{"time":2}]},"Layer 66":{"rotate":[{"angle":-8.07,"curve":0.378,"c2":0.61,"c3":0.722},{"time":0.2333,"angle":-8.4,"curve":0.25,"c3":0.75},{"time":1.2333,"angle":1.48,"curve":0.242,"c3":0.671,"c4":0.68},{"time":2,"angle":-8.07}],"translate":[{"x":36.41,"y":-15.11,"curve":0.378,"c2":0.61,"c3":0.722},{"time":0.2333,"x":39.62,"y":-10.78,"curve":0.25,"c3":0.75},{"time":1.2333,"x":20.31,"y":-36.8,"curve":0.242,"c3":0.671,"c4":0.68},{"time":2,"x":36.41,"y":-15.11}]},"Layer 93":{"rotate":[{"angle":-10.36,"curve":0.378,"c2":0.61,"c3":0.722},{"time":0.2333,"angle":-8.35,"curve":0.25,"c3":0.75},{"time":1.2333,"angle":-20.41,"curve":0.242,"c3":0.671,"c4":0.68},{"time":2,"angle":-10.36}],"translate":[{"x":-13.62,"y":-0.6,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"curve":0.25,"c3":0.75},{"time":1.3333,"x":-48.01,"y":-2.11,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"x":-13.62,"y":-0.6}]},"bone20":{"rotate":[{"angle":-21.86,"curve":0.372,"c2":0.48,"c3":0.752},{"time":0.5333,"angle":-8.68,"curve":0.25,"c3":0.75},{"time":1.5333,"angle":-32.91,"curve":0.252,"c3":0.622,"c4":0.48},{"time":2,"angle":-21.86}]},"bone21":{"rotate":[{"angle":-12.88,"curve":0.311,"c2":0.25,"c3":0.757},{"time":0.8333,"angle":20.35,"curve":0.25,"c3":0.75},{"time":1.8333,"angle":-16.43,"curve":0.29,"c3":0.629,"c4":0.38},{"time":2,"angle":-12.88}]},"Layer 112":{"rotate":[{"angle":-2.34,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-8.24,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"angle":-2.34}]},"bone22":{"rotate":[{"angle":15.99,"curve":0.351,"c2":0.4,"c3":0.757},{"time":0.6667,"angle":23.5,"curve":0.25,"c3":0.75},{"time":1.6667,"angle":13.01,"curve":0.265,"c3":0.618,"c4":0.43},{"time":2,"angle":15.99}]},"Layer 96":{"rotate":[{"angle":6.42,"curve":0.25,"c3":0.75},{"time":0.5,"angle":11.71,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-7.76,"curve":0.25,"c3":0.75},{"time":2,"angle":6.42}],"translate":[{"x":0.09,"y":-1.28,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"curve":0.25,"c3":0.75},{"time":1.1667,"x":0.89,"y":-9.83,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"x":0.09,"y":-1.28}]},"bone28":{"rotate":[{"angle":-1.65,"curve":0.311,"c2":0.25,"c3":0.757},{"time":0.8333,"angle":7.48,"curve":0.25,"c3":0.75},{"time":1.8333,"angle":-1.79,"curve":0.29,"c3":0.629,"c4":0.38},{"time":2,"angle":-1.65}]},"Layer 100":{"rotate":[{"angle":4.02,"curve":0.381,"c2":0.55,"c3":0.742},{"time":0.3333,"angle":-352.06,"curve":0.25,"c3":0.75},{"time":1.1667,"angle":-10.15},{"time":1.5,"angle":-10.01,"curve":0.245,"c3":0.637,"c4":0.56},{"time":2,"angle":4.02}],"translate":[{"x":-0.1,"y":1.35,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"curve":0.25,"c3":0.75},{"time":1.1667,"x":-1.02,"y":14,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"x":-0.1,"y":1.35}]},"bone27":{"rotate":[{"angle":-10.45,"curve":0.32,"c2":0.29,"c3":0.757},{"time":0.8,"curve":0.25,"c3":0.75},{"time":1.8,"angle":-12.01,"curve":0.284,"c3":0.625,"c4":0.38},{"time":2,"angle":-10.45}]},"Layer 118":{"translate":[{"x":3.47,"y":4.35},{"time":1,"x":-0.2,"y":-13.7},{"time":2,"x":3.47,"y":4.35}],"scale":[{"x":0.833,"y":0.552},{"time":1,"x":1.132,"y":1.132},{"time":2,"x":0.833,"y":0.552}]},"Layer 119":{"translate":[{"x":3.91,"y":0.44,"curve":0.25,"c3":0.75},{"time":1,"x":-0.03,"y":-3.11,"curve":0.25,"c3":0.75},{"time":2,"x":3.91,"y":0.44}],"scale":[{"x":0.77,"y":0.439,"curve":0.25,"c3":0.75},{"time":1,"x":1.301,"y":1.057,"curve":0.25,"c3":0.75},{"time":2,"x":0.77,"y":0.439}]},"Layer 120":{"translate":[{"x":-9.02,"y":0.97,"curve":0.25,"c3":0.75},{"time":1,"x":-11.8,"y":-19.97,"curve":0.25,"c3":0.75},{"time":2,"x":-9.02,"y":0.97}],"scale":[{"y":0.796,"curve":0.25,"c3":0.75},{"time":1,"x":1.268,"y":1.268,"curve":0.25,"c3":0.75},{"time":2,"y":0.796}]},"Layer 123":{"translate":[{"x":2.93,"y":0.39,"curve":0.25,"c3":0.75},{"time":1,"x":-14.07,"y":5.46,"curve":0.25,"c3":0.75},{"time":2,"x":2.93,"y":0.39}],"scale":[{"x":1.197,"y":1.197,"curve":0.25,"c3":0.75},{"time":1,"x":1.22,"y":0.614,"curve":0.25,"c3":0.75},{"time":2,"x":1.197,"y":1.197}]},"Layer 124":{"translate":[{"x":3.77,"y":1.49,"curve":0.25,"c3":0.75},{"time":1,"x":-5.85,"y":2.66,"curve":0.25,"c3":0.75},{"time":2,"x":3.77,"y":1.49}],"scale":[{"x":1.437,"y":1.437,"curve":0.25,"c3":0.75},{"time":1,"x":1.156,"y":0.568,"curve":0.25,"c3":0.75},{"time":2,"x":1.437,"y":1.437}]},"Layer 125":{"translate":[{"x":3.64,"y":2.47,"curve":0.25,"c3":0.75},{"time":1,"x":-7.5,"y":5.23,"curve":0.25,"c3":0.75},{"time":2,"x":3.64,"y":2.47}],"scale":[{"x":1.344,"y":1.344,"curve":0.25,"c3":0.75},{"time":1,"x":1.047,"y":0.393,"curve":0.25,"c3":0.75},{"time":2,"x":1.344,"y":1.344}]},"Layer 116":{"translate":[{"x":22.37,"y":-0.37,"curve":0.25,"c3":0.75},{"time":1,"x":-15.53,"y":-30.2,"curve":0.25,"c3":0.75},{"time":2,"x":22.37,"y":-0.37}],"scale":[{"x":1.022,"y":1.022,"curve":0.25,"c3":0.75},{"time":1,"y":0.7,"curve":0.25,"c3":0.75},{"time":2,"x":1.022,"y":1.022}]},"Layer 117":{"translate":[{"x":24.98,"y":8.97,"curve":0.25,"c3":0.75},{"time":1,"x":-14.24,"y":-31.36,"curve":0.25,"c3":0.75},{"time":2,"x":24.98,"y":8.97}],"scale":[{"x":1.046,"y":1.046,"curve":0.25,"c3":0.75},{"time":1,"x":1.023,"y":0.714,"curve":0.25,"c3":0.75},{"time":2,"x":1.046,"y":1.046}]},"Layer 121":{"translate":[{"x":26.43,"y":26.86,"curve":0.25,"c3":0.75},{"time":1,"x":-17.68,"y":-33.93,"curve":0.25,"c3":0.75},{"time":2,"x":26.43,"y":26.86}],"scale":[{"x":1.132,"y":1.132,"curve":0.25,"c3":0.75},{"time":1,"x":1.066,"y":0.836,"curve":0.25,"c3":0.75},{"time":2,"x":1.132,"y":1.132}]},"Layer 122":{"rotate":[{"angle":12.75,"curve":0.25,"c3":0.75},{"time":1,"angle":2.98,"curve":0.25,"c3":0.75},{"time":2,"angle":12.75}],"translate":[{"x":6.99,"y":8.73,"curve":0.25,"c3":0.75},{"time":1,"x":-24.96,"y":-32.66,"curve":0.25,"c3":0.75},{"time":2,"x":6.99,"y":8.73}],"scale":[{"x":0.804,"curve":0.25,"c3":0.75},{"time":1,"x":1.342,"y":1.244,"curve":0.25,"c3":0.75},{"time":2,"x":0.804}]},"bone29":{"rotate":[{"angle":7.73,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"angle":17.18,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-3.77,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"angle":7.73}],"translate":[{"x":0.44,"y":-2.12,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"curve":0.25,"c3":0.75},{"time":1.3333,"x":1.39,"y":-6.68,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"x":0.44,"y":-2.12}]},"bone30":{"rotate":[{"angle":-17.52,"curve":0.25,"c3":0.75},{"time":1,"angle":17.18,"curve":0.25,"c3":0.75},{"time":2,"angle":-17.52}],"translate":[{"x":-0.09,"y":-27.52,"curve":0.311,"c2":0.25,"c3":0.757},{"time":1,"x":-1.68,"y":20.28,"curve":0.25,"c3":0.75},{"time":2,"x":-0.09,"y":-27.52}]},"bone31":{"rotate":[{"angle":-6.67,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"angle":-16.12,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-19.9},{"time":2,"angle":-6.67}],"translate":[{"x":-3.22,"y":-18.85,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"x":-4.49,"y":-26.32,"curve":0.25,"c3":0.75},{"time":1.3333,"x":1.43,"y":-14.58,"curve":0.25,"c3":0.75},{"time":2,"x":-3.22,"y":-18.85}]},"bone32":{"rotate":[{"angle":-7.06,"curve":0.265,"c3":0.618,"c4":0.43},{"time":0.3333,"angle":-31.45,"curve":0.25,"c3":0.75},{"time":1.3667,"angle":22.38,"curve":0.381,"c2":0.55,"c3":0.742},{"time":2,"angle":-7.06}],"translate":[{"x":-0.52,"y":-24.41,"curve":0.25,"c3":0.75},{"time":1,"x":8.76,"y":12.74,"curve":0.25,"c3":0.75},{"time":2,"x":-0.52,"y":-24.41}]},"bone16":{"rotate":[{"angle":-4.11,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.3333,"angle":-3.71,"curve":0.243,"c3":0.689,"c4":0.75},{"time":1.3333,"angle":-7.85,"curve":0.25,"c3":0.75},{"time":2,"angle":-4.11}]},"bone17":{"rotate":[{"angle":2.26,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.5,"angle":5.96,"curve":0.25,"c3":0.75},{"time":1.5,"angle":-1.44,"curve":0.25,"c3":0.625,"c4":0.5},{"time":2,"angle":2.26}]},"bone18":{"rotate":[{"angle":-23.54,"curve":0.311,"c2":0.25,"c3":0.757},{"time":0.8333,"angle":10.42,"curve":0.25,"c3":0.75},{"time":1.8333,"angle":-27.16,"curve":0.29,"c3":0.629,"c4":0.38},{"time":2,"angle":-23.54}]},"bone19":{"rotate":[{"angle":-17.94,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"angle":-19.85,"curve":0.25,"c3":0.75},{"time":1.1667},{"time":2,"angle":-17.94}]},"Layer 75":{"rotate":[{"angle":2.99,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"angle":3.87,"curve":0.25,"c3":0.75},{"time":1.1667,"angle":-5.28,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"angle":2.99}],"translate":[{"x":-4.62,"y":1.58}]},"bone9":{"rotate":[{"angle":-3.82,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"angle":0.11,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-13.74,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"angle":-3.82}]},"bone10":{"rotate":[{"angle":-13.63,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.5,"angle":-10.42,"curve":0.25,"c3":0.75},{"time":1.5,"angle":-16.83,"curve":0.25,"c3":0.625,"c4":0.5},{"time":2,"angle":-13.63}]},"bone11":{"rotate":[{"angle":5.28,"curve":0.351,"c2":0.4,"c3":0.757},{"time":0.6667,"angle":31.94,"curve":0.25,"c3":0.75},{"time":1.6667,"angle":-14.26,"curve":0.265,"c3":0.618,"c4":0.43},{"time":2,"angle":5.28}]},"Layer 111":{"rotate":[{"angle":-8.28,"curve":0.352,"c2":0.65,"c3":0.687},{"time":0.0667,"angle":-8.04,"curve":0.25,"c3":0.75},{"time":1.0667,"angle":-18.54,"curve":0.246,"c3":0.723,"c4":0.88},{"time":2,"angle":-8.28}],"translate":[{"x":3.66,"y":-7.2,"curve":0.352,"c2":0.65,"c3":0.687},{"time":0.0667,"x":2.86,"y":-7.47,"curve":0.25,"c3":0.75},{"time":1.0667,"x":37.07,"y":0.37,"curve":0.246,"c3":0.723,"c4":0.88},{"time":2,"x":3.66,"y":-7.2}]},"Layer 110":{"rotate":[{"angle":-3.45,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.5,"angle":-0.95,"curve":0.25,"c3":0.75},{"time":1.5,"angle":-7.19,"curve":0.25,"c3":0.625,"c4":0.5},{"time":2,"angle":-3.45}],"translate":[{"x":-4.5,"y":-14.17}]},"bone33":{"rotate":[{"angle":-10.89,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"angle":-13.2,"curve":0.25,"c3":0.75},{"time":1.1667,"angle":10.74,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"angle":-10.89}],"translate":[{"x":0.79,"y":-13.37,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"x":0.38,"y":-16.58,"curve":0.25,"c3":0.75},{"time":1.1667,"x":4.61,"y":16.72,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"x":0.79,"y":-13.37}]},"bone35":{"rotate":[{"angle":-6.41,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"angle":-13.2},{"time":1.3333,"angle":10.74,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"angle":-6.41}],"translate":[{"x":3.28,"y":-6.53,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"x":4.42,"y":-15.98,"curve":0.25,"c3":0.75},{"time":1.3333,"x":0.38,"y":17.34,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"x":3.28,"y":-6.53}]},"bone34":{"rotate":[{"angle":-0.18,"curve":0.372,"c2":0.48,"c3":0.752},{"time":0.5333,"angle":-13.2},{"time":1.5333,"angle":10.74,"curve":0.252,"c3":0.622,"c4":0.48},{"time":2,"angle":-0.18}],"translate":[{"x":2.23,"y":2.15,"curve":0.372,"c2":0.48,"c3":0.752},{"time":0.5333,"x":4.42,"y":-15.98,"curve":0.25,"c3":0.75},{"time":1.5333,"x":0.38,"y":17.34,"curve":0.252,"c3":0.622,"c4":0.48},{"time":2,"x":2.23,"y":2.15}]},"bone37":{"rotate":[{"angle":6.76,"curve":0.329,"c2":0.32,"c3":0.758},{"time":0.7667,"angle":-13.2,"curve":0.25,"c3":0.75},{"time":1.7667,"angle":10.74,"curve":0.278,"c3":0.622,"c4":0.39},{"time":2,"angle":6.76}],"translate":[{"x":-1.85,"y":11.7,"curve":0.329,"c2":0.32,"c3":0.758},{"time":0.7667,"x":8.2,"y":-14.42,"curve":0.25,"c3":0.75},{"time":1.7667,"x":-3.85,"y":16.91,"curve":0.278,"c3":0.622,"c4":0.39},{"time":2,"x":-1.85,"y":11.7}]},"bone36":{"rotate":[{"angle":-5.86},{"time":0.6667,"angle":10.47,"curve":0.344,"c2":0.66,"c3":0.677},{"time":1.7,"angle":-13.2},{"time":2,"angle":-5.86}],"translate":[{"x":2.1,"y":1.43,"curve":0.341,"c2":0.66,"c3":0.674},{"time":0.6667,"x":-3.72,"y":16.55,"curve":0.344,"c2":0.66,"c3":0.677},{"time":1.7,"x":8.2,"y":-14.42,"curve":0.336,"c2":0.39,"c3":0.67,"c4":0.73},{"time":2,"x":2.1,"y":1.43}]},"bone23":{"rotate":[{"angle":-8.93,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"angle":-4.99,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-14.09,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"angle":-8.93}]},"bone24":{"rotate":[{"angle":-10.1,"curve":0.351,"c2":0.4,"c3":0.757},{"time":0.6667,"angle":9.27,"curve":0.25,"c3":0.75},{"time":1.6667,"angle":-19.29,"curve":0.265,"c3":0.618,"c4":0.43},{"time":2,"angle":-10.1}]},"bone25":{"rotate":[{"angle":-10.32,"curve":0.25,"c3":0.75},{"time":1.1667,"angle":35.38,"curve":0.25,"c3":0.75},{"time":2,"angle":-10.32}]},"bone26":{"rotate":[{"angle":5.27,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"angle":-20.94,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":35.49,"curve":0.25,"c3":0.75},{"time":2,"angle":5.27}]},"Layer 77":{"rotate":[{"angle":-0.13,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"curve":0.25,"c3":0.75},{"time":1.1,"angle":0.82,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"angle":-0.13}],"translate":[{"x":-3.3,"y":1.13}]},"bone3":{"rotate":[{"angle":0.52,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"angle":7.12,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-16.12,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"angle":0.52}]},"bone4":{"rotate":[{"angle":-6.95,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.5,"angle":8.17,"curve":0.25,"c3":0.75},{"time":1.5,"angle":-22.08,"curve":0.25,"c3":0.625,"c4":0.5},{"time":2,"angle":-6.95}]},"bone5":{"rotate":[{"angle":1.13,"curve":0.38,"c2":0.53,"c3":0.745},{"time":0.5,"angle":7.52,"curve":0.246,"c3":0.633,"c4":0.54},{"time":1.5,"angle":-4.72,"curve":0.25,"c3":0.75},{"time":2,"angle":1.13}],"translate":[{"x":-3.3,"y":1.13}]},"bone6":{"rotate":[{"angle":-9.59,"curve":0.351,"c2":0.4,"c3":0.757},{"time":0.6667,"curve":0.25,"c3":0.75},{"time":1.6667,"angle":-13.39,"curve":0.265,"c3":0.618,"c4":0.43},{"time":2,"angle":-9.59}]},"Layer 76":{"rotate":[{"angle":-5.24,"curve":0.38,"c2":0.59,"c3":0.727},{"time":0.2667,"angle":-4.59,"curve":0.25,"c3":0.75},{"time":1.2667,"angle":-7.78,"curve":0.242,"c3":0.663,"c4":0.65},{"time":2,"angle":-5.24}],"translate":[{"x":-4.62,"y":1.58}]},"bone7":{"rotate":[{"angle":-4.14,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.5,"angle":9.75,"curve":0.25,"c3":0.75},{"time":1.5,"angle":-8.28,"curve":0.25,"c3":0.625,"c4":0.5},{"time":2,"angle":-4.14}]},"bone8":{"rotate":[{"angle":-16.49,"curve":0.32,"c2":0.29,"c3":0.757},{"time":0.8,"angle":7.62,"curve":0.25,"c3":0.75},{"time":1.8,"angle":-26.92,"curve":0.284,"c3":0.625,"c4":0.38},{"time":2,"angle":-16.49}]},"bone38":{"rotate":[{"angle":-11.84}]},"bone39":{"rotate":[{"angle":1.22,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"curve":0.25,"c3":0.75},{"time":1.1667,"angle":12.7,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"angle":1.22}],"translate":[{"x":-0.21,"y":1.24,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"curve":0.25,"c3":0.75},{"time":1.1667,"x":-2.13,"y":12.82,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"x":-0.21,"y":1.24}]},"bone40":{"rotate":[{"angle":0.74,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.5,"angle":9.77,"curve":0.25,"c3":0.75},{"time":1.5,"angle":-8.29,"curve":0.25,"c3":0.625,"c4":0.5},{"time":2,"angle":0.74}],"translate":[{"x":-0.13,"y":0.66,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.5,"curve":0.25,"c3":0.75},{"time":1.5,"x":0.78,"y":-22.16,"curve":0.25,"c3":0.625,"c4":0.5},{"time":2,"x":-0.13,"y":0.66}]},"bone41":{"rotate":[{"angle":11.47,"curve":0.311,"c2":0.25,"c3":0.757},{"time":0.8333,"curve":0.25,"c3":0.75},{"time":1.8333,"angle":12.7,"curve":0.29,"c3":0.629,"c4":0.38},{"time":2,"angle":11.47}],"translate":[{"x":3.35,"y":11.25,"curve":0.311,"c2":0.25,"c3":0.757},{"time":0.8333,"curve":0.25,"c3":0.75},{"time":1.8333,"x":3.71,"y":12.46,"curve":0.29,"c3":0.629,"c4":0.38},{"time":2,"x":3.35,"y":11.25}]},"Layer 78":{"rotate":[{"angle":14.31,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"angle":16.46,"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.5,"angle":20.42,"curve":0.25,"c3":0.75},{"time":1.1667,"angle":11.42,"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"angle":14.31}],"translate":[{"x":19.15,"y":0.77,"curve":0.255,"c3":0.62,"c4":0.47},{"time":0.5,"x":19.6,"y":1.14,"curve":0.25,"c3":0.75},{"time":1.1667,"x":12.94,"y":-24.75,"curve":0.25,"c3":0.75},{"time":2,"x":19.15,"y":0.77}]},"bone12":{"rotate":[{"angle":0.64,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"angle":4.79,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-19.25,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"angle":0.64}]},"bone13":{"rotate":[{"angle":-33.69,"curve":0.351,"c2":0.4,"c3":0.757},{"time":0.6667,"angle":-11.61,"curve":0.25,"c3":0.75},{"time":1.6667,"angle":-42.98,"curve":0.265,"c3":0.618,"c4":0.43},{"time":2,"angle":-33.69}]},"bone14":{"rotate":[{"angle":1.15,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":4.06,"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"angle":1.15}]},"Layer 89":{"translate":[{"curve":0.25,"c3":0.75},{"time":1,"x":0.56,"y":3.41,"curve":0.25,"c3":0.75},{"time":2}]},"Layer 81":{"rotate":[{"curve":0.25,"c3":0.75},{"time":1,"angle":2.26,"curve":0.25,"c3":0.75},{"time":2}],"translate":[{"curve":0.25,"c3":0.75},{"time":1,"x":0.96,"y":6.33,"curve":0.25,"c3":0.75},{"time":2}]},"Layer 82":{"rotate":[{"angle":1.61},{"time":1,"angle":2.87},{"time":2,"angle":1.61}],"translate":[{"x":0.47,"y":1.47,"curve":0.25,"c3":0.75},{"time":1,"x":1.05,"y":6.97,"curve":0.25,"c3":0.75},{"time":2,"x":0.47,"y":1.47}],"scale":[{"y":1.078,"curve":0.25,"c3":0.75},{"time":1,"y":0.857,"curve":0.25,"c3":0.75},{"time":2,"y":1.078}]},"Layer 87":{"translate":[{"curve":0.25,"c3":0.75},{"time":1,"x":-1.46,"y":0.22,"curve":0.25,"c3":0.75},{"time":2}],"scale":[{"curve":0.25,"c3":0.75},{"time":1,"y":0.783,"curve":0.25,"c3":0.75},{"time":2}]},"Layer 85":{"translate":[{"curve":0.25,"c3":0.75},{"time":1,"x":1.68,"y":8.36,"curve":0.25,"c3":0.75},{"time":2}],"scale":[{"curve":0.25,"c3":0.75},{"time":1,"y":0.891,"curve":0.25,"c3":0.75},{"time":2}]},"Layer 79":{"translate":[{"x":-1.03,"y":-3.23},{"time":1,"x":1.42,"y":9.41,"curve":0.25,"c3":0.75},{"time":2,"x":-1.03,"y":-3.23}]}},"deform":{"default":{"Layer 66":{"armorgirl/Layer 66":[{"vertices":[-3.29587,-59.19702,-7.89099,-20.21533,-14.64337,-17.98328,-15.56494,-2.90295,31.20172,45.75659,28.56961,37.1217,23.2128,2.93713,20.81879,-7.4259,15.03717,-13.92639,6.32761,-22.52869,2.82773,-20.24207,-5.07208,-57.17749,-5.44781,-61.61865,27.32944,25.74194,14.12027,-28.04138,14.78571,-17.349,30.88254,38.6427],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-35.59915,-30.94385,-19.80453,-16.49207,-18.07401,-28.51904,-26.67075,-23.37573,-24.93707,-38.83508,-20.83551,-16.83594,-20.83551,-16.83594,-2.27551,-17.50671,-9.3559,-23.51135,-21.49707,-42.26953,-43.82983,-47.45081,-50.0152,-49.51587,-54.48935,-42.9906,-23.69345,-42.14111,-23.56171,-39.52161,-13.41272,-39.55994,-13.24753,-42.9502],"curve":0.25,"c3":0.75},{"time":2,"vertices":[-3.29587,-59.19702,-7.89099,-20.21533,-14.64337,-17.98328,-15.56494,-2.90295,31.20172,45.75659,28.56961,37.1217,23.2128,2.93713,20.81879,-7.4259,15.03717,-13.92639,6.32761,-22.52869,2.82773,-20.24207,-5.07208,-57.17749,-5.44781,-61.61865,27.32944,25.74194,14.12027,-28.04138,14.78571,-17.349,30.88254,38.6427]}]},"Layer 68":{"armorgirl/Layer 68":[{"vertices":[-4.64388,-3.20001,-4.55961,-1.00716,-5.09493,1.56836,-5.12935,-2.79818,-5.12935,-2.79818,-5.12935,-2.79818,-5.1097,-0.89753,-4.93649,-2.87443,-4.93649,-2.87443,-4.93649,-2.87443,-4.93649,-2.87443,-5.1097,-0.89753,-4.99204,-0.32476,-4.89421,-2.65354,-4.65279,-2.55356,-3.98221,-1.57753,-5.03503,-0.45425,-4.79921,-1.67369,-4.45441,-1.3201,-4.33171,-1.59701,-4.59308,-2.11774,-4.67064,-2.30446,-4.67064,-2.30446,-4.2468,1.31393,-4.61796,-3.056,-4.05062,2.67265],"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"vertices":[-4.65259,-3.00069,-4.52405,-0.96793,-4.9707,1.46127,-4.65259,-3.00069,-4.65259,-3.00069,-4.65259,-3.00069,-5.09924,-0.57149,-4.65259,-3.00069,-4.65259,-3.00069,-4.65259,-3.00069,-4.65259,-3.00069,-5.09924,-0.57149,-4.70288,0.00378,-4.65259,-3.00069,-4.65259,-3.00069,-3.94897,-1.3644,-5.09924,-0.57149,-4.65259,-3.00069,-4.65259,-3.00069,-4.65259,-3.00069,-4.65259,-3.00069,-4.65259,-3.00069,-4.65259,-3.00069,-4.25562,1.31649,-4.65259,-3.00069,-4.03101,3.90748],"curve":0.25,"c3":0.75},{"time":1.1667,"vertices":[-0.20984,-6.02145,-4.8927,-1.3746,-6.25867,2.57159,-9.59546,-0.90115,-9.59546,-0.90115,-9.59546,-0.90115,-5.20764,-3.95175,-7.59595,-1.69171,-7.59595,-1.69171,-7.59595,-1.69171,-7.59595,-1.69171,-5.20764,-3.95175,-7.70081,-3.40237,-7.15759,0.59842,-4.65466,1.63504,-4.29358,-3.5741,-4.43347,0.64404,-6.17273,10.75717,-2.5979,14.42303,-1.32581,11.55222,-4.03564,6.15341,-4.83972,4.21762,-0.4873,3.26337,0.18823,0.33566,0.05884,-4.52835,-4.23437,-8.89478],"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"vertices":[-4.64388,-3.20001,-4.55961,-1.00716,-5.09493,1.56836,-5.12935,-2.79818,-5.12935,-2.79818,-5.12935,-2.79818,-5.1097,-0.89753,-4.93649,-2.87443,-4.93649,-2.87443,-4.93649,-2.87443,-4.93649,-2.87443,-5.1097,-0.89753,-4.99204,-0.32476,-4.89421,-2.65354,-4.65279,-2.55356,-3.98221,-1.57753,-5.03503,-0.45425,-4.79921,-1.67369,-4.45441,-1.3201,-4.33171,-1.59701,-4.59308,-2.11774,-4.67064,-2.30446,-4.67064,-2.30446,-4.2468,1.31393,-4.61796,-3.056,-4.05062,2.67265]}]},"Layer 69":{"armorgirl/Layer 69":[{"vertices":[-0.90862,1.53915,4.70268,-7.15198,5.28151,-17.16463,6.08945,-3.47997,6.57861,-3.33002,-0.48622,-1.48754,-5.31789,-2.60876,6.0935,-3.21151,6.57861,-3.33002,3.33881,-4.29725,-0.78678,1.48634,-3.19135,0.54727,-0.90862,1.53915,-0.90862,1.53915,-0.90862,1.53915,-0.90862,1.53915,6.66713,-2.64828,3.01273,-4.04794,-3.72869,0.70822,-0.51838,1.51116],"curve":0.286,"c2":0.15,"c3":0.755},{"time":1,"offset":2,"vertices":[-0.4718,-6.7619,-0.01416,-9.56201,5.66711,-5.66486,19.56238,-1.40524,5.7821,1.9614,8.67896,1.16986,13.19226,4.34503,19.56238,-1.40524,3.46094,-1.50015,3.46094,-1.50015,11.08545,-0.7951,0,0,0,0,0,0,0,0,15.81396,-3.27298,14.85339,-4.1347,16.47681,-5.93994,11.08545,-0.7951],"curve":0.25,"c3":0.75},{"time":1.9,"vertices":[-0.94177,1.59531,4.89148,-7.16621,5.47473,-17.44203,6.10486,-3.40025,6.10486,-3.40025,0.16504,-3.66856,-6.02124,-2.76326,6.10486,-3.40025,6.10486,-3.40025,3.33435,-4.39931,-0.94177,1.59531,-3.71228,0.59625,-0.94177,1.59531,-0.94177,1.59531,-0.94177,1.59531,-0.94177,1.59531,6.14075,-2.64212,2.58069,-4.04477,-4.46594,0.95079,-0.94177,1.59531],"curve":0.307,"c3":0.642,"c4":0.35},{"time":2,"vertices":[-0.90862,1.53915,4.70268,-7.15198,5.28151,-17.16463,6.08945,-3.47997,6.57861,-3.33002,-0.48622,-1.48754,-5.31789,-2.60876,6.0935,-3.21151,6.57861,-3.33002,3.33881,-4.29725,-0.78678,1.48634,-3.19135,0.54727,-0.90862,1.53915,-0.90862,1.53915,-0.90862,1.53915,-0.90862,1.53915,6.66713,-2.64828,3.01273,-4.04794,-3.72869,0.70822,-0.51838,1.51116]}]},"Layer 70":{"armorgirl/Layer 70":[{"offset":6,"vertices":[13.66196,1.61487,8.459,2.46094,-13.61344,-4.09924,-2.65504,-12.90881,10.9584,-8.80957,10.9584,-8.80957,8.459,2.46094,8.459,2.46094,13.66196,1.61487],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-15.62724,-3.16919,0,0,0,0,-15.62724,-3.16919,0.6891,-13.81116,-11.3138,-17.48108,-24.60717,-7.74316,-11.55806,-1.06921,-11.55806,-1.06921,-11.55806,-1.06921,-11.55806,-1.06921,-15.62724,-3.16919],"curve":0.25,"c3":0.75},{"time":2,"offset":6,"vertices":[13.66196,1.61487,8.459,2.46094,-13.61344,-4.09924,-2.65504,-12.90881,10.9584,-8.80957,10.9584,-8.80957,8.459,2.46094,8.459,2.46094,13.66196,1.61487]}]},"Layer 72":{"armorgirl/Layer 72":[{"vertices":[-2.83621,-0.3367,-6.37897,1.67648,-5.9079,-7.66467,-8.17065,-0.97666],"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.3333,"vertices":[-0.25916,-2.14133,-4.72144,-2.45988,-4.72144,-2.45988,-4.72144,-2.45988],"curve":0.242,"c3":0.669,"c4":0.67},{"time":1.1667,"vertices":[-3.32487,-3.1325,-5.11804,3.31734,-0.88286,20.55601,-10.3188,-4.38403],"curve":0.379,"c2":0.6,"c3":0.723},{"time":1.4333,"vertices":[-3.98071,-3.34454,-5.20288,4.55325,-7.19958,16.74559,-11.51624,-4.79565],"curve":0.243,"c3":0.649,"c4":0.6},{"time":2,"vertices":[-2.83621,-0.3367,-6.37897,1.67648,-5.9079,-7.66467,-8.17065,-0.97666]}]},"Layer 73":{"armorgirl/Layer 73":[{"vertices":[-8.82202,-25.3374,-8.82202,-25.3374,-1.89807,-26.76001,4.5022,-26.44655,-8.82202,-25.3374,-1.89807,-26.76001,4.5022,-26.44655,11.00598,-24.46481,-1.89807,-26.76001,4.5022,-26.44655,11.00598,-24.46481,4.5022,-26.44655,11.00598,-24.46481,5.39453,-26.27809,4.5022,-26.44655,11.00598,-24.46481,5.39453,-26.27809,11.00598,-24.46481,5.39453,-26.27809,11.00598,-24.46481,5.39453,-26.27809,7.35156,-25.80084,5.39453,-26.27809,7.35156,-25.80084,5.39453,-26.27809,-8.82202,-25.3374,7.35156,-25.80084,5.39453,-26.27809,-8.82202,-25.3374,7.35156,-25.80084,5.39453,-26.27809,-8.82202,-25.3374,-8.82202,-25.3374,-1.89807,-26.76001,7.35156,-25.80084,-1.89807,-26.76001,7.35156,-25.80084,5.39453,-26.27809,-1.89807,-26.76001,7.35156,-25.80084,5.39453,-26.27809,-1.89807,-26.76001,7.35156,-25.80084,5.39453,-26.27809,-1.89807,-26.76001,4.5022,-26.44655,-1.89807,-26.76001,4.5022,-26.44655,11.00598,-24.46481,-1.89807,-26.76001,4.5022,-26.44655,11.00598,-24.46481,-1.89807,-26.76001,4.5022,-26.44655,11.00598,-24.46481,4.5022,-26.44655,11.00598,-24.46481,7.35156,-25.80084,5.39453,-26.27809]}]},"Layer 74":{"armorgirl/Layer 74":[{"vertices":[3.6521,-2.04095,4.03662,-1.09845,3.97302,-1.31366,-3.95752,1.35571,-3.95752,1.35571,-3.95752,1.35571,-3.95752,1.35571,-0.45813,11.50232,-0.45813,11.50232,-1.59827,-11.40363,1.20313,-11.45139,-1.59827,-11.40363,1.20313,-11.45139,0.58655,-11.50006,4.03662,-1.09845,3.97302,-1.31366,3.6521,-2.04095,4.03662,-1.09845,3.97302,-1.31366],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-0.65955,0.22607,-0.69458,0.05991,-0.69006,0.09705,0.68921,-0.10452,-7.36072,-3.59183,-7.36072,-3.59183,-7.36072,-3.59183,0.12463,-3.84982,0.12463,-3.84982,0.56348,3.81085,-0.2561,3.82211,0.56348,3.81085,-0.2561,3.82211,-0.22009,3.85574,-0.69458,0.05991,-0.69006,0.09705,-0.65955,0.22607,-0.69458,0.05991,-0.69006,0.09705],"curve":0.25,"c3":0.75},{"time":2,"vertices":[3.6521,-2.04095,4.03662,-1.09845,3.97302,-1.31366,-3.95752,1.35571,-3.95752,1.35571,-3.95752,1.35571,-3.95752,1.35571,-0.45813,11.50232,-0.45813,11.50232,-1.59827,-11.40363,1.20313,-11.45139,-1.59827,-11.40363,1.20313,-11.45139,0.58655,-11.50006,4.03662,-1.09845,3.97302,-1.31366,3.6521,-2.04095,4.03662,-1.09845,3.97302,-1.31366]}]},"Layer 75":{"armorgirl/Layer 75":[{"vertices":[1.30017,3.37115,3.60347,-0.26221,3.19574,1.68457,-3.87329,8.23413,3.27722,8.48962,8.04919,4.245,-4.27808,9.09271,3.61902,9.37445,8.88861,4.68689,-3.08337,6.55487,-0.66248,1.40759,1.11792,-2.37567,-0.22632,0.4801,0.18945,0.49628,0.47003,0.24744,-0.62573,1.33063,0.5282,1.37262,1.46688,-0.1062,1.30096,0.68494,2.34558,-4.98358,-1.98657,-5.13629,-5.49236,0.40576,-4.87079,-2.57056,-6.90051,-17.85541,-19.09066,1.40515,-16.93097,-8.93262,-32.232,2.37012,-28.58545,-15.0813,-20.77255,1.52917,-18.42267,-9.71875,-2.09656,-5.42187,-5.79744,0.42773,-5.14172,-2.71301],"curve":0.25,"c3":0.75},{"time":1,"vertices":[0.05444,-2.52508,-2.51744,-0.2041,-1.6178,-1.93933,1.85461,-2.0896,0.06018,-2.79188,-1.78857,-2.14465,1.54199,-1.73792,0.05005,-2.32106,-1.48755,-1.78259,1.02051,-1.14966,0.23669,-0.26697,-0.25281,0.28333,0.34705,-0.39124,0.01221,-0.52295,-0.33398,-0.40125,0.85681,-0.96594,0.02771,-1.28992,-1.28596,-0.10425,-0.82544,-0.9906,0.54749,-0.61633,0.01892,-0.82346,-0.82099,-0.06616,-0.52563,-0.63306,-0.02441,1.16815,1.16451,0.09424,0.74963,0.89746,3.44945,0.28076,2.21851,2.65662,1.16285,0.09424,0.7478,0.89624,0.02869,-1.3101,-1.30618,-0.10522,-0.8385,-1.00598],"curve":0.25,"c3":0.75},{"time":2,"vertices":[1.30017,3.37115,3.60347,-0.26221,3.19574,1.68457,-3.87329,8.23413,3.27722,8.48962,8.04919,4.245,-4.27808,9.09271,3.61902,9.37445,8.88861,4.68689,-3.08337,6.55487,-0.66248,1.40759,1.11792,-2.37567,-0.22632,0.4801,0.18945,0.49628,0.47003,0.24744,-0.62573,1.33063,0.5282,1.37262,1.46688,-0.1062,1.30096,0.68494,2.34558,-4.98358,-1.98657,-5.13629,-5.49236,0.40576,-4.87079,-2.57056,-6.90051,-17.85541,-19.09066,1.40515,-16.93097,-8.93262,-32.232,2.37012,-28.58545,-15.0813,-20.77255,1.52917,-18.42267,-9.71875,-2.09656,-5.42187,-5.79744,0.42773,-5.14172,-2.71301]}]},"Layer 77":{"armorgirl/Layer 77":[{"offset":18,"vertices":[-2.93945,4.18542,-3.68469,6.63464,-4.33362,6.22998,3.3446,-1.96661,2.91406,-1.17493,3.2041,-1.70782,4.87378,-2.46887,4.18335,-3.51044,9.84131,-1.40076,7.96265,-5.95056,9.84131,-1.40076,7.96265,-5.95056,9.84131,-1.40076,0,0,0,0,0,0,-2.57397,2.90198,-1.85083,3.41077,8.63916,-0.96899,7.11658,-4.995,-3.45154,3.77478,-2.50537,4.45947,-2.93945,4.18542,-4.8396,1.65552,-2.01831,4.69977,-2.93945,4.18542,-2.93945,4.18542,-2.01831,4.69977],"curve":0.25,"c3":0.75},{"time":1,"vertices":[4.71167,-7.35181,5.82813,-9.11298,6.74414,-8.4491,5.02246,-7.85071,5.80933,-7.2793,3.44092,-5.37097,3.9762,-4.97864,3.1416,-4.89478,3.62793,-4.53687,0.76245,-2.38135,-4.89294,3.0509,-4.23267,3.89807,-13.32361,9.18103,-19.36279,19.3894,-18.81958,18.91492,-19.2854,12.38245,-15.98108,16.43274,-15.68628,4.47681,-13.42993,9.25952,-10.84998,3.67334,-9.10406,6.95215,-4.94388,2.69238,4.19238,-6.54236,4.84631,-6.06482,3.98059,-6.2052,-7.54309,-1.23682,-7.63049,0.50854,-3.10165,-4.19812,-4.27686,-2.98328,1.0083,-5.26941,-0.21545,-5.35706,-1.06775,-5.19958,6.00717,-5.2356,0.23999,-7.94165,1.05945,-7.87134,3.3999,-6.36609,4.11072,-8.86548],"curve":0.25,"c3":0.75},{"time":2,"offset":18,"vertices":[-2.93945,4.18542,-3.68469,6.63464,-4.33362,6.22998,3.3446,-1.96661,2.91406,-1.17493,3.2041,-1.70782,4.87378,-2.46887,4.18335,-3.51044,9.84131,-1.40076,7.96265,-5.95056,9.84131,-1.40076,7.96265,-5.95056,9.84131,-1.40076,0,0,0,0,0,0,-2.57397,2.90198,-1.85083,3.41077,8.63916,-0.96899,7.11658,-4.995,-3.45154,3.77478,-2.50537,4.45947,-2.93945,4.18542,-4.8396,1.65552,-2.01831,4.69977,-2.93945,4.18542,-2.93945,4.18542,-2.01831,4.69977]}]},"Layer 79":{"armorgirl/Layer 79":[{"offset":56,"vertices":[-1.03455,-4.40198,-1.03455,-4.40198,-1.03455,-4.40198]},{"time":1,"vertices":[0.82739,11.59537,0.82739,11.59537,-3.74939,11.00421,0.82739,11.59537,-3.74939,11.00421,1.41028,11.5392,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.82739,11.59537],"curve":0.25,"c3":0.75},{"time":2,"offset":56,"vertices":[-1.03455,-4.40198,-1.03455,-4.40198,-1.03455,-4.40198]}]},"Layer 80":{"armorgirl/Layer 80":[{"offset":26,"vertices":[-1.35303,-3.93594,-1.35303,-3.93594,-1.35303,-3.93594,-1.35303,-3.93594,-1.35303,-3.93594,-2.1051,-6.12234,-2.1051,-6.12234,-2.1051,-6.12234],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-0.24207,-1.61124,-0.24207,-1.61124,-1.1134,-4.28638,-0.24207,-1.61124,2.68176,-1.22617,2.75098,-0.76883,-0.19458,-7.3981,-2.47888,-9.7507,-2.47888,-9.7507,-2.12219,-7.87625,-0.24207,-1.61124,-0.24207,-1.61124,-2.47888,-9.7507,1.29883,4.30716,1.29883,4.30716,1.29883,4.30716,1.29883,4.30716,1.29883,4.30716,0.52966,8.20407,0.52966,8.20407,0.52966,8.20407],"curve":0.25,"c3":0.75},{"time":2,"offset":26,"vertices":[-1.35303,-3.93594,-1.35303,-3.93594,-1.35303,-3.93594,-1.35303,-3.93594,-1.35303,-3.93594,-2.1051,-6.12234,-2.1051,-6.12234,-2.1051,-6.12234]}]},"Layer 81":{"armorgirl/Layer 81":[{"vertices":[4.09375,-4.1033,1.23438,-1.4693,5.33032,3.03378,0,0,1.18311,3.42105,-1.06995,-3.1106,-3.24719,-2.36032,1.18311,3.42105],"curve":0.25,"c3":0.75},{"time":1,"vertices":[4.83154,-2.02789,0.00391,-4.15775,-4.0271,-10.1582,-8.56628,8.54283,-0.15527,-0.80658,-0.69958,6.71683,-2.45471,2.62537,-1.26978,-0.548],"curve":0.25,"c3":0.75},{"time":2,"vertices":[4.09375,-4.1033,1.23438,-1.4693,5.33032,3.03378,0,0,1.18311,3.42105,-1.06995,-3.1106,-3.24719,-2.36032,1.18311,3.42105]}]},"Layer 82":{"armorgirl/Layer 82":[{"vertices":[1.58752,-0.54694,0,0,-3.60535,1.24271,3.60876,-1.24289,0,0,-1.5863,0.54684],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-4.25256,3.37286,3.17004,5.28662,3.05847,-5.40509,-5.52942,-3.74173,1.22205,5.83926,9.13806,-3.27637],"curve":0.25,"c3":0.75},{"time":2,"vertices":[1.58752,-0.54694,0,0,-3.60535,1.24271,3.60876,-1.24289,0,0,-1.5863,0.54684]}]},"Layer 84":{"armorgirl/Layer 84":[{"offset":2,"vertices":[-2.80884,-1.54333,-2.80884,-1.54333],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-5.04944,-1.41095,-4.84277,-4.99054,-4.84277,-4.99054,-5.04944,-1.41095],"curve":0.25,"c3":0.75},{"time":2,"offset":2,"vertices":[-2.80884,-1.54333,-2.80884,-1.54333]}]},"Layer 85":{"armorgirl/Layer 85":[{"vertices":[-4.2218,1.14743,-3.69116,1.00311,0.68433,-0.18628,3.85181,-1.04654,4.10022,-1.11401,1.54224,-0.41898,-1.18433,0.32214],"curve":0.265,"c3":0.618,"c4":0.43},{"time":1,"curve":0.265,"c3":0.618,"c4":0.43},{"time":1.3333,"vertices":[-1.21393,0.32993,-1.06135,0.28843,0.19677,-0.05356,1.10754,-0.30092,1.17897,-0.32032,0.44345,-0.12047,-0.34054,0.09263],"curve":0.324,"c2":0.31,"c3":0.664,"c4":0.66},{"time":1.5333,"vertices":[-9.74437,3.43615,-8.25202,3.06506,1.73025,0.56633,8.73751,-1.18932,9.01799,-1.26233,3.07113,0.22621,-3.11301,1.77308],"curve":0.335,"c2":0.34,"c3":0.669,"c4":0.67},{"time":1.6,"vertices":[-13.35193,3.535,-11.48853,3.04648,2.52954,-0.63559,12.55371,-3.26932,13.1958,-3.43781,4.94031,-1.26831,-3.77393,1.01968],"curve":0.337,"c2":0.35,"c3":0.671,"c4":0.68},{"time":1.6667,"curve":0.351,"c2":0.4,"c3":0.689,"c4":0.75},{"time":2,"vertices":[-4.2218,1.14743,-3.69116,1.00311,0.68433,-0.18628,3.85181,-1.04654,4.10022,-1.11401,1.54224,-0.41898,-1.18433,0.32214]}],"armorgirl/Layer 851":[{"time":2,"vertices":[2.40295,-0.82306,2.40295,-0.82306,2.40295,-0.82306,2.40295,-0.82306]}]},"Layer 87":{"armorgirl/Layer 87":[{},{"time":1,"vertices":[1.047,5.88205,0.63464,3.71307,0.14661,1.16293,-0.34485,-1.40128,-0.3241,-1.28522,0.20007,1.43848]},{"time":1.3333,"vertices":[0.698,3.92137,0.4231,2.47538,0.09774,0.77529,-0.2299,-0.93418,-0.21606,-0.85681,0.13338,0.95898]},{"time":1.5333,"vertices":[-4.83379,5.11816,3.79458,1.95741,3.63104,0.75272,-0.36735,0.47342,-6.84705,2.10806,-11.73573,4.62881]},{"time":1.6,"vertices":[-8.46008,2.27957,6.72546,-1.70844,7.00732,-1.78348,0.75586,-0.1409,-10.31897,2.76761,-19.2511,5.11359]},{"time":1.6667}],"armorgirl/Layer 871":[{"time":2,"vertices":[1.43896,-0.49323,1.43896,-0.49323,1.43896,-0.49323,1.43896,-0.49323]}]},"Layer 89":{"armorgirl/Layer 89":[{"vertices":[1.31335,-2.40079,0.99915,-2.88107,0.82056,-3.55511,-0.48572,-3.51746,-4.0304,-2.41202,-2.79041,-1.78247,-1.94958,-1.59906,-1.48584,-0.96976,0.71423,-1.24243,1.98047,-1.3963,-0.05371,-4.18912,-0.43274,-4.39734,2.82068,-0.61111,-1.55981,0.54385,-2.00146,0.70435],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-1.11499,-0.31525,-1.65076,3.28238,-3.10889,4.38327,4.98486,5.83183,3.02112,0.86906,-1.09534,-2.40985,-1.09363,-2.69685,0.80762,-2.13831,0.48584,1.34595,-0.04236,-1.48828,-0.91638,1.07741,1.67419,1.72639,0.16577,4.69128,4.3562,2.5573,2.81714,-1.01024],"curve":0.25,"c3":0.75},{"time":2,"vertices":[1.31335,-2.40079,0.99915,-2.88107,0.82056,-3.55511,-0.48572,-3.51746,-4.0304,-2.41202,-2.79041,-1.78247,-1.94958,-1.59906,-1.48584,-0.96976,0.71423,-1.24243,1.98047,-1.3963,-0.05371,-4.18912,-0.43274,-4.39734,2.82068,-0.61111,-1.55981,0.54385,-2.00146,0.70435]}]},"Layer 90":{"armorgirl/Layer 90":[{"vertices":[7.87048,-21.66766,7.87048,-21.66766,0,0,0,0,0,0,0,0,0,0,0,0,8.42627,-5.785,0,0,0,0,6.91589,-4.33096]},{"time":1,"offset":8,"vertices":[34.19336,10.81219,-4.46875,-0.27295,-7.2561,19.36102,-1.31445,25.79865,-6.38818,30.99286,-10.10901,28.03033,-4.80554,22.41528,-5.29773,24.18353,-17.28381,-6.60376],"curve":0.25,"c3":0.75},{"time":2,"vertices":[7.87048,-21.66766,7.87048,-21.66766,0,0,0,0,0,0,0,0,0,0,0,0,8.42627,-5.785,0,0,0,0,6.91589,-4.33096]}]},"Layer 91":{"armorgirl/Layer 91":[{"curve":0.25,"c3":0.75},{"time":1.1667,"offset":2,"vertices":[-0.82373,3.8219,-0.82373,3.8219],"curve":0.25,"c3":0.75},{"time":2}]},"Layer 92":{"armorgirl/Layer 92":[{"offset":2,"vertices":[3.26941,-10.52374,-12.76721,-27.62097,-3.24017,-30.4303,-9.46222,-36.40253,-0.78741,-38.32324,-3.84222,-17.34766,-3.84222,-17.34766,-3.84222,-17.34766,-3.84222,-17.34766,-3.84222,-17.34766,-5.54779,-15.57068,0,0,-2.41675,9.63489,-2.41675,9.63489,-5.97211,6.22205,1.06738,9.56323,4.33691,-0.96045,0.63879,-11.34106,-6.47253,-18.16595,-15.92865,-11.87256,-13.08301,-0.60266,4.1225,-11.41223,6.04346,-2.7381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3.84222,-17.34766,-3.84222,-17.34766,-3.84222,-17.34766,2.77356,7.78546,2.45215,-7.89264],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-1.72052,15.68317,5.23969,8.70471,13.08917,14.79211,13.08746,11.30615,13.93756,-1.76147,0,0,-6.15771,-46.16571,15.70795,15.65796,15.70795,15.65796,14.86047,32.21136,18.33105,21.7522,5.25763,19.1571,0,0,0,0,0,0,0,0,-3.50854,-19.16266,9.61023,16.5379,9.61023,16.5379,9.61023,16.5379,9.61023,16.5379,9.61023,16.5379,9.61023,16.5379,9.61023,16.5379,9.61023,16.5379,-2.62567,-9.5799,0,0,-6.13422,-28.74255,-3.50854,-19.16266,-3.50854,-19.16266,-3.50854,-19.16266,-3.50854,-19.16266,-0.03638,-27.8783,-0.88385,-11.32489,11.31897,-7.85706,0.87799,2.61121],"curve":0.25,"c3":0.75},{"time":2,"offset":2,"vertices":[3.26941,-10.52374,-12.76721,-27.62097,-3.24017,-30.4303,-9.46222,-36.40253,-0.78741,-38.32324,-3.84222,-17.34766,-3.84222,-17.34766,-3.84222,-17.34766,-3.84222,-17.34766,-3.84222,-17.34766,-5.54779,-15.57068,0,0,-2.41675,9.63489,-2.41675,9.63489,-5.97211,6.22205,1.06738,9.56323,4.33691,-0.96045,0.63879,-11.34106,-6.47253,-18.16595,-15.92865,-11.87256,-13.08301,-0.60266,4.1225,-11.41223,6.04346,-2.7381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3.84222,-17.34766,-3.84222,-17.34766,-3.84222,-17.34766,2.77356,7.78546,2.45215,-7.89264]}]},"Layer 93":{"armorgirl/Layer 93":[{"vertices":[-17.08643,17.83679,-17.44031,0.94272,-15.75977,7.53522,-18.79791,-5.59998,-17.65155,-8.5495,0,0,0,0,0,0,0,0,0,0,6.07556,-17.28943,3.21625,-18.04211,6.07556,-17.28943,9.86487,-15.44278,3.21625,-18.04211,9.86487,-15.44278,0,0,0,0,-13.87073,36.55914],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-1.54285,3.0965,-1.54285,3.0965,-0.24292,3.45148,-0.24292,3.45148,-0.79468,3.36737,0,0,0,0,0,0,5.01355,50.50629,5.53351,46.74243,4.51846,44.21106,-25.87366,47.40244,-7.69287,53.45935,-31.02869,33.12824,-16.86865,42.95499,-19.50977,34.06631,-23.2821,22.06332,0,0,-1.54285,3.0965],"curve":0.25,"c3":0.75},{"time":2,"vertices":[-17.08643,17.83679,-17.44031,0.94272,-15.75977,7.53522,-18.79791,-5.59998,-17.65155,-8.5495,0,0,0,0,0,0,0,0,0,0,6.07556,-17.28943,3.21625,-18.04211,6.07556,-17.28943,9.86487,-15.44278,3.21625,-18.04211,9.86487,-15.44278,0,0,0,0,-13.87073,36.55914]}]},"Layer 95":{"armorgirl/Layer 95":[{"offset":2,"vertices":[-2.20093,7.36334,0,0,0.4751,9.22502,0,0,0,0,0.19385,-8.08569,20.05164,7.22263,0,0,0,0,-5.24707,20.99931]},{"time":1,"vertices":[5.84143,-4.99448,-1.02881,-5.02814,0,0,0.03516,-6.87354,0,0,0,0,0,0,0,0,0,0,0,0,-12.10242,-11.42709],"curve":0.25,"c3":0.75},{"time":2,"offset":2,"vertices":[-2.20093,7.36334,0,0,0.4751,9.22502,0,0,0,0,0.19385,-8.08569,20.05164,7.22263,0,0,0,0,-5.24707,20.99931]}]},"Layer 96":{"armorgirl/Layer 96":[{"offset":32,"vertices":[-1.41736,10.06183,-5.22101,8.72192,11.91235,8.45697,9.71686,9.47461,6.15869,0.32886],"curve":0.25,"c3":0.75},{"time":1,"offset":32,"vertices":[4.78369,-0.02136,4.40125,0.60919,19.20886,2.99268,18.55035,6.04303,4.35742,-4.06567],"curve":0.25,"c3":0.75},{"time":2,"offset":32,"vertices":[-1.41736,10.06183,-5.22101,8.72192,11.91235,8.45697,9.71686,9.47461,6.15869,0.32886]}]},"Layer 97":{"armorgirl/Layer 97":[{"vertices":[0.70984,13.0715,2.43091,6.34015,0,0,6.50903,2.69073,6.50903,2.69073,0,0,-0.89038,2.67896,0,0,0,0,-5.23596,-0.1543,-5.23596,-0.1543,-4.2843,0.16144,0,0,1.40649,8.60376,4.99866,12.28091,2.00537,10.66757,3.62451,11.71497,3.62451,11.71497,-1.13965,8.54675,0.45618,11.4032],"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.5,"vertices":[6.79981,13.13206,6.02008,5.08713,4.36621,-0.38864,5.40118,1.5943,5.59894,2.62994,1.97125,2.01666,2.61188,4.02832,1.1748,9.44013,-3.18127,2.5719,-5.90668,3.41794,-1.36572,6.75617,-0.71191,5.52106,4.28693,-1.4129,9.22315,3.56885,10.2594,12.43355,7.81506,11.16905,3.93719,3.40774,5.05115,2.2698,3.29877,2.34589,4.93494,5.26831],"curve":0.375,"c2":0.5,"c3":0.75},{"time":1,"vertices":[12.33923,3.13519,9.60925,3.83411,8.73242,-0.77728,4.29333,0.49786,4.68884,2.56915,3.9425,4.03333,6.11414,5.37769,2.34961,18.88025,-6.36255,5.1438,-6.57739,6.99017,2.50452,13.66663,2.86047,10.88068,8.57385,-2.82581,17.03979,-1.46606,14.9696,2.52875,13.07422,1.6131,4.24988,-4.89948,6.47778,-7.17535,7.73718,-3.85498,9.4137,-0.86658],"curve":0.265,"c3":0.618,"c4":0.43},{"time":1.3333,"vertices":[12.73716,1.33883,7.57209,4.5453,6.25423,-0.5567,4.92213,1.12018,5.2054,2.60366,2.82365,2.8887,4.12631,4.61181,1.68281,13.52218,-4.55691,3.68403,-6.1967,4.96263,0.30783,9.74436,0.83284,7.83864,6.14066,-2.02386,12.60319,1.39167,15.83818,0.68012,13.63122,-0.43353,4.0724,-0.18443,5.66805,-1.81443,5.21801,-0.33547,6.87162,2.61549],"curve":0.351,"c2":0.4,"c3":0.757},{"time":2,"vertices":[0.70984,13.0715,2.43091,6.34015,0,0,6.50903,2.69073,6.50903,2.69073,0,0,-0.89038,2.67896,0,0,0,0,-5.23596,-0.1543,-5.23596,-0.1543,-4.2843,0.16144,0,0,1.40649,8.60376,4.99866,12.28091,2.00537,10.66757,3.62451,11.71497,3.62451,11.71497,-1.13965,8.54675,0.45618,11.4032]}]},"Layer 98":{"armorgirl/Layer 98":[{"vertices":[-1.84924,-2.18587,-1.47546,-5.76346,-0.72681,-4.40121,1.2135,1.61116,2.401,0.70674,3.39355,-0.08669,3.2085,-2.48309,1.02966,-4.33575,-0.99316,-4.01889,-7.21887,-12.41206,-4.08496,-13.82387,-0.07178,-3.8513],"curve":0.25,"c3":0.75},{"time":1,"vertices":[0.51135,4.08198,0.51135,4.08198,0.51135,4.08198,0.51135,4.08198,0.22656,5.3266,-3.39941,-4.22554,-2.79065,-7.0121,-1.48523,-0.09284,0.51135,4.08198,2.14075,9.4593,2.14075,9.4593,2.14075,9.4593],"curve":0.25,"c3":0.75},{"time":2,"vertices":[-1.84924,-2.18587,-1.47546,-5.76346,-0.72681,-4.40121,1.2135,1.61116,2.401,0.70674,3.39355,-0.08669,3.2085,-2.48309,1.02966,-4.33575,-0.99316,-4.01889,-7.21887,-12.41206,-4.08496,-13.82387,-0.07178,-3.8513]}]},"Layer 99":{"armorgirl/Layer 99":[{"vertices":[2.70715,11.61392,0.05139,-4.56466,3.32068,-5.44821,2.72522,-8.01669,3.01392,-13.68071,0.05017,-9.01424,-9.28894,-8.63058,-8.60657,-4.29332,-5.38452,-3.20529,-5.35327,0.5415,0,0,0.75769,5.00967,0.73779,13.19795,2.18347,13.22168,2.62354,13.22887,2.14124,11.60465,-0.06042,4.9797,2.19507,3.74437,0.28589,1.67167,0,0,-4.34705,-2.65556],"curve":0.25,"c3":0.75},{"time":1,"vertices":[0.84814,-2.1196,5.56384,-25.89612,4.32031,-18.00247,4.93054,-26.13318,1.18164,-12.78488,2.68079,-15.97049,4.40149,-4.29526,3.08545,-26.94977,6.74255,-21.86777,-0.74463,-18.53284,2.45129,-24.89792,1.26355,-4.61987,4.39978,-2.84619,-0.0863,-3.26794,-1.45117,-3.39606,2.54871,-9.79825,8.64172,-39.53772,7.19287,-36.60669,8.30713,-37.8255,10.17517,-33.47049,8.79639,-37.69809],"curve":0.25,"c3":0.75},{"time":2,"vertices":[2.70715,11.61392,0.05139,-4.56466,3.32068,-5.44821,2.72522,-8.01669,3.01392,-13.68071,0.05017,-9.01424,-9.28894,-8.63058,-8.60657,-4.29332,-5.38452,-3.20529,-5.35327,0.5415,0,0,0.75769,5.00967,0.73779,13.19795,2.18347,13.22168,2.62354,13.22887,2.14124,11.60465,-0.06042,4.9797,2.19507,3.74437,0.28589,1.67167,0,0,-4.34705,-2.65556]}]},"Layer 100":{"armorgirl/Layer 100":[{"vertices":[-1.14221,4.62622,-0.49792,-4.73949,-0.05847,4.76544,-1.14221,4.62622,-0.49792,-4.73949,-0.53162,1.4037,-0.83777,1.24498,0.00391,-1.38171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.28381,2.01744,-0.18335,2.02892],"curve":0.25,"c3":0.75},{"time":1,"vertices":[4.2926,-14.26276,-1.08887,14.8541,3.21448,-14.54388,4.2926,-14.26276,-1.08887,14.8541,1.29138,-5.81842,1.724,-5.70538,-0.43884,5.94265,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.49707,4.10028,-0.80237,4.05182,-0.49707,4.10028,0,0,2.57825,9.33769,0,0,0,0,0,0,0,0,0,0,7.80176,-26.59283,9.76001,-25.93585,5.90857,-20.13928,7.39185,-19.64172,4.58105,-15.62274,5.72803,-15.23718],"curve":0.25,"c3":0.75},{"time":2,"vertices":[-1.14221,4.62622,-0.49792,-4.73949,-0.05847,4.76544,-1.14221,4.62622,-0.49792,-4.73949,-0.53162,1.4037,-0.83777,1.24498,0.00391,-1.38171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.28381,2.01744,-0.18335,2.02892]}]},"Layer 101":{"armorgirl/Layer 101":[{"vertices":[-1.88755,-7.17242,5.41085,3.39538,10.02428,0.87464,2.72614,-9.69337],"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"vertices":[-0.71329,-6.99365,6.01776,-0.94604,8.96964,-3.42505,2.23889,-9.4729],"curve":0.25,"c3":0.75},{"time":1.1667,"vertices":[-12.8876,-8.84705,-0.27444,44.06433,19.90384,41.15259,7.29056,-11.75867],"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"vertices":[-1.88755,-7.17242,5.41085,3.39538,10.02428,0.87464,2.72614,-9.69337]}]},"Layer 102":{"armorgirl/Layer 102":[{"vertices":[-3.12976,-21.21134,1.54129,-19.01225,10.7272,-13.23832,0.94891,-13.01342,4.44356,-12.52895,-3.87063,-6.18132,-0.25288,-5.91009,0.31308,-5.10356,-0.86575,-1.06442,1.37398,-0.55499,3.62632,-1.74516,5.12688,-5.5229,4.62224,-5.90524,9.96837,-12.13208,5.7872,-12.48622,6.08283,-14.90755,0.89944,-17.99352,5.73581,-15.69673,5.66087,-19.16017],"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"vertices":[-0.04485,-20.85462,6.01035,-19.82666,16.06283,-15.67631,5.39088,-16.17545,10.00485,-16.19399,-2.62018,-9.32324,2.71241,-10.27442,3.20384,-9.56818,-0.36829,-5.24854,1.00225,-4.93849,3.05761,-5.97665,6.98775,-9.79841,6.53571,-10.17078,14.32968,-15.76968,9.17458,-15.66288,9.23569,-16.51039,2.88654,-18.12733,5.10873,-16.58923,5.12091,-19.30688],"curve":0.25,"c3":0.75},{"time":1.1667,"vertices":[-32.02811,-24.55298,-40.32321,-11.38318,-39.25513,9.59985,-40.6619,16.60742,-47.65256,21.80383,-15.58441,23.2511,-28.03064,34.97339,-26.7666,36.71948,-5.52579,38.13086,4.85626,40.50806,8.95383,37.89392,-12.30505,34.52856,-13.30243,34.05286,-30.88681,21.9436,-25.94449,17.27161,-23.45212,0.1073,-17.71509,-16.73999,11.61008,-7.33606,10.71899,-17.78577],"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"vertices":[-3.12976,-21.21134,1.54129,-19.01225,10.7272,-13.23832,0.94891,-13.01342,4.44356,-12.52895,-3.87063,-6.18132,-0.25288,-5.91009,0.31308,-5.10356,-0.86575,-1.06442,1.37398,-0.55499,3.62632,-1.74516,5.12688,-5.5229,4.62224,-5.90524,9.96837,-12.13208,5.7872,-12.48622,6.08283,-14.90755,0.89944,-17.99352,5.73581,-15.69673,5.66087,-19.16017]}]},"Layer 103":{"armorgirl/Layer 103":[{"offset":10,"vertices":[0.01409,-0.19739,4.1E-4,-0.19789,-15.81916,-9.57295,-6.42688,-17.30358,-1.81556,3.888,0.11003,0.50965,-0.03073,0.40136,-0.38939,-3.7471,0,0,0,0,0,0,0,0,0,0,0,0,-2.35892,7.21242,-2.57292,13.24267,-1.91208,13.35532,-0.87032,14.90671,-0.1307,14.93706,-0.176,0.30834,-0.15471,0.31957,-0.63204,-2.408,0,0,0,0,-16.72915,-12.03708,-6.54858,-7.74494,-1.3285,-10.06323,-0.97167,-10.43427,-1.23461,-10.44172,-1.71195,-10.37123,-0.40111,-2.3524,-1.10331,-9.16854,-1.52996,-9.10412,-0.54021,-15.90202,-0.92605,-15.91724,0.20792,0.43558,-1.57523,-9.90991,-10.76629,-22.07689,-1.57523,-9.90991,-1.06207,-9.91787,-1.15555,-9.91347],"curve":0.36,"c2":0.64,"c3":0.695},{"time":0.1,"offset":14,"vertices":[-16.21967,-10.36133,-6.2583,-18.2003,-2.42755,3.16901,0,0,0,0,-1.0929,-5.08179,0,0,0,0,0,0,0,0,0,0,0,0,-2.43127,7.58847,-2.65479,13.88673,-1.96057,14.00201,-0.63489,15.76901,0.15076,15.78133,0,0,0,0,-0.3678,-3.2045,0,0,0,0,-18.39331,-13.133,-7.29102,-9.04938,-1.21704,-11.55754,-1.21704,-11.55754,-1.21704,-11.55754,-1.75977,-11.48749,-0.3678,-3.2045,-1.02979,-9.7794,-1.48926,-9.72012,-0.61829,-17.52409,-1.08325,-17.53421,0,0,-1.99213,-11.02197,-12.20874,-23.46332,-1.99213,-11.02197,-1.0592,-11.68372,-1.24792,-11.67952],"curve":0.25,"c3":0.75},{"time":1.1,"offset":10,"vertices":[0.33105,-4.63866,0.00964,-4.65042,-6.80774,8.16565,-10.21997,2.87266,11.95435,20.06531,2.58569,11.97693,-0.72217,9.43201,15.43958,26.28357,0,0,0,0,0,0,0,0,0,0,0,0,-0.73096,-1.2487,-0.73096,-1.2487,-0.82092,-1.19533,-6.1676,-4.49509,-6.4635,-4.05895,-4.13599,7.24608,-3.63574,7.50988,-6.57739,15.51336,0,0,0,0,20.71448,12.62109,10.15625,21.60498,-3.8363,23.55886,4.54919,14.83947,-1.63,14.66432,-0.63599,14.74467,-1.15063,16.81991,-2.75757,4.57591,-2.4458,4.75608,1.21655,20.5947,2.61096,20.46465,4.88611,10.23608,7.80505,15.11157,21.68896,9.1178,7.80505,15.11157,-1.12646,29.81387,0.92297,29.82281],"curve":0.245,"c3":0.711,"c4":0.83},{"time":2,"offset":10,"vertices":[0.01409,-0.19739,4.1E-4,-0.19789,-15.81916,-9.57295,-6.42688,-17.30358,-1.81556,3.888,0.11003,0.50965,-0.03073,0.40136,-0.38939,-3.7471,0,0,0,0,0,0,0,0,0,0,0,0,-2.35892,7.21242,-2.57292,13.24267,-1.91208,13.35532,-0.87032,14.90671,-0.1307,14.93706,-0.176,0.30834,-0.15471,0.31957,-0.63204,-2.408,0,0,0,0,-16.72915,-12.03708,-6.54858,-7.74494,-1.3285,-10.06323,-0.97167,-10.43427,-1.23461,-10.44172,-1.71195,-10.37123,-0.40111,-2.3524,-1.10331,-9.16854,-1.52996,-9.10412,-0.54021,-15.90202,-0.92605,-15.91724,0.20792,0.43558,-1.57523,-9.90991,-10.76629,-22.07689,-1.57523,-9.90991,-1.06207,-9.91787,-1.15555,-9.91347]}]},"Layer 104":{"armorgirl/Layer 104":[{"vertices":[7.47284,-0.6832,0,0,0,0,10.16467,10.33051],"curve":0.25,"c3":0.75},{"time":1,"vertices":[18.98413,1.14193,0,0,0,0,8.6059,-5.97668],"curve":0.25,"c3":0.75},{"time":2,"vertices":[7.47284,-0.6832,0,0,0,0,10.16467,10.33051]}]},"Layer 106":{"armorgirl/Layer 106":[{"offset":24,"vertices":[0.06367,5.45385,0.06367,5.45385],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-1.29384,-9.245,-1.73807,-3.83939,0,0,0,0,0,0,0.35355,-3.05191,3.21686,8.58423,3.62428,21.22089,1.58231,6.54297,0,0,0,0,-1.29384,-9.245,-0.13751,-21.57291,0.05182,-10.12809],"curve":0.25,"c3":0.75},{"time":2,"offset":24,"vertices":[0.06367,5.45385,0.06367,5.45385]}]},"Layer 107":{"armorgirl/Layer 107":[{"offset":2,"vertices":[13.2439,10.1302],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-5.55872,-67.22736,15.36835,-26.97781,0,0,0,0,0,0,0,0,0.50891,9.70392,-2.0097,12.85526,6.30432,5.03879,-5.25482,-61.53253,-13.28796,-62.14835,-12.76929,-5.36066],"curve":0.25,"c3":0.75},{"time":2,"offset":2,"vertices":[13.2439,10.1302]}]},"Layer 108":{"armorgirl/Layer 108":[{"vertices":[-7.51208,-12.936,-7.51208,-12.936,0,0,4.18115,-0.03024,5.27734,2.29135,0,0,-13.7887,-3.22055,0,0,0,0,0,0,0,0,9.26294,22.13297,9.26294,22.13297,-1.49268,3.41284,-0.34814,13.90562,-0.34814,13.90562],"curve":0.25,"c3":0.75},{"time":1.0667,"offset":8,"vertices":[-5.56116,-18.24615,0,0,-1.3501,-15.28748,0.36365,-7.81293,-0.41431,-6.54718,0,0,0,0,7.64087,-19.99817,15.9696,-40.45575,11.78027,-39.30389,-0.06921,-8.80505,-0.06921,-8.80505],"curve":0.25,"c3":0.75},{"time":2,"vertices":[-7.51208,-12.936,-7.51208,-12.936,0,0,4.18115,-0.03024,5.27734,2.29135,0,0,-13.7887,-3.22055,0,0,0,0,0,0,0,0,9.26294,22.13297,9.26294,22.13297,-1.49268,3.41284,-0.34814,13.90562,-0.34814,13.90562]}]},"Layer 109":{"armorgirl/Layer 109":[{"vertices":[-10.21877,-11.80231,-10.21877,-11.80231,0.67503,-14.19985,0,0,0,0,0,0,-1.4445,-6.03813],"curve":0.25,"c3":0.75},{"time":1,"vertices":[-11.5236,-6.34206,-15.09221,-5.61114,-12.61243,7.87494,0,0,2.12842,-5.64944,2.43246,-6.45648,-6.74361,-7.7583,2.12842,-5.64944],"curve":0.25,"c3":0.75},{"time":2,"vertices":[-10.21877,-11.80231,-10.21877,-11.80231,0.67503,-14.19985,0,0,0,0,0,0,-1.4445,-6.03813]}]},"Layer 110":{"armorgirl/Layer 110":[{"vertices":[1.13498,-5.63477,-1.4445,6.17001,0.09618,-0.41357,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.44011,-23.38835,-1.09577,-7.04294],"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"vertices":[1.13498,-5.63477,-1.71986,7.43018,-0.01471,0.1438,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,2.45309,-27.70544,-0.47818,-8.66541],"curve":0.25,"c3":0.75},{"time":1.1667,"vertices":[1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,-8.04921,17.05267,-6.88112,8.1557],"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"vertices":[1.13498,-5.63477,-1.4445,6.17001,0.09618,-0.41357,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.13498,-5.63477,1.44011,-23.38835,-1.09577,-7.04294]}]},"Layer 111":{"armorgirl/Layer 111":[{"offset":4,"vertices":[-11.79842,20.69805,7.42817,19.06477,0.85051,-4.2801,-4.32673,6.4247,-5.68114,18.74713,18.6397,1.83926,-1.40728,-0.21538,0,0,-2.97319,2.51177,11.2817,19.73483,-0.97091,10.43307,3.87375,22.98028,10.96129,15.89066],"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"offset":4,"vertices":[-13.23212,22.42358,4.48627,23.42554,0.15491,-4.31384,-5.57501,7.53369,-6.34882,20.1524,18.85571,2.86603,0,0,0,0,-2.71021,4.30652,7.08997,27.16479,-1.69153,15.33264,1.53003,29.73071,13.49554,20.73767],"curve":0.25,"c3":0.75},{"time":1.1667,"offset":4,"vertices":[1.63196,4.53381,17.40375,-8.00879,2.37256,-15.49951,7.3667,-3.96399,0.57336,5.58301,16.61615,-7.77917,-14.59015,-2.23303,0,0,-5.43677,-14.30078,32.96533,-36.08984,5.7796,-35.46436,25.82892,-40.25537,-12.77869,-29.5144],"curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"offset":4,"vertices":[-11.79842,20.69805,7.42817,19.06477,0.85051,-4.2801,-4.32673,6.4247,-5.68114,18.74713,18.6397,1.83926,-1.40728,-0.21538,0,0,-2.97319,2.51177,11.2817,19.73483,-0.97091,10.43307,3.87375,22.98028,10.96129,15.89066]}]},"Layer 112":{"armorgirl/Layer 112":[{"offset":10,"vertices":[8.88162,22.30607,10.82546,-4.13117,10.73243,-4.21381,14.67852,9.23738,14.76361,9.19122,16.0312,6.26175,16.03469,4.72074],"curve":0.375,"c2":0.62,"c3":0.716},{"time":0.2,"offset":10,"vertices":[12.38208,7.52782,11.05969,-2.70886,11.05005,-2.73853,13.89075,9.36933,14.80347,9.27279,16.22339,4.48962,16.27905,1.94064],"curve":0.25,"c3":0.75},{"time":1.1,"offset":10,"vertices":[5.67529,-47.19677,10.39844,-24.8255,9.09558,-25.3097,5.23145,-10.89838,5.07715,-11.00891,1.07874,-15.80507,0.63708,-10.25294],"curve":0.312,"c3":0.646,"c4":0.35},{"time":1.5,"offset":10,"vertices":[9.95734,4.37187,12.7759,-2.67162,12.02149,-2.92232,6.22082,-1.98064,6.59496,-2.03723,2.42559,4.75676,2.10448,8.38821],"curve":0.324,"c2":0.3,"c3":0.697,"c4":0.76},{"time":2,"offset":10,"vertices":[8.88162,22.30607,10.82546,-4.13117,10.73243,-4.21381,14.67852,9.23738,14.76361,9.19122,16.0312,6.26175,16.03469,4.72074]}]},"Layer 113":{"armorgirl/Layer 113":[{"vertices":[-6.03174,1.47269,-6.03174,1.47269,-6.03174,1.47269,-6.03174,1.47269],"curve":0.25,"c3":0.75},{"time":1,"vertices":[8.62549,-41.93164,-0.17786,-11.93704,1.97461,-19.26819,10.77844,-49.26276],"curve":0.25,"c3":0.75},{"time":2,"vertices":[-6.03174,1.47269,-6.03174,1.47269,-6.03174,1.47269,-6.03174,1.47269]}]},"Layer 114":{"armorgirl/Layer 114":[{"vertices":[0.12415,6.29599,0.12415,6.29599,0.12415,6.29599,0.12415,6.29599],"curve":0.25,"c3":0.75},{"time":1,"vertices":[14.5946,-14.75256,-4.95886,17.9071,-1.67004,12.41357,17.88416,-20.24579],"curve":0.25,"c3":0.75},{"time":2,"vertices":[0.12415,6.29599,0.12415,6.29599,0.12415,6.29599,0.12415,6.29599]}]},"Layer 115":{"armorgirl/Layer 115":[{"curve":0.25,"c3":0.75},{"time":1,"vertices":[-0.64148,21.57399,0.73889,-24.80219,0.64148,-21.57408,-0.73584,24.80207],"curve":0.25,"c3":0.75},{"time":2}]}}}}}},"dragon":{"skeleton":{"hash":"s0Ma8LqwNQcGbXVnkBSZML07DTk","spine":"3.8.14-beta","x":-366.29,"y":-182.17,"width":660.39,"height":499.7},"bones":[{"name":"root","y":-176.12},{"name":"COG","parent":"root","y":176.12},{"name":"back","parent":"COG","length":115.38,"rotation":151.83,"x":16.04,"y":27.94},{"name":"chest","parent":"COG","length":31.24,"rotation":161.7,"x":52.53,"y":15.35},{"name":"neck","parent":"COG","length":41.37,"rotation":39.06,"x":64.76,"y":11.98},{"name":"L_front_thigh","parent":"chest","length":67.42,"rotation":138.94,"x":-45.59,"y":7.93},{"name":"L_wing","parent":"chest","length":301.12,"rotation":-75.51,"x":-7.25,"y":-24.66},{"name":"R_front_thigh","parent":"chest","length":81.64,"rotation":67.97,"x":-10.89,"y":28.25},{"name":"R_rear_thigh","parent":"back","length":123.47,"rotation":104.88,"x":65.31,"y":59.89},{"name":"chin","parent":"neck","length":153.16,"rotation":-69.07,"x":64.63,"y":-6.99},{"name":"head","parent":"neck","length":188.84,"rotation":8.07,"x":69.96,"y":2.5},{"name":"tail1","parent":"back","length":65.65,"rotation":44.32,"x":115.38,"y":-0.2},{"name":"L_front_leg","parent":"L_front_thigh","length":51.58,"rotation":43.36,"x":67.42,"y":0.03},{"name":"L_rear_thigh","parent":"R_rear_thigh","length":88.06,"rotation":28.35,"x":-8.59,"y":30.19},{"name":"R_front_leg","parent":"R_front_thigh","length":66.53,"rotation":92.7,"x":83.05,"y":-0.31},{"name":"R_rear_leg","parent":"R_rear_thigh","length":91.06,"rotation":-129.04,"x":123.47,"y":-0.27},{"name":"R_wing","parent":"head","length":359.5,"rotation":83.21,"x":-74.68,"y":20.91},{"name":"tail2","parent":"tail1","length":54.5,"rotation":12,"x":65.65,"y":0.23},{"name":"L_front_toe1","parent":"L_front_leg","length":51.45,"rotation":-98.01,"x":45.54,"y":2.43},{"name":"L_front_toe2","parent":"L_front_leg","length":61.98,"rotation":-55.26,"x":51.58,"y":-0.13},{"name":"L_front_toe3","parent":"L_front_leg","length":45.65,"rotation":-11.14,"x":54.19,"y":0.6,"scaleX":1.135},{"name":"L_front_toe4","parent":"L_front_leg","length":53.47,"rotation":19.43,"x":50.61,"y":7.09,"scaleX":1.135},{"name":"L_rear_leg","parent":"L_rear_thigh","length":103.74,"rotation":-122.41,"x":96.04,"y":-0.97},{"name":"R_front_toe1","parent":"R_front_leg","length":46.66,"rotation":8.59,"x":70.03,"y":5.31},{"name":"R_front_toe2","parent":"R_front_leg","length":53.67,"rotation":-35.02,"x":66.53,"y":0.34},{"name":"R_front_toe3","parent":"R_front_leg","length":58.39,"rotation":-74.67,"x":62.1,"y":-0.79},{"name":"R_rear_toe1","parent":"R_rear_leg","length":95,"rotation":141.98,"x":90.07,"y":2.12},{"name":"R_rear_toe2","parent":"R_rear_leg","length":99.29,"rotation":125.32,"x":89.6,"y":1.52},{"name":"R_rear_toe3","parent":"R_rear_leg","length":103.46,"rotation":112.27,"x":91.06,"y":-0.35},{"name":"tail3","parent":"tail2","length":41.78,"rotation":1.8,"x":54.5,"y":0.37},{"name":"tail4","parent":"tail3","length":34.19,"rotation":-1.8,"x":41.78,"y":0.16},{"name":"tail5","parent":"tail4","length":32.33,"rotation":-3.15,"x":34.19,"y":-0.19},{"name":"tail6","parent":"tail5","length":80.08,"rotation":-29.55,"x":32.33,"y":-0.23}],"slots":[{"name":"L_rear_leg","bone":"L_rear_leg","attachment":"dragon/L_rear_leg"},{"name":"L_rear_thigh","bone":"L_rear_thigh","attachment":"dragon/L_rear_thigh"},{"name":"L_wing","bone":"L_wing","attachment":"dragon/L_wing01"},{"name":"tail6","bone":"tail6","attachment":"dragon/tail06"},{"name":"tail5","bone":"tail5","attachment":"dragon/tail05"},{"name":"tail4","bone":"tail4","attachment":"dragon/tail04"},{"name":"tail3","bone":"tail3","attachment":"dragon/tail03"},{"name":"tail2","bone":"tail2","attachment":"dragon/tail02"},{"name":"tail1","bone":"tail1","attachment":"dragon/tail01"},{"name":"back","bone":"back","attachment":"dragon/back"},{"name":"L_front_thigh","bone":"L_front_thigh","attachment":"dragon/L_front_thigh"},{"name":"L_front_leg","bone":"L_front_leg","attachment":"dragon/L_front_leg"},{"name":"L_front_toe1","bone":"L_front_toe1","attachment":"dragon/front_toeA"},{"name":"L_front_toe4","bone":"L_front_toe4","attachment":"dragon/front_toeB"},{"name":"L_front_toe3","bone":"L_front_toe3","attachment":"dragon/front_toeB"},{"name":"L_front_toe2","bone":"L_front_toe2","attachment":"dragon/front_toeB"},{"name":"chest","bone":"chest","attachment":"dragon/chest"},{"name":"R_rear_toe1","bone":"R_rear_toe1","attachment":"dragon/rear-toe"},{"name":"R_rear_toe2","bone":"R_rear_toe2","attachment":"dragon/rear-toe"},{"name":"R_rear_toe3","bone":"R_rear_toe3","attachment":"dragon/rear-toe"},{"name":"R_rear_leg","bone":"R_rear_leg","attachment":"dragon/R_rear_leg"},{"name":"R_rear_thigh","bone":"R_rear_thigh","attachment":"dragon/R_rear_thigh"},{"name":"R_front_toe1","bone":"R_front_toe1","attachment":"dragon/front_toeB"},{"name":"R_front_thigh","bone":"R_front_thigh","attachment":"dragon/R_front_thigh"},{"name":"R_front_leg","bone":"R_front_leg","attachment":"dragon/R_front_leg"},{"name":"R_front_toe2","bone":"R_front_toe2","attachment":"dragon/front_toeB"},{"name":"R_front_toe3","bone":"R_front_toe3","attachment":"dragon/front_toeB"},{"name":"chin","bone":"chin","attachment":"dragon/chin"},{"name":"R_wing","bone":"R_wing","attachment":"dragon/R_wing01"},{"name":"head","bone":"head","attachment":"dragon/head"}],"skins":[{"name":"default","attachments":{"L_front_leg":{"dragon/L_front_leg":{"x":14.69,"y":0.49,"rotation":16,"width":84,"height":57}},"L_front_thigh":{"dragon/L_front_thigh":{"x":27.66,"y":-11.59,"rotation":58.66,"width":84,"height":72}},"L_front_toe1":{"dragon/front_toeA":{"x":31.93,"y":0.61,"rotation":109.56,"width":29,"height":50}},"L_front_toe2":{"dragon/front_toeB":{"x":26.84,"y":-4.95,"rotation":109.51,"width":56,"height":57}},"L_front_toe3":{"dragon/front_toeB":{"x":18.22,"y":-7.22,"scaleX":0.8811,"scaleY":0.9409,"rotation":99.71,"width":56,"height":57}},"L_front_toe4":{"dragon/front_toeB":{"x":23.21,"y":-11.69,"scaleX":0.8811,"rotation":79.89,"width":56,"height":57}},"L_rear_leg":{"dragon/L_rear_leg":{"x":67.29,"y":12.63,"rotation":-162.65,"width":206,"height":177}},"L_rear_thigh":{"dragon/L_rear_thigh":{"x":56.03,"y":27.39,"rotation":74.94,"width":91,"height":149}},"L_wing":{"dragon/L_wing01":{"x":129.21,"y":-45.49,"rotation":-83.7,"width":191,"height":256},"dragon/L_wing02":{"x":126.38,"y":-31.69,"rotation":-86.19,"width":179,"height":269},"dragon/L_wing03":{"x":110.27,"y":-90.89,"rotation":-86.19,"width":186,"height":207},"dragon/L_wing04":{"x":-61.62,"y":-83.27,"rotation":-86.19,"width":188,"height":135},"dragon/L_wing05":{"x":-90.02,"y":-78.14,"rotation":-86.19,"width":218,"height":213},"dragon/L_wing06":{"x":-143.77,"y":-83.72,"rotation":-86.19,"width":192,"height":331},"dragon/L_wing07":{"x":-133.05,"y":-33.9,"rotation":-86.19,"width":159,"height":255},"dragon/L_wing08":{"x":50.15,"y":-15.71,"rotation":-86.19,"width":164,"height":181},"dragon/L_wing09":{"x":85.94,"y":-11.33,"rotation":-86.19,"width":204,"height":167}},"R_front_leg":{"dragon/R_front_leg":{"x":17.8,"y":4.23,"rotation":37.63,"width":101,"height":89}},"R_front_thigh":{"dragon/R_front_thigh":{"x":35.29,"y":2.11,"rotation":130.33,"width":108,"height":108}},"R_front_toe1":{"dragon/front_toeB":{"x":24.5,"y":-2.61,"rotation":104.18,"width":56,"height":57}},"R_front_toe2":{"dragon/front_toeB":{"x":26.39,"y":1.17,"rotation":104.58,"width":56,"height":57}},"R_front_toe3":{"dragon/front_toeB":{"x":30.67,"y":-0.07,"rotation":112.3,"width":56,"height":57}},"R_rear_leg":{"dragon/R_rear_leg":{"x":60.88,"y":-5.73,"rotation":-127.67,"width":116,"height":100}},"R_rear_thigh":{"dragon/R_rear_thigh":{"x":53.25,"y":12.58,"rotation":103.29,"width":91,"height":149}},"R_rear_toe1":{"dragon/rear-toe":{"x":54.76,"y":-5.72,"rotation":134.79,"width":109,"height":77}},"R_rear_toe2":{"dragon/rear-toe":{"x":57.03,"y":-7.23,"rotation":134.43,"width":109,"height":77}},"R_rear_toe3":{"dragon/rear-toe":{"x":47.46,"y":-7.64,"rotation":134.34,"width":109,"height":77}},"R_wing":{"dragon/R_wing01":{"x":170.08,"y":-23.68,"rotation":-130.34,"width":219,"height":310},"dragon/R_wing02":{"x":171.15,"y":-19.33,"rotation":-130.34,"width":203,"height":305},"dragon/R_wing03":{"x":166.46,"y":29.24,"rotation":-130.34,"width":272,"height":247},"dragon/R_wing04":{"x":42.94,"y":134.06,"rotation":-130.34,"width":279,"height":144},"dragon/R_wing05":{"x":-8.84,"y":142.59,"rotation":-130.34,"width":251,"height":229},"dragon/R_wing06":{"x":-123.33,"y":111.22,"rotation":-130.34,"width":200,"height":366},"dragon/R_wing07":{"x":-40.17,"y":118.03,"rotation":-130.34,"width":200,"height":263},"dragon/R_wing08":{"x":48.02,"y":28.76,"rotation":-130.34,"width":234,"height":254},"dragon/R_wing09":{"x":128.1,"y":21.13,"rotation":-130.34,"width":248,"height":204}},"back":{"dragon/back":{"x":35.85,"y":19.99,"rotation":-151.83,"width":190,"height":185}},"chest":{"dragon/chest":{"x":-14.6,"y":24.79,"rotation":-161.7,"width":136,"height":122}},"chin":{"dragon/chin":{"x":66.55,"y":7.32,"rotation":30.01,"width":214,"height":146}},"head":{"dragon/head":{"x":76.69,"y":32.21,"rotation":-47.13,"width":296,"height":260}},"tail1":{"dragon/tail01":{"x":22.6,"y":-4.5,"rotation":163.85,"width":120,"height":153}},"tail2":{"dragon/tail02":{"x":18.12,"y":-1.75,"rotation":151.85,"width":95,"height":120}},"tail3":{"dragon/tail03":{"x":16.94,"y":-2.01,"rotation":150.04,"width":73,"height":92}},"tail4":{"dragon/tail04":{"x":15.35,"y":-2.18,"rotation":151.85,"width":56,"height":71}},"tail5":{"dragon/tail05":{"x":15.06,"y":-3.57,"rotation":155,"width":52,"height":59}},"tail6":{"dragon/tail06":{"x":28.02,"y":-16.83,"rotation":-175.45,"width":95,"height":68}}}}],"animations":{"flying":{"slots":{"L_wing":{"attachment":[{"name":"dragon/L_wing01"},{"time":0.0667,"name":"dragon/L_wing02"},{"time":0.1333,"name":"dragon/L_wing03"},{"time":0.2,"name":"dragon/L_wing04"},{"time":0.2667,"name":"dragon/L_wing05"},{"time":0.3333,"name":"dragon/L_wing06"},{"time":0.4,"name":"dragon/L_wing07"},{"time":0.4667,"name":"dragon/L_wing08"},{"time":0.5333,"name":"dragon/L_wing09"},{"time":0.6,"name":"dragon/L_wing01"},{"time":0.7333,"name":"dragon/L_wing02"},{"time":0.8,"name":"dragon/L_wing03"},{"time":0.8333,"name":"dragon/L_wing04"},{"time":0.8667,"name":"dragon/L_wing05"},{"time":0.9,"name":"dragon/L_wing06"},{"time":0.9333,"name":"dragon/L_wing07"},{"time":0.9667,"name":"dragon/L_wing08"},{"time":1,"name":"dragon/L_wing01"}]},"R_wing":{"attachment":[{"name":"dragon/R_wing01"},{"time":0.0667,"name":"dragon/R_wing02"},{"time":0.1333,"name":"dragon/R_wing03"},{"time":0.2,"name":"dragon/R_wing04"},{"time":0.2667,"name":"dragon/R_wing05"},{"time":0.3333,"name":"dragon/R_wing06"},{"time":0.4,"name":"dragon/R_wing07"},{"time":0.4667,"name":"dragon/R_wing08"},{"time":0.5333,"name":"dragon/R_wing09"},{"time":0.6,"name":"dragon/R_wing01"},{"time":0.7333,"name":"dragon/R_wing02"},{"time":0.7667,"name":"dragon/R_wing02"},{"time":0.8,"name":"dragon/R_wing03"},{"time":0.8333,"name":"dragon/R_wing04"},{"time":0.8667,"name":"dragon/R_wing05"},{"time":0.9,"name":"dragon/R_wing06"},{"time":0.9333,"name":"dragon/R_wing07"},{"time":0.9667,"name":"dragon/R_wing08"},{"time":1,"name":"dragon/R_wing01"}]}},"bones":{"back":{"rotate":[{},{"time":0.1667,"angle":17.39},{"time":0.5},{"time":0.8333,"angle":7.01},{"time":1}]},"neck":{"rotate":[{},{"time":0.1667,"angle":-8.18},{"time":0.3333,"angle":-23.16},{"time":0.5,"angle":-18.02},{"time":1}]},"tail1":{"rotate":[{},{"time":0.1667,"angle":-2.42},{"time":0.3333,"angle":-26.21},{"time":0.5,"angle":-29.66},{"time":0.6667,"angle":-23.15},{"time":0.8333,"angle":-55.46},{"time":1}]},"tail2":{"rotate":[{},{"time":0.1667,"angle":-1.13},{"time":0.3333,"angle":10.48},{"time":0.5,"angle":7.89},{"time":0.8333,"angle":-10.39},{"time":1}]},"tail3":{"rotate":[{},{"time":0.1667,"angle":8.25},{"time":0.3333,"angle":15.21},{"time":0.5,"angle":14.85},{"time":0.8333,"angle":-18.91},{"time":1}]},"tail4":{"rotate":[{},{"time":0.1667,"angle":17.47},{"time":0.3333,"angle":22.15},{"time":0.5,"angle":22.76},{"time":0.8333,"angle":-4.37},{"time":1}]},"tail5":{"rotate":[{},{"time":0.1667,"angle":7.4},{"time":0.3333,"angle":28.51},{"time":0.5,"angle":21.33},{"time":0.8333,"angle":-1.28},{"time":1}]},"tail6":{"rotate":[{},{"time":0.1667,"angle":46},{"time":0.4,"angle":43.53},{"time":0.5,"angle":61.79},{"time":0.8333,"angle":13.28},{"time":1}]},"R_rear_leg":{"rotate":[{},{"time":0.1667,"angle":-14.22},{"time":0.5,"angle":47.18},{"time":1}]},"R_rear_toe3":{"rotate":[{},{"time":0.5,"angle":-36.06},{"time":1}]},"R_rear_toe2":{"rotate":[{},{"time":0.5,"angle":-20.32},{"time":1}]},"R_rear_toe1":{"rotate":[{},{"time":0.5,"angle":-18.71},{"time":1}]},"head":{"rotate":[{"curve":0.408,"c2":1.37,"c3":0.675,"c4":1.43},{"time":0.5,"angle":1.04},{"time":1}]},"chin":{"rotate":[{"curve":0.417,"c2":1.15,"c3":0.494,"c4":1.28},{"time":0.3333,"angle":-5.15},{"time":0.5,"angle":9.8},{"time":0.6667,"angle":18.95},{"time":1}]},"L_front_thigh":{"rotate":[{},{"time":0.1667,"angle":-19.19},{"time":0.3333,"angle":-32.02},{"time":0.5,"angle":-19.62},{"time":1}]},"R_front_thigh":{"rotate":[{},{"time":0.1667,"angle":-12.96},{"time":0.5,"angle":16.2},{"time":1}]},"L_front_leg":{"rotate":[{},{"time":0.1667,"angle":37.77},{"time":0.5}]},"L_front_toe1":{"rotate":[{},{"time":0.1667,"angle":-16.09},{"time":0.5}]},"L_front_toe2":{"scale":[{},{"time":0.5,"x":1.331,"y":1.029},{"time":1}]},"L_front_toe4":{"rotate":[{},{"time":0.5,"angle":26.52},{"time":1}],"scale":[{},{"time":0.5,"x":1.211,"y":0.993},{"time":1}]},"L_front_toe3":{"rotate":[{},{"time":0.5,"angle":16.99},{"time":1}],"scale":[{},{"time":0.5,"x":1.355,"y":1.008},{"time":1}]},"R_front_leg":{"rotate":[{},{"time":0.1667,"angle":26.07},{"time":0.5,"angle":-21.6},{"time":1}]},"R_front_toe1":{"rotate":[{},{"time":0.1667,"angle":29.24},{"time":0.5,"angle":34.84},{"time":1}],"scale":[{},{"time":0.5,"x":1.412},{"time":1}]},"R_front_toe2":{"rotate":[{},{"time":0.1667,"angle":24.9},{"time":0.5,"angle":23.16},{"time":1}],"scale":[{},{"time":0.5,"x":1.407,"y":1.058},{"time":1}]},"R_front_toe3":{"rotate":[{},{"time":0.1667,"angle":11.01},{"time":0.5}],"scale":[{},{"time":0.5,"x":1.33,"y":1.182},{"time":1}]},"L_rear_leg":{"rotate":[{},{"time":0.3667,"angle":25.19},{"time":0.6667,"angle":-15.65},{"time":1}]},"COG":{"rotate":[{"curve":0.457,"c2":0.2,"c3":0.422,"c4":1.07},{"time":0.3333,"angle":23.93},{"time":0.6667,"angle":337.8,"curve":0.411,"c3":0.888,"c4":0.75},{"time":1}],"translate":[{"curve":0.33,"c2":1,"c3":0.816,"c4":1.34},{"time":0.5,"x":-0.01,"y":113.01,"curve":0.397,"c3":0.71,"c4":2.03},{"time":1}]}}}}},"greengirl":{"skeleton":{"hash":"BPXwDHZLGlwXjHrIjVy8T6YOK1U","spine":"3.8.14-beta","x":-312.23,"y":-12.5,"width":482.98,"height":874.12},"bones":[{"name":"root"},{"name":"core","parent":"root","x":-46.84,"y":500.83},{"name":"bone12","parent":"core","length":154.17,"rotation":-74.17,"x":13.8,"y":-28.24},{"name":"bone16","parent":"core","length":172.41,"rotation":-133.85,"x":-35.57,"y":-50.05},{"name":"bone9","parent":"core","length":39.7,"rotation":63.62,"x":-8.29,"y":16.53},{"name":"Layer 53","parent":"bone16","length":164.33,"rotation":123.17,"x":171.67,"y":8.73},{"name":"Layer 54","parent":"bone12","x":73.35,"y":12.13},{"name":"bone10","parent":"bone9","length":48.76,"rotation":-21.49,"x":48.98,"y":-4.23},{"name":"bone13","parent":"bone12","length":197.51,"rotation":-7.24,"x":173.79,"y":-2.47,"scaleX":1.0671},{"name":"bone11","parent":"bone10","length":47.69,"rotation":15.52,"x":56.07,"y":0.66},{"name":"bone14","parent":"bone13","length":42.22,"rotation":-18.43,"x":216.2,"y":1.97},{"name":"bone17","parent":"Layer 53","length":46.61,"rotation":-37.09,"x":171.89,"y":-0.23},{"name":"Layer 49","parent":"bone11","length":56.23,"rotation":152.19,"x":-28.89,"y":55.51},{"name":"Layer 51","parent":"bone11","length":98.48,"rotation":156.96,"x":39.62,"y":5.62},{"name":"bone","parent":"bone11","rotation":-57.65,"x":45.38,"y":-27.12},{"name":"bone15","parent":"bone14","length":29.78,"rotation":-30.9,"x":49.28,"y":-2.88},{"name":"bone20","parent":"bone11","x":61.09,"y":29.99},{"name":"Layer 38","parent":"bone20","length":35.64,"rotation":37.09,"x":13.36,"y":6.42,"scaleX":0.9814,"scaleY":0.9814},{"name":"Layer 52","parent":"Layer 51","length":103.41,"rotation":-87.3,"x":102.84,"y":-5.75},{"name":"bone19","parent":"Layer 49","length":91.4,"rotation":-93.15,"x":58.63,"y":-9.16},{"name":"bone2","parent":"bone","length":45.03,"rotation":-90.45,"x":0.43,"y":-9.53},{"name":"Layer 21","parent":"Layer 38","x":25.98,"y":-66.46},{"name":"Layer 22","parent":"Layer 38","length":33.35,"rotation":176.85,"x":-7.25,"y":-53.28},{"name":"Layer 23","parent":"Layer 38","length":31.87,"rotation":-131.63,"x":14.89,"y":-90.3},{"name":"Layer 24","parent":"Layer 38","length":45.01,"rotation":-173.66,"x":10.63,"y":-73.44},{"name":"Layer 39","parent":"Layer 38","x":66.89,"y":-44.64},{"name":"Layer 40","parent":"Layer 38","length":28.16,"rotation":-92.7,"x":102.21,"y":-30.19},{"name":"Layer 41","parent":"Layer 38","length":32.55,"rotation":-54.08,"x":112.2,"y":-9.29},{"name":"Layer 42","parent":"Layer 38","length":19.87,"rotation":-15.83,"x":109.29,"y":39.61},{"name":"Layer 43","parent":"Layer 38","x":75.4,"y":2.88},{"name":"Layer 44","parent":"Layer 38","x":71.82,"y":54.01},{"name":"Layer 45","parent":"Layer 38","x":46.53,"y":0.49},{"name":"Layer 46","parent":"Layer 38","x":43.16,"y":49},{"name":"Layer 47","parent":"Layer 38","x":16.17,"y":32.55},{"name":"Layer 48","parent":"Layer 38","length":34.38,"rotation":-89.1,"x":53.96,"y":-51.39},{"name":"bone18","parent":"Layer 52","length":52.24,"rotation":-4.05,"x":109.97,"y":-2.16},{"name":"bone3","parent":"bone2","length":52.51,"rotation":-49.1,"x":50.68,"y":-1.79},{"name":"Layer 25","parent":"Layer 22","length":31.61,"rotation":-2.27,"x":57.28,"y":3.63},{"name":"Layer 29","parent":"Layer 24","length":40.3,"rotation":-2.25,"x":53.93,"y":0.47},{"name":"Layer 33","parent":"Layer 23","length":35.61,"rotation":-34.41,"x":49.29,"y":-7.95},{"name":"bone21","parent":"Layer 41","length":22.58,"rotation":-36.21,"x":36.11,"y":-2.48},{"name":"bone24","parent":"Layer 40","length":20.68,"rotation":-21.49,"x":32.01,"y":-1.57},{"name":"bone27","parent":"Layer 42","length":16.71,"rotation":-42.39,"x":24.28,"y":-2.3},{"name":"bone31","parent":"Layer 39","length":17.67,"rotation":-111.49,"x":12.8,"y":-2.8},{"name":"bone32","parent":"Layer 39","length":27.18,"rotation":-154.34,"x":-8.02,"y":-2.38},{"name":"bone33","parent":"Layer 39","length":19.17,"rotation":-178.65,"x":-24.02,"y":3.73},{"name":"bone35","parent":"Layer 21","length":19.53,"rotation":-90.9,"x":3.1,"y":-9.82},{"name":"bone4","parent":"bone3","length":66.37,"rotation":-26.75,"x":60.31,"y":-1.36},{"name":"Layer 26","parent":"Layer 25","length":32.19,"rotation":-16.24,"x":45.51,"y":-3.78},{"name":"Layer 30","parent":"Layer 29","length":41.58,"rotation":-17.2,"x":50.07,"y":-2.07},{"name":"Layer 34","parent":"Layer 33","length":36.5,"rotation":-23.42,"x":52.97,"y":-5.58},{"name":"bone22","parent":"bone21","length":23.15,"rotation":-11.57,"x":27.16,"y":-2.55},{"name":"bone25","parent":"bone24","length":20.57,"rotation":-10.7,"x":23.44,"y":-1.37},{"name":"bone28","parent":"bone27","length":17.45,"rotation":-12.86,"x":22.09,"y":-0.73},{"name":"bone34","parent":"bone33","length":23.35,"rotation":-16.66,"x":23.57,"y":0.53},{"name":"bone5","parent":"bone4","length":65,"rotation":-11.14,"x":75.19,"y":1.25},{"name":"Layer 27","parent":"Layer 26","length":34.78,"rotation":-1.8,"x":41.86,"y":-2.2},{"name":"Layer 35","parent":"Layer 34","length":33.82,"rotation":-8.51,"x":53.79,"y":-4.25},{"name":"Layer 55","parent":"Layer 30","length":36.38,"rotation":9.39,"x":56.82,"y":0.47},{"name":"bone23","parent":"bone22","length":18.01,"rotation":34.32,"x":26.75,"y":-1.03},{"name":"bone26","parent":"bone25","length":15.61,"rotation":26.93,"x":22.29,"y":0.42},{"name":"bone29","parent":"bone28","length":14.33,"rotation":41.38,"x":24.79,"y":0.49},{"name":"bone6","parent":"bone5","length":64.41,"rotation":3.15,"x":74.5,"y":-1.19},{"name":"Layer 28","parent":"Layer 27","length":28.48,"rotation":27.65,"x":42.99,"y":1.32},{"name":"Layer 32","parent":"Layer 55","length":33.4,"rotation":-14.14,"x":46.29,"y":-2.56},{"name":"Layer 36","parent":"Layer 35","length":33.87,"rotation":17.48,"x":49.17,"y":0.87},{"name":"bone30","parent":"bone29","length":16.02,"rotation":43.85,"x":17.89,"y":2.6},{"name":"bone7","parent":"bone6","length":47.84,"rotation":21.49,"x":73.07,"y":3.96},{"name":"Layer 37","parent":"Layer 36","length":40.95,"rotation":15.41,"x":53.56,"y":2.1},{"name":"bone8","parent":"bone7","length":36.8,"rotation":25.66,"x":54.1,"y":5.76}],"slots":[{"name":"Layer 17","bone":"bone","attachment":"greengirl/Layer 17"},{"name":"Layer 21","bone":"Layer 21","attachment":"greengirl/Layer 21"},{"name":"Layer 23","bone":"Layer 23","attachment":"greengirl/Layer 23"},{"name":"Layer 24","bone":"Layer 24","attachment":"greengirl/Layer 24"},{"name":"Layer 29","bone":"Layer 29","attachment":"greengirl/Layer 29"},{"name":"Layer 30","bone":"Layer 30","attachment":"greengirl/Layer 30"},{"name":"Layer 55","bone":"Layer 55","attachment":"greengirl/Layer 55"},{"name":"Layer 32","bone":"Layer 32","attachment":"greengirl/Layer 32"},{"name":"Layer 33","bone":"Layer 33","attachment":"greengirl/Layer 33"},{"name":"Layer 34","bone":"Layer 34","attachment":"greengirl/Layer 34"},{"name":"Layer 35","bone":"Layer 35","attachment":"greengirl/Layer 35"},{"name":"Layer 36","bone":"Layer 36","attachment":"greengirl/Layer 36"},{"name":"Layer 37","bone":"Layer 37","attachment":"greengirl/Layer 37"},{"name":"Layer 22","bone":"Layer 22","attachment":"greengirl/Layer 22"},{"name":"Layer 25","bone":"Layer 25","attachment":"greengirl/Layer 25"},{"name":"Layer 26","bone":"Layer 26","attachment":"greengirl/Layer 26"},{"name":"Layer 27","bone":"Layer 27","attachment":"greengirl/Layer 27"},{"name":"Layer 28","bone":"Layer 28","attachment":"greengirl/Layer 28"},{"name":"Layer 53","bone":"Layer 53","attachment":"greengirl/Layer 53"},{"name":"Layer 20","bone":"core","attachment":"greengirl/Layer 20"},{"name":"Layer 54","bone":"Layer 54","attachment":"greengirl/Layer 54"},{"name":"Layer 49","bone":"Layer 49","attachment":"greengirl/Layer 49"},{"name":"Layer 38","bone":"Layer 38","attachment":"greengirl/Layer 38"},{"name":"Layer 50","bone":"bone20","attachment":"greengirl/Layer 50"},{"name":"Layer 47","bone":"Layer 47","attachment":"greengirl/Layer 47"},{"name":"Layer 46","bone":"Layer 46","attachment":"greengirl/Layer 46"},{"name":"Layer 45","bone":"Layer 45","attachment":"greengirl/Layer 45"},{"name":"Layer 44","bone":"Layer 44","attachment":"greengirl/Layer 44"},{"name":"Layer 43","bone":"Layer 43","attachment":"greengirl/Layer 43"},{"name":"Layer 42","bone":"Layer 42","attachment":"greengirl/Layer 42"},{"name":"Layer 41","bone":"Layer 41","attachment":"greengirl/Layer 41"},{"name":"Layer 40","bone":"Layer 40","attachment":"greengirl/Layer 40"},{"name":"Layer 48","bone":"Layer 48","attachment":"greengirl/Layer 48"},{"name":"Layer 39","bone":"Layer 39","attachment":"greengirl/Layer 39"},{"name":"Layer 52","bone":"Layer 52","attachment":"greengirl/Layer 52"},{"name":"Layer 51","bone":"Layer 51","attachment":"greengirl/Layer 51"}],"skins":[{"name":"default","attachments":{"Layer 17":{"greengirl/Layer 17":{"type":"mesh","uvs":[0.94215,0.00502,0.94816,0.0993,0.93013,0.19774,0.88054,0.29895,0.82269,0.36827,0.75507,0.4168,0.69347,0.44314,0.6251,0.46255,0.54621,0.46533,0.47033,0.46117,0.39369,0.45562,0.31105,0.44453,0.24794,0.45978,0.17206,0.49721,0.11045,0.55129,0.06988,0.62061,0.0248,0.71628,0,0.81056,0,0.90484,0.01729,0.91593,0.0248,0.98109,0.06011,1,0.08866,0.95059,0.11346,0.97971,0.14952,0.92009,0.19159,0.91593,0.21488,0.98109,0.27724,0.93118,0.281,0.88959,0.32457,0.88404,0.33659,0.81888,0.38092,0.77035,0.4538,0.74539,0.50338,0.73846,0.56349,0.72598,0.63186,0.72321,0.69271,0.71073,0.7716,0.66636,0.83546,0.61229,0.89632,0.54713,0.93464,0.49583,0.97971,0.40155,1,0.31836,1,0.2421,1,0.09791,1,0,0.9722,0.05909,0.96844,0.18249,0.94816,0.28647,0.8843,0.43066,0.81217,0.50137,0.74906,0.53742,0.6251,0.58318,0.54095,0.58595,0.40722,0.58872,0.32908,0.58318,0.23892,0.61506,0.17807,0.69964,0.09542,0.80224,0.24193,0.81472,0.33058,0.68716],"triangles":[21,20,22,26,25,27,20,19,22,23,22,24,24,22,58,25,24,58,58,22,19,25,58,59,58,19,17,19,18,17,17,16,58,58,16,57,16,15,57,27,25,28,25,59,28,58,57,59,15,14,57,29,28,30,30,28,59,30,59,60,59,57,60,57,56,60,57,14,56,14,13,56,56,12,55,56,13,12,31,30,60,56,55,60,12,11,55,31,60,32,33,32,54,32,60,54,33,54,53,60,55,54,55,10,54,54,9,53,54,10,9,55,11,10,33,53,34,53,9,8,34,52,35,34,53,52,35,52,36,36,52,37,53,8,52,8,7,52,51,52,7,37,51,38,51,50,38,38,50,39,51,5,50,51,6,5,49,50,5,52,51,37,51,7,6,43,48,2,39,50,49,49,5,4,40,39,49,40,49,41,4,3,49,41,3,48,41,49,3,41,48,42,48,43,42,3,2,48,1,0,46,46,45,44,43,2,47,47,44,43,2,1,47,47,1,44,1,46,44,46,0,45],"vertices":[1,14,-11.45,-1.29,1,2,14,-9.15,-20.8,0.33333,20,11.35,-9.5,0.66667,2,20,31.78,-16.23,0.66667,36,-1.45,-23.74,0.33333,2,20,52.87,-35.02,0.33333,36,26.56,-20.1,0.66667,2,36,52.69,-23.52,0.66667,47,3.17,-23.22,0.33333,2,36,78.86,-32.64,0.33333,47,30.64,-19.59,0.66667,2,47,54.8,-19.88,0.66667,55,-15.92,-24.67,0.33333,1,55,10.35,-21.83,1,2,55,40.48,-22.62,0.66667,62,-35.15,-19.51,0.33333,2,55,69.4,-24.78,0.33333,62,-6.4,-23.27,0.66667,1,62,22.62,-27.35,1,2,62,53.8,-32.79,0.66667,67,-31.4,-27.14,0.33333,2,62,78.1,-32.06,0.33333,67,-8.52,-35.36,0.66667,1,67,20.8,-41.74,1,2,67,46.85,-42.56,0.66667,69,-27.44,-40.42,0.33333,2,67,67.19,-36.89,0.33333,69,-6.65,-44.12,0.66667,1,69,19.53,-45.89,1,1,69,40.81,-41.67,1,1,69,56.37,-29.89,1,1,69,54.22,-23.24,1,1,69,63.24,-12.81,1,1,69,58.22,0.31,1,1,69,43.48,2.83,1,1,69,42.57,14.02,1,1,69,24.42,17.56,1,1,69,14.03,29.85,1,2,67,52.09,54.81,0.33333,69,19.42,45.09,0.66667,2,67,26.18,56.52,0.66667,69,-3.2,57.84,0.33333,1,67,20.97,49.52,1,1,67,5.64,56.12,1,2,62,51.85,45.29,0.33333,67,-4.61,46.23,0.66667,2,62,33.99,36.99,0.66667,67,-24.27,45.05,0.33333,1,62,5.78,34.63,1,2,55,59.37,33.13,0.33333,62,-13.21,35.1,0.66667,2,55,36.31,31.58,0.66667,62,-36.32,34.83,0.33333,1,55,10.2,32.18,1,2,47,68.22,33.87,0.33333,55,-13.14,30.65,0.66667,2,47,36.76,32.09,0.66667,55,-43.66,22.83,0.33333,2,36,81.75,18.08,0.33333,47,10.41,27.01,0.66667,2,36,55.31,22.9,0.66667,47,-15.38,19.42,0.33333,1,36,37.28,24.32,1,1,36,11.52,20.65,1,2,20,56.55,10.64,0.33333,36,-5.55,12.57,0.66667,2,20,40.76,10.52,0.66667,36,-15.8,0.56,0.33333,2,14,10.65,-20.52,0.33333,20,10.91,10.3,0.66667,1,14,10.65,-0.25,1,1,20,2.96,-0.38,1,1,20,28.51,-1.62,1,1,36,5.23,-5.3,1,1,36,43.16,1.58,1,1,47,13.6,2.59,1,1,47,38.79,4.12,1,1,55,11.47,3.11,1,1,55,43.61,2.24,1,1,62,20.24,0.58,1,1,62,49.82,-3.55,1,1,67,9.25,-8.36,1,1,67,37.93,-3.43,1,1,69,17.44,-13.64,1,1,67,27.15,28.91,1,1,62,51.4,17.93,1],"hull":46}},"Layer 20":{"greengirl/Layer 20":{"type":"mesh","uvs":[0.89243,0,0.95696,0.04831,0.92521,0.09845,0.86067,0.14445,0.78794,0.16875,0.75721,0.20338,0.75413,0.21941,0.78896,0.2375,0.84326,0.2773,0.85452,0.31504,0.87091,0.35396,0.88526,0.41289,0.88833,0.47647,0.8914,0.51317,0.94262,0.55194,0.97565,0.59684,0.97258,0.63767,1,0.65835,1,0.69815,0.94902,0.77517,0.91931,0.86719,0.92443,0.87701,0.96848,0.90596,0.9357,0.94014,0.88858,0.97115,0.82916,0.99235,0.76975,1,0.71648,1,0.71751,0.96288,0.74926,0.93445,0.7759,0.89,0.77282,0.85485,0.77692,0.84089,0.74107,0.74784,0.66321,0.67341,0.69895,0.64536,0.68973,0.57196,0.65183,0.54456,0.58525,0.4908,0.53095,0.41792,0.46232,0.46082,0.3773,0.49442,0.28715,0.5213,0.21954,0.54766,0.12837,0.55645,0.03822,0.55077,0,0.5213,0,0.46599,0.04744,0.40189,0.14886,0.34555,0.25744,0.29261,0.35271,0.26314,0.39573,0.25435,0.4111,0.24195,0.43159,0.19923,0.46335,0.17079,0.50535,0.13978,0.50535,0.1098,0.47461,0.07413,0.55144,0.0426,0.63749,0.03329,0.69076,0.00228,0.7932,0,0.80066,0.03452,0.66294,0.10335,0.6113,0.15748,0.53317,0.20559,0.49079,0.25972,0.45901,0.30516,0.48682,0.3673,0.53449,0.33924,0.58349,0.25905,0.68016,0.22831,0.46828,0.37732,0.43252,0.33456,0.39412,0.28177,0.41403,0.30914,0.29348,0.34997,0.21005,0.39608,0.13722,0.44085,0.08822,0.4883,0.62454,0.32659,0.66956,0.39474,0.71459,0.47493,0.75696,0.52505,0.79139,0.54777,0.80331,0.58586,0.80728,0.61727,0.80993,0.66805,0.82582,0.74356,0.83509,0.83043,0.83774,0.85382,0.83906,0.87654,0.8192,0.93599,0.78609,0.96606,0.76399,0.07827,0.74837,0.29199,0.79491,0.37174,0.82213,0.46568,0.74307,0.14062,0.83674,0.09397],"triangles":[75,51,52,53,76,75,74,76,68,77,50,51,77,51,75,77,75,76,73,74,69,78,49,50,78,50,77,79,48,49,79,49,78,73,41,74,40,73,39,80,48,79,47,48,80,74,41,77,74,77,76,40,41,73,46,47,80,42,78,77,42,77,41,43,78,42,79,78,43,44,80,79,45,46,80,43,44,79,45,80,44,25,93,24,94,93,25,94,27,28,94,28,29,26,27,94,26,94,25,93,30,92,29,30,93,23,21,22,94,29,93,24,21,23,93,92,24,84,36,83,85,13,86,98,13,85,14,87,86,16,14,15,14,86,13,16,87,14,36,86,35,85,36,84,86,36,85,35,86,87,88,87,16,35,87,88,16,17,18,89,88,16,19,89,16,33,35,88,33,88,89,34,35,33,18,19,16,90,89,19,32,33,89,32,89,90,20,91,90,32,90,91,19,20,90,92,91,20,31,92,30,91,31,32,92,31,91,21,24,92,21,92,20,71,65,72,96,6,7,81,71,72,81,72,96,70,67,71,70,71,81,8,96,7,9,96,8,97,9,10,9,97,96,82,81,96,82,96,97,39,69,70,11,98,97,11,97,10,83,82,97,83,97,98,98,11,12,39,81,82,81,39,70,38,82,83,38,39,82,84,83,98,37,38,83,36,37,83,85,84,98,12,13,98,63,62,0,95,61,62,95,62,63,100,63,0,2,100,0,95,63,100,1,2,0,64,60,61,64,61,95,3,100,2,64,59,60,4,95,100,4,100,3,57,58,59,65,56,57,99,64,95,64,65,59,65,57,59,99,95,4,5,99,4,72,64,99,65,64,72,66,56,65,55,56,66,5,72,99,6,72,5,71,66,65,67,55,66,54,55,67,53,54,67,96,72,6,67,66,71,68,53,67,75,52,53,68,76,53,68,67,70,69,68,70,74,68,69,73,69,39],"vertices":[1,9,76.31,-9.15,1,1,9,61.11,-43.83,1,1,9,28.01,-52.48,1,1,9,-8.58,-50.6,1,3,4,62.84,-59.22,0.33333,7,33.04,-46.1,0.33333,9,-34.69,-38.9,0.33333,2,4,38.19,-60.19,0.66667,7,10.47,-56.03,0.33333,1,4,28.41,-63.92,1,1,2,-12.77,65.19,1,1,2,16.99,75.26,1,1,2,41.59,72.13,1,1,2,67.4,70.4,1,1,2,105.54,64.47,1,1,2,145.58,54.17,1,1,8,-11.39,50.06,1,1,8,16.04,62.91,1,1,8,46.51,69.27,1,1,8,72.61,64.31,1,1,8,87.24,71.2,1,1,8,112.83,67.34,1,1,8,159.84,43.33,1,2,8,217.52,24.78,0.55,10,-5.94,22.05,0.45,2,8,224.09,25.48,0.55,10,0.06,24.8,0.45,1,10,16.13,42.25,1,1,10,39.86,35.45,1,1,15,-2.4,29.5,1,1,15,20.76,23.72,1,1,15,37.24,12.2,1,1,15,48.64,-1.05,1,1,15,30.14,-16.53,1,1,10,46.66,-25.44,1,2,8,225.17,-23.95,0.55,10,16.7,-21.76,0.45,2,8,202.42,-21.54,0.55,10,-5.64,-26.66,0.45,1,8,193.65,-18.86,1,1,8,132.09,-21.46,1,1,8,80.44,-39.49,1,1,8,64.16,-25.18,1,1,8,16.53,-21.05,1,1,2,167,-32.55,1,1,2,127.42,-44.03,1,1,2,76.98,-48.23,1,1,3,66.3,65.64,1,1,3,101.36,60.64,1,1,3,134.44,51.41,1,1,3,162.16,47.28,1,1,3,186.99,29.66,1,1,3,204.8,5.77,1,1,3,199.66,-16.54,1,1,3,173.72,-41.44,1,1,3,132.89,-59.06,1,1,3,83.43,-60.42,1,1,3,33.94,-58.55,1,1,3,-1.51,-49.27,1,1,1,-55.95,-9.12,1,1,4,-34.7,30.37,1,1,4,-6.84,36.69,1,2,4,14.34,35.57,0.66667,7,-46.8,24.34,0.33333,2,4,38.53,32.18,0.33333,7,-23.06,30.05,0.66667,1,7,-9.99,44.5,1,1,7,-1.91,68.46,1,1,9,-6.94,70.51,1,1,9,13.28,49.91,1,1,9,39.66,45.94,1,1,9,58.89,18.34,1,1,9,41.24,4.27,1,1,7,31.16,12.93,1,2,4,43.66,-4.06,0.5,7,-5.01,-1.79,0.5,1,4,4.26,5,1,1,1,-24.78,-12.61,1,1,1,-35.2,-42.15,1,1,1,-26.08,-82.54,1,1,2,28.08,-33.16,1,1,2,-17.68,-3.48,1,2,4,12.45,-44.75,0.52,2,-28.25,32.48,0.48,1,3,25.79,29.47,1,1,3,13.85,1.76,1,1,3,-2.18,-31.09,1,1,3,6.13,-14.06,1,1,3,52.66,-24.21,1,1,3,93.23,-23.2,1,1,3,130.77,-20.28,1,1,3,164.15,-10.52,1,1,2,28.23,-2.5,1,1,2,74.89,-0.38,1,2,2,129.07,-0.39,0.74,8,-44.62,-3.58,0.26,2,2,164.2,4.09,0.66667,8,-10.33,5.3,0.33333,2,2,181.49,10.93,0.32,8,5.96,14.26,0.68,1,8,31.02,14.44,1,1,8,51.4,12.68,1,1,8,84.18,8.61,1,1,8,133.49,6.44,1,1,8,189.78,1.02,1,2,8,204.94,-0.39,0.55,10,-9.93,-5.79,0.45,2,8,219.61,-2.16,0.55,10,4.54,-2.84,0.45,1,10,43.73,-2.66,1,1,15,17.02,1.86,1,2,7,66.67,2.79,0.33644,9,10.79,-0.79,0.66356,1,2,17.68,42.72,1,1,2,71.72,43.26,1,2,2,132.9,35.19,0.87356,8,-45.31,32.2,0.12644,3,4,72.68,-37.92,0.20155,7,34.4,-22.66,0.56385,9,-27.12,-16.68,0.2346,1,9,14.94,-26.41,1],"hull":63}},"Layer 21":{"greengirl/Layer 21":{"type":"mesh","uvs":[0.83313,0.4014,0.93962,0.37444,1,0.35785,1,0.28527,0.90501,0.23343,0.77456,0.16085,0.59088,0.04058,0.55893,0,0.33265,0,0,0.2438,0,0.5196,0,0.94263,0.18623,0.90116,0.56692,0.97788,0.65477,0.63158,0.77723,0.52789,0.82515,0.30186,0.63879,0.23343,0.49504,0.13804,0.55094,0.42421],"triangles":[0,17,16,0,16,1,3,2,1,1,16,4,1,4,3,17,5,16,16,5,4,13,12,14,11,10,12,12,19,14,12,10,19,14,19,15,15,19,0,17,0,19,19,9,18,18,9,8,9,19,10,19,18,17,18,6,17,17,6,5,18,7,6,18,8,7],"vertices":[2,21,-6.13,-33.93,0.37,46,24.26,-8.85,0.63,1,46,32.29,-6.82,1,1,46,36.85,-5.54,1,1,46,37.31,1.34,1,1,46,30.63,6.72,1,2,21,17,-31.49,0.37,46,21.45,14.24,0.63,1,21,29.5,-18.88,1,1,21,33.54,-16.84,1,1,21,34.91,-0.15,1,1,21,13.85,26.28,1,1,21,-12.26,28.44,1,1,21,-52.31,31.74,1,1,21,-49.52,17.68,1,1,21,-59.09,-9.8,1,1,21,-26.84,-18.98,1,1,21,-17.77,-28.82,1,2,21,3.34,-34.12,0.37,46,24.3,0.62,0.63,2,21,10.95,-20.91,0.37,46,10.97,8.03,0.63,1,21,20.86,-11.05,1,1,21,-6.58,-12.94,1],"hull":16}},"Layer 22":{"greengirl/Layer 22":{"x":19.99,"y":0.02,"rotation":88.42,"width":31,"height":66}},"Layer 23":{"greengirl/Layer 23":{"x":24.46,"y":-1.77,"rotation":36.9,"width":39,"height":40}},"Layer 24":{"greengirl/Layer 24":{"x":24.08,"y":0.83,"rotation":78.92,"width":34,"height":64}},"Layer 25":{"greengirl/Layer 25":{"x":17.82,"y":0.58,"rotation":90.69,"width":29,"height":50}},"Layer 26":{"greengirl/Layer 26":{"x":17.9,"y":2.52,"rotation":106.93,"width":32,"height":45}},"Layer 27":{"greengirl/Layer 27":{"x":19.09,"y":1.18,"rotation":108.74,"width":31,"height":43}},"Layer 28":{"greengirl/Layer 28":{"x":20.16,"y":-2.61,"rotation":81.09,"width":31,"height":51}},"Layer 29":{"greengirl/Layer 29":{"x":23.42,"y":0.03,"rotation":81.18,"width":30,"height":51}},"Layer 30":{"greengirl/Layer 30":{"x":24.38,"y":1.55,"rotation":98.38,"width":30,"height":57}},"Layer 32":{"greengirl/Layer 32":{"x":31.54,"y":2.23,"rotation":103.13,"width":33,"height":74}},"Layer 33":{"greengirl/Layer 33":{"x":19.56,"y":1.15,"rotation":71.31,"width":28,"height":54}},"Layer 34":{"greengirl/Layer 34":{"x":19.62,"y":1.78,"rotation":94.73,"width":29,"height":57}},"Layer 35":{"greengirl/Layer 35":{"x":17.82,"y":0.4,"rotation":103.23,"width":28,"height":51}},"Layer 36":{"greengirl/Layer 36":{"x":18.34,"y":-1.15,"rotation":85.75,"width":35,"height":53}},"Layer 37":{"greengirl/Layer 37":{"x":27.1,"y":2.69,"rotation":70.34,"width":38,"height":68}},"Layer 38":{"greengirl/Layer 38":{"type":"mesh","uvs":[0.21025,0.99554,0.14639,0.99144,0.08071,0.93249,0.0246,0.82214,0.03555,0.68156,0.01776,0.52284,0.03008,0.34749,0.1245,0.18725,0.31197,0.1283,0.39245,0.12393,0.56239,0.1147,0.77723,0.18272,0.84702,0.58179,0.75397,0.72388,0.58702,0.88109,0.45566,0.92039,0.33797,0.97632,0.26408,0.999,0.14639,0.84935,0.13545,0.73446,0.12176,0.52737,0.14366,0.40493,0.19976,0.28098,0.29598,0.68289,0.27836,0.76887,0.3415,0.83699,0.44429,0.78346,0.47219,0.65694,0.36059,0.63423,0.144,0.66507],"triangles":[16,17,25,17,18,25,2,18,1,0,1,18,18,17,0,16,25,15,25,18,24,2,3,18,25,26,15,15,26,14,13,14,27,3,19,18,18,19,24,25,24,26,3,4,19,24,23,26,23,28,26,14,26,27,26,28,27,24,19,23,23,19,29,19,4,29,13,27,12,28,23,20,4,20,29,4,5,20,23,29,20,27,11,12,11,27,10,9,10,27,27,28,9,20,21,28,21,22,28,28,22,9,20,5,21,5,6,21,21,6,22,6,7,22,22,8,9,22,7,8],"vertices":[-11.43,32.32,-9.73,44.35,1.4,55.96,21.19,65.02,45.12,60.96,72.6,62.09,102.47,57.28,128.46,37.13,135.64,0.8,135.13,-14.5,134.06,-46.81,119.05,-86.53,49.55,-94.11,26.65,-74.48,2.31,-40.65,-2.38,-15.21,-10.13,7.86,-12.86,22.17,14.63,42.34,34.49,42.79,70.2,42.46,90.85,36.58,111.22,24.2,40.82,11.66,26.36,16.22,13.7,5.22,21.27,-15,42.52,-22.07,48.16,-1.26,46.25,40.19],"hull":18}},"Layer 39":{"greengirl/Layer 39":{"type":"mesh","uvs":[0.26243,1,0.38589,0.95351,0.60872,0.89407,0.72014,0.77953,0.79542,0.63454,0.76531,0.5345,0.80445,0.44606,0.7894,0.34892,0.82252,0.28078,1,0.30687,1,0.19958,0.80445,0.12419,0.67798,0.0575,0.48827,0.0169,0.28652,0,4.5E-4,0,0,0.15029,0,0.30977,0,0.48666,0.03056,0.68239,0.02153,0.79548,0,0.92306,0,0.97671,0.07272,1,0.20823,0.89842,0.34373,0.75053,0.3347,0.58525,0.23232,0.40836,0.56657,0.5838,0.51537,0.41851,0.33771,0.27353,0.64787,0.25468,0.43407,0.17059,0.26243,0.0807,0.76832,0.17349,0.53043,0.0807],"triangles":[19,18,27,18,17,27,17,16,33,16,15,33,24,20,19,23,24,0,0,24,1,24,23,21,23,22,21,24,25,1,1,25,2,21,20,24,25,24,19,19,27,26,25,28,2,4,3,28,2,28,3,25,26,28,26,29,28,19,26,25,30,32,29,28,29,5,5,29,6,7,29,31,29,7,6,27,30,29,4,28,5,26,27,29,8,10,9,31,34,8,34,11,8,8,11,10,32,35,31,31,12,34,31,35,12,34,12,11,32,13,35,32,14,13,35,13,12,29,32,31,7,31,8,17,33,30,33,15,14,33,14,32,30,33,32,27,17,30],"vertices":[1,54,31.52,2.97,1,1,54,25.41,8.36,1,2,45,45.15,13.47,0.33333,54,16.97,18.57,0.66667,3,44,50.74,-7.49,0.33333,45,33.47,20.54,0.33333,54,3.75,22,0.33333,2,44,39.21,3.8,0.66667,45,18.31,26.09,0.33333,1,44,29.1,7.92,1,1,44,21.89,14.51,1,2,43,29.36,-13.96,0.33333,44,12.44,19.14,0.66667,2,43,28.89,-6.42,0.66667,44,6.96,24.35,0.33333,1,43,38.54,-6.46,1,1,43,35.2,4.64,1,1,43,23.12,9.5,1,1,43,14.74,14.51,1,2,25,26.09,-12.35,0.14,43,4.03,15.86,0.86,2,25,28.77,-2.05,0.72,43,-6.54,14.58,0.28,1,17,96.88,-31.87,1,1,17,80.71,-30.51,1,1,17,63.54,-29.09,1,1,17,44.5,-27.52,1,1,17,23.31,-27.37,1,1,54,12.1,-13.39,1,1,54,25.85,-11.97,1,1,54,31.55,-10.91,1,1,54,33.33,-6.73,1,1,54,21.25,-1.81,1,1,45,28.28,1.41,1,1,45,10.48,2.83,1,2,25,-14.96,4.39,0.72,44,3.32,-9.1,0.28,1,45,11.6,14.84,1,1,44,11.71,3.04,1,2,25,-0.89,-2.27,0.72,44,-6.47,2.99,0.28,1,43,19.38,-6.34,1,2,25,9.78,-8.18,0.42,43,6.12,-0.85,0.58,2,25,20.18,-0.08,0.72,43,-5.23,5.88,0.28,1,43,22.85,3.86,1,1,43,8.12,9.89,1],"hull":24}},"Layer 40":{"greengirl/Layer 40":{"type":"mesh","uvs":[0,0.17982,0.07924,0.02625,0.22076,0,0.44811,0,0.62728,0.08346,0.77785,0.23101,0.85162,0.53816,0.92841,0.65259,1,0.74292,0.93292,0.89349,0.83205,0.99888,0.67396,1,0.51135,0.95973,0.35627,0.9507,0.22378,0.93263,0.11387,0.65259,0.02503,0.45987,0,0.39964,0.21625,0.39663,0.40746,0.36953,0.54297,0.53816,0.66643,0.71883,0.83807,0.76701,0.31411,0.6827],"triangles":[17,0,18,16,17,18,15,16,18,14,15,23,7,22,6,22,7,8,9,22,8,10,22,9,22,21,6,22,10,11,20,19,5,21,23,20,21,12,23,20,5,6,21,20,6,22,11,21,11,12,21,18,0,2,14,23,13,19,4,5,19,3,4,23,19,20,23,12,13,19,2,3,23,18,19,18,2,19,15,18,23,2,0,1],"vertices":[1,17,111.22,-24.01,1,1,26,1.92,16.4,1,2,26,16.68,17.25,0.49333,41,-21.16,11.9,0.50667,3,26,40.31,16.42,0.16,41,1.14,19.78,0.50667,52,-25.85,16.64,0.33333,2,41,20.16,21.9,0.33333,52,-7.55,22.25,0.66667,2,52,9.84,23.49,0.66667,60,-0.65,26.2,0.33333,2,52,24.51,13.53,0.33333,60,7.91,10.68,0.66667,1,60,16.22,5.19,1,1,60,23.92,0.92,1,1,60,17.4,-7.29,1,2,52,34.79,-8.21,0.33333,60,7.23,-13.35,0.66667,2,52,20.6,-16.52,0.66667,60,-9.18,-14.34,0.33333,2,41,23.97,-25.09,0.33333,52,4.92,-23.21,0.66667,3,26,29.03,-32.65,0.33333,41,8.6,-30.02,0.33333,52,-9.26,-30.91,0.33333,1,17,70.3,-43.99,1,1,17,85.75,-33.79,1,1,17,96.49,-25.41,1,1,17,99.83,-23.07,1,2,26,15.48,-3.35,0.48,41,-14.73,-7.7,0.52,1,41,3.56,0.25,1,1,52,-3.25,-2.6,1,1,52,12.57,-4.27,1,1,60,7.18,-1.28,1,1,41,-0.17,-18.34,1],"hull":18}},"Layer 41":{"greengirl/Layer 41":{"type":"mesh","uvs":[0,0.63736,0.07507,0.35751,0.21339,0.08765,0.33344,0,0.46915,0,0.59702,0.061,0.74969,0.20759,0.8854,0.21758,0.96761,0.09098,1,0.08432,1,0.33419,0.98588,0.60071,0.92846,0.89723,0.84364,1,0.67532,1,0.52265,1,0.34779,0.94387,0.22122,0.92721,0.06985,0.93054,0.01635,0.90389,0,0.8106,0.10509,0.67734,0.2421,0.35084,0.38563,0.19093,0.3765,0.64736,0.53047,0.50743,0.68445,0.62737,0.82538,0.53408,0.52134,0.19759,0.70533,0.35084,0.92977,0.33419,0.80711,0.80061,0.53439,0.78062,0.35954,0.42414,0.22252,0.68733],"triangles":[21,17,20,17,34,16,19,20,18,17,18,20,7,8,9,10,7,9,30,7,10,11,30,10,29,7,30,27,30,11,26,25,29,32,26,31,31,14,32,7,29,6,27,29,30,27,26,29,31,26,27,31,27,11,12,31,11,13,14,31,12,13,31,15,16,32,29,28,6,2,3,23,33,22,23,16,24,32,33,25,24,28,23,4,5,28,4,28,5,6,25,28,29,32,25,26,14,15,32,23,3,4,28,33,23,25,33,28,24,25,32,24,34,33,22,2,23,33,34,22,1,2,22,21,1,22,34,21,22,0,1,21,20,0,21,21,34,17,16,34,24],"vertices":[1,27,-9.84,21.17,1,2,27,5.57,25.28,0.78333,40,-41.05,4.35,0.21667,2,27,26.42,24.1,0.45,40,-23.52,15.72,0.55,2,27,40.04,17.84,0.11667,40,-8.84,18.71,0.88333,1,40,7.4,17.46,1,2,40,22.48,13.41,0.66667,51,-7.79,14.7,0.33333,3,40,40.21,5.13,0.33333,51,11.24,10.14,0.33333,59,-6.51,17.96,0.33333,2,51,27.46,11.69,0.33333,59,7.76,10.1,0.66667,1,59,19.25,10.89,1,1,59,22.85,9.4,1,1,59,17.49,-1.05,1,2,51,41.66,-4.68,0.33333,59,10.26,-11.42,0.66667,2,51,36.56,-19.37,0.66667,59,-2.23,-20.67,0.33333,1,51,27.06,-25.42,1,2,40,28.44,-31.31,0.33333,51,7.01,-27.93,0.66667,3,27,26.66,-32.61,0.33333,40,10.17,-29.9,0.33333,51,-11.17,-30.2,0.33333,1,17,105.78,-29.32,1,1,17,107.81,-14.25,1,1,17,109.14,3.87,1,1,17,110.92,10.16,1,1,17,115.45,11.76,1,1,27,-1.49,11.53,1,2,27,20.98,12.47,0.35,40,-21.04,3.12,0.65,1,40,-3.29,9.28,1,1,40,-6.04,-12.02,1,1,40,12.89,-6.89,1,1,51,5.92,-10.41,1,1,51,22.16,-3.96,1,1,40,12.93,7.71,1,1,51,6.8,2.79,1,1,59,9.99,2.8,1,1,51,21.54,-16.67,1,1,40,12.37,-19.73,1,1,40,-7.25,-1.4,1,1,27,8.9,1.99,1],"hull":21}},"Layer 42":{"greengirl/Layer 42":{"type":"mesh","uvs":[0,1,0,0.80828,0.00813,0.62307,0.1321,0.44796,0.28542,0.35873,0.4469,0.28801,0.55455,0.21224,0.59043,0.11964,0.57575,0,0.64589,0,0.76985,0.05398,0.89056,0.13984,0.96069,0.2577,0.93623,0.4126,0.84162,0.54225,0.73723,0.63485,0.50235,0.77797,0.31967,0.83353,0.18266,0.92614,0.08153,1,0.2479,0.71399,0.30499,0.5574,0.48604,0.51194,0.67525,0.43113,0.73886,0.2577,0.6883,0.10954],"triangles":[18,19,1,19,0,1,18,20,17,17,20,16,25,6,7,24,25,10,7,9,25,7,8,9,25,9,10,24,11,12,24,10,11,23,24,13,14,23,13,6,25,24,13,24,12,16,22,15,23,6,24,15,23,14,22,5,23,5,6,23,22,23,15,4,5,22,21,4,22,21,22,16,3,4,21,20,3,21,18,1,20,1,2,20,20,21,16,2,3,20],"vertices":[1,17,96.94,53.43,1,1,28,1.84,13.35,1,1,28,18.89,15.9,1,3,28,37.16,7.35,0.33333,42,3.01,15.82,0.33333,53,-22.29,11.89,0.33333,2,42,19.78,13.73,0.33333,53,-5.48,13.58,0.66667,2,53,11.36,13.39,0.66667,61,-1.55,18.56,0.33333,3,53,23.66,15.69,0.33333,61,9.2,12.16,0.33333,66,0.36,12.92,0.33333,2,61,18.46,12.68,0.23,66,7.39,6.87,0.77,1,66,18.37,4.61,1,1,66,16.19,-1.77,1,2,61,31.27,-0.36,0.23,66,7.59,-11.4,0.77,2,61,28.92,-14.23,0.66667,66,-3.71,-19.78,0.33333,1,61,21.83,-24.96,1,1,61,7.78,-28.92,1,2,53,36.59,-23.47,0.33333,61,-6.99,-25.77,0.66667,3,28,31.28,-53,0.33333,53,23.95,-27.34,0.33333,61,-19.03,-20.33,0.33333,1,17,113.53,3.66,1,1,17,109.83,21.57,1,1,17,102.34,35.38,1,1,17,96.29,45.63,1,1,28,15.02,-8.32,1,1,42,10.29,-2.24,1,1,53,6.45,-7.2,1,1,53,26.1,-7.6,1,1,61,12.84,-5.66,1,1,66,5.24,-2.32,1],"hull":20}},"Layer 43":{"greengirl/Layer 43":{"x":0.59,"y":-2.41,"rotation":-94.74,"width":47,"height":17}},"Layer 44":{"greengirl/Layer 44":{"x":0.79,"y":-3.59,"rotation":-94.74,"width":16,"height":14}},"Layer 45":{"greengirl/Layer 45":{"type":"mesh","uvs":[0.01161,0.38272,0.18761,0.11225,0.39881,0,0.68481,0,0.94001,0.06243,1,0.18343,1,0.38984,0.91801,0.66743,0.76841,0.90231,0.55721,1,0.25801,1,0.06441,0.84537,0,0.68878,0.22281,0.71725,0.43401,0.51796,0.64081,0.43254,0.80801,0.48949],"triangles":[5,3,4,15,2,3,5,15,3,5,16,15,6,16,5,14,2,15,1,2,14,0,1,14,7,16,6,13,12,0,14,13,0,11,12,13,8,15,16,8,16,7,14,15,8,9,13,14,9,10,13,11,13,10,14,8,9],"vertices":[15.88,24.05,24.25,13.64,27.1,1.75,25.81,-13.92,22.54,-27.74,18.17,-30.69,11.17,-30.11,2.14,-24.84,-5.15,-15.98,-7.5,-4.13,-6.15,12.27,-0.04,22.45,5.56,25.54,3.59,13.41,9.39,1.27,11.35,-10.3,8.66,-19.31],"hull":13}},"Layer 46":{"greengirl/Layer 46":{"type":"mesh","uvs":[0,0.4873,0.25981,0.51663,0.38946,0.69996,0.37217,0.9713,0.58824,1,0.83024,0.97863,1,0.71463,1,0.32596,0.76974,0.0473,0.54503,0,0.11288,0,0,0.03997,0,0.2453,0.38081,0.4433,0.60553,0.36263,0.83888,0.45796],"triangles":[12,11,10,14,9,8,15,14,8,13,10,9,13,9,14,12,10,13,7,15,8,1,0,12,13,1,12,2,13,14,1,13,2,15,7,6,15,2,14,5,15,6,5,2,15,4,3,2,5,4,2],"vertices":[9.67,18.11,8.1,10.94,1.78,7.82,-7.11,9.04,-8.55,3.09,-8.4,-3.72,-0.11,-9.17,12.67,-10.23,22.37,-4.56,24.44,1.58,25.43,13.64,24.38,16.9,17.63,17.46,10.24,7.37,12.37,0.88,8.7,-5.37],"hull":13}},"Layer 47":{"greengirl/Layer 47":{"type":"mesh","uvs":[0.62887,1,0.80487,0.83431,1,0.58179,1,0.2977,0.8122,0.09779,0.66554,0,0.33554,0,0.13754,0,0,0,0,0.30822,0,0.70805,0.0862,0.92901,0.3502,1,0.1522,0.55022,0.26954,0.43448,0.46754,0.41344,0.80487,0.45553],"triangles":[9,8,7,15,6,5,15,5,4,14,7,6,14,6,15,9,7,14,16,15,4,16,4,3,13,9,14,16,3,2,10,9,13,1,16,2,15,16,1,11,10,13,15,13,14,0,12,15,12,13,15,11,13,12,1,0,15],"vertices":[-12.87,-7.25,-9.55,-13.35,-4.29,-20.25,2.22,-20.78,7.31,-14.98,9.95,-10.35,10.85,0.51,11.38,7.02,11.76,11.54,4.69,12.13,-4.47,12.88,-9.77,10.46,-12.11,1.92,-1.27,7.58,1.07,3.5,1.01,-3.05,-0.87,-14.07],"hull":13}},"Layer 48":{"greengirl/Layer 48":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[49.62,-36.87,-3.12,-31.68,1.87,19.07,54.61,13.88],"hull":4}},"Layer 49":{"greengirl/Layer 49":{"type":"mesh","uvs":[0.37814,0.90491,0.58449,0.91758,0.7695,0.85849,0.95925,0.74453,1,0.62002,0.93791,0.46808,0.63193,0.44487,0.48725,0.22329,0.24294,0,0.0437,0,0,0.0819,0,0.27816,0,0.62847,0.1955,0.70022,0.25954,0.83949],"triangles":[13,7,6,7,13,12,7,12,8,10,9,8,8,12,11,8,11,10,2,1,6,6,1,0,6,0,13,3,6,5,3,2,6,0,14,13,3,5,4],"vertices":[1,12,78.1,11.48,1,1,12,57.29,25.39,1,1,12,33.88,29.55,1,1,12,6.25,27.53,1,1,12,-6.45,15.29,1,1,12,-10.21,-6.37,1,1,12,20.34,-27.53,1,1,19,55.23,-35.13,1,1,19,95.63,-22.35,1,1,19,106.46,-0.81,1,1,19,98.88,8.92,1,1,19,75.04,20.9,1,1,19,32.47,42.3,1,1,19,13.13,25.55,1,1,12,86.12,-3.38,1],"hull":15}},"Layer 50":{"greengirl/Layer 50":{"type":"mesh","uvs":[0.19275,1,0.34954,0.91097,0.51438,0.83436,0.73751,0.80973,0.93049,0.7468,1,0.68114,1,0.44309,0.96064,0.23789,0.95863,0,0.81189,0,0.60484,0.02994,0.41387,0.1175,0.21888,0.21873,0.08218,0.34733,0,0.47593,0.01384,0.6784,0.07213,0.7167,0.07816,0.88908,0.08017,0.99305,0.19074,0.52791,0.38975,0.37196,0.69731,0.21873,0.26913,0.7085,0.48824,0.54159,0.77168,0.48687],"triangles":[1,0,17,0,18,17,17,22,1,1,22,2,17,16,22,22,23,2,2,23,3,3,24,4,3,23,24,4,24,5,22,16,19,16,15,19,22,19,23,24,6,5,15,14,19,19,20,23,23,20,21,23,21,24,21,20,11,14,13,19,20,13,12,20,19,13,24,7,6,7,21,9,9,8,7,7,24,21,11,10,21,20,12,11,21,10,9],"vertices":[1,16,-53.54,5.89,1,1,16,-39.91,-3.66,1,1,16,-26.6,-14.36,1,1,16,-13.4,-31.88,1,1,16,0.55,-45.43,1,1,16,8.19,-48.66,1,1,16,22.67,-39.48,1,1,16,33.08,-28.32,1,1,16,47.45,-18.99,1,1,16,39.75,-6.84,1,1,16,27.07,9.15,1,1,16,11.73,21.58,1,1,16,-4.66,33.83,1,1,16,-19.65,40.19,1,1,16,-31.78,42.04,1,1,16,-43.37,33.09,1,1,16,-42.64,26.79,1,1,16,-52.81,19.65,1,1,16,-59.03,15.47,1,1,16,-24.94,24.24,1,1,16,-5.01,13.78,1,1,16,20.44,-5.78,1,1,16,-31.81,10.79,1,1,16,-10.17,-0.91,1,1,16,8.03,-22.27,1],"hull":19}},"Layer 51":{"greengirl/Layer 51":{"type":"mesh","uvs":[0.26554,0.99083,0.41427,0.83591,0.58387,0.67716,0.73913,0.62361,0.82262,0.60639,0.95454,0.48549,1,0.44382,1,0.25256,0.97657,0.08425,0.90742,0,0.71173,0,0.50951,0.01922,0.42079,0.15693,0.26946,0.32333,0.12595,0.48399,0,0.61596,0,0.82061,0.04506,0.93345,0.12334,1,0.12203,0.83208,0.23554,0.70203,0.37644,0.52606,0.50299,0.35202,0.64389,0.23917,0.80044,0.24108,0.93873,0.33671],"triangles":[23,11,10,12,11,23,24,10,9,24,9,8,23,10,24,24,8,7,25,24,7,22,12,23,13,12,22,25,7,6,5,25,6,21,13,22,14,13,21,4,24,25,4,25,5,3,23,24,3,24,4,22,23,3,2,21,22,3,2,22,20,14,21,15,14,20,19,16,15,20,19,15,1,21,2,20,21,1,17,16,19,0,20,1,19,20,0,18,17,19,0,18,19],"vertices":[102.06,25.5,74.51,25.12,44.15,26.22,21.72,34.99,10.34,40.7,-13.13,41.77,-21.22,42.13,-32.41,25.92,-39.34,9.64,-35.68,-3.43,-11.36,-20.22,14.89,-35.93,33.97,-31.87,62.52,-30.75,89.75,-29.44,113.12,-29.06,125.1,-11.71,126.1,1.72,120.27,14.07,110.61,-0.27,88.89,-1.56,61.09,-4.39,35.17,-8.28,11.06,-5.76,-8.28,7.83,-19.87,27.8],"hull":19}},"Layer 52":{"greengirl/Layer 52":{"type":"mesh","uvs":[0.98928,0.94421,0.90069,0.99182,0.79112,0.98889,0.69087,0.9325,0.57897,0.94568,0.46939,0.89588,0.42276,0.8058,0.40178,0.70693,0.36681,0.62345,0.3062,0.61979,0.26656,0.65274,0.12785,0.66885,0,0.53044,0,0.48357,0.02936,0.45666,0.05034,0.39661,0.10979,0.37025,0.12611,0.34901,0.08531,0.29116,0.11562,0.27065,0,0.10807,0,0.06559,0.11912,0.03777,0.28231,0.01067,0.41637,0.00115,0.50729,0.00335,0.60404,0.12125,0.66582,0.25161,0.73809,0.39295,0.75907,0.46838,0.74509,0.53136,0.67864,0.55626,0.62502,0.5526,0.6087,0.50573,0.56091,0.5504,0.65183,0.6002,0.8092,0.65659,0.94791,0.71738,0.93729,0.75785,0.98391,0.80398,1,0.87795,0.91281,0.90212,0.78808,0.82083,0.64936,0.741,0.54329,0.64506,0.46402,0.57769,0.38009,0.47296,0.35442,0.3313,0.27049,0.31079,0.11895,0.48655,0.20288,0.51658,0.23785,0.5759,0.50945,0.48802,0.46982,0.44994,0.40921,0.38915,0.45234,0.28516,0.43835,0.33203,0.47798,0.40233,0.53393,0.4243,0.53976,0.46824,0.58755,0.46824],"triangles":[20,21,22,19,20,22,55,24,25,55,25,26,55,26,27,23,24,55,19,22,48,22,23,47,22,47,48,55,47,23,56,47,55,17,19,48,18,19,17,54,47,56,58,57,55,27,58,55,56,55,57,54,56,57,28,58,27,53,54,57,53,57,58,60,59,58,53,58,59,28,60,58,33,60,28,46,47,54,46,54,53,50,49,16,15,16,49,14,15,49,13,14,49,52,53,59,29,33,28,59,60,33,52,59,33,50,17,48,50,16,17,46,50,48,46,48,47,12,13,49,29,31,33,34,52,33,31,32,33,29,30,31,51,50,46,45,46,53,45,53,52,45,52,34,9,51,46,8,9,46,45,8,46,44,45,34,44,34,35,10,51,9,49,50,51,10,49,51,11,49,10,12,49,11,7,8,45,7,45,44,43,44,35,43,35,36,38,36,37,6,7,44,6,44,43,42,43,36,42,36,38,5,6,43,41,42,38,41,38,39,41,39,40,3,43,42,4,5,43,0,41,40,3,4,43,2,42,41,3,42,2,1,2,41,1,41,0],"vertices":[-28.34,-10.49,-29.46,9.18,-17.61,23.43,4.72,27.71,13.36,44.91,35.24,51.52,59.29,43.11,82.6,29.81,104.04,20.9,111.03,28.46,108.04,39.16,118.8,60.43,161.51,55.06,171.54,47.42,174.29,39.08,184.99,26.47,184.55,14.18,187.42,8.53,203.98,4.58,205.26,-2.84,251.89,-13.79,260.98,-20.72,254.74,-41.27,243.82,-67.62,232.13,-87.2,222.35,-99.06,187.21,-92.85,152.99,-79.91,115.34,-66.58,97.05,-57.11,85.01,-44.96,86.49,-31.97,92.76,-25.36,104.46,-30.8,99.8,-17.1,79.83,-21.2,51.65,-33.17,24.43,-41.91,16.86,-33.88,2.21,-32.63,-15.26,-22.74,-11.5,-7.07,18.66,-3.56,49.95,2.08,81.34,0.7,103.88,0.38,134.88,-5.41,167.83,-25.05,180.81,-17.11,158.72,31.91,143.7,25.52,127.42,30.49,118.42,-20.35,130.62,-21.23,149.84,-22.99,167.67,-45.74,159.08,-36.22,139.97,-30.08,129.54,-34.03,119.54,-27.65,114.65,-34.07],"hull":41}},"Layer 53":{"greengirl/Layer 53":{"type":"mesh","uvs":[0.51751,0.71729,0.70702,0.64498,0.79353,0.6482,0.83318,0.67072,0.91788,0.81551,0.97556,0.96351,1,0.91846,1,0.60638,0.96655,0.47768,0.95573,0.34577,0.85841,0.39081,0.82417,0.3715,0.71423,0.17846,0.64609,0.09618,0.56644,0,0.44929,0,0.21139,0,0.06,0.10124,0,0.18168,0,0.41333,0.10866,0.54524,0.33214,0.59029,0.40784,0.74151,0.09604,0.27498,0.34836,0.27176,0.48353,0.37794,0.62411,0.46159,0.74847,0.47768,0.853,0.51307,0.91969,0.62246,0.97015,0.7962,0.41799,0.54861,0.50929,0.13951],"triangles":[5,4,6,4,30,6,30,7,6,4,3,30,3,29,30,30,29,7,3,2,29,29,2,28,7,29,8,29,28,8,28,27,10,28,10,8,10,9,8,22,31,0,22,21,31,0,26,1,0,31,26,28,2,27,2,1,27,1,26,27,31,21,24,21,20,24,31,25,26,31,24,25,19,23,20,20,23,24,10,27,11,27,26,11,13,12,26,26,12,11,32,13,25,26,25,13,19,18,23,25,24,32,18,17,23,24,23,16,23,17,16,24,15,32,24,16,15,32,14,13,32,15,14],"vertices":[1,5,99.99,-43.93,1,1,5,143.06,-25.87,1,2,5,163.62,-22.43,0.66667,11,6.8,-22.7,0.33333,2,5,173.58,-23.64,0.33333,11,15.47,-17.66,0.66667,1,11,43.67,-15.68,1,1,5,214.63,-56.12,1,1,11,67.26,-10.35,1,1,11,36.05,17.96,1,1,11,17.76,23.66,1,1,11,2.82,33.69,1,2,5,172.54,14.62,0.33333,11,-8.44,12.23,0.66667,2,5,163.95,15.65,0.66667,11,-15.91,7.87,0.33333,1,5,133.08,36.34,1,1,5,114.88,44.21,1,1,5,93.61,53.41,1,1,5,65.87,48.17,1,1,5,9.53,37.54,1,1,5,-23.79,17.34,1,1,5,-35.98,3.99,1,1,5,-30.18,-26.74,1,1,5,-1.14,-39.39,1,1,5,52.91,-35.37,1,1,5,74.62,-52.05,1,1,5,-10.9,-4.1,1,1,5,48.77,7.61,1,1,5,83.44,-0.43,1,1,5,118.83,-5.25,1,1,5,148.68,-1.82,1,1,11,2.91,0.18,1,1,11,24.65,2.16,1,1,11,50.2,-4.59,1,1,5,72.2,-26.01,1,1,5,83.57,32.35,1],"hull":23}},"Layer 54":{"greengirl/Layer 54":{"type":"mesh","uvs":[0.34556,0.98527,0.37607,0.87713,0.50003,0.77895,0.6168,0.71608,0.78346,0.70476,0.8593,0.74503,0.97119,0.78894,0.97662,0.74288,1,0.62744,0.99101,0.47729,0.95613,0.24239,0.94604,0.1602,0.86478,0.08965,0.75564,0.03124,0.61107,0.00725,0.4202,0.0421,0.22523,0.15252,0.07029,0.25023,0,0.4009,0.01439,0.52431,0.07074,0.65594,0.14932,0.83781,0.2405,1,0.19825,0.86318,0.27953,0.70661,0.40125,0.6261,0.58318,0.56143,0.76732,0.51935,0.91419,0.57684,0.10782,0.43913,0.16661,0.3212,0.26485,0.24104,0.50358,0.17972,0.6956,0.15892,0.85325,0.19656],"triangles":[33,14,13,33,13,12,32,15,14,32,14,33,34,33,12,34,12,11,31,16,15,31,15,32,34,11,10,30,17,16,31,30,16,18,17,30,29,18,30,27,33,34,28,27,34,34,9,28,19,18,29,26,32,33,26,33,27,31,32,26,10,9,34,25,31,26,30,31,25,29,30,25,28,9,8,20,19,29,24,20,29,4,27,28,3,26,27,25,24,29,4,3,27,25,26,3,7,28,8,5,4,28,7,5,28,2,25,3,24,25,2,6,5,7,21,20,24,23,21,24,1,24,2,23,24,1,0,23,1,22,23,0,21,23,22],"vertices":[75.37,-42.75,62.17,-34.6,53.84,-14.33,49.92,3.66,54.73,26.37,62.95,35,73.02,48.31,67.11,50.77,52.67,58.24,32.4,62.69,-0.11,66.86,-11.41,68.61,-23.85,60.39,-35.75,48,-44.41,29.57,-47.02,2.73,-39.75,-27.5,-32.65,-51.9,-15.31,-66.97,1.62,-69.69,21.23,-67.11,48.36,-63.44,73.35,-57.35,53.58,-57.85,35.87,-41.09,29.8,-21.78,28.11,4.98,29.5,31.19,42.7,48.67,-6.15,-53.99,-19.58,-41.69,-26.5,-25.53,-25.59,8.7,-21.07,35.16,-10.1,54.83],"hull":23}},"Layer 55":{"greengirl/Layer 55":{"x":21.02,"y":-2.09,"rotation":88.99,"width":35,"height":51}}}}],"animations":{"animation":{"bones":{"core":{"rotate":[{"angle":-0.45}],"translate":[{"curve":0.25,"c3":0.75},{"time":0.8,"y":43.01,"curve":0.25,"c3":0.75},{"time":1.6}]},"bone16":{"rotate":[{"angle":-11.33,"curve":0.36,"c2":0.64,"c3":0.695},{"time":0.0667,"angle":-12.62,"curve":0.25,"c3":0.75},{"time":0.8667,"angle":9.27,"curve":0.245,"c3":0.711,"c4":0.83},{"time":1.6,"angle":-11.33}]},"Layer 53":{"rotate":[{"angle":5.51,"curve":0.375,"c2":0.62,"c3":0.716},{"time":0.1667,"angle":8.1,"curve":0.25,"c3":0.75},{"time":0.9667,"angle":-11.85,"curve":0.243,"c3":0.68,"c4":0.71},{"time":1.6,"angle":5.51}]},"bone17":{"rotate":[{"angle":6.31,"curve":0.382,"c2":0.58,"c3":0.731},{"time":0.2333,"angle":0.42,"curve":0.25,"c3":0.75},{"time":1.0333,"angle":-14.67,"curve":0.243,"c3":0.655,"c4":0.63},{"time":1.6,"angle":6.31}]},"bone12":{"rotate":[{"angle":-10.82,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1333,"angle":-11.64,"curve":0.25,"c3":0.75},{"time":0.9333,"angle":-6.64,"curve":0.25,"c3":0.75},{"time":1.6,"angle":-10.82}],"translate":[{"x":-5.75,"y":-0.04,"curve":0.369,"c2":0.63,"c3":0.706},{"time":0.1333,"x":-6.6,"y":-0.05,"curve":0.25,"c3":0.75},{"time":0.9333,"x":3.66,"y":0.03,"curve":0.244,"c3":0.694,"c4":0.77},{"time":1.6,"x":-5.75,"y":-0.04}]},"bone13":{"rotate":[{"angle":-1.78,"curve":0.375,"c2":0.62,"c3":0.716},{"time":0.1667,"angle":-2.5,"curve":0.25,"c3":0.75},{"time":0.9667,"angle":11,"curve":0.243,"c3":0.68,"c4":0.71},{"time":1.6,"angle":-1.78}]},"bone14":{"rotate":[{"angle":5.13,"curve":0.323,"c2":0.3,"c3":0.665,"c4":0.66},{"time":0.3667,"angle":-7.36,"curve":0.25,"c3":0.75},{"time":1.1,"angle":11.5,"curve":0.266,"c3":0.618,"c4":0.42},{"time":1.6,"angle":5.13}]},"bone15":{"rotate":[{"angle":8.03,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.4,"curve":0.25,"c3":0.75},{"time":1.2,"angle":16.06,"curve":0.25,"c3":0.625,"c4":0.5},{"time":1.6,"angle":8.03}]},"Layer 23":{"rotate":[{"angle":-14.06,"curve":0.36,"c2":0.64,"c3":0.695},{"time":0.0667,"angle":-13.62,"curve":0.25,"c3":0.75},{"time":0.8667,"angle":-24.04,"curve":0.245,"c3":0.711,"c4":0.83},{"time":1.6,"angle":-14.06}],"translate":[{"x":11.11,"y":4.09,"curve":0.25,"c3":0.75},{"time":0.8,"x":10.41,"y":12.27,"curve":0.25,"c3":0.75},{"time":1.6,"x":11.11,"y":4.09}]},"Layer 33":{"rotate":[{"angle":20.86,"curve":0.38,"c2":0.59,"c3":0.727},{"time":0.2,"angle":22.97,"curve":0.25,"c3":0.75},{"time":1,"angle":12.55,"curve":0.242,"c3":0.663,"c4":0.65},{"time":1.6,"angle":20.86}]},"Layer 34":{"rotate":[{"angle":17.01,"curve":0.38,"c2":0.53,"c3":0.745},{"time":0.3667,"angle":21.31,"curve":0.25,"c3":0.75},{"time":1.1,"angle":10.88,"curve":0.246,"c3":0.633,"c4":0.54},{"time":1.6,"angle":17.01}]},"Layer 35":{"rotate":[{"angle":-2.36,"curve":0.363,"c2":0.44,"c3":0.755},{"time":0.4667,"angle":4.23,"curve":0.25,"c3":0.75},{"time":1.2667,"angle":-6.19,"curve":0.258,"c3":0.619,"c4":0.45},{"time":1.6,"angle":-2.36}]},"Layer 36":{"rotate":[{"angle":-4.46,"curve":0.329,"c2":0.32,"c3":0.758},{"time":0.6,"angle":4.23,"curve":0.242,"c3":0.667,"c4":0.67},{"time":1.2,"angle":-32.61,"curve":0.379,"c2":0.6,"c3":0.724},{"time":1.6,"angle":-4.46}]},"Layer 37":{"rotate":[{"angle":-44.58,"curve":0.288,"c2":0.16,"c3":0.755},{"time":0.7667,"angle":-1.91,"curve":0.25,"c3":0.75},{"time":1.5,"angle":-45.66,"curve":0.306,"c3":0.641,"c4":0.36},{"time":1.6,"angle":-44.58}]},"Layer 24":{"rotate":[{"angle":5.48,"curve":0.25,"c3":0.75},{"time":0.8,"angle":349.94,"curve":0.25,"c3":0.75},{"time":1.6,"angle":5.48}],"translate":[{"curve":0.25,"c3":0.75},{"time":0.8,"x":-0.93,"y":10.9,"curve":0.25,"c3":0.75},{"time":1.6}]},"Layer 29":{"rotate":[{"angle":9.83,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1333,"angle":11.33},{"time":0.9333,"angle":-4.22,"curve":0.243,"c3":0.689,"c4":0.75},{"time":1.6,"angle":9.83}]},"Layer 30":{"rotate":[{"angle":1.07,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.2667,"angle":5.48,"curve":0.25,"c3":0.75},{"time":1.0333,"angle":-10.06,"curve":0.243,"c3":0.649,"c4":0.6},{"time":1.6,"angle":1.07}]},"Layer 55":{"rotate":[{"angle":-2.29,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.4,"angle":5.48},{"time":1.2,"angle":-10.06,"curve":0.25,"c3":0.625,"c4":0.5},{"time":1.6,"angle":-2.29}]},"Layer 32":{"rotate":[{"angle":-5.65,"curve":0.351,"c2":0.4,"c3":0.757},{"time":0.5333,"angle":5.48},{"time":1.3,"angle":-10.06,"curve":0.265,"c3":0.618,"c4":0.43},{"time":1.6,"angle":-5.65}]},"Layer 22":{"rotate":[{"angle":3.83,"curve":0.289,"c2":0.17,"c3":0.755},{"time":0.7333,"angle":-8.79,"curve":0.25,"c3":0.75},{"time":1.5,"angle":-355.61,"curve":0.305,"c3":0.64,"c4":0.36},{"time":1.6,"angle":3.83}],"translate":[{"curve":0.25,"c3":0.75},{"time":0.7333,"x":-0.34,"y":7.69,"curve":0.25,"c3":0.75},{"time":1.6}]},"Layer 25":{"rotate":[{"angle":4.09,"curve":0.352,"c2":0.65,"c3":0.687},{"time":0.0333,"angle":4.39},{"time":0.8333,"angle":-8.79,"curve":0.246,"c3":0.723,"c4":0.88},{"time":1.6,"angle":4.09}]},"Layer 26":{"rotate":[{"angle":2.2,"curve":0.378,"c2":0.61,"c3":0.722},{"time":0.2,"angle":4.39,"curve":0.25,"c3":0.75},{"time":0.9667,"angle":-8.79,"curve":0.242,"c3":0.671,"c4":0.68},{"time":1.6,"angle":2.2}]},"Layer 27":{"rotate":[{"angle":-0.46,"curve":0.381,"c2":0.55,"c3":0.742},{"time":0.3333,"angle":19.32},{"time":1.1,"angle":-8.79,"curve":0.245,"c3":0.637,"c4":0.56},{"time":1.6,"angle":-0.46}]},"Layer 28":{"rotate":[{"angle":-21.57,"curve":0.367,"c2":0.46,"c3":0.754},{"time":0.4333,"angle":-13.82,"curve":0.25,"c3":0.75},{"time":1.2333,"angle":-27,"curve":0.255,"c3":0.62,"c4":0.47},{"time":1.6,"angle":-21.57}]},"Layer 42":{"rotate":[{"angle":-2.65,"curve":0.36,"c2":0.64,"c3":0.695},{"time":0.0667,"angle":-2.81,"curve":0.25,"c3":0.75},{"time":0.8667,"angle":3.92,"curve":0.245,"c3":0.711,"c4":0.83},{"time":1.6,"angle":-2.65}],"translate":[{"curve":0.25,"c3":0.75},{"time":0.8,"x":-0.21,"y":-2.55,"curve":0.25,"c3":0.75},{"time":1.6}]},"bone27":{"rotate":[{"angle":-2.17,"curve":0.378,"c2":0.61,"c3":0.722},{"time":0.2,"angle":-2.81,"curve":0.25,"c3":0.75},{"time":0.9667,"angle":1.03,"curve":0.242,"c3":0.671,"c4":0.68},{"time":1.6,"angle":-2.17}]},"bone28":{"rotate":[{"angle":-7.49,"curve":0.382,"c2":0.56,"c3":0.739},{"time":0.2667,"angle":-11.59,"curve":0.25,"c3":0.75},{"time":1.0667,"angle":1.03,"curve":0.244,"c3":0.643,"c4":0.58},{"time":1.6,"angle":-7.49}]},"bone29":{"rotate":[{"angle":-0.89,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.4,"angle":-2.81,"curve":0.25,"c3":0.75},{"time":1.2,"angle":1.03,"curve":0.25,"c3":0.625,"c4":0.5},{"time":1.6,"angle":-0.89}]},"bone30":{"rotate":[{"angle":-3.01,"curve":0.357,"c2":0.42,"c3":0.756},{"time":0.5333,"angle":-23.49,"curve":0.25,"c3":0.75},{"time":1.2667,"angle":6.87,"curve":0.261,"c3":0.618,"c4":0.44},{"time":1.6,"angle":-3.01}]},"Layer 41":{"rotate":[{"angle":-2.2,"curve":0.352,"c2":0.65,"c3":0.687},{"time":0.0333,"angle":-2.47,"curve":0.25,"c3":0.75},{"time":0.8333,"angle":9.7,"curve":0.246,"c3":0.723,"c4":0.88},{"time":1.6,"angle":-2.2}],"translate":[{"x":0.42,"y":2.73,"curve":0.25,"c3":0.75},{"time":0.8,"x":-0.14,"y":-1.7,"curve":0.25,"c3":0.75},{"time":1.6,"x":0.42,"y":2.73}]},"bone21":{"rotate":[{"angle":-0.89,"curve":0.375,"c2":0.62,"c3":0.716},{"time":0.1667,"angle":-2.47,"curve":0.25,"c3":0.75},{"time":0.9667,"angle":9.7,"curve":0.243,"c3":0.68,"c4":0.71},{"time":1.6,"angle":-0.89}]},"bone22":{"rotate":[{"angle":1.49,"curve":0.382,"c2":0.56,"c3":0.739},{"time":0.2667,"angle":-2.47,"curve":0.25,"c3":0.75},{"time":1.0667,"angle":9.7,"curve":0.244,"c3":0.643,"c4":0.58},{"time":1.6,"angle":1.49}]},"bone23":{"rotate":[{"angle":4.15,"curve":0.372,"c2":0.48,"c3":0.752},{"time":0.4333,"angle":-2.47,"curve":0.25,"c3":0.75},{"time":1.2,"angle":9.7,"curve":0.252,"c3":0.622,"c4":0.48},{"time":1.6,"angle":4.15}]},"Layer 40":{"rotate":[{"angle":0.33,"curve":0.375,"c2":0.62,"c3":0.716},{"time":0.1667,"angle":-1.38,"curve":0.25,"c3":0.75},{"time":0.9667,"angle":11.77,"curve":0.243,"c3":0.68,"c4":0.71},{"time":1.6,"angle":0.33}],"translate":[{"curve":0.25,"c3":0.75},{"time":0.8,"x":-0.14,"y":-1.7,"curve":0.25,"c3":0.75},{"time":1.6}]},"bone24":{"rotate":[{"angle":3.46,"curve":0.381,"c2":0.55,"c3":0.742},{"time":0.3333,"angle":-1.38,"curve":0.25,"c3":0.75},{"time":1.1,"angle":11.77,"curve":0.245,"c3":0.637,"c4":0.56},{"time":1.6,"angle":3.46}]},"bone25":{"rotate":[{"angle":6.93,"curve":0.363,"c2":0.44,"c3":0.755},{"time":0.4667,"angle":-1.38,"curve":0.25,"c3":0.75},{"time":1.2667,"angle":11.77,"curve":0.258,"c3":0.619,"c4":0.45},{"time":1.6,"angle":6.93}]},"bone26":{"rotate":[{"angle":9.58,"curve":0.329,"c2":0.32,"c3":0.758},{"time":0.6,"angle":-1.38,"curve":0.25,"c3":0.75},{"time":1.4,"angle":11.77,"curve":0.278,"c3":0.622,"c4":0.39},{"time":1.6,"angle":9.58}]},"bone31":{"rotate":[{"angle":1.34,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1333,"curve":0.25,"c3":0.75},{"time":0.9333,"angle":33.34,"curve":0.243,"c3":0.689,"c4":0.75},{"time":1.6,"angle":1.34}]},"bone32":{"rotate":[{"angle":3.38,"curve":0.382,"c2":0.58,"c3":0.731},{"time":0.2333,"curve":0.25,"c3":0.75},{"time":1.0333,"angle":13.94,"curve":0.243,"c3":0.655,"c4":0.63},{"time":1.6,"angle":3.38}]},"bone33":{"rotate":[{"angle":1.34,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1333,"curve":0.25,"c3":0.75},{"time":0.9333,"angle":13.94,"curve":0.243,"c3":0.689,"c4":0.75},{"time":1.6,"angle":1.34}]},"bone34":{"rotate":[{"angle":3.96,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.2667,"curve":0.25,"c3":0.75},{"time":1.0333,"angle":13.94,"curve":0.243,"c3":0.649,"c4":0.6},{"time":1.6,"angle":3.96}]},"Layer 48":{"rotate":[{"angle":1.46,"curve":0.378,"c2":0.61,"c3":0.722},{"time":0.2},{"time":0.9667,"angle":15.19,"curve":0.242,"c3":0.671,"c4":0.68},{"time":1.6,"angle":1.46}],"translate":[{"x":0.54,"y":4.6,"curve":0.25,"c3":0.75},{"time":0.8,"x":-0.46,"y":-5.6,"curve":0.25,"c3":0.75},{"time":1.6,"x":0.54,"y":4.6}]},"bone2":{"rotate":[{"angle":-25.17,"curve":0.306,"c2":0.23,"c3":0.756},{"time":0.6667,"angle":-17.53,"curve":0.25,"c3":0.75},{"time":1.4667,"angle":-25.86,"curve":0.294,"c3":0.631,"c4":0.37},{"time":1.6,"angle":-25.17}]},"bone3":{"rotate":[{"angle":38.36,"curve":0.381,"c2":0.54,"c3":0.744},{"time":0.4333,"angle":40.13,"curve":0.25,"c3":0.75},{"time":1,"angle":29.55,"curve":0.246,"c3":0.634,"c4":0.54},{"time":1.6,"angle":38.36}]},"bone4":{"rotate":[{"angle":20.83,"curve":0.351,"c2":0.4,"c3":0.757},{"time":0.5333,"angle":34.35,"curve":0.25,"c3":0.75},{"time":1.3,"angle":15.97,"curve":0.265,"c3":0.618,"c4":0.43},{"time":1.6,"angle":20.83}]},"bone5":{"rotate":[{"angle":23.64,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.2667,"angle":26,"curve":0.252,"c3":0.623,"c4":0.49},{"time":0.6333,"angle":36.66,"curve":0.25,"c3":0.75},{"time":1.2,"angle":14.88,"curve":0.25,"c3":0.75},{"time":1.6,"angle":23.64}]},"bone6":{"rotate":[{"angle":-16.96,"curve":0.311,"c2":0.25,"c3":0.757},{"time":0.6667,"angle":14.64,"curve":0.25,"c3":0.75},{"time":1.4333,"angle":-20.33,"curve":0.29,"c3":0.629,"c4":0.38},{"time":1.6,"angle":-16.96}]},"bone7":{"rotate":[{"angle":-41.77,"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.4,"angle":-26.81,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.8,"angle":1.57,"curve":0.25,"c3":0.75},{"time":1.4,"angle":-40.36,"curve":0.329,"c2":0.32,"c3":0.665,"c4":0.66},{"time":1.6,"angle":-41.77}]},"bone8":{"rotate":[{"angle":-44.49,"curve":0.311,"c2":0.25,"c3":0.757},{"time":0.6667,"angle":-7.95,"curve":0.25,"c3":0.75},{"time":1.3667,"angle":-46.02,"curve":0.29,"c3":0.629,"c4":0.38},{"time":1.6,"angle":-44.49}]},"Layer 51":{"rotate":[{"angle":-0.42,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1333,"angle":0.43,"curve":0.25,"c3":0.75},{"time":0.9333,"angle":-8.43,"curve":0.243,"c3":0.689,"c4":0.75},{"time":1.6,"angle":-0.42}],"translate":[{"x":-0.52,"y":0.82,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1333,"x":-1.24,"y":1.96,"curve":0.25,"c3":0.75},{"time":0.9333,"x":6.2,"y":-9.78,"curve":0.243,"c3":0.689,"c4":0.75},{"time":1.6,"x":-0.52,"y":0.82}]},"Layer 52":{"rotate":[{"angle":-2.08,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.2667,"angle":0.43,"curve":0.25,"c3":0.75},{"time":1.0333,"angle":-8.43,"curve":0.243,"c3":0.649,"c4":0.6},{"time":1.6,"angle":-2.08}],"translate":[{"x":-1.63,"y":0.51,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.2667,"curve":0.25,"c3":0.75},{"time":1.0333,"x":-5.75,"y":1.79,"curve":0.243,"c3":0.649,"c4":0.6},{"time":1.6,"x":-1.63,"y":0.51}],"scale":[{"curve":0.25,"c3":0.75},{"time":0.8,"x":1.043,"y":1.118,"curve":0.25,"c3":0.75},{"time":1.6}]},"bone18":{"rotate":[{"angle":-4,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.4,"angle":0.43,"curve":0.25,"c3":0.75},{"time":1.2,"angle":-8.43,"curve":0.25,"c3":0.625,"c4":0.5},{"time":1.6,"angle":-4}]},"bone19":{"rotate":[{"angle":-2.08,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.2667,"angle":0.43,"curve":0.25,"c3":0.75},{"time":0.9333,"angle":-12.03,"curve":0.243,"c3":0.649,"c4":0.6},{"time":1.6,"angle":-2.08}],"scale":[{"curve":0.25,"c3":0.75},{"time":0.8,"x":1.15,"y":1.15,"curve":0.25,"c3":0.75},{"time":1.6}]},"Layer 49":{"rotate":[{"angle":5.86,"curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1333,"angle":7.39,"curve":0.25,"c3":0.75},{"time":0.9333,"angle":-8.43,"curve":0.243,"c3":0.689,"c4":0.75},{"time":1.6,"angle":5.86}],"translate":[{"x":2.73,"y":-4.3,"curve":0.25,"c3":0.75},{"time":0.8,"x":-0.99,"y":1.56,"curve":0.25,"c3":0.75},{"time":1.6,"x":2.73,"y":-4.3}]},"Layer 47":{"rotate":[{"angle":2.99}],"translate":[{"x":-0.88,"y":10.38,"curve":0.25,"c3":0.75},{"time":0.8,"x":-3.55,"y":-5.72,"curve":0.25,"c3":0.75},{"time":1.6,"x":-0.88,"y":10.38}],"scale":[{"y":0.677},{"time":0.8,"x":1.059,"y":0.998},{"time":1.6,"y":0.677}]},"Layer 45":{"translate":[{"x":0.25,"y":13.36,"curve":0.25,"c3":0.75},{"time":0.8,"x":-0.64,"y":-3.18,"curve":0.25,"c3":0.75},{"time":1.6,"x":0.25,"y":13.36}],"scale":[{"y":0.885,"curve":0.25,"c3":0.75},{"time":0.8,"y":0.972,"curve":0.25,"c3":0.75},{"time":1.6,"y":0.885}]},"Layer 43":{"translate":[{"x":1.26,"y":12.39,"curve":0.25,"c3":0.75},{"time":0.8,"x":-0.56,"y":-4.2,"curve":0.25,"c3":0.75},{"time":1.6,"x":1.26,"y":12.39}],"scale":[{"y":0.944,"curve":0.25,"c3":0.75},{"time":0.8,"y":1.036,"curve":0.25,"c3":0.75},{"time":1.6,"y":0.944}]},"Layer 44":{"translate":[{"x":0.21,"y":2.3,"curve":0.25,"c3":0.75},{"time":0.8,"x":1.5,"y":-3.27,"curve":0.25,"c3":0.75},{"time":1.6,"x":0.21,"y":2.3}],"scale":[{"y":0.644,"curve":0.25,"c3":0.75},{"time":0.8,"y":1.336,"curve":0.25,"c3":0.75},{"time":1.6,"y":0.644}]},"Layer 46":{"rotate":[{"angle":-2.08}],"translate":[{"x":-1.77,"y":3.22,"curve":0.25,"c3":0.75},{"time":0.8,"x":-1.41,"y":-6.23,"curve":0.25,"c3":0.75},{"time":1.6,"x":-1.77,"y":3.22}],"scale":[{"y":0.953,"curve":0.25,"c3":0.75},{"time":0.8,"y":1.038,"curve":0.25,"c3":0.75},{"time":1.6,"y":0.953}]},"Layer 38":{"rotate":[{"angle":0.09,"curve":0.381,"c2":0.55,"c3":0.742},{"time":0.3333,"angle":1.46,"curve":0.25,"c3":0.75},{"time":1.1,"angle":-2.26,"curve":0.245,"c3":0.637,"c4":0.56},{"time":1.6,"angle":0.09}]},"Layer 39":{"translate":[{"x":0.48,"y":4.77,"curve":0.25,"c3":0.75},{"time":0.8,"x":-0.01,"y":-5.28,"curve":0.25,"c3":0.75},{"time":1.6,"x":0.48,"y":4.77}]},"bone20":{"translate":[{"x":-0.71,"y":1.22,"curve":0.36,"c2":0.64,"c3":0.695},{"time":0.0667,"x":-0.61,"y":1.13,"curve":0.25,"c3":0.75},{"time":0.8667,"x":-2.94,"y":3.38,"curve":0.245,"c3":0.711,"c4":0.83},{"time":1.6,"x":-0.71,"y":1.22}]},"bone9":{"rotate":[{"angle":-1.86,"curve":0.36,"c2":0.64,"c3":0.695},{"time":0.0667,"angle":-1.65,"curve":0.25,"c3":0.75},{"time":0.8667,"angle":-6.58,"curve":0.245,"c3":0.711,"c4":0.83},{"time":1.6,"angle":-1.86}]},"bone10":{"rotate":[{"angle":4.31,"curve":0.375,"c2":0.62,"c3":0.716},{"time":0.1667,"angle":5.29,"curve":0.25,"c3":0.75},{"time":0.9667,"angle":-2.27,"curve":0.243,"c3":0.68,"c4":0.71},{"time":1.6,"angle":4.31}]},"bone11":{"rotate":[{"angle":1.92,"curve":0.382,"c2":0.58,"c3":0.731},{"time":0.2333,"angle":3.12,"curve":0.25,"c3":0.75},{"time":1.0333,"angle":-1.81,"curve":0.243,"c3":0.655,"c4":0.63},{"time":1.6,"angle":1.92}]}},"deform":{"default":{"Layer 17":{"greengirl/Layer 17":[{"offset":18,"vertices":[-1.46056,-2.64867,-0.93903,-2.87541,-0.79224,-2.42583,-1.03604,-2.33214,-0.80236,-1.8061,-0.52591,-1.18379,-0.29546,-1.26124,-0.37771,-0.85017,-0.2122,-0.90589,0.71578,-0.33487,0.3985,-2.31269,0.83025,-2.19487,0.25613,-3.05596,0.83159,-2.95175,0.80356,-3.66889,-0.33128,-9.90333,2.01435,-9.54624,1.12667,-8.0552,3.26446,-7.4315,2.81971,-5.00569,3.07412,-7.15522,3.3911,-7.37269,0.35655,-1.11018,0.15795,-0.49149,-0.23043,0.71824,-0.42163,1.31397,-0.72432,2.25698,-0.25927,-0.16314,-0.79229,0.13808,-1.21761,0.60668,-1.4337,0.15474,-0.65036,2.65914,-1.58613,2.27204,0.24249,3.70294,0.44181,4.6093,2.3224,5.14004,1.28534,5.22068,0.63811,2.7236,0.10952,2.79527,0.45967,1.96197,0.69936,1.57442,0.39298,1.6773,0.47628,1.07223,0.26764,1.1422,0.19701,0.44361,0.01389,0.04261,0.01815,0.04099,-0.17353,-0.5313,-0.22692,-0.5107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.50227,-1.53795,-1.06452,1.48792,-0.80371,2.25609,-1.37369,4.82561,0.11707,1.43283,-0.55929,-1.81682,-0.47868,-2.27256,-1.43226,-4.63881,0.82731,3.20225,-0.15395,4.65583],"curve":0.379,"c2":0.6,"c3":0.724},{"time":0.2,"offset":48,"vertices":[-0.52472,-5.22272,0.02643,-5.24905,0.63858,-2.83392,0.93256,-2.75137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.18732,-7.3273,0.75208,-10.89075,0.75208,-10.89075,1.89096,-10.75192],"curve":0.25,"c3":0.75},{"time":1,"offset":18,"vertices":[-7.91776,-14.35858,-5.09052,-15.58777,-4.29477,-13.15057,-5.61642,-12.64264,-4.34966,-9.79095,-2.85097,-6.41742,-1.60172,-6.83728,-2.04759,-4.60883,-1.15032,-4.91089,3.88026,-1.81534,2.16029,-12.5372,4.50082,-11.8985,1.38849,-16.56653,4.50812,-16.00159,4.35615,-19.88925,0.52393,-30.59659,10.80307,-28.54434,3.28452,-31.13876,13.57393,-28.12259,15.28583,-27.13614,16.66498,-38.78885,18.38333,-39.96777,1.93289,-6.01837,0.85623,-2.6644,-1.24918,3.89362,-2.28568,7.12311,-3.92661,12.23523,-1.40553,-0.88437,-4.29504,0.74857,-6.60071,3.28885,-7.77216,0.83884,-3.52562,14.41537,-8.59848,12.31686,1.31456,20.07382,2.39505,24.9873,12.58987,27.86444,6.96793,28.30161,3.45924,14.76477,0.59373,15.15332,2.49191,10.63593,3.79129,8.53503,2.13037,9.09271,2.58192,5.81262,1.4509,6.19196,1.06798,2.40485,0.07532,0.23102,0.09837,0.22223,-0.94072,-2.88019,-1.23016,-2.76855,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.72284,-8.33734,-5.77084,8.0661,-4.35694,12.23041,-7.44684,26.15991,-4.61453,40.16187,-6.3569,38.29953,-5.91992,35.82892,-16.12439,22.38763,4.48489,17.35956,-0.83459,25.2395],"curve":0.242,"c3":0.667,"c4":0.67},{"time":1.6,"offset":18,"vertices":[-1.46056,-2.64867,-0.93903,-2.87541,-0.79224,-2.42583,-1.03604,-2.33214,-0.80236,-1.8061,-0.52591,-1.18379,-0.29546,-1.26124,-0.37771,-0.85017,-0.2122,-0.90589,0.71578,-0.33487,0.3985,-2.31269,0.83025,-2.19487,0.25613,-3.05596,0.83159,-2.95175,0.80356,-3.66889,-0.33128,-9.90333,2.01435,-9.54624,1.12667,-8.0552,3.26446,-7.4315,2.81971,-5.00569,3.07412,-7.15522,3.3911,-7.37269,0.35655,-1.11018,0.15795,-0.49149,-0.23043,0.71824,-0.42163,1.31397,-0.72432,2.25698,-0.25927,-0.16314,-0.79229,0.13808,-1.21761,0.60668,-1.4337,0.15474,-0.65036,2.65914,-1.58613,2.27204,0.24249,3.70294,0.44181,4.6093,2.3224,5.14004,1.28534,5.22068,0.63811,2.7236,0.10952,2.79527,0.45967,1.96197,0.69936,1.57442,0.39298,1.6773,0.47628,1.07223,0.26764,1.1422,0.19701,0.44361,0.01389,0.04261,0.01815,0.04099,-0.17353,-0.5313,-0.22692,-0.5107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.50227,-1.53795,-1.06452,1.48792,-0.80371,2.25609,-1.37369,4.82561,0.11707,1.43283,-0.55929,-1.81682,-0.47868,-2.27256,-1.43226,-4.63881,0.82731,3.20225,-0.15395,4.65583]}]},"Layer 20":{"greengirl/Layer 20":[{"offset":2,"vertices":[-3.84509,3.04495,-3.84509,3.04495,0,0,0,0,0,0,0,0,-1.45679,2.66055,-2.17706,2.11212,-1.45679,2.66055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.91168,2.25501,-3.89571,-2.89395,-4.68805,1.04749,-10.96425,3.72263,-10.96425,3.72263,-9.78099,9.39819,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.18481,2.37912,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-6.17017,13.72693,-9.94608,11.29434,-5.27426,15.28296,-13.5317,1.99728,-2.42673,-0.01804,0,0,-2.33276,-6.34492,-0.49484,-8.46092,-2.33075,4.25699,-0.3866,-4.83822,-6.06836,9.427,-3.81548,12.71786,0,0,1.66577,7.81281,1.66577,7.81281,1.66577,7.81281,1.66577,7.81281,1.66577,7.81281,-1.2309,-8.2074,-0.36212,-4.55062,0.04614,-9.88201,1.521,-9.75315,0.29956,-10.55579,1.87671,-10.37905,0.7041,-7.38137,1.77979,-7.1805,-1.83112,-5.15726,1.0303,-4.93569,1.0303,-4.93569,1.0303,-4.93569,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3.77362,-1.52499],"curve":0.25,"c3":0.75},{"time":0.8,"vertices":[0.89972,-3.23526,0.61926,-4.9588,-1.43616,-0.7785,4.52402,0.00687,3.13239,-3.14713,4.06793,-1.78073,3.44238,-2.80453,6.95886,-4.75769,8.21167,-1.74701,7.4133,-6.21695,5.14514,1.42157,2.70074,1.24009,2.51733,0.14237,0,0,0,0,0,0,6.05042,7.65581,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.78897,-8.7782,-0.1496,-3.14676,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.6062,-7.27115,14.66742,-8.86288,7.65735,-2.19165,7.76709,0.83011,2.28528,-2.05609,1.25526,3.05646,0,0,0,0,0,0,3.61234,12.28757,8.17758,-12.32846,2.29187,14.57617,0,0,0,0,0,0,-2.1181,1.11093,-3.77765,-11.65225,-3.35062,-15.58774,-3.35062,-15.58774,-3.44952,-9.59506,0.33951,13.98836,1.71121,8.5667,1.71121,8.5667,0.96915,8.68157,1.71121,8.5667,0.96915,8.68157,4.80612,7.95748,4.61627,7.92957,-0.67264,7.71938,2.50757,10.08362,1.67175,6.7224,1.67175,6.7224,1.1145,4.48164,0,0,0,0,0,0,0,0,0,0,0,0,12.50021,-7.99857,9.94513,-10.99405,-2.88666,11.77863,-2.16034,9.01598,-2.70435,5.53091,-2.50931,5.62189,13.8244,-11.54279,17.2142,-5.29437,15.27383,-9.54269,7.2818,-6.07468],"curve":0.25,"c3":0.75},{"time":1.6,"offset":2,"vertices":[-3.84509,3.04495,-3.84509,3.04495,0,0,0,0,0,0,0,0,-1.45679,2.66055,-2.17706,2.11212,-1.45679,2.66055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.91168,2.25501,-3.89571,-2.89395,-4.68805,1.04749,-10.96425,3.72263,-10.96425,3.72263,-9.78099,9.39819,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.18481,2.37912,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-6.17017,13.72693,-9.94608,11.29434,-5.27426,15.28296,-13.5317,1.99728,-2.42673,-0.01804,0,0,-2.33276,-6.34492,-0.49484,-8.46092,-2.33075,4.25699,-0.3866,-4.83822,-6.06836,9.427,-3.81548,12.71786,0,0,1.66577,7.81281,1.66577,7.81281,1.66577,7.81281,1.66577,7.81281,1.66577,7.81281,-1.2309,-8.2074,-0.36212,-4.55062,0.04614,-9.88201,1.521,-9.75315,0.29956,-10.55579,1.87671,-10.37905,0.7041,-7.38137,1.77979,-7.1805,-1.83112,-5.15726,1.0303,-4.93569,1.0303,-4.93569,1.0303,-4.93569,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3.77362,-1.52499]}]},"Layer 38":{"greengirl/Layer 38":[{"vertices":[-0.3941,3.0455,-0.65564,-0.11169,-0.07916,-1.90866,-0.35059,-2.2934,-0.35059,-2.2934,-0.87506,1.2045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.47571,3.4249,-2.08936,8.44326,-1.3576,2.31468,0.67944,5.86342,0.26154,3.15719,-0.38251,11.39876,-0.38251,11.39876,-0.38251,11.39876,-0.38251,11.39876,-0.38251,11.39876,-0.38251,11.39876,-3.5072,6.30627],"curve":0.25,"c3":0.75},{"time":0.8,"vertices":[0.18044,2.17775,0,0,0.77757,1.64827,3.43955,0.0875,2.1584,0.62085,0.00375,2.08985,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4.04517,-2.3273,-1.18793,-2.64895,-2.50464,-0.49727,0,0,0,0,-7.18187,-7.39017,-4.04887,-7.06541,-12.15204,-11.74069,-3.74436,-3.30613,0.18044,2.17775,-1.44626,-6.84683,-1.44626,-6.84683,-1.44626,-6.84683,-1.44626,-6.84683,-1.44626,-6.84683,-1.44626,-6.84683],"curve":0.3,"c2":0.21,"c3":0.756},{"time":1.6,"vertices":[-0.3941,3.0455,-0.65564,-0.11169,-0.07916,-1.90866,-0.35059,-2.2934,-0.35059,-2.2934,-0.87506,1.2045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.47571,3.4249,-2.08936,8.44326,-1.3576,2.31468,0.67944,5.86342,0.26154,3.15719,-0.38251,11.39876,-0.38251,11.39876,-0.38251,11.39876,-0.38251,11.39876,-0.38251,11.39876,-0.38251,11.39876,-3.5072,6.30627]}]},"Layer 39":{"greengirl/Layer 39":[{"vertices":[0.72095,-1.53905,0.60303,-1.10323,0.33051,-0.30043,0.38782,-0.2204,0.21161,-0.23428,0.29041,-0.11581,0.30719,-0.04946,0.10663,-0.30548,0.22784,-0.22646,-0.18207,-0.79559,-0.28674,-0.93646,-1.32944,-0.66443,-0.56885,-1.37238,-1.4353,-0.66107,-0.65179,-1.43863,-0.43501,-0.19232,-0.83337,-0.35675,-2.10847,-0.91449,-2.99987,-1.302,-0.25385,4.46817,-4.10842,-1.77997,-0.1015,8.00806,-7.48473,-2.85522,-2.6991,13.83512,-2.84735,14.97668,-2.89972,12.56221,-2.73022,15.94765,-2.5827,12.8055,1.23285,-3.78206,1.1394,-3.29427,1.08618,-3.04132,0.96851,-2.54554,0.88867,-2.30583,0.34412,-2.44302,0.28931,-3.16144,-0.24316,6.7618,-3.06488,-6.03351,0.26343,-1.83856,-1.04248,-2.52081,-0.34943,4.32608,-1.79077,-3.95456,-2.42101,-1.06683,-0.26337,4.15234,-3.80872,-1.68073,-0.12805,7.83794,-7.31582,-2.82123,-2.10942,-0.91943,-3.66477,-1.60052],"curve":0.25,"c3":0.75},{"time":0.8,"offset":42,"vertices":[-0.20074,-2.42372,2.4258,0.17627,-1.14343,-3.548,-1.07867,-2.78276,-1.07867,-2.78276,-0.21631,-2.30729,-0.10614,-3.14163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.20074,-2.42372,1.59528,1.83691,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.20074,-2.42372,2.4258,0.17627],"curve":0.25,"c3":0.75},{"time":1.6,"vertices":[0.72095,-1.53905,0.60303,-1.10323,0.33051,-0.30043,0.38782,-0.2204,0.21161,-0.23428,0.29041,-0.11581,0.30719,-0.04946,0.10663,-0.30548,0.22784,-0.22646,-0.18207,-0.79559,-0.28674,-0.93646,-1.32944,-0.66443,-0.56885,-1.37238,-1.4353,-0.66107,-0.65179,-1.43863,-0.43501,-0.19232,-0.83337,-0.35675,-2.10847,-0.91449,-2.99987,-1.302,-0.25385,4.46817,-4.10842,-1.77997,-0.1015,8.00806,-7.48473,-2.85522,-2.6991,13.83512,-2.84735,14.97668,-2.89972,12.56221,-2.73022,15.94765,-2.5827,12.8055,1.23285,-3.78206,1.1394,-3.29427,1.08618,-3.04132,0.96851,-2.54554,0.88867,-2.30583,0.34412,-2.44302,0.28931,-3.16144,-0.24316,6.7618,-3.06488,-6.03351,0.26343,-1.83856,-1.04248,-2.52081,-0.34943,4.32608,-1.79077,-3.95456,-2.42101,-1.06683,-0.26337,4.15234,-3.80872,-1.68073,-0.12805,7.83794,-7.31582,-2.82123,-2.10942,-0.91943,-3.66477,-1.60052]}]},"Layer 40":{"greengirl/Layer 40":[{"vertices":[0.86108,9.68364,-3.97559,0.0014,-3.97559,0.0014,-3.78175,-1.22687,-3.97559,0.0014,-3.78175,-1.22687,-3.69251,-1.47253,-3.78175,-1.22687,-3.69251,-1.47253,-3.69251,-1.47253,-3.84375,1.01154,-3.69251,-1.47253,-3.84375,1.01154,-3.84375,1.01154,-3.84375,1.01154,-3.84375,1.01154,-3.69251,-1.47253,-3.84375,1.01154,-3.69251,-1.47253,-3.84375,1.01154,-3.78175,-1.22687,-3.69251,-1.47253,-3.97559,0.0014,-3.78175,-1.22687,-3.69251,-1.47253,0.16833,3.97211,1.01917,15.26762,1.01917,15.26762,1.01917,15.26762,-3.97559,0.0014,-3.78175,-1.22687,-3.78175,-1.22687,-3.69251,-1.47253,-3.69251,-1.47253,-3.84375,1.01154,-3.78175,-1.22687],"curve":0.25,"c3":0.75},{"time":0.8,"vertices":[-0.0979,-2.2699,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.26538,2.12212,-0.0979,-2.2699,-0.0979,-2.2699],"curve":0.25,"c3":0.75},{"time":1.6,"vertices":[0.86108,9.68364,-3.97559,0.0014,-3.97559,0.0014,-3.78175,-1.22687,-3.97559,0.0014,-3.78175,-1.22687,-3.69251,-1.47253,-3.78175,-1.22687,-3.69251,-1.47253,-3.69251,-1.47253,-3.84375,1.01154,-3.69251,-1.47253,-3.84375,1.01154,-3.84375,1.01154,-3.84375,1.01154,-3.84375,1.01154,-3.69251,-1.47253,-3.84375,1.01154,-3.69251,-1.47253,-3.84375,1.01154,-3.78175,-1.22687,-3.69251,-1.47253,-3.97559,0.0014,-3.78175,-1.22687,-3.69251,-1.47253,0.16833,3.97211,1.01917,15.26762,1.01917,15.26762,1.01917,15.26762,-3.97559,0.0014,-3.78175,-1.22687,-3.78175,-1.22687,-3.69251,-1.47253,-3.69251,-1.47253,-3.84375,1.01154,-3.78175,-1.22687]}]},"Layer 41":{"greengirl/Layer 41":[{"vertices":[-7.97162,4.89648,-7.97162,4.89648,-9.31111,-0.90131,-7.97162,4.89648,-9.31111,-0.90131,-7.97162,4.89648,-9.31111,-0.90131,-5.13666,-3.04352,-5.13666,-3.04352,-4.52606,-3.89575,-5.13666,-3.04352,-4.52606,-3.89575,-5.96558,-0.2345,-4.52606,-3.89575,-5.96558,-0.2345,-5.96558,-0.2345,-5.96558,-0.2345,-5.96558,-0.2345,-4.52606,-3.89575,-5.96558,-0.2345,-4.52606,-3.89575,-5.96558,-0.2345,-4.52606,-3.89575,-5.13666,-3.04352,-4.52606,-3.89575,-5.93359,0.66949,-5.13666,-3.04352,-4.52606,-3.89575,-3.34827,10.63789,-3.12939,13.27743,-2.56073,10.59045,-2.56073,10.59045,-2.56073,10.59045,-7.97162,4.89648,-7.97162,4.89648,-9.31111,-0.90131,-9.31111,-0.90131,-11.95984,-1.62823,-5.13666,-3.04352,-4.52606,-3.89575,-4.52606,-3.89575,-5.13666,-3.04352,-4.52606,-3.89575,-5.96558,-0.2345,-4.52606,-3.89575,-5.13666,-3.04352,-9.31111,-0.90131,-10.52243,5.9162],"curve":0.25,"c3":0.75},{"time":0.8,"offset":56,"vertices":[-1.7392,-3.29664,-1.5213,-0.65792,-1.5213,-0.65792,-1.5213,-0.65792,-1.5213,-0.65792],"curve":0.25,"c3":0.75},{"time":1.6,"vertices":[-7.97162,4.89648,-7.97162,4.89648,-9.31111,-0.90131,-7.97162,4.89648,-9.31111,-0.90131,-7.97162,4.89648,-9.31111,-0.90131,-5.13666,-3.04352,-5.13666,-3.04352,-4.52606,-3.89575,-5.13666,-3.04352,-4.52606,-3.89575,-5.96558,-0.2345,-4.52606,-3.89575,-5.96558,-0.2345,-5.96558,-0.2345,-5.96558,-0.2345,-5.96558,-0.2345,-4.52606,-3.89575,-5.96558,-0.2345,-4.52606,-3.89575,-5.96558,-0.2345,-4.52606,-3.89575,-5.13666,-3.04352,-4.52606,-3.89575,-5.93359,0.66949,-5.13666,-3.04352,-4.52606,-3.89575,-3.34827,10.63789,-3.12939,13.27743,-2.56073,10.59045,-2.56073,10.59045,-2.56073,10.59045,-7.97162,4.89648,-7.97162,4.89648,-9.31111,-0.90131,-9.31111,-0.90131,-11.95984,-1.62823,-5.13666,-3.04352,-4.52606,-3.89575,-4.52606,-3.89575,-5.13666,-3.04352,-4.52606,-3.89575,-5.96558,-0.2345,-4.52606,-3.89575,-5.13666,-3.04352,-9.31111,-0.90131,-10.52243,5.9162]}]},"Layer 42":{"greengirl/Layer 42":[{"vertices":[-2.10126,-0.2651,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.88245,2.37375,-1.88245,2.37375,-1.88245,2.37375,-1.88245,2.37375],"curve":0.25,"c3":0.75},{"time":0.8,"vertices":[-2.24445,-1.06823,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.02411,1.57059,-2.02411,1.57059,-2.02411,1.57059,-2.02411,1.57059],"curve":0.255,"c3":0.62,"c4":0.47},{"time":1.6,"vertices":[-2.10126,-0.2651,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.88245,2.37375,-1.88245,2.37375,-1.88245,2.37375,-1.88245,2.37375]}]},"Layer 45":{"greengirl/Layer 45":[{"offset":4,"vertices":[0.1322,1.57861,0.20587,2.45562,0.20587,2.45562,0.20587,2.45562,0.20587,2.45562,0.20587,2.45562,0.20587,2.45562,0.1322,1.57861,0,0,0,0,0,0,0,0,0.1322,1.57861,0.1322,1.57861,0.20587,2.45562]},{"time":0.8,"curve":0.25,"c3":0.75},{"time":1.6,"offset":4,"vertices":[0.1322,1.57861,0.20587,2.45562,0.20587,2.45562,0.20587,2.45562,0.20587,2.45562,0.20587,2.45562,0.20587,2.45562,0.1322,1.57861,0,0,0,0,0,0,0,0,0.1322,1.57861,0.1322,1.57861,0.20587,2.45562]}]},"Layer 46":{"greengirl/Layer 46":[{"vertices":[-0.3369,-1.63622,-0.24736,-0.48986,-0.20034,-2.40277,-0.20417,-2.4941,-0.13167,-1.57657,0.0794,1.01726,-0.25021,4.72,-0.25047,4.75421,-0.45426,2.21778,-0.02018,-0.19595,-1.36931,-1.21614,-1.40717,-1.7187,-0.33699,-1.61486,-0.09152,-1.10058,-0.00422,-3.0E-5,-0.43478,2.48745],"curve":0.352,"c2":0.65,"c3":0.687},{"time":0.8,"vertices":[0.68628,5.07064,0.43518,4.27619,0.42285,5.17619,0.49054,5.82053,0.15375,3.60045,-0.03088,2.30706,-0.21252,1.57994,-0.23944,1.29403,-0.03943,1.812,0.19836,2.7922,0.5423,4.35765,0.65527,4.74159,0.66943,4.89261,0.21692,2.67039,0.02179,1.11128,-0.07715,1.89711],"curve":0.246,"c3":0.723,"c4":0.88},{"time":1.6,"vertices":[-0.3369,-1.63622,-0.24736,-0.48986,-0.20034,-2.40277,-0.20417,-2.4941,-0.13167,-1.57657,0.0794,1.01726,-0.25021,4.72,-0.25047,4.75421,-0.45426,2.21778,-0.02018,-0.19595,-1.36931,-1.21614,-1.40717,-1.7187,-0.33699,-1.61486,-0.09152,-1.10058,-0.00422,-3.0E-5,-0.43478,2.48745]}]},"Layer 47":{"greengirl/Layer 47":[{"offset":12,"vertices":[-0.31281,0.02595,-0.59839,0.04966,-1.08044,0.08974,-0.23712,0.01976,0.85785,-0.07086,0.6756,-0.05591,0.35321,-0.02921,0.15704,-0.01289,-0.02344],"curve":0.25,"c3":0.75},{"time":0.8,"offset":12,"vertices":[0.052,0.6189,0.15576,1.85666,0.15576,1.85666,0.15576,1.85666,0.15576,1.85666,0.15576,1.85666,0.052,0.6189,0.15576,1.85666,0.052,0.6189],"curve":0.25,"c3":0.75},{"time":1.6,"offset":12,"vertices":[-0.31281,0.02595,-0.59839,0.04966,-1.08044,0.08974,-0.23712,0.01976,0.85785,-0.07086,0.6756,-0.05591,0.35321,-0.02921,0.15704,-0.01289,-0.02344]}]},"Layer 48":{"greengirl/Layer 48":[{"vertices":[-0.9449,-1.62677,-1.27808,0.57501,1.2738,0.258,1.51933,-1.94434]},{"time":0.8,"vertices":[-6.11227,14.69135,0.38147,2.83807,0.38147,2.83807,-5.78326,4.24731],"curve":0.25,"c3":0.75},{"time":1.6,"vertices":[-0.9449,-1.62677,-1.27808,0.57501,1.2738,0.258,1.51933,-1.94434]}]},"Layer 49":{"greengirl/Layer 49":[{"offset":16,"vertices":[10.28113,5.83183,10.28113,5.83183,12.60492,-2.82726,2.32379,-8.65909,2.32379,-8.65909,2.32379,-8.65909]}]},"Layer 50":{"greengirl/Layer 50":[{"offset":2,"vertices":[0.16807,-0.13128,0.16807,-0.13128,0.16807,-0.13128,0.02949,-0.10019,0.02949,-0.10019,0.02949,-0.10019,0.02949,-0.10019,0.02949,-0.10019,0.19756,-0.23147,0.16807,-0.13128,0.16807,-0.13128,0.16807,-0.13128,0.16807,-0.13128,0.13857,-0.03109,0.13857,-0.03109,0.13857,-0.03109,0.13857,-0.03109,0.13857,-0.03109,-5.42263,2.05818,-4.98821,1.23807,-4.98821,1.23807,-5.42263,2.05818,-4.98821,1.23807,-2.99321,1.18591],"curve":0.36,"c2":0.64,"c3":0.695},{"time":0.0667,"offset":38,"vertices":[-5.83917,2.28677,-5.2981,1.43234,-5.2981,1.43234,-5.83917,2.28677,-5.2981,1.43234,-3.33258,1.48038],"curve":0.25,"c3":0.75},{"time":0.8667,"offset":2,"vertices":[3.94965,-3.08508,3.94965,-3.08508,3.94965,-3.08508,0.69312,-2.35449,0.69312,-2.35449,0.69312,-2.35449,0.69312,-2.35449,0.69312,-2.35449,4.64276,-5.43958,3.94965,-3.08508,3.94965,-3.08508,3.94965,-3.08508,3.94965,-3.08508,3.25635,-0.73059,3.25635,-0.73059,3.25635,-0.73059,3.25635,-0.73059,3.25635,-0.73059,6.09442,-4.11694,12.50708,-11.10739,5.44293,-6.25278,6.09442,-4.11694,12.50708,-11.10739,5.86444,-6.11832],"curve":0.245,"c3":0.711,"c4":0.83},{"time":1.6,"offset":2,"vertices":[0.16807,-0.13128,0.16807,-0.13128,0.16807,-0.13128,0.02949,-0.10019,0.02949,-0.10019,0.02949,-0.10019,0.02949,-0.10019,0.02949,-0.10019,0.19756,-0.23147,0.16807,-0.13128,0.16807,-0.13128,0.16807,-0.13128,0.16807,-0.13128,0.13857,-0.03109,0.13857,-0.03109,0.13857,-0.03109,0.13857,-0.03109,0.13857,-0.03109,-5.42263,2.05818,-4.98821,1.23807,-4.98821,1.23807,-5.42263,2.05818,-4.98821,1.23807,-2.99321,1.18591]}]},"Layer 51":{"greengirl/Layer 51":[{"vertices":[-0.51488,-0.23601,-1.23164,1.07383,-0.31297,0.72771,2.72072,-2.17118,1.60157,-1.57562,3.52094,-3.92502,2.72919,-1.29114,2.91535,-1.34918,2.49043,0.06019,4.11196,-2.73163,0.68496,-0.21385,-0.39851,-8.8E-4,-0.39851,-8.8E-4,-1.31718,0.34525,-3.45443,0.25786,-3.45443,0.25786,-1.01682,0.25831,-0.31859,1.13492,-0.51488,-0.23601,-3.24224,1.46703,-2.51341,-0.6465,-2.23464,-0.48257,-1.95353,-0.79605,-1.01744,-0.62547,0.29669,-0.23686,1.39705,-0.43583],"curve":0.382,"c2":0.58,"c3":0.732},{"time":0.2667,"vertices":[-0.26089,-1.82214,0,0,0,0,2.21613,-1.93939,0.62793,-1.07117,1.88373,-3.21362,1.12418,-0.54944,1.12418,-0.54944,-0.13162,1.59302,2.21613,-1.93939,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.26089,-1.82214,0,0,1.02994,-3.38629,1.02994,-3.38629,1.02994,-3.38629,1.02994,-3.38629,0.35522,-1.54245],"curve":0.25,"c3":0.75},{"time":0.9667,"vertices":[-1.28659,4.58319,-4.97379,4.33649,-1.26387,2.93872,4.25385,-2.87543,-0.48886,-2.03131,8.49533,-6.08649,7.60577,-3.54468,8.35754,-3.77905,10.45711,-4.59705,9.87213,-5.13873,2.7661,-0.86359,-1.60931,-0.00354,-1.60931,-0.00354,-5.31923,1.39423,-13.95016,1.04132,-13.95016,1.04132,-4.10625,1.04315,-1.28659,4.58319,-1.28659,4.58319,-13.09325,5.92438,-13.27928,7.67792,-12.15353,8.3399,-11.01831,7.07397,-7.23807,7.76282,0.11884,3.72998,5.64174,-1.76001],"curve":0.243,"c3":0.654,"c4":0.62},{"time":1.6,"vertices":[-0.51488,-0.23601,-1.23164,1.07383,-0.31297,0.72771,2.72072,-2.17118,1.60157,-1.57562,3.52094,-3.92502,2.72919,-1.29114,2.91535,-1.34918,2.49043,0.06019,4.11196,-2.73163,0.68496,-0.21385,-0.39851,-8.8E-4,-0.39851,-8.8E-4,-1.31718,0.34525,-3.45443,0.25786,-3.45443,0.25786,-1.01682,0.25831,-0.31859,1.13492,-0.51488,-0.23601,-3.24224,1.46703,-2.51341,-0.6465,-2.23464,-0.48257,-1.95353,-0.79605,-1.01744,-0.62547,0.29669,-0.23686,1.39705,-0.43583]}]},"Layer 52":{"greengirl/Layer 52":[{"offset":16,"vertices":[0.1225,-2.55952,0.1225,-2.55952,2.55212,5.39114,-0.46268,-9.92282,-0.46268,-9.92282,-1.22549,-5.67657,0,0,0,0,0,0,0,0,0,0,-5.68823,-14.38522,-5.68823,-14.38522,-4.64856,-9.32791,0,0,-0.38708,-0.55658,0,0,0.43616,-7.6861,0.43616,-7.6861,-0.84668,-5.96844,-0.84668,-5.96844,-0.54376,-3.7507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.07758,4.47232,-1.07758,4.47232,-1.07758,4.47232,-0.03973,0.37579,2.49942,5.09767,2.34106,1.07666,0,0,2.55212,5.39114,0.84109,1.64323,0.1225,-2.55952,0,0,0,0,0,0,-0.03668,2.91638,0.3504,3.47296,0.3504,3.47296,0.3504,3.47296,0.3504,3.47296,0.3504,3.47296],"curve":0.25,"c3":0.75},{"time":0.8,"offset":6,"vertices":[7.3446,-2.89148,1.98572,-2.96608,-6.94446,-0.74165,-3.84991,-1.16534,-3.84991,-1.16534,-3.05865,-3.89336,-2.8421,-8.43613,-2.9646,-5.87661,-5.16107,0.46578,-5.16107,0.46578,-3.18115,-1.33384,-3.18115,-1.33384,-3.18115,-1.33384,-3.18115,-1.33384,-3.32623,1.69517,-3.32623,1.69517,-3.9101,1.21177,-3.33392,5.03405,-3.18115,-1.33384,-2.38806,-2.05474,-3.34674,-4.2254,-3.18115,-1.33384,-0.91754,2.11369,-0.91754,2.11369,-0.91754,2.11369,-0.91754,2.11369,-3.18115,-1.33384,-3.18115,-1.33384,-1.21259,-4.42686,-1.21259,-4.42686,-3.7215,-5.9128,-3.35455,-1.93339,-3.18115,-1.33384,-4.27136,-2.83868,5.86487,0.65975,3.09967,-0.42374,0,0,0,0,0,0,-3.75775,-3.58404,-11.26099,-6.00418,-5.23694,-6.09805,-2.15729,-11.75596,-1.30444,-11.71531,-3.8949,-6.51235,-3.8949,-6.51235,-2.9646,-5.87661,-2.8421,-8.43613,-2.8421,-8.43613,-3.8949,-6.51235,-3.8949,-6.51235,-3.8949,-6.51235,-3.78052,-5.72421,-4.15527,-7.41161,-4.15527,-7.41161,-3.8949,-6.51235,-4.15527,-7.41161,-4.15527,-7.41161],"curve":0.25,"c3":0.75},{"time":1.6,"offset":16,"vertices":[0.1225,-2.55952,0.1225,-2.55952,2.55212,5.39114,-0.46268,-9.92282,-0.46268,-9.92282,-1.22549,-5.67657,0,0,0,0,0,0,0,0,0,0,-5.68823,-14.38522,-5.68823,-14.38522,-4.64856,-9.32791,0,0,-0.38708,-0.55658,0,0,0.43616,-7.6861,0.43616,-7.6861,-0.84668,-5.96844,-0.84668,-5.96844,-0.54376,-3.7507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.07758,4.47232,-1.07758,4.47232,-1.07758,4.47232,-0.03973,0.37579,2.49942,5.09767,2.34106,1.07666,0,0,2.55212,5.39114,0.84109,1.64323,0.1225,-2.55952,0,0,0,0,0,0,-0.03668,2.91638,0.3504,3.47296,0.3504,3.47296,0.3504,3.47296,0.3504,3.47296,0.3504,3.47296]}]},"Layer 53":{"greengirl/Layer 53":[{"vertices":[1.2247,2.53559,1.44385,0.42563,1.44385,0.42563,0.96747,1.15342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.26417,-0.0407,0,0,0,0,0,0,0,0,0,0,-2.47023,0.4607,0.33967,0.62321,-0.2026,0.03193,-0.58826,-0.07553,4.09072,8.14273,4.37176,8.09508,-1.00869,9.41678,-0.13692,-0.09959,0,0,0,0,1.09162,2.57851,-0.11564,0.07053],"curve":0.36,"c2":0.64,"c3":0.695},{"time":0.0667,"vertices":[1.41812,2.60342,1.50803,0.44455,1.50803,0.44455,1.01047,1.20468,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.58002,0.48117,0.35477,0.65091,0,0,0,0,4.70505,8.41,4.70505,8.41,-0.87811,9.81308,0,0,0,0,0,0,1.41812,2.60342],"curve":0.25,"c3":0.75},{"time":0.8667,"vertices":[-3.12724,1.00934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-6.20795,-0.95636,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4.76108,0.75031,-13.82423,-1.77499,-9.73166,2.12897,-3.12724,1.00934,-3.94669,0.50003,-3.21764,-2.34032,0,0,0,0,-6.25465,2.01804,-2.71761,1.65744],"curve":0.245,"c3":0.711,"c4":0.83},{"time":1.6,"vertices":[1.2247,2.53559,1.44385,0.42563,1.44385,0.42563,0.96747,1.15342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.26417,-0.0407,0,0,0,0,0,0,0,0,0,0,-2.47023,0.4607,0.33967,0.62321,-0.2026,0.03193,-0.58826,-0.07553,4.09072,8.14273,4.37176,8.09508,-1.00869,9.41678,-0.13692,-0.09959,0,0,0,0,1.09162,2.57851,-0.11564,0.07053]}]},"Layer 54":{"greengirl/Layer 54":[{"vertices":[-0.71964,0.16477,2.48627,-1.60727,2.48627,-1.60727,2.48627,-1.60727,2.48627,-1.60727,-3.75833,-5.25945,-6.31787,-4.90208,7.0686,-6.67669,12.46783,-4.01827,-0.85507,0.92776,-1.38657,-0.4357,-5.67691,0.0283,0.40845,-1.82424,0.40845,-1.82424,0.40845,-1.82424,-0.30038,-5.25087,0.49585,-6.18515,2.48627,-1.60727,-1.38684,-2.09097,-1.18771,0.69502,2.68539,1.17872,2.68539,1.17872,4.6543,4.17254,10.95822,-1.39524,12.98746,-3.7253,14.42389,-4.97225,14.3912,-5.38597,14.62109,-2.49011,11.46133,-2.22506,-0.5419,-5.80268,-1.58569,-3.22168,-0.43204,-10.60082,-1.81558,-6.11754,-1.58569,-3.22168,-1.58569,-3.22168],"curve":0.25,"c3":0.75},{"time":0.8333,"vertices":[-0.01551,0.00355,0.35292,1.99855,0.35292,1.99855,0.35292,1.99855,0.35292,1.99855,-1.14299,0.91325,-6.588,-2.77099,2.69198,-2.54149,3.95326,-2.91948,-0.35308,-2.21115,-3.67862,-1.98657,3.17258,-0.43795,7.12061,6.34956,8.17908,13.7555,6.99774,17.2795,2.39069,14.22489,-0.78598,16.80013,0.33689,10.66977,-2.09121,6.54608,-3.56203,3.45474,-2.43566,2.39721,-0.65099,0.98929,0.1003,0.08992,4.70099,4.23183,7.06601,7.61018,6.90618,9.89655,9.06039,12.86893,13.40121,10.3847,11.29832,5.29549,-1.59147,7.53277,-1.82746,13.11452,-0.83112,11.84294,-2.1583,17.00901,0.42849,14.93596,-0.34134,6.35055],"curve":0.246,"c3":0.723,"c4":0.88},{"time":1.6,"vertices":[-0.71964,0.16477,2.48627,-1.60727,2.48627,-1.60727,2.48627,-1.60727,2.48627,-1.60727,-3.75833,-5.25945,-6.31787,-4.90208,7.0686,-6.67669,12.46783,-4.01827,-0.85507,0.92776,-1.38657,-0.4357,-5.67691,0.0283,0.40845,-1.82424,0.40845,-1.82424,0.40845,-1.82424,-0.30038,-5.25087,0.49585,-6.18515,2.48627,-1.60727,-1.38684,-2.09097,-1.18771,0.69502,2.68539,1.17872,2.68539,1.17872,4.6543,4.17254,10.95822,-1.39524,12.98746,-3.7253,14.42389,-4.97225,14.3912,-5.38597,14.62109,-2.49011,11.46133,-2.22506,-0.5419,-5.80268,-1.58569,-3.22168,-0.43204,-10.60082,-1.81558,-6.11754,-1.58569,-3.22168,-1.58569,-3.22168]}]}}}}}},"heroes":{"skeleton":{"hash":"NU1DPCsgUgil/3xoUdBdcjKsOCA","spine":"3.8.14-beta","x":-301.53,"y":-73.18,"width":620.96,"height":1043.9},"bones":[{"name":"root","x":-1.92},{"name":"Character_midpoint","parent":"root","x":7.67,"y":372.56},{"name":"torso","parent":"Character_midpoint","length":145.87,"rotation":90,"x":-3.03,"y":-71.92},{"name":"arm_upper_far","parent":"torso","length":103.24,"rotation":-164.17,"x":117.5,"y":-43.55,"transform":"noScale"},{"name":"arm_lower_far","parent":"arm_upper_far","length":70.41,"rotation":97.62,"x":101.98,"y":4.4,"transform":"noScale"},{"name":"arm_upper_near","parent":"torso","length":110.71,"rotation":121.63,"x":135.07,"y":67.14,"transform":"noScale"},{"name":"arm_lower_near","parent":"arm_upper_near","length":69.69,"rotation":90.73,"x":108.7,"y":1.26,"transform":"noScale"},{"name":"waist","parent":"torso","length":47.7,"rotation":176.39,"x":-7.09,"y":4.05,"transform":"noScale"},{"name":"leg_upper_far","parent":"waist","length":110.01,"rotation":40.6,"x":18.62,"y":26.55,"transform":"noScale"},{"name":"leg_lower_far","parent":"leg_upper_far","length":129.69,"rotation":-38.21,"x":110.01,"y":-0.43,"transform":"noScale"},{"name":"foot_far","parent":"leg_lower_far","length":105.57,"rotation":65.82,"x":131.07,"y":-17.47,"transform":"noScale"},{"name":"leg_upper_near","parent":"waist","length":88.41,"rotation":-14.25,"x":24.34,"y":-31.95,"transform":"noScale"},{"name":"leg_lower_near","parent":"leg_upper_near","length":133.18,"rotation":-3.6,"x":90.34,"y":0.36,"transform":"noScale"},{"name":"foot_near","parent":"leg_lower_near","length":89.12,"rotation":90.88,"x":155.82,"y":-15.78,"transform":"noScale"},{"name":"hand_far","parent":"arm_lower_far","length":58.13,"rotation":-0.9,"x":52.77,"y":1.03,"transform":"noScale"},{"name":"hand_near","parent":"arm_lower_near","length":52.53,"rotation":1.35,"x":59.59,"y":-0.57,"transform":"noScale"},{"name":"neck","parent":"torso","length":40.51,"x":163.09,"y":2.02,"transform":"noScale"},{"name":"head","parent":"neck","length":157.09,"rotation":-1.8,"x":52.67,"y":1.01,"transform":"noScale"}],"slots":[{"name":"arm_upper_far","bone":"arm_upper_far","attachment":"upper_far"},{"name":"arm_lower_far","bone":"arm_lower_far","attachment":"arm_lower_far"},{"name":"hand_far","bone":"hand_far","attachment":"hand_2_fistPalm"},{"name":"leg_upper_far","bone":"leg_upper_far","attachment":"leg_upper_far"},{"name":"leg_lower_far","bone":"leg_lower_far","attachment":"leg_lower_far"},{"name":"foot_far","bone":"foot_far","attachment":"foot_far_1"},{"name":"waist","bone":"waist","attachment":"head_2_injured"},{"name":"torso","bone":"torso","attachment":"torso"},{"name":"neck","bone":"neck","attachment":"neck"},{"name":"head","bone":"head","attachment":"head_1"},{"name":"leg_upper_near","bone":"leg_upper_near","attachment":"leg_upper_near"},{"name":"leg_lower_near","bone":"leg_lower_near","attachment":"leg_lower_near_1"},{"name":"foot_near","bone":"foot_near","attachment":"foot_near_1"},{"name":"arm_upper_near","bone":"arm_upper_near","attachment":"arm_upper_near"},{"name":"item_near","bone":"hand_near"},{"name":"arm_lower_near","bone":"arm_lower_near","attachment":"arm_lower_near"},{"name":"hand_near","bone":"hand_near","attachment":"hand_1_fistBack"}],"skins":[{"name":"default","attachments":{"item_near":{"sword_1":{"x":48.84,"y":273.52,"width":508,"height":875},"sword_2_swing":{"x":-80.42,"y":274.11,"width":767,"height":873},"sword_3_bigSwing":{"x":-202.54,"y":284.84,"width":1010,"height":875}}}},{"name":"Assassin","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"Assassin/Assassin_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"Assassin/Assassin_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"Assassin/Assassin_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"Assassin/Assassin_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"Assassin/Assassin_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"Assassin/Assassin_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"Assassin/Assassin_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"Assassin/Assassin_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"Assassin/Assassin_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"Assassin/Assassin_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"Assassin/Assassin_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"Assassin/Assassin_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"Assassin/Assassin_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"Assassin/Assassin_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"Assassin/Assassin_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"Assassin/Assassin_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"Assassin/Assassin_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"Assassin/Assassin_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"Assassin/Assassin_leg_upper_near","x":51.78,"y":-3.62,"rotation":87.64,"width":177,"height":271}},"neck":{"neck":{"name":"Assassin/Assassin_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"Assassin/Assassin_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"Assassin/Assassin_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Beardy","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"BeardyBuck/BeardyBuck_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"BeardyBuck/BeardyBuck_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"BeardyBuck/BeardyBuck_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"BeardyBuck/BeardyBuck_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"BeardyBuck/BeardyBuck_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"BeardyBuck/BeardyBuck_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"BeardyBuck/BeardyBuck_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"BeardyBuck/BeardyBuck_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"BeardyBuck/BeardyBuck_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"BeardyBuck/BeardyBuck_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"BeardyBuck/BeardyBuck_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"BeardyBuck/BeardyBuck_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"BeardyBuck/BeardyBuck_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"BeardyBuck/BeardyBuck_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"BeardyBuck/BeardyBuck_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"BeardyBuck/BeardyBuck_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"BeardyBuck/BeardyBuck_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":104,"height":188}},"leg_upper_far":{"leg_upper_far":{"name":"BeardyBuck/BeardyBuck_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"BeardyBuck/BeardyBuck_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"BeardyBuck/BeardyBuck_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"BeardyBuck/BeardyBuck_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"BeardyBuck/BeardyBuck_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Buck","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"Buck/BuckMatthews_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"Buck/BuckMatthews_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"Buck/BuckMatthews_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"Buck/BuckMatthews_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"Buck/BuckMatthews_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"Buck/BuckMatthews_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"Buck/BuckMatthews_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"Buck/BuckMatthews_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"Buck/BuckMatthews_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"Buck/BuckMatthews_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"Buck/BuckMatthews_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"Buck/BuckMatthews_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"Buck/BuckMatthews_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"Buck/BuckMatthews_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"Buck/BuckMatthews_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"Buck/BuckMatthews_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"Buck/BuckMatthews_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"Buck/BuckMatthews_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"Buck/BuckMatthews_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"Buck/BuckMatthews_neck","x":18.74,"y":1.98,"rotation":-90,"width":68,"height":59}},"torso":{"torso":{"name":"Buck/BuckMatthews_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"Buck/BuckMatthews_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Chuck","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"Chuck/ChuckMatthews_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"Chuck/ChuckMatthews_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"Chuck/ChuckMatthews_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"Chuck/ChuckMatthews_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"Chuck/ChuckMatthews_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"Chuck/ChuckMatthews_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"Chuck/ChuckMatthews_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"Chuck/ChuckMatthews_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"Chuck/ChuckMatthews_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"Chuck/ChuckMatthews_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"Chuck/ChuckMatthews_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"Chuck/ChuckMatthews_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"Chuck/ChuckMatthews_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"Chuck/ChuckMatthews_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"Chuck/ChuckMatthews_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"Chuck/ChuckMatthews_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"Chuck/ChuckMatthews_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"Chuck/ChuckMatthews_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"Chuck/ChuckMatthews_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"Chuck/ChuckMatthews_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"Chuck/ChuckMatthews_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"Chuck/ChuckMatthews_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Commander","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"Commander/Commander-Firestrike_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":255,"height":205}},"arm_lower_near":{"arm_lower_near":{"name":"Commander/Commander-Firestrike_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":56,"height":121}},"arm_upper_far":{"upper_far":{"name":"Commander/Commander-Firestrike_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":295,"height":278}},"arm_upper_near":{"arm_upper_near":{"name":"Commander/Commander-Firestrike_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":295,"height":278}},"foot_far":{"foot_far_1":{"name":"Commander/Commander-Firestrike_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":320,"height":172},"foot_far_2_bent":{"name":"Commander/Commander-Firestrike_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":301,"height":191}},"foot_near":{"foot_near_1":{"name":"Commander/Commander-Firestrike_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":320,"height":172},"foot_near_2_bent":{"name":"Commander/Commander-Firestrike_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":301,"height":191}},"hand_far":{"hand_1_fistBack":{"name":"Commander/Commander-Firestrike_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":199,"height":156},"hand_2_fistPalm":{"name":"Commander/Commander-Firestrike_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":199,"height":156}},"hand_near":{"hand_1_fistBack":{"name":"Commander/Commander-Firestrike_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":199,"height":156},"hand_2_fistPalm":{"name":"Commander/Commander-Firestrike_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":199,"height":156}},"head":{"head_1":{"name":"Commander/Commander-Firestrike_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":539,"height":539},"head_2_injured":{"name":"Commander/Commander-Firestrike_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":539,"height":539}},"leg_lower_far":{"leg_lower_far":{"name":"Commander/Commander-Firestrike_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":190,"height":321}},"leg_lower_near":{"leg_lower_near_1":{"name":"Commander/Commander-Firestrike_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":190,"height":321},"leg_lower_near_2":{"name":"Commander/Commander-Firestrike_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":190,"height":321}},"leg_upper_far":{"leg_upper_far":{"name":"Commander/Commander-Firestrike_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":173,"height":267}},"leg_upper_near":{"leg_upper_near":{"name":"Commander/Commander-Firestrike_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":172,"height":267}},"neck":{"neck":{"name":"Commander/Commander-Firestrike_neck","x":18.74,"y":1.98,"rotation":-90,"width":170,"height":227}},"torso":{"torso":{"name":"Commander/Commander-Firestrike_torso","x":99.38,"y":4.97,"rotation":-90,"width":149,"height":200}},"waist":{"head_2_injured":{"name":"Commander/Commander-Firestrike_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":279,"height":212}}}},{"name":"Ducky","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"Duck/DuckMatthews_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"Duck/DuckMatthews_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"Duck/DuckMatthews_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"Duck/DuckMatthews_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"Duck/DuckMatthews_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"Duck/DuckMatthews_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"Duck/DuckMatthews_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"Duck/DuckMatthews_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"Duck/DuckMatthews_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"Duck/DuckMatthews_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"Duck/DuckMatthews_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"Duck/DuckMatthews_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"Duck/DuckMatthews_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"Duck/DuckMatthews_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"Duck/DuckMatthews_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"Duck/DuckMatthews_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"Duck/DuckMatthews_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"Duck/DuckMatthews_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"Duck/DuckMatthews_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"Duck/DuckMatthews_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"Duck/DuckMatthews_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"Duck/DuckMatthews_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Dummy","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"Dummy/Dummy_arm_lower_far","x":29.65,"y":1.56,"rotation":92.05,"width":72,"height":114}},"arm_lower_near":{"arm_lower_near":{"name":"Dummy/Dummy_arm_lower_near","x":34.59,"y":1.25,"rotation":94.11,"width":79,"height":126}},"arm_upper_far":{"upper_far":{"name":"Dummy/Dummy_arm_upper_far","x":38.3,"y":1.81,"rotation":89.14,"width":99,"height":180}},"arm_upper_near":{"arm_upper_near":{"name":"Dummy/Dummy_arm_upper_near","x":48.21,"y":1.27,"rotation":89.81,"width":99,"height":180}},"foot_far":{"foot_far_1":{"name":"Dummy/Dummy_foot_far_1","x":38.73,"y":-2.95,"rotation":25.39,"width":167,"height":81},"foot_far_2_bent":{"name":"Dummy/Dummy_foot_far_2_bent","x":35.11,"y":11.06,"rotation":25.39,"width":157,"height":109}},"foot_near":{"foot_near_1":{"name":"Dummy/Dummy_foot_near_1","x":32,"y":-1.69,"rotation":20.57,"width":168,"height":80},"foot_near_2_bent":{"name":"Dummy/Dummy_foot_near_2_bent","x":31.15,"y":14.35,"rotation":20.57,"width":157,"height":109}},"hand_far":{"hand_1_fistBack":{"name":"Dummy/Dummy_hand_2_fistPalm","x":35.42,"y":5.82,"rotation":83.76,"width":83,"height":77},"hand_2_fistPalm":{"name":"Dummy/Dummy_hand_2_fistPalm","x":35.42,"y":5.82,"rotation":83.76,"width":83,"height":77}},"hand_near":{"hand_1_fistBack":{"name":"Dummy/Dummy_hand_1_fistBack","x":28.67,"y":8.17,"rotation":91.61,"width":94,"height":73},"hand_2_fistPalm":{"name":"Dummy/Dummy_hand_2_fistPalm","x":28.67,"y":8.17,"rotation":91.61,"width":83,"height":77}},"head":{"head_1":{"name":"Dummy/Dummy_head_1","x":66.47,"y":-41.68,"rotation":276.72,"width":265,"height":265},"head_2_injured":{"name":"Dummy/Dummy_head_2_injured","x":66.47,"y":-41.69,"rotation":276.72,"width":265,"height":265}},"leg_lower_far":{"leg_lower_far":{"name":"Dummy/Dummy_leg_lower_far","x":48.1,"y":-11.03,"rotation":95.15,"width":131,"height":178}},"leg_lower_near":{"leg_lower_near_1":{"name":"Dummy/Dummy_leg_lower_near_1","x":82.08,"y":-10.15,"rotation":96.62,"width":131,"height":204},"leg_lower_near_2":{"name":"Dummy/Dummy_leg_lower_near_2","x":67.18,"y":-11.93,"rotation":97.38,"width":131,"height":178}},"leg_upper_far":{"leg_upper_far":{"name":"Dummy/Dummy_leg_upper_far","x":53.86,"y":1.02,"rotation":88.54,"width":76,"height":163}},"leg_upper_near":{"leg_upper_near":{"name":"Dummy/Dummy_leg_upper_near","x":51.78,"y":-3.62,"rotation":87.64,"width":76,"height":163}},"neck":{"neck":{"name":"Dummy/Dummy_neck","x":21.06,"y":0.81,"rotation":-90,"width":70,"height":62}},"torso":{"torso":{"name":"Dummy/Dummy_torso","x":82.91,"y":6.8,"rotation":-90,"width":169,"height":181}},"waist":{"head_2_injured":{"name":"Dummy/Dummy_waist","x":-11.15,"y":-7.3,"rotation":93.6,"width":135,"height":136}}}},{"name":"Fletch","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"Fletch/Fletch_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":254,"height":204}},"arm_lower_near":{"arm_lower_near":{"name":"Fletch/Fletch_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":254,"height":203}},"arm_upper_far":{"upper_far":{"name":"Fletch/Fletch_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":295,"height":278}},"arm_upper_near":{"arm_upper_near":{"name":"Fletch/Fletch_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":295,"height":278}},"foot_far":{"foot_far_1":{"name":"Fletch/Fletch_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":320,"height":172},"foot_far_2_bent":{"name":"Fletch/Fletch_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":301,"height":191}},"foot_near":{"foot_near_1":{"name":"Fletch/Fletch_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":320,"height":172},"foot_near_2_bent":{"name":"Fletch/Fletch_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":301,"height":191}},"hand_far":{"hand_1_fistBack":{"name":"Fletch/Fletch_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":199,"height":156},"hand_2_fistPalm":{"name":"Fletch/Fletch_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":199,"height":156}},"hand_near":{"hand_1_fistBack":{"name":"Fletch/Fletch_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":199,"height":156},"hand_2_fistPalm":{"name":"Fletch/Fletch_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":199,"height":156}},"head":{"head_1":{"name":"Fletch/Fletch_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":539,"height":539},"head_2_injured":{"name":"Fletch/Fletch_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":541,"height":541}},"leg_lower_far":{"leg_lower_far":{"name":"Fletch/Fletch_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":190,"height":321}},"leg_lower_near":{"leg_lower_near_1":{"name":"Fletch/Fletch_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":190,"height":321},"leg_lower_near_2":{"name":"Fletch/Fletch_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":190,"height":321}},"leg_upper_far":{"leg_upper_far":{"name":"Fletch/Fletch_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":173,"height":267}},"leg_upper_near":{"leg_upper_near":{"name":"Fletch/Fletch_leg_upper_near","x":51.78,"y":-3.62,"rotation":87.64,"width":172,"height":267}},"neck":{"neck":{"name":"Fletch/Fletch_neck","x":18.74,"y":1.98,"rotation":-90,"width":126,"height":106}},"torso":{"torso":{"name":"Fletch/Fletch_torso","x":99.38,"y":4.97,"rotation":-90,"width":508,"height":448}},"waist":{"head_2_injured":{"name":"Fletch/Fletch_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":582,"height":442}}}},{"name":"Gabriel","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"GabrielCaine/GabrielCaine_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"GabrielCaine/GabrielCaine_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"GabrielCaine/GabrielCaine_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"GabrielCaine/GabrielCaine_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"GabrielCaine/GabrielCaine_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"GabrielCaine/GabrielCaine_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"GabrielCaine/GabrielCaine_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"GabrielCaine/GabrielCaine_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"GabrielCaine/GabrielCaine_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"GabrielCaine/GabrielCaine_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"GabrielCaine/GabrielCaine_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"GabrielCaine/GabrielCaine_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"GabrielCaine/GabrielCaine_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"GabrielCaine/GabrielCaine_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"GabrielCaine/GabrielCaine_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"GabrielCaine/GabrielCaine_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"GabrielCaine/GabrielCaine_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"GabrielCaine/GabrielCaine_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"GabrielCaine/GabrielCaine_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"GabrielCaine/GabrielCaine_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"GabrielCaine/GabrielCaine_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"GabrielCaine/GabrielCaine_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"MetalMan","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"MetalMan-Blue/MetalMan-Blue_arm_lower_far","x":29.65,"y":1.56,"rotation":92.05,"width":72,"height":114}},"arm_lower_near":{"arm_lower_near":{"name":"MetalMan-Blue/MetalMan-Blue_arm_lower_near","x":34.59,"y":1.25,"rotation":94.11,"width":79,"height":126}},"arm_upper_far":{"upper_far":{"name":"MetalMan-Blue/MetalMan-Blue_arm_upper_far","x":38.3,"y":1.81,"rotation":89.14,"width":99,"height":180}},"arm_upper_near":{"arm_upper_near":{"name":"MetalMan-Blue/MetalMan-Blue_arm_upper_near","x":48.21,"y":1.27,"rotation":89.81,"width":99,"height":180}},"foot_far":{"foot_far_1":{"name":"MetalMan-Blue/MetalMan-Blue_foot_far_1","x":38.73,"y":-2.95,"rotation":25.39,"width":168,"height":80},"foot_far_2_bent":{"name":"MetalMan-Blue/MetalMan-Blue_foot_far_2_bent","x":35.11,"y":11.06,"rotation":25.39,"width":157,"height":109}},"foot_near":{"foot_near_1":{"name":"MetalMan-Blue/MetalMan-Blue_foot_near_1","x":32,"y":-1.69,"rotation":20.57,"width":168,"height":80},"foot_near_2_bent":{"name":"MetalMan-Blue/MetalMan-Blue_foot_near_2_bent","x":31.15,"y":14.35,"rotation":20.57,"width":157,"height":109}},"hand_far":{"hand_1_fistBack":{"name":"MetalMan-Blue/MetalMan-Blue_hand_2_fistPalm","x":35.42,"y":5.82,"rotation":83.76,"width":83,"height":77},"hand_2_fistPalm":{"name":"MetalMan-Blue/MetalMan-Blue_hand_2_fistPalm","x":35.42,"y":5.82,"rotation":83.76,"width":83,"height":77}},"hand_near":{"hand_1_fistBack":{"name":"MetalMan-Blue/MetalMan-Blue_hand_1_fistBack","x":28.67,"y":8.17,"rotation":91.61,"width":94,"height":73},"hand_2_fistPalm":{"name":"MetalMan-Blue/MetalMan-Blue_hand_2_fistPalm","x":28.67,"y":8.17,"rotation":91.61,"width":83,"height":77}},"head":{"head_1":{"name":"MetalMan-Blue/MetalMan-Blue_head_1","x":66.47,"y":-41.68,"rotation":276.72,"width":265,"height":265},"head_2_injured":{"name":"MetalMan-Blue/MetalMan-Blue_head_2_injured","x":66.47,"y":-41.69,"rotation":276.72,"width":265,"height":265}},"leg_lower_far":{"leg_lower_far":{"name":"MetalMan-Blue/MetalMan-Blue_leg_lower_far","x":48.1,"y":-11.03,"rotation":95.15,"width":131,"height":178}},"leg_lower_near":{"leg_lower_near_1":{"name":"MetalMan-Blue/MetalMan-Blue_leg_lower_near_1","x":82.08,"y":-10.15,"rotation":96.62,"width":131,"height":204},"leg_lower_near_2":{"name":"MetalMan-Blue/MetalMan-Blue_leg_lower_near_2","x":67.18,"y":-11.93,"rotation":97.38,"width":131,"height":178}},"leg_upper_far":{"leg_upper_far":{"name":"MetalMan-Blue/MetalMan-Blue_leg_upper_far","x":53.86,"y":1.02,"rotation":88.54,"width":76,"height":163}},"leg_upper_near":{"leg_upper_near":{"name":"MetalMan-Blue/MetalMan-Blue_leg_upper_near","x":51.78,"y":-3.62,"rotation":87.64,"width":76,"height":163}},"neck":{"neck":{"name":"MetalMan-Blue/MetalMan-Blue_neck","x":21.06,"y":0.81,"rotation":-90,"width":70,"height":62}},"torso":{"torso":{"name":"MetalMan-Blue/MetalMan-Blue_torso","x":82.91,"y":6.8,"rotation":-90,"width":169,"height":182}},"waist":{"head_2_injured":{"name":"MetalMan-Blue/MetalMan-Blue_waist","x":-11.15,"y":-7.3,"rotation":93.6,"width":135,"height":136}}}},{"name":"Pamela-1","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"PamelaFrost/PamelaFrost_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"PamelaFrost/PamelaFrost_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"PamelaFrost/PamelaFrost_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"PamelaFrost/PamelaFrost_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"PamelaFrost/PamelaFrost_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"PamelaFrost/PamelaFrost_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"PamelaFrost/PamelaFrost_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"PamelaFrost/PamelaFrost_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"PamelaFrost/PamelaFrost_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"PamelaFrost/PamelaFrost_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"PamelaFrost/PamelaFrost_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"PamelaFrost/PamelaFrost_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"PamelaFrost/PamelaFrost_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"PamelaFrost/PamelaFrost_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"PamelaFrost/PamelaFrost_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"PamelaFrost/PamelaFrost_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"PamelaFrost/PamelaFrost_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"PamelaFrost/PamelaFrost_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"PamelaFrost/PamelaFrost_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"PamelaFrost/PamelaFrost_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"PamelaFrost/PamelaFrost_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"PamelaFrost/PamelaFrost_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Pamela-2","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"PamelaFrost-02/PamelaFrost-02_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"PamelaFrost-02/PamelaFrost-02_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"PamelaFrost-02/PamelaFrost-02_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"PamelaFrost-02/PamelaFrost-02_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"PamelaFrost-02/PamelaFrost-02_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"PamelaFrost-02/PamelaFrost-02_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"PamelaFrost-02/PamelaFrost-02_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"PamelaFrost-02/PamelaFrost-02_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"PamelaFrost-02/PamelaFrost-02_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"PamelaFrost-02/PamelaFrost-02_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"PamelaFrost-02/PamelaFrost-02_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"PamelaFrost-02/PamelaFrost-02_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"PamelaFrost-02/PamelaFrost-02_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"PamelaFrost-02/PamelaFrost-02_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"PamelaFrost-02/PamelaFrost-02_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"PamelaFrost-02/PamelaFrost-02_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"PamelaFrost-02/PamelaFrost-02_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"PamelaFrost-02/PamelaFrost-02_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"PamelaFrost-02/PamelaFrost-02_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"PamelaFrost-02/PamelaFrost-02_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"PamelaFrost-02/PamelaFrost-02_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"PamelaFrost-02/PamelaFrost-02_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Pamela-3","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"PamelaFrost-03/PamelaFrost-03_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"PamelaFrost-03/PamelaFrost-03_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"PamelaFrost-03/PamelaFrost-03_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"PamelaFrost-03/PamelaFrost-03_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"PamelaFrost-03/PamelaFrost-03_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"PamelaFrost-03/PamelaFrost-03_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"PamelaFrost-03/PamelaFrost-03_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"PamelaFrost-03/PamelaFrost-03_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"PamelaFrost-03/PamelaFrost-03_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"PamelaFrost-03/PamelaFrost-03_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"PamelaFrost-03/PamelaFrost-03_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"PamelaFrost-03/PamelaFrost-03_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"PamelaFrost-03/PamelaFrost-03_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"PamelaFrost-03/PamelaFrost-03_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"PamelaFrost-03/PamelaFrost-03_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"PamelaFrost-03/PamelaFrost-03_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"PamelaFrost-03/PamelaFrost-03_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"PamelaFrost-03/PamelaFrost-03_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"PamelaFrost-03/PamelaFrost-03_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"PamelaFrost-03/PamelaFrost-03_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"PamelaFrost-03/PamelaFrost-03_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"PamelaFrost-03/PamelaFrost-03_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Pamela-4","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"PamelaFrost-04/PamelaFrost-04_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"PamelaFrost-04/PamelaFrost-04_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"PamelaFrost-04/PamelaFrost-04_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"PamelaFrost-04/PamelaFrost-04_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"PamelaFrost-04/PamelaFrost-04_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"PamelaFrost-04/PamelaFrost-04_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"PamelaFrost-04/PamelaFrost-04_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"PamelaFrost-04/PamelaFrost-04_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"PamelaFrost-04/PamelaFrost-04_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"PamelaFrost-04/PamelaFrost-04_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"PamelaFrost-04/PamelaFrost-04_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"PamelaFrost-04/PamelaFrost-04_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"PamelaFrost-04/PamelaFrost-04_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"PamelaFrost-04/PamelaFrost-04_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"PamelaFrost-04/PamelaFrost-04_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"PamelaFrost-04/PamelaFrost-04_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"PamelaFrost-04/PamelaFrost-04_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"PamelaFrost-04/PamelaFrost-04_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"PamelaFrost-04/PamelaFrost-04_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"PamelaFrost-04/PamelaFrost-04_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"PamelaFrost-04/PamelaFrost-04_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"PamelaFrost-04/PamelaFrost-04_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Pamela-5","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"PamelaFrost-05/PamelaFrost-05_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"PamelaFrost-05/PamelaFrost-05_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"PamelaFrost-05/PamelaFrost-05_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"PamelaFrost-05/PamelaFrost-05_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"PamelaFrost-05/PamelaFrost-05_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"PamelaFrost-05/PamelaFrost-05_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"PamelaFrost-05/PamelaFrost-05_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"PamelaFrost-05/PamelaFrost-05_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"PamelaFrost-05/PamelaFrost-05_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"PamelaFrost-05/PamelaFrost-05_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"PamelaFrost-05/PamelaFrost-05_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"PamelaFrost-05/PamelaFrost-05_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"PamelaFrost-05/PamelaFrost-05_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"PamelaFrost-05/PamelaFrost-05_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"PamelaFrost-05/PamelaFrost-05_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"PamelaFrost-05/PamelaFrost-05_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"PamelaFrost-05/PamelaFrost-05_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"PamelaFrost-05/PamelaFrost-05_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"PamelaFrost-05/PamelaFrost-05_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"PamelaFrost-05/PamelaFrost-05_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"PamelaFrost-05/PamelaFrost-05_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"PamelaFrost-05/PamelaFrost-05_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Stumpy","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"StumpyPete/StumpyPete_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"StumpyPete/StumpyPete_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"StumpyPete/StumpyPete_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"StumpyPete/StumpyPete_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"StumpyPete/StumpyPete_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"StumpyPete/StumpyPete_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"StumpyPete/StumpyPete_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":1,"height":1},"foot_near_2_bent":{"name":"StumpyPete/StumpyPete_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":1,"height":1}},"hand_far":{"hand_1_fistBack":{"name":"StumpyPete/StumpyPete_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"StumpyPete/StumpyPete_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"StumpyPete/StumpyPete_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"StumpyPete/StumpyPete_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"StumpyPete/StumpyPete_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"StumpyPete/StumpyPete_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"StumpyPete/StumpyPete_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"StumpyPete/StumpyPete_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"StumpyPete/StumpyPete_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"StumpyPete/StumpyPete_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"StumpyPete/StumpyPete_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"StumpyPete/StumpyPete_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"StumpyPete/StumpyPete_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"StumpyPete/StumpyPete_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Truck","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"Truck/TruckMatthews_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"Truck/TruckMatthews_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"Truck/TruckMatthews_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"Truck/TruckMatthews_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"Truck/TruckMatthews_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"Truck/TruckMatthews_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"Truck/TruckMatthews_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"Truck/TruckMatthews_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"Truck/TruckMatthews_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"Truck/TruckMatthews_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"Truck/TruckMatthews_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"Truck/TruckMatthews_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"Truck/TruckMatthews_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"Truck/TruckMatthews_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"Truck/TruckMatthews_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"Truck/TruckMatthews_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"Truck/TruckMatthews_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"Truck/TruckMatthews_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"Truck/TruckMatthews_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"Truck/TruckMatthews_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"Truck/TruckMatthews_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"Truck/TruckMatthews_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}},{"name":"Turbo","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"TurboTed/TurboTed_arm_lower_far","x":29.65,"y":1.56,"rotation":92.05,"width":86,"height":122}},"arm_lower_near":{"arm_lower_near":{"name":"TurboTed/TurboTed_arm_lower_near","x":34.59,"y":1.25,"rotation":94.11,"width":86,"height":122}},"arm_upper_far":{"upper_far":{"name":"TurboTed/TurboTed_arm_upper_far","x":38.3,"y":1.81,"rotation":89.14,"width":133,"height":180}},"arm_upper_near":{"arm_upper_near":{"name":"TurboTed/TurboTed_arm_upper_near","x":48.21,"y":1.27,"rotation":89.81,"width":132,"height":182}},"foot_far":{"foot_far_1":{"name":"TurboTed/TurboTed_foot_far_1","x":38.73,"y":-2.95,"rotation":25.39,"width":181,"height":88},"foot_far_2_bent":{"name":"TurboTed/TurboTed_foot_far_2_bent","x":35.11,"y":11.06,"rotation":25.39,"width":179,"height":108}},"foot_near":{"foot_near_1":{"name":"TurboTed/TurboTed_foot_near_1","x":32,"y":-1.69,"rotation":20.57,"width":181,"height":88},"foot_near_2_bent":{"name":"TurboTed/TurboTed_foot_near_2_bent","x":31.15,"y":14.35,"rotation":20.57,"width":179,"height":108}},"hand_far":{"hand_1_fistBack":{"name":"TurboTed/TurboTed_hand_2_fistPalm","x":35.42,"y":5.82,"rotation":83.76,"width":99,"height":91},"hand_2_fistPalm":{"name":"TurboTed/TurboTed_hand_2_fistPalm","x":35.42,"y":5.82,"rotation":83.76,"width":99,"height":91}},"hand_near":{"hand_1_fistBack":{"name":"TurboTed/TurboTed_hand_1_fistBack","x":28.67,"y":8.17,"rotation":91.61,"width":112,"height":87},"hand_2_fistPalm":{"name":"TurboTed/TurboTed_hand_2_fistPalm","x":28.67,"y":8.17,"rotation":91.61,"width":99,"height":91}},"head":{"head_1":{"name":"TurboTed/TurboTed_head_1","x":55.54,"y":-12.54,"rotation":276.72,"width":282,"height":253},"head_2_injured":{"name":"TurboTed/TurboTed_head_2_injured","x":55.54,"y":-12.55,"rotation":276.72,"width":282,"height":263}},"leg_lower_far":{"leg_lower_far":{"name":"TurboTed/TurboTed_leg_lower_far","x":48.1,"y":-11.03,"rotation":95.15,"width":149,"height":193}},"leg_lower_near":{"leg_lower_near_1":{"name":"TurboTed/TurboTed_leg_lower_near_1","x":82.08,"y":-10.15,"rotation":96.62,"width":149,"height":201},"leg_lower_near_2":{"name":"TurboTed/TurboTed_leg_lower_near_2","x":67.18,"y":-11.93,"rotation":97.38,"width":149,"height":193}},"leg_upper_far":{"leg_upper_far":{"name":"TurboTed/TurboTed_leg_upper_far","x":53.86,"y":1.02,"rotation":88.54,"width":76,"height":163}},"leg_upper_near":{"leg_upper_near":{"name":"TurboTed/TurboTed_leg_upper_near","x":51.78,"y":-3.62,"rotation":87.64,"width":76,"height":163}},"neck":{"neck":{"name":"TurboTed/TurboTed_neck","x":21.06,"y":0.81,"rotation":-90,"width":85,"height":68}},"torso":{"torso":{"name":"TurboTed/TurboTed_torso","x":82.91,"y":6.8,"rotation":-90,"width":153,"height":183}},"waist":{"head_2_injured":{"name":"TurboTed/TurboTed_waist","x":-11.15,"y":-7.3,"rotation":93.6,"width":115,"height":119}}}},{"name":"Young","attachments":{"arm_lower_far":{"arm_lower_far":{"name":"YoungBuck/YoungBuck_arm_lower_far","x":44.7,"y":6.2,"rotation":92.05,"width":259,"height":209}},"arm_lower_near":{"arm_lower_near":{"name":"YoungBuck/YoungBuck_arm_lower_near","x":41.26,"y":4.61,"rotation":90.37,"width":258,"height":208}},"arm_upper_far":{"upper_far":{"name":"YoungBuck/YoungBuck_arm_upper_far","x":36.95,"y":6,"rotation":89.14,"width":299,"height":282}},"arm_upper_near":{"arm_upper_near":{"name":"YoungBuck/YoungBuck_arm_upper_near","x":46.84,"y":3.11,"rotation":89.81,"width":299,"height":282}},"foot_far":{"foot_far_1":{"name":"YoungBuck/YoungBuck_foot_far_1","x":43.9,"y":1.13,"rotation":25.39,"width":324,"height":176},"foot_far_2_bent":{"name":"YoungBuck/YoungBuck_foot_far_2_bent","x":46.53,"y":18.11,"rotation":25.39,"width":305,"height":195}},"foot_near":{"foot_near_1":{"name":"YoungBuck/YoungBuck_foot_near_1","x":34.61,"y":-0.71,"rotation":20.57,"width":324,"height":176},"foot_near_2_bent":{"name":"YoungBuck/YoungBuck_foot_near_2_bent","x":37.54,"y":16.75,"rotation":20.57,"width":305,"height":195}},"hand_far":{"hand_1_fistBack":{"name":"YoungBuck/YoungBuck_hand_far_1_fistBack","x":47.99,"y":2.58,"rotation":83.76,"width":203,"height":160},"hand_2_fistPalm":{"name":"YoungBuck/YoungBuck_hand_far_2_fistPalm","x":47.76,"y":2.02,"rotation":83.76,"width":203,"height":160}},"hand_near":{"hand_1_fistBack":{"name":"YoungBuck/YoungBuck_hand_near_1_fistBack","x":40.05,"y":8.67,"rotation":91.61,"width":203,"height":160},"hand_2_fistPalm":{"name":"YoungBuck/YoungBuck_hand_near_2_fistPalm","x":39.37,"y":7.65,"rotation":91.61,"width":203,"height":160}},"head":{"head_1":{"name":"YoungBuck/YoungBuck_head_1","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543},"head_2_injured":{"name":"YoungBuck/YoungBuck_head_2_injured","x":161.15,"y":-20.89,"rotation":276.72,"width":543,"height":543}},"leg_lower_far":{"leg_lower_far":{"name":"YoungBuck/YoungBuck_leg_lower_far","x":60.75,"y":-3.44,"rotation":90.14,"width":194,"height":325}},"leg_lower_near":{"leg_lower_near_1":{"name":"YoungBuck/YoungBuck_leg_lower_near_1","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325},"leg_lower_near_2":{"name":"YoungBuck/YoungBuck_leg_lower_near_2","x":79.03,"y":-7.42,"rotation":88.77,"width":194,"height":325}},"leg_upper_far":{"leg_upper_far":{"name":"YoungBuck/YoungBuck_leg_upper_far","x":53.17,"y":-0.59,"rotation":90.48,"width":177,"height":271}},"leg_upper_near":{"leg_upper_near":{"name":"YoungBuck/YoungBuck_leg_upper_near","x":52.3,"y":-5.24,"rotation":86.72,"width":177,"height":271}},"neck":{"neck":{"name":"YoungBuck/YoungBuck_neck","x":18.74,"y":1.98,"rotation":-90,"width":130,"height":110}},"torso":{"torso":{"name":"YoungBuck/YoungBuck_torso","x":99.38,"y":4.97,"rotation":-90,"width":512,"height":452}},"waist":{"head_2_injured":{"name":"YoungBuck/YoungBuck_waist","x":-6.24,"y":-7.61,"rotation":93.6,"width":283,"height":216}}}}],"events":{"Hit":{},"Hold End":{},"Hold Start":{},"Move End":{},"Move Start":{}},"animations":{"block":{"bones":{"arm_lower_far":{"rotate":[{"angle":9.01,"curve":0.266,"c2":0.56,"c3":0.573,"c4":0.99},{"time":0.0667,"angle":8.52},{"time":0.2667,"angle":10.8,"curve":0.483,"c3":0.695,"c4":0.6},{"time":0.4,"angle":9.01}]},"arm_lower_near":{"rotate":[{"angle":11.64,"curve":0.266,"c2":0.56,"c3":0.573,"c4":0.99},{"time":0.0667,"angle":12.89},{"time":0.2667,"angle":7.14,"curve":0.483,"c3":0.695,"c4":0.6},{"time":0.4,"angle":11.64}]},"arm_upper_far":{"rotate":[{"angle":51.17,"curve":0.266,"c2":0.56,"c3":0.573,"c4":0.99},{"time":0.0667,"angle":50.16},{"time":0.2667,"angle":54.8,"curve":0.483,"c3":0.695,"c4":0.6},{"time":0.4,"angle":51.17}],"translate":[{"x":3.47,"y":-12.5}]},"arm_upper_near":{"rotate":[{"angle":125.67,"curve":0.266,"c2":0.56,"c3":0.573,"c4":0.99},{"time":0.0667,"angle":124.74},{"time":0.2667,"angle":-230.98,"curve":0.483,"c3":0.695,"c4":0.6},{"time":0.4,"angle":125.67}],"translate":[{"x":-7.12,"y":-54.05}]},"foot_far":{"rotate":[{"angle":6.05,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"angle":4.16,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"angle":6.05}],"translate":[{"x":0.11,"y":-0.75,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"x":0.11,"y":-0.75}]},"foot_near":{"rotate":[{"angle":13.01,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"angle":5.63,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"angle":13.01}],"translate":[{"x":-0.3,"y":0.97,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"x":-1.26,"y":2.24,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"x":-0.3,"y":0.97}]},"head":{"rotate":[{"angle":-4.55,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.0667,"angle":-3.96},{"time":0.2667,"angle":-6.03,"curve":0.243,"c3":0.648,"c4":0.6},{"time":0.4,"angle":-4.55}],"translate":[{"x":-29.29,"y":7.39,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.0667,"x":-30.46,"y":7.25},{"time":0.2667,"x":-26.34,"y":7.74,"curve":0.243,"c3":0.648,"c4":0.6},{"time":0.4,"x":-29.29,"y":7.39}]},"leg_lower_far":{"rotate":[{"angle":-31.47,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"angle":-25.58,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"angle":-31.47}]},"leg_lower_near":{"rotate":[{"angle":-30.81,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"angle":-14.42,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"angle":-30.81}],"translate":[{"x":0.29,"y":2.05,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"x":0.29,"y":2.05}],"scale":[{"x":0.899}]},"leg_upper_far":{"rotate":[{"angle":28.65,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"angle":26.3,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"angle":28.65}]},"leg_upper_near":{"rotate":[{"angle":22.72,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"angle":15.12,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"angle":22.72}],"scale":[{"x":0.91}]},"torso":{"rotate":[{"angle":-6.88,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"angle":-6.07,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"angle":-6.88}],"translate":[{"x":-8.53,"y":-40.31,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"x":-8.53,"y":-32.01,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"x":-8.53,"y":-40.31}]},"waist":{"rotate":[{"angle":2.46,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.2,"curve":0.46,"c3":0.533,"c4":0.99},{"time":0.4,"angle":2.46}],"translate":[{"x":2.12,"y":0.22}]}}},"crouchIdle":{"slots":{"foot_near":{"attachment":[{"name":"foot_near_2_bent"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_2"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":-15.23,"curve":0.612,"c3":0.439},{"time":0.2,"angle":-21.94,"curve":0.25,"c3":0.75},{"time":0.4,"angle":-15.23}]},"arm_lower_near":{"rotate":[{"angle":19.72,"curve":0.382,"c2":0.57,"c3":0.735},{"time":0.0667,"angle":20.86},{"time":0.2667,"angle":16.82,"curve":0.243,"c3":0.648,"c4":0.6},{"time":0.4,"angle":19.72}]},"arm_upper_far":{"rotate":[{"angle":22.86}],"translate":[{"x":5.86,"y":-7.5}]},"arm_upper_near":{"rotate":[{"angle":-36.58,"curve":0.215,"c2":0.57,"c3":0.498},{"time":0.0667,"angle":-37.35},{"time":0.2667,"angle":-33.43,"curve":0.65,"c3":0.744,"c4":0.6},{"time":0.4,"angle":-36.58}]},"foot_far":{"rotate":[{"curve":0.641,"c3":0.404,"c4":0.99},{"time":0.2,"angle":2.4,"curve":0.612,"c3":0.439},{"time":0.4}],"translate":[{"x":-16.17,"y":-0.22}]},"foot_near":{"rotate":[{"angle":-269.2,"curve":0.641,"c3":0.404,"c4":0.99},{"time":0.2,"angle":85.76,"curve":0.612,"c3":0.439},{"time":0.4,"angle":-269.2}],"translate":[{"x":-12.44,"y":59.42,"curve":0.641,"c3":0.404,"c4":0.99},{"time":0.2,"x":-7.18,"y":58.48,"curve":0.612,"c3":0.439},{"time":0.4,"x":-12.44,"y":59.42}]},"hand_far":{"rotate":[{"curve":0.612,"c3":0.439},{"time":0.2,"angle":5.93,"curve":0.25,"c3":0.75},{"time":0.4}]},"head":{"rotate":[{"angle":18.76,"curve":0.263,"c2":0.62,"c3":0.586},{"time":0.0333,"angle":18.61},{"time":0.2333,"angle":22.23,"curve":0.659,"c3":0.613,"c4":0.75},{"time":0.4,"angle":18.76}],"translate":[{"x":-51.14,"y":-32.84,"curve":0.257,"c2":0.61,"c3":0.579,"c4":0.99},{"time":0.0333,"x":-51.3,"y":-32.9},{"time":0.2333,"x":-51.6,"y":-32.52,"curve":0.7,"c3":0.6,"c4":0.74},{"time":0.4,"x":-51.14,"y":-32.84}]},"leg_lower_far":{"rotate":[{"angle":-71.31,"curve":0.641,"c3":0.404,"c4":0.99},{"time":0.2,"angle":-67.2,"curve":0.612,"c3":0.439},{"time":0.4,"angle":-71.31}]},"leg_lower_near":{"rotate":[{"angle":-88.66,"curve":0.641,"c3":0.404,"c4":0.99},{"time":0.2,"angle":-84.53,"curve":0.612,"c3":0.439},{"time":0.4,"angle":-88.66}],"translate":[{"x":15.89,"y":10.52,"curve":0.641,"c3":0.404,"c4":0.99},{"time":0.2,"x":11.73,"y":12.39,"curve":0.612,"c3":0.439},{"time":0.4,"x":15.89,"y":10.52}]},"leg_upper_far":{"rotate":[{"angle":73.33,"curve":0.641,"c3":0.404,"c4":0.99},{"time":0.2,"angle":66.19,"curve":0.612,"c3":0.439},{"time":0.4,"angle":73.33}]},"torso":{"rotate":[{"angle":-23.95,"curve":0.641,"c3":0.404,"c4":0.99},{"time":0.2,"angle":-25.07,"curve":0.612,"c3":0.439},{"time":0.4,"angle":-23.95}],"translate":[{"x":-23.1,"y":-143.28,"curve":0.641,"c3":0.404,"c4":0.99},{"time":0.2,"x":-23.1,"y":-134.03,"curve":0.612,"c3":0.439},{"time":0.4,"x":-23.1,"y":-143.28}]},"waist":{"rotate":[{"angle":-337.63,"curve":0.641,"c3":0.404,"c4":0.99},{"time":0.2,"angle":24.66,"curve":0.612,"c3":0.439},{"time":0.4,"angle":-337.63}],"translate":[{"x":1.87,"y":-4.22}]}}},"crouchWalk":{"slots":{"foot_far":{"attachment":[{"name":"foot_far_1"},{"time":0.4333,"name":"foot_far_2_bent"},{"time":0.6,"name":"foot_far_2_bent"},{"time":0.7667,"name":"foot_far_1"}]},"foot_near":{"attachment":[{"name":"foot_near_2_bent"},{"time":0.1667,"name":"foot_near_1"},{"time":0.6,"name":"foot_near_1"},{"time":1.0333,"name":"foot_near_2_bent"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_2"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":-21.94,"curve":0.509,"c2":0.01,"c3":0.922,"c4":0.5},{"time":0.3,"angle":-31.14,"curve":0.124,"c2":0.56,"c3":0.509,"c4":0.95},{"time":0.6,"angle":-27.36,"curve":0.477,"c2":0.09,"c3":0.893,"c4":0.54},{"time":0.9,"angle":-26.12,"curve":0.132,"c2":0.54,"c3":0.492,"c4":0.98},{"time":1.2,"angle":-21.94}]},"arm_lower_near":{"rotate":[{"angle":19.72,"curve":0.509,"c2":0.01,"c3":0.922,"c4":0.5},{"time":0.3,"angle":-0.91,"curve":0.124,"c2":0.56,"c3":0.509,"c4":0.95},{"time":0.6,"angle":-5.53,"curve":0.477,"c2":0.09,"c3":0.893,"c4":0.54},{"time":0.9,"angle":-13.55,"curve":0.132,"c2":0.54,"c3":0.492,"c4":0.98},{"time":1.2,"angle":19.72}]},"arm_upper_far":{"rotate":[{"angle":22.86,"curve":0.509,"c2":0.01,"c3":0.922,"c4":0.5},{"time":0.3,"angle":18.96,"curve":0.124,"c2":0.56,"c3":0.509,"c4":0.95},{"time":0.6,"angle":38.52,"curve":0.477,"c2":0.09,"c3":0.893,"c4":0.54},{"time":0.9,"angle":29.5,"curve":0.132,"c2":0.54,"c3":0.492,"c4":0.98},{"time":1.2,"angle":22.86}],"translate":[{"x":3.56,"y":-2.59,"curve":"stepped"},{"time":0.3,"x":3.56,"y":-2.59,"curve":0.124,"c2":0.56,"c3":0.509,"c4":0.95},{"time":0.6,"x":9.11,"y":-13.45,"curve":0.477,"c2":0.09,"c3":0.893,"c4":0.54},{"time":0.9,"x":6.61,"y":-8.64,"curve":0.132,"c2":0.54,"c3":0.492,"c4":0.98},{"time":1.2,"x":3.56,"y":-2.59}]},"arm_upper_near":{"rotate":[{"angle":-36.58,"curve":0.509,"c2":0.01,"c3":0.922,"c4":0.5},{"time":0.3,"angle":-15,"curve":0.124,"c2":0.56,"c3":0.509,"c4":0.95},{"time":0.6,"angle":-24.43,"curve":0.477,"c2":0.09,"c3":0.893,"c4":0.54},{"time":0.9,"angle":-8.75,"curve":0.132,"c2":0.54,"c3":0.492,"c4":0.98},{"time":1.2,"angle":-36.58}],"translate":[{"x":3.44,"y":-7.36,"curve":"stepped"},{"time":0.3,"x":3.44,"y":-7.36,"curve":0.124,"c2":0.56,"c3":0.509,"c4":0.95},{"time":0.6,"x":-5.85,"y":10.69,"curve":0.477,"c2":0.09,"c3":0.893,"c4":0.54},{"time":0.9,"x":-0.85,"y":1.07,"curve":0.132,"c2":0.54,"c3":0.492,"c4":0.98},{"time":1.2,"x":3.44,"y":-7.36}]},"foot_far":{"rotate":[{"angle":2.4,"curve":0.489,"c3":0.783,"c4":0.42},{"time":0.2,"angle":21.98,"curve":0.385,"c2":0.18,"c3":0.819,"c4":0.55},{"time":0.3,"angle":57.27,"curve":0.317,"c2":0.34,"c3":0.608,"c4":0.7},{"time":0.4333,"angle":85.81,"curve":0.222,"c2":0.58,"c3":0.518},{"time":0.6,"angle":112.08,"curve":0.441,"c3":0.756,"c4":0.39},{"time":0.7333,"angle":86.63,"curve":0.357,"c2":0.3,"c3":0.689,"c4":0.64},{"time":0.7667,"angle":50.84,"curve":0.355,"c2":0.31,"c3":0.687,"c4":0.65},{"time":0.8,"angle":36.72,"curve":0.381,"c2":0.3,"c3":0.693,"c4":0.65},{"time":0.9,"angle":5.38,"curve":0.304,"c2":0.35,"c3":0.601,"c4":0.71},{"time":1.0333,"angle":0.58,"curve":0.289,"c2":0.38,"c3":0.616,"c4":0.73},{"time":1.1,"angle":4.8,"curve":0.436,"c2":0.11,"c3":0.892,"c4":0.56},{"time":1.2,"angle":2.4}],"translate":[{"x":-16.17,"y":-0.22,"curve":0.489,"c3":0.783,"c4":0.42},{"time":0.2,"x":-8.58,"y":5.46,"curve":0.385,"c2":0.18,"c3":0.819,"c4":0.55},{"time":0.3,"x":-1.33,"y":11.43,"curve":0.317,"c2":0.34,"c3":0.608,"c4":0.7},{"time":0.4333,"x":17.24,"y":43.13,"curve":0.222,"c2":0.58,"c3":0.518},{"time":0.6,"x":-4.02,"y":74.63,"curve":0.441,"c3":0.756,"c4":0.39},{"time":0.7333,"x":13.51,"y":63.08,"curve":0.357,"c2":0.3,"c3":0.689,"c4":0.64},{"time":0.7667,"x":-12.4,"y":25.26,"curve":0.355,"c2":0.31,"c3":0.687,"c4":0.65},{"time":0.8,"x":-8.54,"y":17.23,"curve":0.381,"c2":0.3,"c3":0.693,"c4":0.65},{"time":0.9,"x":-7.74,"y":12.22,"curve":0.215,"c2":0.5,"c3":0.416},{"time":1.2,"x":-16.17,"y":-0.22}]},"foot_near":{"rotate":[{"angle":85.76,"curve":0.397,"c3":0.724,"c4":0.36},{"time":0.1333,"angle":72.06,"curve":0.349,"c2":0.3,"c3":0.682,"c4":0.63},{"time":0.1667,"angle":9.11,"curve":0.349,"c2":0.3,"c3":0.681,"c4":0.64},{"time":0.2,"angle":-32.93,"curve":0.444,"c2":0.25,"c3":0.734,"c4":0.61},{"time":0.3,"angle":-27.65,"curve":0.317,"c2":0.34,"c3":0.608,"c4":0.7},{"time":0.4333,"angle":-14.71,"curve":0.265,"c2":0.42,"c3":0.582,"c4":0.78},{"time":0.5333,"angle":-25.27,"curve":0.093,"c2":0.64,"c3":0.362,"c4":0.92},{"time":0.6,"angle":-23.18,"curve":0.501,"c3":0.788,"c4":0.42},{"time":0.8,"angle":-10.19,"curve":0.381,"c2":0.3,"c3":0.693,"c4":0.65},{"time":0.9,"angle":26.09,"curve":0.304,"c2":0.35,"c3":0.601,"c4":0.71},{"time":1.0333,"angle":55.01,"curve":0.289,"c2":0.38,"c3":0.616,"c4":0.73},{"time":1.1,"angle":71.22,"curve":0.22,"c2":0.18,"c3":0.743,"c4":0.42},{"time":1.2,"angle":85.76}],"translate":[{"x":-7.18,"y":58.48,"curve":0.397,"c3":0.724,"c4":0.36},{"time":0.1333,"x":12.11,"y":52.22,"curve":0.349,"c2":0.3,"c3":0.682,"c4":0.63},{"time":0.1667,"x":-8.32,"y":27.83,"curve":0.349,"c2":0.3,"c3":0.681,"c4":0.64},{"time":0.2,"x":-8.95,"y":11.01,"curve":0.444,"c2":0.25,"c3":0.734,"c4":0.61},{"time":0.3,"x":-15.85,"y":7.62,"curve":0.223,"c2":0.48,"c3":0.403},{"time":0.6,"x":-21.19,"y":1.67,"curve":"stepped"},{"time":0.9,"x":-21.19,"y":1.67,"curve":0.304,"c2":0.35,"c3":0.601,"c4":0.71},{"time":1.0333,"x":8.73,"y":27.99,"curve":0.227,"c2":0.59,"c3":0.527},{"time":1.2,"x":-7.18,"y":58.48}]},"hand_far":{"rotate":[{"angle":5.93}]},"head":{"rotate":[{"angle":18.76,"curve":0.126,"c2":0.57,"c3":0.464,"c4":0.97},{"time":0.1667,"angle":15.72,"curve":0.25,"c3":0.917,"c4":0.41},{"time":0.3333,"angle":12.63,"curve":0.101,"c2":0.55,"c3":0.75},{"time":0.5,"angle":16.2,"curve":0.25,"c3":0.898,"c4":0.39},{"time":0.6,"angle":20.09,"curve":0.158,"c2":0.59,"c3":0.75},{"time":0.7667,"angle":16.49,"curve":0.25,"c3":0.936,"c4":0.36},{"time":0.9333,"angle":15.64,"curve":0.16,"c2":0.6,"c3":0.75},{"time":1.0667,"angle":21.05,"curve":0.25,"c3":0.898,"c4":0.51},{"time":1.2,"angle":18.76}],"translate":[{"x":-52.78,"y":-33.06}]},"leg_lower_far":{"rotate":[{"angle":-67.2,"curve":0.489,"c3":0.783,"c4":0.42},{"time":0.2,"angle":-83.31,"curve":0.055,"c2":0.49,"c3":0.414,"c4":0.86},{"time":0.3,"angle":-83.78,"curve":0.317,"c2":0.34,"c3":0.608,"c4":0.7},{"time":0.4333,"angle":-84.39,"curve":0.222,"c2":0.58,"c3":0.518},{"time":0.6,"angle":-60.17,"curve":0.501,"c3":0.788,"c4":0.42},{"time":0.8,"angle":-79.84,"curve":0.381,"c2":0.3,"c3":0.693,"c4":0.65},{"time":0.9,"angle":-86.32,"curve":0.304,"c2":0.35,"c3":0.601,"c4":0.71},{"time":1.0333,"angle":-91.57,"curve":0.289,"c2":0.38,"c3":0.616,"c4":0.73},{"time":1.1,"angle":-66.61,"curve":0.436,"c2":0.11,"c3":0.892,"c4":0.56},{"time":1.2,"angle":-67.2}],"translate":[{"curve":0.501,"c3":0.788,"c4":0.42},{"time":0.2,"x":-0.16,"y":-2.7,"curve":0.055,"c2":0.49,"c3":0.414,"c4":0.86},{"time":0.3}]},"leg_lower_near":{"rotate":[{"angle":-84.53,"curve":0.433,"c3":0.751,"c4":0.38},{"time":0.2,"angle":-119.1,"curve":0.444,"c2":0.25,"c3":0.734,"c4":0.61},{"time":0.3,"angle":-133.7,"curve":0.317,"c2":0.34,"c3":0.608,"c4":0.7},{"time":0.4333,"angle":-110.5,"curve":0.222,"c2":0.58,"c3":0.518},{"time":0.6,"angle":-92.02,"curve":0.501,"c3":0.788,"c4":0.42},{"time":0.8,"angle":-107.71,"curve":0.64,"c4":0.33},{"time":0.9,"angle":-96.21,"curve":"stepped"},{"time":1.0333,"angle":-96.21,"curve":0.289,"c2":0.38,"c3":0.616,"c4":0.73},{"time":1.1,"angle":-79.48,"curve":0.22,"c2":0.18,"c3":0.743,"c4":0.42},{"time":1.2,"angle":-84.53}],"translate":[{"x":11.73,"y":12.39,"curve":0.433,"c3":0.751,"c4":0.38},{"time":0.2,"x":16.79,"y":10.03,"curve":0.444,"c2":0.25,"c3":0.734,"c4":0.61},{"time":0.3,"x":24.47,"y":6.79,"curve":0.223,"c2":0.48,"c3":0.403},{"time":0.6,"x":11.73,"y":12.39,"curve":0.501,"c3":0.788,"c4":0.42},{"time":0.8,"x":15.62,"y":8.16,"curve":0.381,"c2":0.3,"c3":0.693,"c4":0.65},{"time":0.9,"x":11.73,"y":12.39}]},"leg_upper_far":{"rotate":[{"angle":66.19,"curve":0.489,"c3":0.783,"c4":0.42},{"time":0.2,"angle":62.46,"curve":0.441,"c2":0.08,"c3":0.852,"c4":0.56},{"time":0.3,"angle":23.32,"curve":0.317,"c2":0.34,"c3":0.608,"c4":0.7},{"time":0.4333,"angle":-9.82,"curve":0.222,"c2":0.58,"c3":0.518},{"time":0.6,"angle":-51.43,"curve":0.501,"c3":0.788,"c4":0.42},{"time":0.8,"angle":-30.45,"curve":0.381,"c2":0.3,"c3":0.693,"c4":0.65},{"time":0.9,"angle":4.73,"curve":0.304,"c2":0.35,"c3":0.601,"c4":0.71},{"time":1.0333,"angle":49.22,"curve":0.289,"c2":0.38,"c3":0.616,"c4":0.73},{"time":1.1,"angle":54.76,"curve":0.436,"c2":0.11,"c3":0.892,"c4":0.56},{"time":1.2,"angle":66.19}],"translate":[{"curve":0.489,"c3":0.783,"c4":0.42},{"time":0.2,"x":0.1,"y":-5.08,"curve":0.441,"c2":0.08,"c3":0.852,"c4":0.56},{"time":0.3,"x":0.29,"y":-14.9,"curve":0.317,"c2":0.34,"c3":0.608,"c4":0.7},{"time":0.4333,"x":-4.96,"y":-59.49,"curve":0.222,"c2":0.58,"c3":0.518},{"time":0.6,"x":-8.83,"y":-59.48,"curve":0.501,"c3":0.788,"c4":0.42},{"time":0.8,"x":-9.25,"y":-55.44,"curve":0.381,"c2":0.3,"c3":0.693,"c4":0.65},{"time":0.9,"x":-3.46,"y":-58.8,"curve":0.304,"c2":0.35,"c3":0.601,"c4":0.71},{"time":1.0333,"x":-3.8,"y":-13.76,"curve":0.227,"c2":0.59,"c3":0.527},{"time":1.2}]},"leg_upper_near":{"rotate":[{"curve":0.433,"c3":0.751,"c4":0.38},{"time":0.2,"angle":36.08,"curve":0.444,"c2":0.25,"c3":0.734,"c4":0.61},{"time":0.3,"angle":73.93,"curve":0.317,"c2":0.34,"c3":0.608,"c4":0.7},{"time":0.4333,"angle":99.46,"curve":0.265,"c2":0.42,"c3":0.582,"c4":0.78},{"time":0.5333,"angle":110.68,"curve":0.577,"c2":0.13,"c3":0.914,"c4":0.52},{"time":0.6,"angle":118.78,"curve":0.501,"c3":0.788,"c4":0.42},{"time":0.8,"angle":121.14,"curve":0.513,"c2":0.16,"c3":0.785,"c4":0.54},{"time":0.9,"angle":73.71,"curve":0.304,"c2":0.35,"c3":0.601,"c4":0.71},{"time":1.0333,"angle":44.78,"curve":0.289,"c2":0.38,"c3":0.616,"c4":0.73},{"time":1.1,"angle":12.31,"curve":0.22,"c2":0.18,"c3":0.743,"c4":0.42},{"time":1.2}],"translate":[{"curve":0.433,"c3":0.751,"c4":0.38},{"time":0.2,"x":-5.31,"y":-1.73,"curve":0.444,"c2":0.25,"c3":0.734,"c4":0.61},{"time":0.3,"x":-8.39,"y":13.38,"curve":0.317,"c2":0.34,"c3":0.608,"c4":0.7},{"time":0.4333,"x":-7.85,"y":33.7,"curve":0.222,"c2":0.58,"c3":0.518},{"time":0.6,"x":-6.92,"y":43.46,"curve":0.501,"c3":0.788,"c4":0.42},{"time":0.8,"x":-6.08,"y":35.37,"curve":0.381,"c2":0.3,"c3":0.693,"c4":0.65},{"time":0.9,"x":-5.72,"y":34.05,"curve":0.304,"c2":0.35,"c3":0.601,"c4":0.71},{"time":1.0333,"x":-5.98,"y":14.89,"curve":0.227,"c2":0.59,"c3":0.527},{"time":1.2}]},"torso":{"rotate":[{"angle":-25.07,"curve":0.489,"c3":0.783,"c4":0.42},{"time":0.2,"angle":-27.79,"curve":0.49,"c2":0.01,"c3":0.865,"c4":0.41},{"time":0.3,"angle":-23.98,"curve":0.139,"c2":0.47,"c3":0.483,"c4":0.93},{"time":0.4333,"angle":-21.25,"curve":0.482,"c2":0.01,"c3":0.947,"c4":0.5},{"time":0.6,"angle":-28.67,"curve":0.039,"c2":0.26,"c3":0.41,"c4":0.96},{"time":0.8,"angle":-30.45,"curve":0.567,"c2":0.05,"c3":0.885,"c4":0.49},{"time":0.9,"angle":-27.44,"curve":0.115,"c2":0.46,"c3":0.474,"c4":0.9},{"time":1.0333,"angle":-26.63,"curve":0.505,"c2":0.02,"c3":0.952,"c4":0.47},{"time":1.2,"angle":-25.07}],"translate":[{"x":-23.1,"y":-134.03,"curve":0.489,"c3":0.783,"c4":0.42},{"time":0.2,"x":-23.1,"y":-128.61,"curve":0.49,"c2":0.01,"c3":0.865,"c4":0.41},{"time":0.3,"x":-23.1,"y":-115.78,"curve":0.139,"c2":0.47,"c3":0.483,"c4":0.93},{"time":0.4333,"x":-23.1,"y":-104.22,"curve":0.482,"c2":0.01,"c3":0.947,"c4":0.5},{"time":0.6,"x":-23.1,"y":-127.8,"curve":0.039,"c2":0.26,"c3":0.41,"c4":0.96},{"time":0.8,"x":-23.1,"y":-131.32,"curve":0.567,"c2":0.05,"c3":0.885,"c4":0.49},{"time":0.9,"x":-23.1,"y":-102.87,"curve":0.115,"c2":0.46,"c3":0.474,"c4":0.9},{"time":1.0333,"x":-23.1,"y":-98.8,"curve":0.505,"c2":0.02,"c3":0.952,"c4":0.47},{"time":1.2,"x":-23.1,"y":-134.03}]},"waist":{"rotate":[{"angle":24.66,"curve":0.501,"c3":0.788,"c4":0.42},{"time":0.2,"angle":-332.66,"curve":0.133,"c2":0.38,"c3":0.457,"c4":0.76},{"time":0.3,"angle":27.33,"curve":0.055,"c2":0.59,"c3":0.932,"c4":0.41},{"time":0.6,"angle":-333.61,"curve":0.039,"c2":0.26,"c3":0.41,"c4":0.96},{"time":0.8,"angle":-331.84,"curve":0.567,"c2":0.05,"c3":0.885,"c4":0.49},{"time":0.9,"angle":23.79,"curve":0.115,"c2":0.46,"c3":0.474,"c4":0.9},{"time":1.0333,"angle":-337.11,"curve":0.505,"c2":0.02,"c3":0.952,"c4":0.47},{"time":1.2,"angle":24.66}],"translate":[{"x":1.87,"y":-4.22}]}}},"empty":{},"floorGetUp":{"slots":{"head":{"attachment":[{"name":"head_2_injured"},{"time":0.087,"name":"head_1"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_2"},{"time":0.1667,"name":"leg_lower_near_2"},{"time":0.4,"name":"leg_lower_near_1"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":-91.19,"curve":"stepped"},{"time":0.1667,"angle":-91.19,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4,"angle":-97.26,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"angle":12.92,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}]},"arm_lower_near":{"rotate":[{"angle":-80.14,"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"angle":19.06,"curve":0.223,"c3":0.718,"c4":0.39},{"time":0.3333,"angle":-91.49,"curve":0.487,"c2":0.3,"c3":0.851,"c4":0.63},{"time":0.4,"angle":-86.13,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"angle":8.34,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}]},"arm_upper_far":{"rotate":[{"angle":-9.2,"curve":"stepped"},{"time":0.1667,"angle":-9.2,"curve":0.223,"c3":0.718,"c4":0.39},{"time":0.3333,"angle":312.29,"curve":0.487,"c2":0.3,"c3":0.851,"c4":0.63},{"time":0.4,"angle":339.82,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"angle":11.19,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}],"translate":[{"x":0.87,"y":8.25,"curve":"stepped"},{"time":0.1667,"x":0.87,"y":8.25,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4,"x":-8.07,"y":51.26,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333}]},"arm_upper_near":{"rotate":[{"angle":47.96,"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"angle":-13.15,"curve":0.223,"c3":0.718,"c4":0.39},{"time":0.3333,"angle":20.05,"curve":0.487,"c2":0.3,"c3":0.851,"c4":0.63},{"time":0.4,"angle":31.48,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"angle":-7.05,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}]},"foot_far":{"rotate":[{"angle":-24.46,"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"angle":-13.12,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4,"angle":14.83,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"angle":7.15,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}]},"foot_near":{"rotate":[{"angle":-33.28,"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"angle":-80.83,"curve":0.224,"c3":0.629,"c4":0.37},{"time":0.2667,"angle":-77.28,"curve":0.368,"c2":0.28,"c3":0.719,"c4":0.61},{"time":0.3333,"angle":-38.22,"curve":0.487,"c2":0.3,"c3":0.851,"c4":0.63},{"time":0.4,"angle":47.03,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"angle":9.26,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}]},"hand_far":{"rotate":[{"time":0.1667,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4,"angle":3.21,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333}]},"head":{"rotate":[{"angle":-10.48,"curve":0.579,"c2":0.01,"c3":0.783,"c4":0.51},{"time":0.087,"angle":-33.56,"curve":0.215,"c2":0.5,"c3":0.441,"c4":0.98},{"time":0.1667,"angle":-30.86,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4,"angle":-12.61,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"angle":-9.93,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333,"angle":-2.24,"curve":0.106,"c2":0.3,"c3":0.75},{"time":0.7}],"translate":[{"x":-9.24,"y":-28.24,"curve":0.579,"c2":0.01,"c3":0.783,"c4":0.51},{"time":0.087,"x":-26.15,"y":-0.06,"curve":0.215,"c2":0.5,"c3":0.441,"c4":0.98},{"time":0.1667,"x":-14.53,"y":3.81,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4,"x":-18.45,"y":-2.9,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"x":-4.15,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}],"scale":[{"y":-1,"curve":"stepped"},{"time":0.087}]},"leg_lower_far":{"rotate":[{"angle":-20.69,"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"angle":-107.74,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4,"angle":-82.26,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"angle":-21.87,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}]},"leg_lower_near":{"rotate":[{"angle":-4.04,"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"angle":-74.06,"curve":0.224,"c3":0.629,"c4":0.37},{"time":0.2667,"angle":-105.76,"curve":0.368,"c2":0.28,"c3":0.719,"c4":0.61},{"time":0.3333,"angle":-145.12,"curve":0.388,"c2":0.31,"c3":0.728,"c4":0.65},{"time":0.3667,"angle":-143.39,"curve":0.457,"c2":0.31,"c3":0.8,"c4":0.65},{"time":0.4,"angle":-116.2,"curve":0.158,"c2":0.45,"c3":0.536,"c4":0.77},{"time":0.4667,"angle":-53.66,"curve":0.306,"c2":0.57,"c3":0.669,"c4":0.88},{"time":0.5333,"angle":-25.8,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}],"translate":[{"time":0.1667,"curve":0.224,"c3":0.629,"c4":0.37},{"time":0.2667,"x":11.97,"y":6.75,"curve":0.368,"c2":0.28,"c3":0.719,"c4":0.61},{"time":0.3333,"x":23.72,"y":3.99,"curve":0.487,"c2":0.3,"c3":0.851,"c4":0.63},{"time":0.4,"x":20.09,"y":3.78,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333}],"scale":[{"time":0.4,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"x":0.953,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}]},"leg_upper_far":{"rotate":[{"angle":-7.15,"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"angle":20.08,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4,"angle":75.78,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"angle":13.79,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}],"translate":[{"x":-0.52,"y":-12.44,"curve":"stepped"},{"time":0.1667,"x":-0.52,"y":-12.44,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4}],"scale":[{"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"x":0.915,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4}]},"leg_upper_near":{"rotate":[{"angle":17.52,"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"angle":62.21,"curve":0.224,"c3":0.629,"c4":0.37},{"time":0.2667,"angle":101.28,"curve":0.368,"c2":0.28,"c3":0.719,"c4":0.61},{"time":0.3333,"angle":129.33,"curve":0.388,"c2":0.31,"c3":0.728,"c4":0.65},{"time":0.3667,"angle":127.37,"curve":0.457,"c2":0.31,"c3":0.8,"c4":0.65},{"time":0.4,"angle":76.61,"curve":0.158,"c2":0.45,"c3":0.536,"c4":0.77},{"time":0.4667,"angle":35,"curve":0.306,"c2":0.57,"c3":0.669,"c4":0.88},{"time":0.5333,"angle":16.21,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}],"translate":[{"x":0.35,"y":8.29,"curve":"stepped"},{"time":0.1667,"x":0.35,"y":8.29,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4}],"scale":[{"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"x":0.828,"curve":0.223,"c3":0.718,"c4":0.39},{"time":0.3333,"curve":"stepped"},{"time":0.4,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"x":0.941,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}]},"torso":{"rotate":[{"angle":96.04,"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"angle":54.06,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4,"angle":-8.94,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"angle":-2.7,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}],"translate":[{"y":-213.82,"curve":"stepped"},{"time":0.1667,"y":-213.82,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4,"y":-120.4,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"y":-20.75,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}]},"waist":{"rotate":[{"curve":0.577,"c2":0.01,"c3":0.439,"c4":0.98},{"time":0.1667,"angle":-312.11,"curve":0.25,"c3":0.904,"c4":0.42},{"time":0.4,"curve":0.125,"c2":0.64,"c3":0.601,"c4":0.93},{"time":0.5333,"angle":2.5,"curve":0.077,"c2":0.43,"c3":0.75},{"time":0.6333}]}}},"floorIdle":{"slots":{"head":{"attachment":[{"name":"head_2_injured"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_2"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":-91.19,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":-82.61,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":-91.19}]},"arm_lower_near":{"rotate":[{"angle":-80.14,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":-73.77,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":-80.14}]},"arm_upper_far":{"rotate":[{"angle":-9.2,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":342.35,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":-9.2}],"translate":[{"x":0.87,"y":8.25}]},"arm_upper_near":{"rotate":[{"angle":47.96,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":44.14,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":47.96}],"translate":[{"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"x":-1.05,"y":-7.37,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667}]},"foot_far":{"rotate":[{"angle":-24.46,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":-17.34,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":-24.46}]},"foot_near":{"rotate":[{"angle":-33.28,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":-26.17,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":-33.28}]},"head":{"rotate":[{"angle":-10.48,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":-14.52,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":-10.48}],"translate":[{"x":-9.24,"y":-28.24}],"scale":[{"y":-1}]},"leg_lower_far":{"rotate":[{"angle":-20.69,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":-29.12,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":-20.69}]},"leg_lower_near":{"rotate":[{"angle":-4.04,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":-16.25,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":-4.04}]},"leg_upper_far":{"rotate":[{"angle":-7.15,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":-1.85,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":-7.15}],"translate":[{"x":-0.52,"y":-12.44}]},"leg_upper_near":{"rotate":[{"angle":17.52,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":25.67,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":17.52}],"translate":[{"x":0.35,"y":8.29}]},"torso":{"rotate":[{"angle":96.04,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":-262.65,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"angle":96.04}],"translate":[{"y":-213.82,"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"y":-211.75,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667,"y":-213.82}],"scale":[{"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"y":1.11,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667}]},"waist":{"rotate":[{"curve":0.577,"c2":0.01,"c3":0.463,"c4":0.99},{"time":0.5667,"angle":-1.98,"curve":0.406,"c3":0.209,"c4":0.99},{"time":1.1667}]}}},"hideSword":{},"hitBig":{"slots":{"head":{"attachment":[{"name":"head_1"},{"time":0.0333,"name":"head_2_injured"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_1"},{"time":0.0333,"name":"leg_lower_near_2"}]}},"bones":{"arm_lower_far":{"rotate":[{},{"time":0.0333,"angle":-54.22},{"time":0.1,"angle":-91.19,"curve":"stepped"},{"time":0.1667,"angle":-91.19},{"time":0.2667,"angle":-82.57,"curve":0.25,"c3":0.936,"c4":0.37},{"time":0.3667,"angle":-89.9,"curve":0.052,"c2":0.69,"c3":0.75},{"time":0.4667,"angle":-91.19}]},"arm_lower_near":{"rotate":[{},{"time":0.0333,"angle":-50.04},{"time":0.1,"angle":-80.14,"curve":"stepped"},{"time":0.2667,"angle":-80.14,"curve":0.25,"c3":0.936,"c4":0.37},{"time":0.3667,"angle":-68.87,"curve":0.052,"c2":0.69,"c3":0.75},{"time":0.4667,"angle":-80.14}]},"arm_upper_far":{"rotate":[{},{"time":0.0333,"angle":34.21},{"time":0.1,"angle":45.81,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"angle":323.26},{"time":0.2667,"angle":4.14,"curve":0.25,"c3":0.936,"c4":0.37},{"time":0.3667,"angle":-9.2}],"translate":[{},{"time":0.0333,"x":0.29,"y":2.75},{"time":0.1,"x":0.87,"y":8.25}]},"arm_upper_near":{"rotate":[{},{"time":0.0333,"angle":98.97},{"time":0.1,"angle":-247.23,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"angle":28.95},{"time":0.2667,"angle":-289.32,"curve":0.25,"c3":0.936,"c4":0.37},{"time":0.3667,"angle":47.96}],"translate":[{},{"time":0.0333,"x":-3.97,"y":-10.19},{"time":0.1,"x":-11.92,"y":-30.58,"curve":"stepped"},{"time":0.1667,"x":-11.92,"y":-30.58},{"time":0.2667}]},"foot_far":{"rotate":[{},{"time":0.0333,"angle":-9.01},{"time":0.1,"angle":-27.05,"curve":"stepped"},{"time":0.1667,"angle":-27.05},{"time":0.2667,"angle":-24.46}]},"foot_near":{"rotate":[{"curve":0.479,"c2":0.05,"c3":0.844,"c4":0.45},{"time":0.0165,"angle":-9.52},{"time":0.0333,"angle":-59.33},{"time":0.1,"angle":-52.83,"curve":"stepped"},{"time":0.1667,"angle":-52.83},{"time":0.2667,"angle":-33.28}]},"hand_far":{"rotate":[{},{"time":0.0333,"angle":7.22},{"time":0.1}]},"head":{"rotate":[{},{"time":0.0333,"angle":-20.77},{"time":0.1,"angle":-22.06,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"angle":-4.4},{"time":0.2667,"angle":-17.99,"curve":0.25,"c3":0.936,"c4":0.37},{"time":0.3667,"angle":-17.2,"curve":0.052,"c2":0.69,"c3":0.75},{"time":0.5333,"angle":-10.48}],"translate":[{},{"time":0.0333,"x":-2.26,"y":-4.07},{"time":0.1,"x":-6.8,"y":-12.22,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"x":-3.32,"y":-34.3},{"time":0.2667,"x":-9.24,"y":-28.24}],"scale":[{"curve":"stepped"},{"time":0.1,"y":-1}]},"leg_lower_far":{"rotate":[{},{"time":0.0333,"angle":2.8},{"time":0.1,"angle":8.4,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"angle":33.57},{"time":0.2667,"angle":-2.65,"curve":0.25,"c3":0.936,"c4":0.37},{"time":0.3667,"angle":-25.24,"curve":0.052,"c2":0.69,"c3":0.75},{"time":0.4667,"angle":-20.69}]},"leg_lower_near":{"rotate":[{"curve":0.041,"c2":0.3,"c3":0.422,"c4":0.87},{"time":0.0165,"angle":-65.64},{"time":0.0333,"angle":-17.5},{"time":0.1,"angle":-4.04,"curve":"stepped"},{"time":0.2667,"angle":-4.04,"curve":0.25,"c3":0.936,"c4":0.37},{"time":0.3667,"angle":-14.23,"curve":0.052,"c2":0.69,"c3":0.75},{"time":0.4667,"angle":-4.04}]},"leg_upper_far":{"rotate":[{},{"time":0.0333,"angle":-0.76},{"time":0.1,"angle":-2.3,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"angle":-23.21},{"time":0.2667,"angle":-7.15,"curve":0.25,"c3":0.936,"c4":0.37},{"time":0.3667,"angle":-4.06,"curve":0.052,"c2":0.69,"c3":0.75},{"time":0.4667,"angle":-7.15}],"translate":[{},{"time":0.0333,"x":-0.17,"y":-4.14},{"time":0.1,"x":-0.52,"y":-12.44}]},"leg_upper_near":{"rotate":[{"curve":0.041,"c2":0.3,"c3":0.422,"c4":0.87},{"time":0.0165,"angle":37.28},{"time":0.0333,"angle":33.65},{"time":0.1,"angle":29.3,"curve":"stepped"},{"time":0.1667,"angle":29.3},{"time":0.2667,"angle":23.12,"curve":0.25,"c3":0.936,"c4":0.37},{"time":0.3667,"angle":23.9,"curve":0.052,"c2":0.69,"c3":0.75},{"time":0.4667,"angle":17.52}],"translate":[{},{"time":0.0333,"x":-5.86,"y":5.87},{"time":0.1,"x":0.35,"y":8.29}]},"neck":{"rotate":[{},{"time":0.0333,"angle":-5.9},{"time":0.1,"angle":-17.72,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"angle":-7.99},{"time":0.2667}],"translate":[{},{"time":0.0333,"x":-2.37,"y":-1.98},{"time":0.1,"x":-7.11,"y":-5.96,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"x":-11.13,"y":-4.92},{"time":0.2667}]},"torso":{"rotate":[{},{"time":0.0333,"angle":13.6},{"time":0.1,"angle":76.59,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"angle":-249.13},{"time":0.2667,"angle":86.03,"curve":0.25,"c3":0.936,"c4":0.37},{"time":0.3667,"angle":-263.96}],"translate":[{},{"time":0.0333,"y":-29.06},{"time":0.1,"y":-232.51,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"y":-159.85},{"time":0.2667,"y":-213.82}]},"waist":{"rotate":[{},{"time":0.0333,"angle":58.68},{"time":0.1,"angle":-324.78,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"angle":-38.14},{"time":0.2667,"angle":-350.96,"curve":0.25,"c3":0.936,"c4":0.37},{"time":0.3667}],"translate":[{},{"time":0.0333,"x":2.04,"y":0.36},{"time":0.1,"x":0.48,"y":-2.01,"curve":0,"c2":0.86,"c3":0.75},{"time":0.1667,"x":3.08,"y":8.02},{"time":0.2667}]}}},"idle":{"bones":{"arm_lower_far":{"rotate":[{"angle":4.34,"curve":0.201,"c2":0.49,"c3":0.381,"c4":0.99},{"time":0.1},{"time":0.3,"angle":7.59,"curve":0.624,"c3":0.821,"c4":0.5},{"time":0.4,"angle":4.34}]},"arm_lower_near":{"rotate":[{"angle":2.38,"curve":0.27,"c2":0.56,"c3":0.581,"c4":0.99},{"time":0.0667,"curve":0.428,"c3":0.533,"c4":0.99},{"time":0.2667,"angle":11.41,"curve":0.454,"c3":0.68,"c4":0.59},{"time":0.4,"angle":2.38}]},"arm_upper_far":{"rotate":[{"angle":-1,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.1},{"time":0.3,"angle":-2,"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.4,"angle":-1}]},"arm_upper_near":{"rotate":[{"angle":-1.1,"curve":0.201,"c2":0.56,"c3":0.477,"c4":0.99},{"time":0.0667,"curve":0.428,"c3":0.533,"c4":0.99},{"time":0.2667,"angle":-5.6,"curve":0.7,"c3":0.762,"c4":0.6},{"time":0.4,"angle":-1.1}]},"foot_far":{"rotate":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"angle":3.53,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}],"translate":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"x":-0.06,"y":0.76,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}]},"foot_near":{"rotate":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"angle":2.44,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}]},"head":{"rotate":[{"angle":-0.17,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.1,"angle":1.23,"curve":0.25,"c3":0.75},{"time":0.3,"angle":-1.58,"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.4,"angle":-0.17}]},"leg_lower_far":{"rotate":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"angle":-8.54,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}]},"leg_lower_near":{"rotate":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"angle":-6.3,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}],"scale":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"x":0.973,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}]},"leg_upper_far":{"rotate":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"angle":4.46,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}]},"leg_upper_near":{"rotate":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"angle":2.92,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}],"scale":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"x":0.973,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}]},"torso":{"rotate":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"angle":-1.32,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}],"translate":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"y":-10.94,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}]},"waist":{"rotate":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"angle":1.77,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}],"translate":[{"curve":0.66,"c3":0.417,"c4":0.99},{"time":0.2,"x":3.12,"y":0.07,"curve":0.593,"c3":0.401,"c4":0.99},{"time":0.4}]}}},"idleTired":{"bones":{"arm_lower_far":{"rotate":[{"angle":-91.6,"curve":0.297,"c2":0.6,"c3":0.624,"c4":0.98},{"time":0.1333,"angle":-90.93,"curve":0.444,"c3":0.095},{"time":1.1333,"angle":-98.48,"curve":0.234,"c3":0.251,"c4":0.84},{"time":1.6667,"angle":-91.6}]},"arm_lower_near":{"rotate":[{"angle":-10.13,"curve":0.27,"c2":0.6,"c3":0.593,"c4":0.98},{"time":0.1333,"angle":-10.7,"curve":0.425,"c3":0.574,"c4":0.99},{"time":1.1333,"angle":-2.58,"curve":0.234,"c3":0.251,"c4":0.84},{"time":1.6667,"angle":-10.13}]},"arm_upper_far":{"rotate":[{"angle":-3.43}],"translate":[{"x":0.88,"y":-6.28}]},"arm_upper_near":{"rotate":[{"angle":74.2,"curve":0.297,"c2":0.6,"c3":0.624,"c4":0.98},{"time":0.1333,"angle":-286.17,"curve":0.444,"c3":0.095},{"time":1.1333,"angle":-281.83,"curve":0.234,"c3":0.251,"c4":0.84},{"time":1.6667,"angle":74.2}],"translate":[{"x":2.66,"y":-18.86}]},"foot_far":{"rotate":[{"angle":9.97,"curve":0.504,"c3":0.482,"c4":0.99},{"time":1,"angle":2.03,"curve":0.444,"c3":0.095},{"time":1.6667,"angle":9.97}]},"foot_near":{"rotate":[{"angle":18.49,"curve":0.504,"c3":0.482,"c4":0.99},{"time":1,"angle":4.71,"curve":0.444,"c3":0.095},{"time":1.6667,"angle":18.49}]},"hand_near":{"rotate":[{"angle":-0.93,"curve":0.27,"c2":0.6,"c3":0.593,"c4":0.98},{"time":0.1333,"curve":0.425,"c3":0.574,"c4":0.99},{"time":1.1333,"angle":-13.4,"curve":0.234,"c3":0.251,"c4":0.84},{"time":1.6667,"angle":-0.93}],"translate":[{"x":0.01,"y":0.4,"curve":0.297,"c2":0.6,"c3":0.624,"c4":0.98},{"time":0.1333,"curve":0.444,"c3":0.095},{"time":1.1333,"x":0.19,"y":4.58,"curve":0.234,"c3":0.251,"c4":0.84},{"time":1.6667,"x":0.01,"y":0.4}]},"leg_lower_far":{"rotate":[{"angle":-27.32,"curve":0.504,"c3":0.482,"c4":0.99},{"time":1,"angle":-3.08,"curve":0.444,"c3":0.095},{"time":1.6667,"angle":-27.32}]},"leg_lower_near":{"rotate":[{"angle":-50.34,"curve":0.504,"c3":0.482,"c4":0.99},{"time":1,"angle":-16.61,"curve":0.444,"c3":0.095},{"time":1.6667,"angle":-50.34}],"translate":[{"x":0.75,"y":3.12,"curve":0.504,"c3":0.482,"c4":0.99},{"time":1,"curve":0.444,"c3":0.095},{"time":1.6667,"x":0.75,"y":3.12}]},"leg_upper_far":{"rotate":[{"angle":20.74,"curve":0.504,"c3":0.482,"c4":0.99},{"time":1,"angle":2.03,"curve":0.444,"c3":0.095},{"time":1.6667,"angle":20.74}]},"leg_upper_near":{"rotate":[{"angle":32.86,"curve":0.504,"c3":0.482,"c4":0.99},{"time":1,"angle":10.67,"curve":0.444,"c3":0.095},{"time":1.6667,"angle":32.86}]},"neck":{"rotate":[{"angle":-3.15}]},"torso":{"rotate":[{"angle":-9.82,"curve":0.504,"c3":0.482,"c4":0.99},{"time":1,"angle":-6.22,"curve":0.444,"c3":0.095},{"time":1.6667,"angle":-9.82}],"translate":[{"x":-3.22,"y":-31.59,"curve":0.504,"c3":0.482,"c4":0.99},{"time":1,"y":-4.36,"curve":0.444,"c3":0.095},{"time":1.6667,"x":-3.22,"y":-31.59}]},"waist":{"rotate":[{"angle":7.39,"curve":0.504,"c3":0.482,"c4":0.99},{"time":1,"angle":-353.77,"curve":0.444,"c3":0.095},{"time":1.6667,"angle":-352.6}]},"head":{"rotate":[{"angle":-10.04,"curve":0.116,"c2":0.48,"c3":0.299},{"time":0.5333,"angle":-11.08,"curve":0.504,"c3":0.482,"c4":0.99},{"time":1.2,"angle":-6.3,"curve":0.444,"c3":0.095},{"time":1.6667,"angle":-10.04}]}}},"jump":{"slots":{"foot_near":{"attachment":[{"name":"foot_near_2_bent"},{"time":0.0667,"name":"foot_near_2_bent"},{"time":0.0704,"name":"foot_near_1"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_2"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":22.66,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"angle":25.46,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":-85.3,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":-27.5,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"angle":13.47}],"translate":[{"time":0.0333,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"x":-0.87,"y":-4.12,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":1,"y":-2.33}]},"arm_lower_near":{"rotate":[{"angle":17.45,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"angle":24.31,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":-48.47,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":-1.29,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"angle":25.37}]},"arm_upper_far":{"rotate":[{"angle":19.93,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"angle":14.86,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":22.39,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":10.22,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"angle":7.8}],"translate":[{"time":0.0667,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":9.42,"y":3.31}]},"arm_upper_near":{"rotate":[{"angle":-26.81,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"angle":-35.44,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":8.35,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":38.17,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"angle":35.49}],"translate":[{"time":0.0667,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":-8.09,"y":-6.96}]},"foot_far":{"rotate":[{"angle":22.57,"curve":"stepped"},{"time":0.0333,"angle":22.57,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":-20.53,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":11.98,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"angle":30.86}],"translate":[{"x":-5.94,"y":7.58,"curve":"stepped"},{"time":0.0667,"x":-5.94,"y":7.58,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":-11.47,"y":1.69}]},"foot_near":{"rotate":[{"angle":60.5,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"angle":71.3,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":-11.63,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":-32.98,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"angle":-8.39}],"translate":[{"x":14.35,"y":28.32,"curve":"stepped"},{"time":0.0333,"x":14.35,"y":28.32,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"x":20.24,"y":3.14,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":-23.3,"y":3.92}]},"hand_far":{"rotate":[{"time":0.0667,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":17.54}],"translate":[{"time":0.0667,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":1.97,"y":-7.29}]},"hand_near":{"rotate":[{"time":0.0667,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":14.82}],"translate":[{"time":0.0667,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":10.01,"y":0.62}]},"head":{"rotate":[{"angle":4.29,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"angle":-2.01,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":-10.25,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":-13.41,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"angle":-21.77}],"translate":[{"x":-21.3,"y":0.27,"curve":"stepped"},{"time":0.0667,"x":-21.3,"y":0.27,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":-62.58,"y":1.23,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"x":-69.56,"y":4.04}]},"leg_lower_far":{"rotate":[{"angle":-72.82,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"angle":-89.46,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":15.1,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":-86.26,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"angle":-113.01}],"translate":[{"x":-9.08,"y":-2.89,"curve":"stepped"},{"time":0.0333,"x":-9.08,"y":-2.89,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"x":-8.01,"y":-0.29,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":-9.03,"y":1.69}]},"leg_lower_near":{"rotate":[{"angle":-91.58,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"angle":-104.28,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":4.97,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":-121.3,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"angle":-153.92}],"translate":[{"x":11.93,"y":12.99,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"x":14.76,"y":11.24,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"x":11.33,"y":-5.3,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":18.52,"y":1.28}]},"leg_upper_far":{"rotate":[{"angle":51.75,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"angle":67.56,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":-1.68,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":47.13,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"angle":60.8}],"translate":[{"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"x":-0.11,"y":1.04,"curve":"stepped"},{"time":0.0667,"x":-0.11,"y":1.04,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":-12.86,"y":-3.39}]},"leg_upper_near":{"rotate":[{"angle":31.21,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"angle":33.56,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":2,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":113.31,"curve":0.012,"c2":0.71,"c3":0.75},{"time":0.4,"angle":129.98}],"translate":[{"time":0.0667,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":-22.48,"y":5.3}]},"torso":{"rotate":[{"angle":-19.24,"curve":"stepped"},{"time":0.0333,"angle":-19.24,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"angle":-26.23,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":-65.05}],"translate":[{"y":-98.38,"curve":0.09,"c2":0.45,"c3":0.75},{"time":0.0333,"y":-126.55,"curve":0.25,"c3":0.947,"c4":0.25},{"time":0.0667,"y":30.4,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":-37.1,"y":51.47}]},"waist":{"rotate":[{"angle":-343.16,"curve":"stepped"},{"time":0.0667,"angle":-343.16,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"angle":-347.25}]},"Character_midpoint":{"rotate":[{"time":0.1,"curve":0.385,"c2":0.14,"c3":0.701,"c4":0.48},{"time":0.2333,"angle":181},{"time":0.4,"angle":1},{"time":0.5667,"angle":182},{"time":0.7333,"angle":2},{"time":0.9,"angle":183},{"time":1.0667,"angle":3}],"translate":[{"time":0.0667,"curve":0.031,"c2":0.34,"c3":0.382,"c4":0.95},{"time":0.1,"x":39.5,"y":101.57,"curve":0.244,"c2":0.67,"c3":0.75},{"time":0.4,"x":39.5,"y":324.9,"curve":0.25,"c3":0.775,"c4":0.39},{"time":1.0667}]}}},"meleeSwing1":{"slots":{"item_near":{"attachment":[{"name":"sword_1"},{"time":0.1,"name":"sword_2_swing"},{"time":0.1333,"name":"sword_3_bigSwing"},{"time":0.2,"name":"sword_1"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":-25.14,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-63.6,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667,"angle":-74.07,"curve":"stepped"},{"time":0.5,"angle":-74.07,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333}],"translate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":-5.43,"y":-4.3,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667}],"scale":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":0.757,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667}]},"arm_lower_near":{"rotate":[{"angle":-69.97,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-90.06,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667,"angle":-90.1,"curve":"stepped"},{"time":0.5,"angle":-90.1,"curve":0.566,"c3":0.933,"c4":0.63},{"time":0.6333,"angle":-24.23,"curve":0.09,"c2":0.36,"c3":0.431,"c4":0.99},{"time":0.7333,"angle":3,"curve":0.541,"c3":0.379,"c4":0.99},{"time":0.8333}],"scale":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.1667,"x":1.082,"curve":"stepped"},{"time":0.5,"x":1.082,"curve":0.566,"c3":0.933,"c4":0.63},{"time":0.6333}]},"arm_upper_far":{"rotate":[{"angle":91.5,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":114.92,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667,"angle":41.9,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":-9.38,"curve":0.217,"c2":0.31,"c3":0.75},{"time":0.5,"angle":340.68,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"angle":0.43,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}],"scale":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":0.87,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667}]},"arm_upper_near":{"rotate":[{"angle":-168.41,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-169.59,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667,"angle":-230.97,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":-275.16,"curve":0.217,"c2":0.31,"c3":0.75},{"time":0.5,"angle":-278.91,"curve":0.566,"c3":0.777,"c4":0.68},{"time":0.6333,"angle":32.3,"curve":0.09,"c2":0.36,"c3":0.431,"c4":0.99},{"time":0.7333,"angle":-2.69,"curve":0.541,"c3":0.379,"c4":0.99},{"time":0.8333}],"translate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":-10.36,"y":-42.32,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667,"x":-13.86,"y":-50.69,"curve":"stepped"},{"time":0.5,"x":-13.86,"y":-50.69,"curve":0.566,"c3":0.777,"c4":0.68},{"time":0.6333}],"scale":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.1667,"x":1.04,"curve":"stepped"},{"time":0.5,"x":1.04,"curve":0.566,"c3":0.777,"c4":0.68},{"time":0.6333}]},"hand_far":{"rotate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-15.49,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667}]},"hand_near":{"rotate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":4.95,"curve":0.446,"c2":0.31,"c3":0.796,"c4":0.66},{"time":0.1333,"angle":-38.93,"curve":0.534,"c2":0.34,"c3":0.878,"c4":0.67},{"time":0.1667,"angle":-24.41,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":-38.7,"curve":0.217,"c2":0.31,"c3":0.75},{"time":0.5,"angle":-45.86,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"angle":-16.3,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333,"angle":-2.41}],"translate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":2.55,"y":1.96,"curve":0.433,"c2":0.28,"c3":0.792,"c4":0.64},{"time":0.1333,"x":-2.42,"y":6.35,"curve":0.552,"c2":0.34,"c3":0.903,"c4":0.68},{"time":0.1667,"x":1.23,"y":5.08,"curve":"stepped"},{"time":0.5,"x":1.23,"y":5.08,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"x":2.21,"y":4.11,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}]}}},"meleeSwing2":{"slots":{"item_near":{"attachment":[{"name":"sword_1"},{"time":0.0667,"name":"sword_2_swing"},{"time":0.0864,"name":"sword_3_bigSwing"},{"time":0.1667,"name":"sword_1"},{"time":0.3,"name":"sword_1"},{"time":0.3828,"name":"sword_2_swing"},{"time":0.4333,"name":"sword_1"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":34.16,"curve":0.25,"c3":0.985,"c4":0.35},{"time":0.0667,"angle":5.42,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-49.51},{"time":0.2,"angle":-25.66,"curve":0.174,"c2":0.39,"c3":0.75},{"time":0.3,"angle":-25.14,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":4.98,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4667,"angle":4.67},{"time":0.5333}],"translate":[{"x":8.47,"y":-6.77,"curve":0.25,"c3":0.985,"c4":0.35},{"time":0.0667,"x":1.36,"y":-12.17,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333}]},"arm_lower_near":{"rotate":[{"angle":-99.47,"curve":0.25,"c3":0.985,"c4":0.35},{"time":0.0667,"angle":-104.63,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-90.21},{"time":0.2,"angle":-73.34,"curve":0.174,"c2":0.39,"c3":0.75},{"time":0.3,"angle":-69.97,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":-1.14,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"angle":1.05,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5,"angle":-6.26,"curve":0.517,"c3":0.441,"c4":0.99},{"time":0.6333}]},"arm_upper_far":{"rotate":[{"angle":202.8,"curve":0.25,"c3":0.985,"c4":0.35},{"time":0.0667,"angle":297.95,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":50.7},{"time":0.2,"angle":87.9,"curve":0.174,"c2":0.39,"c3":0.75},{"time":0.3,"angle":91.5,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":13.79,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4667,"angle":-1.82},{"time":0.5333}],"translate":[{"x":15.8,"y":94.88,"curve":"stepped"},{"time":0.0667,"x":15.8,"y":94.88,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333}]},"arm_upper_near":{"rotate":[{"angle":-291.33,"curve":0.25,"c3":0.985,"c4":0.35},{"time":0.0667,"angle":112.01,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":157.19},{"time":0.2,"angle":-173.02,"curve":0.174,"c2":0.39,"c3":0.75},{"time":0.3,"angle":-168.41,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.3667,"angle":-258.21},{"time":0.4,"angle":9.66,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"angle":-9.75,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5,"angle":1.47,"curve":0.517,"c3":0.441,"c4":0.99},{"time":0.6333}],"translate":[{"x":-15.58,"y":-68.57,"curve":"stepped"},{"time":0.0667,"x":-15.58,"y":-68.57,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333}]},"hand_near":{"rotate":[{"angle":-31.28,"curve":0.25,"c3":0.985,"c4":0.35},{"time":0.0667,"angle":-41.1,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-20.74},{"time":0.2,"curve":"stepped"},{"time":0.4333,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5333,"angle":-2.41}],"translate":[{"x":2.61,"y":2.56,"curve":"stepped"},{"time":0.0667,"x":2.61,"y":2.56,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"x":1.87,"y":3.25},{"time":0.2}]}}},"meleeSwing1-fullBody":{"slots":{"item_near":{"attachment":[{"name":"sword_1"},{"time":0.0864,"name":"sword_3_bigSwing"},{"time":0.1667,"name":"sword_1"},{"time":0.3,"name":"sword_1"},{"time":0.3828,"name":"sword_2_swing"},{"time":0.4333,"name":"sword_1"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_1"},{"time":0.0837,"name":"leg_lower_near_2"},{"time":0.4,"name":"leg_lower_near_1"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":-80.19,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":-94.78,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-49.51},{"time":0.2,"angle":-25.66,"curve":0.174,"c2":0.39,"c3":0.75},{"time":0.3,"angle":-25.14,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":4.98,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4667,"angle":4.67},{"time":0.5333}]},"arm_lower_near":{"rotate":[{"angle":-99.47,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":-104.63,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-90.21},{"time":0.2,"angle":-73.34,"curve":0.174,"c2":0.39,"c3":0.75},{"time":0.3,"angle":-69.97,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":-1.14,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"angle":1.05,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5,"angle":-6.26,"curve":0.517,"c3":0.441,"c4":0.99},{"time":0.6333}]},"arm_upper_far":{"rotate":[{"angle":-104.93,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":-87.08,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":50.7},{"time":0.2,"angle":87.9,"curve":0.174,"c2":0.39,"c3":0.75},{"time":0.3,"angle":91.5,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":13.79,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4667,"angle":-1.82},{"time":0.5333}],"translate":[{"x":15.8,"y":94.88,"curve":"stepped"},{"time":0.0667,"x":15.8,"y":94.88,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333}]},"arm_upper_near":{"rotate":[{"angle":95.17,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":112.01,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":157.19},{"time":0.2,"angle":-173.02,"curve":0.174,"c2":0.39,"c3":0.75},{"time":0.3,"angle":-168.41,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.3667,"angle":-258.21},{"time":0.4,"angle":9.66,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"angle":-9.75,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5,"angle":1.47,"curve":0.517,"c3":0.441,"c4":0.99},{"time":0.6333}],"translate":[{"x":-15.58,"y":-68.57,"curve":"stepped"},{"time":0.0667,"x":-15.58,"y":-68.57,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333}]},"foot_far":{"rotate":[{"angle":-36.71,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":-23.4,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-49.78,"curve":"stepped"},{"time":0.3,"angle":-49.78,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":7.38,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"angle":8.29,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5333}],"translate":[{"time":0.0667,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"x":-7.83,"y":13.01,"curve":"stepped"},{"time":0.3,"x":-7.83,"y":13.01,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4}]},"foot_near":{"rotate":[{"angle":46.73,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":31.74,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-69.72,"curve":"stepped"},{"time":0.3,"angle":-69.72,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":15.03,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"angle":18.09,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5333}],"translate":[{"time":0.0667,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"x":-0.87,"y":13.48,"curve":"stepped"},{"time":0.3,"x":-0.87,"y":13.48,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4}]},"hand_near":{"rotate":[{"angle":-14.88,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":-21.66,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-20.74},{"time":0.2,"curve":"stepped"},{"time":0.4333,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5333,"angle":-2.41}],"translate":[{"x":2.61,"y":2.56,"curve":"stepped"},{"time":0.0667,"x":2.61,"y":2.56,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"x":1.87,"y":3.25},{"time":0.2}]},"head":{"rotate":[{"angle":28.63,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":14.9,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":0.76},{"time":0.2,"angle":17.28,"curve":"stepped"},{"time":0.3,"angle":17.28,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":3.79,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.4667,"angle":-1.81},{"time":0.5333}]},"leg_lower_far":{"rotate":[{"angle":-15.66,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":-17.77,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":26.53,"curve":"stepped"},{"time":0.3,"angle":26.53,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":-19.23,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"angle":-24.19,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5333}]},"leg_lower_near":{"rotate":[{"angle":-75.25,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":-51.3,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-8.01,"curve":"stepped"},{"time":0.3,"angle":-8.01,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":-38.74,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"angle":-43.6,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5333}],"translate":[{"x":6.17,"y":12.17,"curve":"stepped"},{"time":0.0667,"x":6.17,"y":12.17,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"x":11.05,"y":1.61,"curve":"stepped"},{"time":0.3,"x":11.05,"y":1.61,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"x":2.87,"y":2.16,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"x":2.97,"y":2.02,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5333}]},"leg_upper_far":{"rotate":[{"angle":62.84,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":57.54,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-29.78},{"time":0.2,"angle":-40,"curve":0.174,"c2":0.39,"c3":0.75},{"time":0.3,"angle":-41.05,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":12.73,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"angle":16.4,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5333}],"translate":[{"time":0.0667,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"x":4.63,"y":-12.71,"curve":"stepped"},{"time":0.3,"x":4.63,"y":-12.71,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4}],"scale":[{"time":0.0667,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"x":1.06,"curve":"stepped"},{"time":0.3,"x":1.06,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4}]},"leg_upper_near":{"rotate":[{"angle":38.51,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":36,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-6.75,"curve":"stepped"},{"time":0.2,"angle":-6.75,"curve":0.174,"c2":0.39,"c3":0.75},{"time":0.3,"angle":-5.7,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":23.97,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"angle":26.62,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5333}],"translate":[{"time":0.0667,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"x":7.46,"y":2.53,"curve":"stepped"},{"time":0.3,"x":7.46,"y":2.53,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4}],"scale":[{"time":0.0667,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"x":0.991,"curve":"stepped"},{"time":0.3,"x":0.991,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4}]},"neck":{"rotate":[{"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":1.76,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333}]},"torso":{"rotate":[{"angle":-32.46,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"angle":-39.21,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":14.55},{"time":0.2,"angle":19.6,"curve":"stepped"},{"time":0.3,"angle":19.6,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"angle":-0.94,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"angle":-1.25,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5333}],"translate":[{"x":27.53,"y":-103.2,"curve":0.576,"c3":0.963,"c4":0.63},{"time":0.0667,"x":27.53,"y":-66.53,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"x":38.48,"y":101.18},{"time":0.2,"x":34.48,"y":134.44,"curve":0.174,"c2":0.39,"c3":0.75},{"time":0.3,"x":34.48,"y":136.18,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4,"y":-18.81,"curve":0.025,"c2":0.57,"c3":0.75},{"time":0.4333,"y":-25.09,"curve":0.433,"c3":0.447,"c4":0.98},{"time":0.5333}]},"waist":{"rotate":[{"angle":22.15,"curve":"stepped"},{"time":0.0667,"angle":22.15,"curve":0.071,"c2":0.53,"c3":0.478,"c4":0.97},{"time":0.1333,"angle":-2.23},{"time":0.2,"angle":-7.06,"curve":"stepped"},{"time":0.3,"angle":-7.06,"curve":0.468,"c3":0.966,"c4":0.57},{"time":0.4}]}}},"meleeSwing2-fullBody":{"slots":{"foot_near":{"attachment":[{"name":"foot_near_1"},{"time":0.1667,"name":"foot_near_2_bent"},{"time":0.5,"name":"foot_near_2_bent"},{"time":0.6,"name":"foot_near_1"}]},"item_near":{"attachment":[{"name":"sword_1"},{"time":0.1,"name":"sword_2_swing"},{"time":0.1333,"name":"sword_3_bigSwing"},{"time":0.2,"name":"sword_1"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_2"},{"time":0.5,"name":"leg_lower_near_2"},{"time":0.6333,"name":"leg_lower_near_1"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":-25.14,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-63.6,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667,"angle":-74.07,"curve":"stepped"},{"time":0.5,"angle":-74.07,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333}],"translate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":-5.43,"y":-4.3,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667}],"scale":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":0.757,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667}]},"arm_lower_near":{"rotate":[{"angle":-69.97,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-90.06,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667,"angle":-90.1,"curve":"stepped"},{"time":0.5,"angle":-90.1,"curve":0.566,"c3":0.933,"c4":0.63},{"time":0.6333,"angle":-24.23,"curve":0.09,"c2":0.36,"c3":0.431,"c4":0.99},{"time":0.7333,"angle":3,"curve":0.541,"c3":0.379,"c4":0.99},{"time":0.8333}],"scale":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.1667,"x":1.082,"curve":"stepped"},{"time":0.5,"x":1.082,"curve":0.566,"c3":0.933,"c4":0.63},{"time":0.6333}]},"arm_upper_far":{"rotate":[{"angle":91.5,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":114.92,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667,"angle":41.9,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":33.22,"curve":0.217,"c2":0.31,"c3":0.75},{"time":0.5,"angle":31.1,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"angle":0.43,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}],"scale":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":0.87,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667}]},"arm_upper_near":{"rotate":[{"angle":-168.41,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-169.59,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667,"angle":-230.97,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":-241.64,"curve":0.217,"c2":0.31,"c3":0.75},{"time":0.5,"angle":-243.33,"curve":0.566,"c3":0.777,"c4":0.68},{"time":0.6333,"angle":32.3,"curve":0.09,"c2":0.36,"c3":0.431,"c4":0.99},{"time":0.7333,"angle":-2.69,"curve":0.541,"c3":0.379,"c4":0.99},{"time":0.8333}],"translate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":-10.36,"y":-42.32,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667,"x":-13.86,"y":-50.69,"curve":"stepped"},{"time":0.5,"x":-13.86,"y":-50.69,"curve":0.566,"c3":0.777,"c4":0.68},{"time":0.6333}],"scale":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.1667,"x":1.04,"curve":"stepped"},{"time":0.5,"x":1.04,"curve":0.566,"c3":0.777,"c4":0.68},{"time":0.6333}]},"foot_far":{"rotate":[{"angle":-49.78,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":1.77,"curve":0.561,"c2":0.31,"c3":0.944,"c4":0.67},{"time":0.1667,"angle":10.6,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":9.35,"curve":"stepped"},{"time":0.5,"angle":9.35,"curve":0.544,"c3":0.778,"c4":0.49},{"time":0.5667,"angle":11.8,"curve":0.24,"c2":0.49,"c3":0.466,"c4":0.99},{"time":0.6333,"angle":-4.59,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}],"translate":[{"x":-7.83,"y":13.01,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.1667}]},"foot_near":{"rotate":[{"angle":-69.72,"curve":0.656,"c3":0.908,"c4":0.29},{"time":0.1333,"angle":-13.2,"curve":0.536,"c2":0.28,"c3":0.839,"c4":0.62},{"time":0.1667,"angle":70.19,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":65.58,"curve":"stepped"},{"time":0.5,"angle":65.58,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"angle":-8.9,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}],"translate":[{"x":-0.87,"y":13.48,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.1667,"x":20.69,"y":35.28,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"x":26.02,"y":31.86,"curve":"stepped"},{"time":0.5,"x":26.02,"y":31.86,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333}]},"hand_far":{"rotate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-15.49,"curve":0.562,"c2":0.31,"c3":0.941,"c4":0.68},{"time":0.1667}]},"hand_near":{"rotate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":4.95,"curve":0.446,"c2":0.31,"c3":0.796,"c4":0.66},{"time":0.1333,"angle":-38.93,"curve":0.534,"c2":0.34,"c3":0.878,"c4":0.67},{"time":0.1667,"angle":-35.03,"curve":"stepped"},{"time":0.5,"angle":-35.03,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"angle":-16.3,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333,"angle":-2.41}],"translate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":2.55,"y":1.96,"curve":0.433,"c2":0.28,"c3":0.792,"c4":0.64},{"time":0.1333,"x":-2.42,"y":6.35,"curve":0.552,"c2":0.34,"c3":0.903,"c4":0.68},{"time":0.1667,"x":1.23,"y":5.08,"curve":"stepped"},{"time":0.5,"x":1.23,"y":5.08,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"x":2.21,"y":4.11,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}]},"head":{"rotate":[{"angle":17.28,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":12.01,"curve":0.547,"c2":0.27,"c3":0.954,"c4":0.66},{"time":0.1667,"angle":9.39,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":3.87,"curve":0.217,"c2":0.31,"c3":0.75},{"time":0.5,"angle":-1.35,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"angle":-3.82,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}]},"leg_lower_far":{"rotate":[{"angle":26.53,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-17.9,"curve":0.547,"c2":0.27,"c3":0.954,"c4":0.66},{"time":0.1667,"angle":-82.79,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":-86.35,"curve":"stepped"},{"time":0.5,"angle":-86.35,"curve":0.544,"c3":0.778,"c4":0.49},{"time":0.5667,"angle":-53.35,"curve":0.24,"c2":0.49,"c3":0.466,"c4":0.99},{"time":0.6333,"angle":10.98,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}]},"leg_lower_near":{"rotate":[{"angle":-8.01,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-16.52,"curve":0.547,"c2":0.27,"c3":0.954,"c4":0.66},{"time":0.1667,"angle":-76.14,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":-49.16,"curve":"stepped"},{"time":0.5,"angle":-49.16,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"angle":-11.73,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}],"translate":[{"x":11.05,"y":1.61,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.1667}]},"leg_upper_far":{"rotate":[{"angle":-41.05,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-18.15,"curve":0.547,"c2":0.27,"c3":0.954,"c4":0.66},{"time":0.1667,"angle":80.18,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":84.63,"curve":"stepped"},{"time":0.5,"angle":84.63,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"angle":-6.81,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}],"translate":[{"x":4.63,"y":-12.71,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.1667}],"scale":[{"x":1.06,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.1667}]},"leg_upper_near":{"rotate":[{"angle":-5.7,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-9.85,"curve":0.547,"c2":0.27,"c3":0.954,"c4":0.66},{"time":0.1667,"angle":10.59,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":-12.41,"curve":"stepped"},{"time":0.5,"angle":-12.41,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"angle":1.93,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}],"translate":[{"x":7.46,"y":2.53,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.1667}],"scale":[{"x":0.991,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.1667}]},"neck":{"rotate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-12.76,"curve":0.547,"c2":0.27,"c3":0.954,"c4":0.66},{"time":0.1667,"angle":-13.46,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":-30.6,"curve":"stepped"},{"time":0.5,"angle":-30.6,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333}],"translate":[{"time":0.1667,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"x":-7.4,"y":-6.12,"curve":"stepped"},{"time":0.5,"x":-7.4,"y":-6.12,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333}]},"torso":{"rotate":[{"angle":19.6,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":1.85,"curve":0.547,"c2":0.27,"c3":0.954,"c4":0.66},{"time":0.1667,"angle":-27.39,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":-28.28,"curve":"stepped"},{"time":0.5,"angle":-28.28,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"angle":-0.88,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}],"translate":[{"x":34.48,"y":136.18,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":34.48,"y":127.9,"curve":0.547,"c2":0.27,"c3":0.954,"c4":0.66},{"time":0.1667,"x":-12.22,"y":-130.55,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"x":-12.22,"y":-137.22,"curve":"stepped"},{"time":0.5,"x":-12.22,"y":-137.22,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"y":8.9,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}]},"waist":{"rotate":[{"angle":-7.06,"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"angle":-343.21,"curve":0.547,"c2":0.27,"c3":0.954,"c4":0.66},{"time":0.1667,"angle":-339.75,"curve":0.052,"c2":0.7,"c3":0.75},{"time":0.2333,"angle":-338.9,"curve":"stepped"},{"time":0.5,"angle":-338.9,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333,"angle":1.08,"curve":0.582,"c3":0.431,"c4":0.99},{"time":0.7333}],"translate":[{"curve":0.787,"c3":0.967,"c4":0.28},{"time":0.0667,"x":4.54,"y":-5.76,"curve":0.547,"c2":0.27,"c3":0.954,"c4":0.66},{"time":0.1667,"x":0.58,"y":-1.08,"curve":"stepped"},{"time":0.5,"x":0.58,"y":-1.08,"curve":0.566,"c3":0.487,"c4":0.99},{"time":0.6333}]}}},"punch1":{"bones":{"arm_lower_far":{"rotate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"angle":8.24,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"angle":22.93,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":-97.55,"curve":"stepped"},{"time":0.2667,"angle":-97.55,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333,"angle":12.43,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}]},"arm_lower_near":{"rotate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"angle":5.68,"curve":"stepped"},{"time":0.0667,"angle":5.68,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":-8.53,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"angle":-28.19},{"time":0.2,"angle":-47.53,"curve":"stepped"},{"time":0.2667,"angle":-47.53,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333,"angle":9.22,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}]},"arm_upper_far":{"rotate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"angle":-4.32,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"angle":-10.71,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":79.48,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"angle":83.85},{"time":0.2,"angle":85.5,"curve":"stepped"},{"time":0.2667,"angle":85.5,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333,"angle":-6.68,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}],"translate":[{"time":0.0333,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"y":11.31,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"x":5.93,"y":-13.02,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.2,"x":6.56,"y":-17.2,"curve":"stepped"},{"time":0.2667,"x":6.56,"y":-17.2,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333}]},"arm_upper_near":{"rotate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"angle":-285.24,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"angle":-274.62,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":-10.93,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"angle":-13.81},{"time":0.2,"angle":-16.06,"curve":"stepped"},{"time":0.2667,"angle":-16.06,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333,"angle":-7.22,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}],"translate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"x":-9.05,"y":-24.9,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"x":-11.31,"y":-36.22,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"x":-2.26,"y":-2.26,"curve":"stepped"},{"time":0.2667,"x":-2.26,"y":-2.26,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333}]},"foot_far":{"rotate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"angle":-5.67,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"angle":-4.21,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":8.98,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"angle":11.76,"curve":"stepped"},{"time":0.2667,"angle":11.76,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333,"angle":4.94,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}],"translate":[{"time":0.0667,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"x":4.2,"y":0.99,"curve":"stepped"},{"time":0.2667,"x":4.2,"y":0.99,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333}]},"foot_near":{"rotate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"angle":3.34,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"angle":4.62,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":-14.64,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"angle":-27.46,"curve":"stepped"},{"time":0.2667,"angle":-27.46,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333,"angle":3.5,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}],"translate":[{"time":0.0667,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"x":-1.18,"y":10.05,"curve":"stepped"},{"time":0.2667,"x":-1.18,"y":10.05,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333}]},"hand_far":{"scale":[{"time":0.0667,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"x":1.264,"y":1.264,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"x":1.336,"y":1.336,"curve":0.25,"c3":0.968,"c4":0.38},{"time":0.2667}]},"head":{"rotate":[{"time":0.0333,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"angle":-6.64,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":2.66,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"angle":11.22,"curve":"stepped"},{"time":0.2667,"angle":11.22,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333}],"translate":[{"time":0.0333,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"x":-6.79,"curve":"stepped"},{"time":0.2667,"x":-6.79,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333}]},"leg_lower_far":{"rotate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"angle":-6.04,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"angle":-15.25,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":-4.23,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"angle":0.73,"curve":"stepped"},{"time":0.2667,"angle":0.73,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333,"angle":-15.24,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}]},"leg_lower_near":{"rotate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"angle":-30.19,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"angle":-40.76,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":-5.92,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"angle":1.29,"curve":"stepped"},{"time":0.2667,"angle":1.29,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333,"angle":-8.24,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}],"translate":[{"time":0.0333,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"x":0.68,"y":3.21,"curve":"stepped"},{"time":0.2667,"x":0.68,"y":3.21,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333}],"scale":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"x":0.926,"curve":"stepped"},{"time":0.0667,"x":0.926,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.3333,"x":0.968,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}]},"leg_upper_far":{"rotate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"angle":12.32,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"angle":23.51,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":0.6,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"angle":-4.81,"curve":"stepped"},{"time":0.2667,"angle":-4.81,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333,"angle":9.25,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}]},"leg_upper_near":{"rotate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"angle":25.98,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"angle":35.54,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":-0.86,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"angle":-5.21,"curve":"stepped"},{"time":0.2667,"angle":-5.21,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333,"angle":4.26,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}],"scale":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"x":0.954,"curve":"stepped"},{"time":0.0667,"x":0.954,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.3333,"x":0.934,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}]},"torso":{"rotate":[{"time":0.0333,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"angle":-3.09,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"angle":-6.07,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"angle":-8.5,"curve":"stepped"},{"time":0.2667,"angle":-8.5,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333}],"translate":[{"curve":0.25,"c3":0.912,"c4":0.55},{"time":0.0333,"x":-31.69,"y":-15.84,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"x":-36.22,"y":-33.95,"curve":0.25,"c3":0.997,"c4":0.01},{"time":0.1,"x":36.22,"curve":0.009,"c2":0.54,"c3":0.75},{"time":0.1333,"x":56.59,"y":6.79,"curve":"stepped"},{"time":0.2667,"x":56.59,"y":6.79,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333,"y":-13.58,"curve":0.406,"c3":0.52,"c4":0.99},{"time":0.4333}]},"waist":{"translate":[{"time":0.0333,"curve":0.039,"c2":0.52,"c3":0.685,"c4":0.99},{"time":0.0667,"x":6.79,"curve":"stepped"},{"time":0.2667,"x":6.79,"curve":0.704,"c3":0.677,"c4":0.99},{"time":0.3333}]}}},"punch2":{"bones":{"arm_lower_far":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":16.5,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"angle":-23.65,"curve":"stepped"},{"time":0.2667,"angle":-23.65,"curve":0.79,"c3":0.75},{"time":0.3333}]},"arm_lower_near":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":21.46,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"angle":-91.42,"curve":"stepped"},{"time":0.2667,"angle":-91.42,"curve":0.79,"c3":0.75},{"time":0.3333}]},"arm_upper_far":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":13.34,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"angle":278.76,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"angle":267.71,"curve":"stepped"},{"time":0.2667,"angle":267.71,"curve":0.79,"c3":0.75},{"time":0.3333}],"translate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"x":2.96,"y":-23.41,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"x":7.37,"y":77.38,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"x":6.35,"y":83.61,"curve":"stepped"},{"time":0.2667,"x":6.35,"y":83.61,"curve":0.79,"c3":0.75},{"time":0.3333}]},"arm_upper_near":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":-17.75,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"angle":-206.68,"curve":"stepped"},{"time":0.2667,"angle":-206.68,"curve":0.501,"c3":0.95,"c4":0.59},{"time":0.3333,"angle":51.24,"curve":0.068,"c2":0.28,"c3":0.514,"c4":0.96},{"time":0.4333}],"translate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"x":-1.38,"y":10.96,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"x":-0.04,"y":-64.64,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"x":0.96,"y":-70.86,"curve":"stepped"},{"time":0.2667,"x":0.96,"y":-70.86,"curve":0.79,"c3":0.75},{"time":0.3333}],"scale":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"x":0.874,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1}]},"foot_far":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":0.76,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"angle":15.74,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"angle":23.21,"curve":"stepped"},{"time":0.2667,"angle":23.21,"curve":0.79,"c3":0.75},{"time":0.3333,"angle":6.59,"curve":0.568,"c3":0.471,"c4":0.99},{"time":0.4333}],"translate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"x":-0.07,"y":1.76,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1}]},"foot_near":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":3.94,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"angle":-23.29,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"angle":-37.55,"curve":"stepped"},{"time":0.2667,"angle":-37.55,"curve":0.79,"c3":0.75},{"time":0.3333,"angle":7.96,"curve":0.568,"c3":0.471,"c4":0.99},{"time":0.4333}],"translate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"x":3.67,"y":3.77,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1}]},"hand_far":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":7.1,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1}]},"hand_near":{"translate":[{"time":0.0667,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"x":3.68,"y":0.06,"curve":"stepped"},{"time":0.2667,"x":3.68,"y":0.06,"curve":0.79,"c3":0.75},{"time":0.3333}],"scale":[{"time":0.0667,"curve":0.44,"c2":0.01,"c3":0.984,"c4":0.4},{"time":0.1,"x":1.157,"y":1.157,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"x":1.23,"y":1.23,"curve":0.25,"c4":0.42},{"time":0.2667}]},"head":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":3.38,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"angle":9.47,"curve":"stepped"},{"time":0.2667,"angle":9.47,"curve":0.79,"c3":0.75},{"time":0.3333}]},"leg_lower_far":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":-15.47,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"angle":-17.28,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"angle":-19,"curve":"stepped"},{"time":0.2667,"angle":-19,"curve":0.79,"c3":0.75},{"time":0.3333,"angle":-16.66,"curve":0.568,"c3":0.471,"c4":0.99},{"time":0.4333}]},"leg_lower_near":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":-32.61,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"angle":-6.09,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"curve":"stepped"},{"time":0.2667,"curve":0.79,"c3":0.75},{"time":0.3333,"angle":-14.78,"curve":0.568,"c3":0.471,"c4":0.99},{"time":0.4333}],"scale":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"x":0.921,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"curve":"stepped"},{"time":0.2667,"curve":0.79,"c3":0.75},{"time":0.3333,"x":0.971,"curve":0.568,"c3":0.471,"c4":0.99},{"time":0.4333}]},"leg_upper_far":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":14.21,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"angle":11.72,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"angle":5.75,"curve":"stepped"},{"time":0.2667,"angle":5.75,"curve":0.79,"c3":0.75},{"time":0.3333,"angle":10.85,"curve":0.568,"c3":0.471,"c4":0.99},{"time":0.4333}],"translate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"x":-0.88,"y":14.24,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"x":7.37,"y":-32.33,"curve":"stepped"},{"time":0.2667,"x":7.37,"y":-32.33,"curve":0.79,"c3":0.75},{"time":0.3333}]},"leg_upper_near":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":28.64,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"angle":-14.55,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"angle":-18.02,"curve":"stepped"},{"time":0.2667,"angle":-18.02,"curve":0.79,"c3":0.75},{"time":0.3333,"angle":8.63,"curve":0.568,"c3":0.471,"c4":0.99},{"time":0.4333}],"translate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"x":0.55,"y":-8.9,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"x":-5.73,"y":25.15,"curve":"stepped"},{"time":0.2667,"x":-5.73,"y":25.15,"curve":0.79,"c3":0.75},{"time":0.3333}],"scale":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"x":0.886,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"curve":"stepped"},{"time":0.2667,"curve":0.79,"c3":0.75},{"time":0.3333,"x":0.981,"curve":0.568,"c3":0.471,"c4":0.99},{"time":0.4333}]},"torso":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":-7.21,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"angle":-9.22,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"angle":-7.56,"curve":"stepped"},{"time":0.2667,"angle":-7.56,"curve":0.79,"c3":0.75},{"time":0.3333,"angle":-1.74,"curve":0.568,"c3":0.471,"c4":0.99},{"time":0.4333}],"translate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"x":-32.11,"y":-21.4,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"x":66.33,"y":-11.05,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"x":95.76,"y":-11.05,"curve":"stepped"},{"time":0.2667,"x":95.76,"y":-11.05,"curve":0.79,"c3":0.75},{"time":0.3333,"x":5.52,"y":-15.31,"curve":0.568,"c3":0.471,"c4":0.99},{"time":0.4333}]},"waist":{"rotate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"angle":7.25,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1,"curve":0.041,"c2":0.64,"c3":0.75},{"time":0.1667,"angle":-2.79,"curve":"stepped"},{"time":0.2667,"angle":-2.79,"curve":0.79,"c3":0.75},{"time":0.3333}],"translate":[{"curve":0.595,"c3":0.474,"c4":0.99},{"time":0.0667,"x":1.76,"y":0.22,"curve":0.25,"c3":0.979,"c4":0.36},{"time":0.1}]}}},"roll":{"slots":{"foot_near":{"attachment":[{"name":"foot_near_1"},{"time":0.1,"name":"foot_near_2_bent"},{"time":0.1333,"name":"foot_near_1"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_1"},{"time":0.0333,"name":"leg_lower_near_2"},{"time":0.4333,"name":"leg_lower_near_1"}]}},"bones":{"arm_lower_far":{"rotate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"angle":22.66,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.1333,"angle":-62.41,"curve":0.32,"c2":0.39,"c3":0.675,"c4":0.74},{"time":0.2,"angle":17.7,"curve":"stepped"},{"time":0.3667,"angle":17.7,"curve":0.367,"c2":0.65,"c3":0.703},{"time":0.4333,"angle":18.39}]},"arm_lower_near":{"rotate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"angle":17.45,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.1333,"angle":-58.97,"curve":0.32,"c2":0.39,"c3":0.675,"c4":0.74},{"time":0.2,"angle":-12.18,"curve":0.344,"c2":0.37,"c3":0.679,"c4":0.71},{"time":0.2667,"angle":26.83,"curve":"stepped"},{"time":0.3667,"angle":26.83,"curve":0.367,"c2":0.65,"c3":0.703},{"time":0.4333,"angle":16.8}]},"arm_upper_far":{"rotate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"angle":19.93,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.1333,"angle":106.82,"curve":0.32,"c2":0.39,"c3":0.675,"c4":0.74},{"time":0.2,"angle":28.18,"curve":"stepped"},{"time":0.3667,"angle":28.18,"curve":0.367,"c2":0.65,"c3":0.703},{"time":0.4333}],"translate":[{"time":0.1333,"curve":0.528,"c2":0.27,"c3":0.892,"c4":0.63},{"time":0.2,"x":-1.46,"y":8.93,"curve":"stepped"},{"time":0.3667,"x":-1.46,"y":8.93,"curve":0.367,"c2":0.65,"c3":0.703},{"time":0.4333}]},"arm_upper_near":{"rotate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"angle":-26.81,"curve":0.386,"c3":0.734,"c4":0.39},{"time":0.1,"angle":-294.32,"curve":0.528,"c2":0.27,"c3":0.892,"c4":0.63},{"time":0.1333,"angle":177.69,"curve":0.32,"c2":0.39,"c3":0.675,"c4":0.74},{"time":0.2,"angle":-231.94,"curve":0.346,"c2":0.38,"c3":0.68,"c4":0.72},{"time":0.2667,"angle":97.68,"curve":0.359,"c2":0.48,"c3":0.695,"c4":0.81},{"time":0.3667,"angle":-278.34,"curve":0.353,"c2":0.66,"c3":0.687},{"time":0.4333,"angle":26.88}],"translate":[{"time":0.0667,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.1333,"x":-14.12,"y":-23.86,"curve":"stepped"},{"time":0.3667,"x":-14.12,"y":-23.86,"curve":0.379,"c2":0.64,"c3":0.719},{"time":0.4333}]},"foot_far":{"rotate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"angle":22.57,"curve":0.386,"c3":0.734,"c4":0.39},{"time":0.1,"angle":32.41,"curve":0.528,"c2":0.27,"c3":0.892,"c4":0.63},{"time":0.1333,"angle":-50.44,"curve":0.32,"c2":0.39,"c3":0.675,"c4":0.74},{"time":0.2,"angle":-40.26,"curve":0.339,"c2":0.35,"c3":0.673,"c4":0.69},{"time":0.2667,"angle":-22.69,"curve":0.346,"c2":0.38,"c3":0.681,"c4":0.72},{"time":0.3667,"angle":10.5,"curve":0.335,"c2":0.34,"c3":0.668,"c4":0.67},{"time":0.4333,"angle":-0.53}],"translate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"x":-5.94,"y":7.58,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.1333,"x":0.51,"y":18.64,"curve":"stepped"},{"time":0.3667,"x":0.51,"y":18.64,"curve":0.379,"c2":0.64,"c3":0.719},{"time":0.4333}]},"foot_near":{"rotate":[{"curve":0.663,"c3":0.838,"c4":0.49},{"time":0.0333,"angle":33.31,"curve":0.176,"c2":0.49,"c3":0.336,"c4":0.99},{"time":0.0667,"angle":60.5,"curve":0.386,"c3":0.734,"c4":0.39},{"time":0.1,"angle":53.75,"curve":0.528,"c2":0.27,"c3":0.892,"c4":0.63},{"time":0.1333,"angle":-70.36,"curve":"stepped"},{"time":0.2,"angle":-70.36,"curve":0.352,"c2":0.42,"c3":0.696,"c4":0.77},{"time":0.2667,"angle":-45.33,"curve":0.395,"c2":0.62,"c3":0.755},{"time":0.3667,"angle":-31.52,"curve":0.354,"c2":0.43,"c3":0.689,"c4":0.77},{"time":0.4,"angle":-6.2,"curve":0.364,"c2":0.65,"c3":0.699},{"time":0.4333,"angle":15.49}],"translate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"x":14.35,"y":28.32,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.1333,"x":10.25,"y":24.18,"curve":"stepped"},{"time":0.2,"x":10.25,"y":24.18,"curve":0.352,"c2":0.42,"c3":0.696,"c4":0.77},{"time":0.2667,"x":3.03,"y":21.78,"curve":"stepped"},{"time":0.3667,"x":3.03,"y":21.78,"curve":0.395,"c2":0.62,"c3":0.755},{"time":0.4333}]},"head":{"rotate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"angle":4.29,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.1333,"angle":-5.19,"curve":0.32,"c2":0.39,"c3":0.675,"c4":0.74},{"time":0.2,"angle":-30.64,"curve":"stepped"},{"time":0.2667,"angle":-30.64,"curve":0.351,"c2":0.48,"c3":0.686,"c4":0.82},{"time":0.3667,"angle":19.06,"curve":0.345,"c2":0.66,"c3":0.679},{"time":0.4333}],"translate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"x":-21.3,"y":0.27,"curve":"stepped"},{"time":0.1333,"x":-21.3,"y":0.27,"curve":0.528,"c2":0.27,"c3":0.892,"c4":0.63},{"time":0.2,"x":-32.69,"y":-20.64,"curve":"stepped"},{"time":0.3667,"x":-32.69,"y":-20.64,"curve":0.36,"c2":0.65,"c3":0.695},{"time":0.4333}]},"leg_lower_far":{"rotate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"angle":-72.82,"curve":0.386,"c3":0.734,"c4":0.39},{"time":0.1,"angle":-67.11,"curve":0.528,"c2":0.27,"c3":0.892,"c4":0.63},{"time":0.1333,"angle":32.92,"curve":0.32,"c2":0.39,"c3":0.675,"c4":0.74},{"time":0.2,"angle":-12.3,"curve":0.362,"c2":0.45,"c3":0.703,"c4":0.79},{"time":0.2667,"angle":-53.57,"curve":0.383,"c2":0.64,"c3":0.723},{"time":0.3667,"angle":-45.41,"curve":0.35,"c2":0.66,"c3":0.684},{"time":0.4333,"angle":-52.55}],"translate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"x":-9.08,"y":-2.89,"curve":"stepped"},{"time":0.3667,"x":-9.08,"y":-2.89,"curve":0.477,"c2":0.32,"c3":0.817,"c4":0.66},{"time":0.4333}]},"leg_lower_near":{"rotate":[{"curve":0.663,"c3":0.838,"c4":0.49},{"time":0.0333,"angle":-56.75,"curve":0.176,"c2":0.49,"c3":0.336,"c4":0.99},{"time":0.0667,"angle":-91.58,"curve":0.386,"c3":0.734,"c4":0.39},{"time":0.1,"angle":-73.5,"curve":0.528,"c2":0.27,"c3":0.892,"c4":0.63},{"time":0.1333,"angle":-4.92,"curve":0.32,"c2":0.39,"c3":0.675,"c4":0.74},{"time":0.2,"angle":-99.44,"curve":0.388,"c2":0.64,"c3":0.731},{"time":0.2667,"angle":-117.1,"curve":0.355,"c2":0.42,"c3":0.694,"c4":0.76},{"time":0.3667,"angle":-139.9,"curve":0.34,"c2":0.35,"c3":0.673,"c4":0.69},{"time":0.4,"angle":-94.93,"curve":0.341,"c2":0.36,"c3":0.675,"c4":0.7},{"time":0.4333,"angle":-55.15}],"translate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"x":11.93,"y":12.99,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.1333,"x":5.94,"y":4.55,"curve":"stepped"},{"time":0.2,"x":5.94,"y":4.55,"curve":0.352,"c2":0.42,"c3":0.696,"c4":0.77},{"time":0.2667,"x":12.99,"y":7.86,"curve":0.25,"c3":0.75},{"time":0.3667,"x":23.29,"y":1.13,"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.4,"x":12.57,"y":12.78,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.4333,"x":-2.19,"y":7.36}],"scale":[{"time":0.0667,"curve":0.48,"c3":0.876,"c4":0.47},{"time":0.4,"x":0.824,"curve":0.43,"c2":0.33,"c3":0.765,"c4":0.66},{"time":0.4333,"x":0.855}]},"leg_upper_far":{"rotate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"angle":51.75,"curve":0.386,"c3":0.734,"c4":0.39},{"time":0.1,"angle":41.32,"curve":0.528,"c2":0.27,"c3":0.892,"c4":0.63},{"time":0.1333,"angle":-48.27,"curve":0.32,"c2":0.39,"c3":0.675,"c4":0.74},{"time":0.2,"angle":-10.64,"curve":"stepped"},{"time":0.2667,"angle":-10.64,"curve":0.356,"c2":0.55,"c3":0.69,"c4":0.89},{"time":0.3667,"angle":28.12,"curve":0.336,"c2":0.66,"c3":0.67},{"time":0.4333,"angle":62.83}]},"leg_upper_near":{"rotate":[{"curve":0.663,"c3":0.838,"c4":0.49},{"time":0.0333,"angle":23.97,"curve":0.176,"c2":0.49,"c3":0.336,"c4":0.99},{"time":0.0667,"angle":31.21,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.1333,"angle":-3.09,"curve":0.32,"c2":0.39,"c3":0.675,"c4":0.74},{"time":0.2,"angle":109.37,"curve":0.383,"c2":0.64,"c3":0.723},{"time":0.2667,"angle":128.43,"curve":"stepped"},{"time":0.3667,"angle":128.43,"curve":0.354,"c2":0.43,"c3":0.689,"c4":0.77},{"time":0.4,"angle":89.91},{"time":0.4333,"angle":50.85}],"translate":[{"time":0.2,"curve":0.514,"c2":0.3,"c3":0.864,"c4":0.65},{"time":0.2667,"x":-16.36,"y":-3.42,"curve":"stepped"},{"time":0.3667,"x":-16.36,"y":-3.42,"curve":0.395,"c2":0.62,"c3":0.755},{"time":0.4333,"x":-5.6,"y":0.42}],"scale":[{"time":0.0667,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.4333,"x":0.732}]},"neck":{"rotate":[{"time":0.1333,"curve":0.528,"c2":0.27,"c3":0.892,"c4":0.63},{"time":0.2,"angle":-32.46,"curve":"stepped"},{"time":0.3667,"angle":-32.46,"curve":0.367,"c2":0.65,"c3":0.703},{"time":0.4333}],"translate":[{"time":0.1333,"curve":0.528,"c2":0.27,"c3":0.892,"c4":0.63},{"time":0.2,"x":-7.79,"y":-2.3,"curve":"stepped"},{"time":0.3667,"x":-7.79,"y":-2.3,"curve":0.367,"c2":0.65,"c3":0.703},{"time":0.4333}]},"torso":{"rotate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"angle":-19.24,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.1333,"angle":-88.84},{"time":0.2,"angle":-137.52},{"time":0.2667,"angle":154.95,"curve":0.355,"c2":0.42,"c3":0.694,"c4":0.76},{"time":0.3667,"angle":32.84,"curve":0.188,"c2":0.67,"c3":0.59,"c4":0.91},{"time":0.4333,"angle":-10.53}],"translate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"x":12.42,"y":-98.38},{"time":0.1,"x":-60.02,"y":-81.29},{"time":0.1333,"x":24.17,"y":2.05},{"time":0.1667,"x":34.89,"y":2.05},{"time":0.2,"x":137.92,"y":2.05},{"time":0.2333,"x":196.88,"y":-20.7},{"time":0.2667,"x":211.88,"y":-96.22,"curve":0.347,"c2":0.39,"c3":0.681,"c4":0.72},{"time":0.3,"x":188.45,"y":-190.7},{"time":0.3333,"x":109.41,"y":-231.83},{"time":0.3667,"x":-6.99,"y":-198.23,"curve":0.188,"c2":0.67,"c3":0.59,"c4":0.91},{"time":0.4333,"x":-39.09,"y":-81.74}]},"waist":{"rotate":[{"curve":0.693,"c3":0.366,"c4":0.99},{"time":0.0667,"angle":-343.16,"curve":0.514,"c3":0.928,"c4":0.49},{"time":0.1333,"angle":51.74,"curve":0.294,"c2":0.35,"c3":0.638,"c4":0.69},{"time":0.2,"angle":38.59,"curve":"stepped"},{"time":0.3667,"angle":38.59,"curve":0.384,"c2":0.64,"c3":0.725},{"time":0.4333}]}}},"run":{"slots":{"foot_far":{"attachment":[{"name":"foot_far_1"},{"time":0.1667,"name":"foot_far_2_bent"},{"time":0.2333,"name":"foot_far_1"}]},"foot_near":{"attachment":[{"name":"foot_near_1"},{"time":0.4333,"name":"foot_near_2_bent"},{"time":0.5,"name":"foot_near_1"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_2"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":-11.04,"curve":"stepped"},{"time":0.0667,"angle":-11.04},{"time":0.1333,"angle":-9.83},{"time":0.2,"angle":2.46,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"angle":-2.79,"curve":"stepped"},{"time":0.3333,"angle":-2.79},{"time":0.4,"angle":-7.41,"curve":"stepped"},{"time":0.4667,"angle":-7.41},{"time":0.5333,"angle":-11.04}]},"arm_lower_near":{"rotate":[{"angle":-14.54,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"angle":-1.98},{"time":0.1333,"angle":3.35},{"time":0.2667,"angle":3.7,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.4,"angle":-3.06},{"time":0.4667,"angle":3.35},{"time":0.5333,"angle":-14.54}]},"arm_upper_far":{"rotate":[{"angle":252.31,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"angle":-111.63},{"time":0.1333,"angle":-84.06},{"time":0.2,"angle":-17.57,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"angle":24.85,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.3333,"angle":32.78},{"time":0.4,"angle":-66.34,"curve":"stepped"},{"time":0.4667,"angle":-66.34},{"time":0.5333,"angle":252.31}],"translate":[{"x":18.8,"y":73.96,"curve":"stepped"},{"time":0.1333,"x":18.8,"y":73.96},{"time":0.2,"x":11.35,"y":30.99,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"x":-1.72,"y":8.96,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.3333,"x":-5.93,"y":8.31},{"time":0.4,"x":18.8,"y":73.96}]},"arm_upper_near":{"rotate":[{"angle":-251.5,"curve":0.031,"c2":0.26,"c3":0.476,"c4":0.96},{"time":0.0667,"angle":114.43,"curve":0.713,"c3":0.556,"c4":0.66},{"time":0.2667,"angle":-36.89,"curve":0.211,"c2":0.59,"c3":0.519,"c4":0.99},{"time":0.3333,"angle":-40.57,"curve":0.633,"c3":0.466,"c4":0.95},{"time":0.5333,"angle":-251.5}],"translate":[{"x":-18.86,"y":-33.5,"curve":"stepped"},{"time":0.1333,"x":-18.86,"y":-33.5},{"time":0.2,"x":-22.05,"y":-24.22,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"x":-15.25,"y":-29.95,"curve":"stepped"},{"time":0.3333,"x":-15.25,"y":-29.95},{"time":0.4,"x":-22.63,"y":-28.57,"curve":"stepped"},{"time":0.4667,"x":-22.63,"y":-28.57},{"time":0.5333,"x":-18.86,"y":-33.5}]},"foot_far":{"rotate":[{"angle":16.53,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"angle":23.47},{"time":0.1,"angle":6.52},{"time":0.1333,"angle":47.6},{"time":0.2,"angle":49.64,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"angle":-0.58,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.3333,"angle":0.62},{"time":0.4,"angle":-5.23},{"time":0.4667,"angle":-23.4},{"time":0.5333,"angle":16.53}],"translate":[{"x":-1.14,"y":9.6,"curve":"stepped"},{"time":0.1333,"x":-1.14,"y":9.6},{"time":0.2,"x":28.82,"y":18.02,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"x":-1.14,"y":9.6}]},"foot_near":{"rotate":[{"angle":-29.9,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"angle":-27.78},{"time":0.1333,"angle":-45.16},{"time":0.2,"angle":-23.79,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"angle":-0.17,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.3333,"angle":5.34},{"time":0.3667,"angle":-14.92},{"time":0.4,"angle":12.5},{"time":0.4667,"angle":16.38},{"time":0.5333,"angle":-29.9}],"translate":[{"x":1.98,"y":9.17,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"x":-4.49,"y":11.21},{"time":0.1333,"x":-1.76,"y":14.83},{"time":0.2,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"x":0.84,"y":5.59,"curve":"stepped"},{"time":0.3333,"x":0.84,"y":5.59},{"time":0.4},{"time":0.4667,"x":26.66,"y":5.54},{"time":0.5333,"x":1.98,"y":9.17}]},"hand_far":{"rotate":[{"time":0.1333},{"time":0.2,"angle":6.24,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"angle":15.1,"curve":"stepped"},{"time":0.3333,"angle":15.1},{"time":0.4}],"translate":[{"time":0.2,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"x":-0.08,"y":-5.06,"curve":"stepped"},{"time":0.3333,"x":-0.08,"y":-5.06},{"time":0.4}]},"leg_lower_far":{"rotate":[{"angle":28.1,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"angle":40.17},{"time":0.1,"angle":-26.21},{"time":0.1333,"angle":-51.79},{"time":0.2,"angle":15.68,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"angle":-48.88,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.3333,"angle":-52.02},{"time":0.4,"angle":-70.86},{"time":0.4667,"angle":-64.11},{"time":0.5333,"angle":28.1}],"translate":[{"time":0.3333},{"time":0.4,"x":-11.23,"y":-4.44},{"time":0.4667}]},"leg_lower_near":{"rotate":[{"angle":-81.02,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"angle":-96.35},{"time":0.1333,"angle":-107.06},{"time":0.2,"angle":-104.81,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"angle":2.56,"curve":0.25,"c3":0.982,"c4":0.6},{"time":0.3333,"angle":7.37},{"time":0.3667,"angle":-50.8},{"time":0.4,"angle":-76.59},{"time":0.4667,"angle":-4.79},{"time":0.5333,"angle":-81.02}],"translate":[{"x":7.36,"y":12.11,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"x":13.12,"y":10.68},{"time":0.1333,"x":15.67,"y":8.1},{"time":0.2,"x":13.54,"y":8.03,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"curve":"stepped"},{"time":0.3333},{"time":0.4,"x":8.23,"y":8.19},{"time":0.4667},{"time":0.5333,"x":7.36,"y":12.11}]},"leg_upper_far":{"rotate":[{"angle":33.66,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"angle":27.01},{"time":0.1,"angle":38.08},{"time":0.1333,"angle":19.09},{"time":0.2,"angle":-52.46,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"angle":-67.57,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.3333,"angle":-61.47},{"time":0.4,"angle":-25.85},{"time":0.4667,"angle":-7.76},{"time":0.5333,"angle":33.66}],"translate":[{"time":0.1333},{"time":0.2,"x":3.74,"y":-36.04,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"x":-5.44,"y":-56.94,"curve":"stepped"},{"time":0.3333,"x":-5.44,"y":-56.94},{"time":0.4,"x":-8.22,"y":-52.57},{"time":0.4667,"x":-0.6,"y":-27.64},{"time":0.5333}]},"leg_upper_near":{"rotate":[{"angle":-2.28,"curve":0.506,"c3":0.368},{"time":0.2667,"angle":81.89,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.3333,"angle":75.43},{"time":0.3667,"angle":84.6},{"time":0.4,"angle":79.77},{"time":0.4667,"angle":4.53},{"time":0.5333,"angle":-2.28}],"translate":[{"time":0.0667},{"time":0.1333,"x":-2.09,"y":8.88},{"time":0.2,"x":-1.4,"y":20,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"x":-8.91,"y":37.86,"curve":"stepped"},{"time":0.3333,"x":-8.91,"y":37.86},{"time":0.4,"x":-1.67,"y":17.49,"curve":"stepped"},{"time":0.4667,"x":-1.67,"y":17.49},{"time":0.5333}]},"neck":{"rotate":[{"time":0.0667},{"time":0.1333,"angle":3.12,"curve":"stepped"},{"time":0.2,"angle":3.12,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"curve":"stepped"},{"time":0.3333},{"time":0.4,"angle":3.12,"curve":"stepped"},{"time":0.4667,"angle":3.12},{"time":0.5333}]},"torso":{"rotate":[{"angle":-17.99,"curve":"stepped"},{"time":0.0667,"angle":-17.99},{"time":0.1333,"angle":-26.07,"curve":"stepped"},{"time":0.2,"angle":-26.07,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"angle":-16.76,"curve":"stepped"},{"time":0.3333,"angle":-16.76},{"time":0.4,"angle":-26.07,"curve":"stepped"},{"time":0.4667,"angle":-26.07},{"time":0.5333,"angle":-17.99}],"translate":[{"y":47.44,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"y":8.63},{"time":0.1333,"y":-46.07},{"time":0.2,"y":-34.75,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"y":53.68,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.3333,"y":1.92},{"time":0.4,"y":-46.07},{"time":0.4667,"y":-15.62},{"time":0.5333,"y":47.44}]},"waist":{"rotate":[{"time":0.0667},{"time":0.1333,"angle":9.28,"curve":"stepped"},{"time":0.2,"angle":9.28,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"curve":"stepped"},{"time":0.3333},{"time":0.4,"angle":9.28,"curve":"stepped"},{"time":0.4667,"angle":9.28},{"time":0.5333}]},"head":{"rotate":[{"angle":17.01,"curve":"stepped"},{"time":0.0667,"angle":17.01},{"time":0.1333,"angle":22.74},{"time":0.2,"angle":18.84,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"angle":12.15,"curve":0.041,"c2":0.4,"c3":0.571,"c4":0.99},{"time":0.3333,"angle":13.03},{"time":0.4,"angle":19.51},{"time":0.4667,"angle":17.19,"curve":0.012,"c2":0.55,"c3":0.75},{"time":0.5333,"angle":17.01}],"translate":[{"time":0.0667},{"time":0.1333,"x":-3.03,"y":7.17},{"time":0.2,"x":-26.63,"y":-6.2,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2667,"x":-20.96,"y":-8.8,"curve":0.041,"c2":0.4,"c3":0.571,"c4":0.99},{"time":0.3333,"x":3.33,"y":1},{"time":0.4,"x":-4.25,"y":10.04},{"time":0.4667,"x":-21.28,"y":1.14,"curve":0.012,"c2":0.55,"c3":0.75},{"time":0.5333}]}}},"run2":{"slots":{"foot_far":{"attachment":[{"name":"foot_far_1"},{"time":0.1062,"name":"foot_far_2_bent"},{"time":0.1461,"name":"foot_far_1"}]},"foot_near":{"attachment":[{"name":"foot_near_1"},{"time":0.3036,"name":"foot_near_2_bent"},{"time":0.3425,"name":"foot_near_1"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_2"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":0.12,"curve":0.606,"c3":0.501,"c4":0.98},{"time":0.1,"angle":-10.44,"curve":0.606,"c3":0.501,"c4":0.98},{"time":0.2,"angle":-6.06,"curve":0.606,"c3":0.501,"c4":0.98},{"time":0.3,"angle":-12.34,"curve":0.606,"c3":0.501,"c4":0.98},{"time":0.4,"angle":-5.92}]},"arm_lower_near":{"rotate":[{"angle":-11.4,"curve":0.176,"c2":0.56,"c3":0.453,"c4":0.98},{"time":0.0333,"angle":-11.07},{"time":0.1333,"angle":-4.56,"curve":0.617,"c3":0.26,"c4":0.99},{"time":0.2333,"angle":-10.28,"curve":0.617,"c3":0.26,"c4":0.99},{"time":0.3333,"angle":-11.5,"curve":0.749,"c3":0.71,"c4":0.59},{"time":0.4,"angle":-11.4}]},"arm_upper_far":{"rotate":[{"angle":255.49,"curve":0.606,"c3":0.501,"c4":0.98},{"time":0.1,"angle":265.24,"curve":0.606,"c3":0.501,"c4":0.98},{"time":0.2,"angle":258.48,"curve":0.606,"c3":0.501,"c4":0.98},{"time":0.3,"angle":264.56,"curve":0.606,"c3":0.501,"c4":0.98},{"time":0.4,"angle":259.77}],"translate":[{"x":33.22,"y":80.29}]},"arm_upper_near":{"rotate":[{"angle":-19.9,"curve":0.176,"c2":0.56,"c3":0.453,"c4":0.98},{"time":0.0333,"angle":-18.98},{"time":0.1333,"angle":-20.1,"curve":0.617,"c3":0.26,"c4":0.99},{"time":0.2333,"angle":-19.4,"curve":0.617,"c3":0.26,"c4":0.99},{"time":0.3333,"angle":-15.47,"curve":0.749,"c3":0.71,"c4":0.59},{"time":0.4,"angle":-19.9}],"translate":[{"x":-9.09,"y":-21.85}]},"foot_far":{"rotate":[{"angle":16.53,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0464,"angle":23.47},{"time":0.0667,"angle":6.52},{"time":0.0863,"angle":47.6},{"time":0.1262,"angle":49.64,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"angle":-0.58,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.2453,"angle":0.62},{"time":0.2842,"angle":-5.23},{"time":0.3231,"angle":-23.4},{"time":0.3635,"angle":16.53}],"translate":[{"x":-1.14,"y":9.6,"curve":"stepped"},{"time":0.0863,"x":-1.14,"y":9.6},{"time":0.1262,"x":28.82,"y":18.02,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"x":-1.14,"y":9.6}]},"foot_near":{"rotate":[{"angle":-29.9,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0464,"angle":-27.78},{"time":0.0863,"angle":-45.16},{"time":0.1262,"angle":-23.79,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"angle":-0.17,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.2453,"angle":5.34},{"time":0.2648,"angle":-14.92},{"time":0.2842,"angle":12.5},{"time":0.3231,"angle":16.38},{"time":0.3635,"angle":-29.9}],"translate":[{"x":1.98,"y":9.17,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0464,"x":-4.49,"y":11.21},{"time":0.0863,"x":-1.76,"y":14.83},{"time":0.1262,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"x":0.84,"y":5.59,"curve":"stepped"},{"time":0.2453,"x":0.84,"y":5.59},{"time":0.2842},{"time":0.3231,"x":26.66,"y":5.54},{"time":0.3635,"x":1.98,"y":9.17}]},"hand_far":{"rotate":[{"time":0.0863},{"time":0.1262,"angle":6.24,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"angle":15.1,"curve":"stepped"},{"time":0.2453,"angle":15.1},{"time":0.2842}],"translate":[{"time":0.1262,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"x":-0.08,"y":-5.06,"curve":"stepped"},{"time":0.2453,"x":-0.08,"y":-5.06},{"time":0.2842}]},"head":{"rotate":[{"angle":28.92,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"angle":33.15},{"time":0.1,"angle":37.91},{"time":0.1667,"angle":27.41},{"time":0.2333,"angle":29.93},{"time":0.2667,"angle":34.16},{"time":0.3,"angle":37.93},{"time":0.3667,"angle":28.7},{"time":0.4,"angle":28.92}],"translate":[{"x":-18.57,"y":-14.96,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0667,"x":-3.63,"y":0.78},{"time":0.1667,"x":-13.4,"y":-8.96},{"time":0.2667,"x":-5.55,"y":-3.65},{"time":0.4,"x":-18.57,"y":-14.96}]},"leg_lower_far":{"rotate":[{"angle":28.1,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0464,"angle":40.17},{"time":0.0667,"angle":-26.21},{"time":0.0863,"angle":-51.79},{"time":0.1262,"angle":15.68,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"angle":-48.88,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.2453,"angle":-52.02},{"time":0.2842,"angle":-70.86},{"time":0.3231,"angle":-91.25},{"time":0.3635,"angle":28.1}],"translate":[{"time":0.2453},{"time":0.2842,"x":-11.23,"y":-4.44},{"time":0.3231}]},"leg_lower_near":{"rotate":[{"angle":-81.02,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0464,"angle":-96.35},{"time":0.0863,"angle":-123.98},{"time":0.1262,"angle":-139.32,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"angle":2.56,"curve":0.25,"c3":0.982,"c4":0.6},{"time":0.2453,"angle":7.37},{"time":0.2648,"angle":-50.8},{"time":0.2842,"angle":-76.59},{"time":0.3231,"angle":-4.79},{"time":0.3635,"angle":-81.02}],"translate":[{"x":7.36,"y":12.11,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0464,"x":13.12,"y":10.68},{"time":0.0863,"x":15.67,"y":8.1},{"time":0.1262,"x":13.54,"y":8.03,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"curve":"stepped"},{"time":0.2453},{"time":0.2842,"x":8.23,"y":8.19},{"time":0.3231},{"time":0.3635,"x":7.36,"y":12.11}]},"leg_upper_far":{"rotate":[{"angle":33.66,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0464,"angle":27.01},{"time":0.0667,"angle":38.08},{"time":0.0863,"angle":19.09},{"time":0.1262,"angle":-52.46,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"angle":-67.57,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.2453,"angle":-61.47},{"time":0.2842,"angle":-25.85},{"time":0.3231,"angle":1.11},{"time":0.3635,"angle":33.66}],"translate":[{"time":0.0863},{"time":0.1262,"x":3.74,"y":-36.04,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"x":-5.44,"y":-56.94,"curve":"stepped"},{"time":0.2453,"x":-5.44,"y":-56.94},{"time":0.2842,"x":-8.22,"y":-52.57},{"time":0.3231,"x":-0.6,"y":-27.64},{"time":0.3635}]},"leg_upper_near":{"rotate":[{"angle":-2.28,"curve":0.565,"c3":0.756,"c4":0.51},{"time":0.0863,"angle":68.02,"curve":0.272,"c2":0.36,"c3":0.571,"c4":0.73},{"time":0.1262,"angle":105.52,"curve":0.241,"c2":0.6,"c3":0.555},{"time":0.166,"angle":81.89,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.2453,"angle":75.43},{"time":0.2648,"angle":84.6},{"time":0.2842,"angle":79.77},{"time":0.3231,"angle":4.53},{"time":0.3635,"angle":-2.28}],"translate":[{"time":0.0464},{"time":0.0863,"x":-2.09,"y":8.88},{"time":0.1262,"x":-1.4,"y":20,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"x":-8.91,"y":37.86,"curve":"stepped"},{"time":0.2453,"x":-8.91,"y":37.86},{"time":0.2842,"x":-1.67,"y":17.49,"curve":"stepped"},{"time":0.3231,"x":-1.67,"y":17.49},{"time":0.3635}]},"neck":{"rotate":[{"angle":7.8}]},"torso":{"rotate":[{"angle":-38,"curve":"stepped"},{"time":0.0464,"angle":-38},{"time":0.0863,"angle":-46.08,"curve":"stepped"},{"time":0.1262,"angle":-46.08,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"angle":-36.77,"curve":"stepped"},{"time":0.2453,"angle":-36.77},{"time":0.2842,"angle":-46.08,"curve":"stepped"},{"time":0.3231,"angle":-46.08},{"time":0.3635,"angle":-38}],"translate":[{"y":47.44,"curve":0.25,"c3":0.865,"c4":0.25},{"time":0.0464,"y":8.63},{"time":0.0863,"y":-46.07},{"time":0.1262,"y":-34.75,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.2,"y":53.68,"curve":0.25,"c3":0.939,"c4":0.69},{"time":0.2453,"y":1.92},{"time":0.2842,"y":-46.07},{"time":0.3231,"y":-15.62},{"time":0.4,"y":47.44}]},"waist":{"rotate":[{"angle":20,"curve":"stepped"},{"time":0.0464,"angle":20},{"time":0.0863,"angle":29.28,"curve":"stepped"},{"time":0.1262,"angle":29.28,"curve":0.041,"c2":0.46,"c3":0.652,"c4":0.99},{"time":0.166,"angle":20,"curve":"stepped"},{"time":0.2453,"angle":20},{"time":0.2842,"angle":29.28,"curve":"stepped"},{"time":0.3231,"angle":29.28},{"time":0.3635,"angle":20}]}}},"walk":{"slots":{"foot_far":{"attachment":[{"name":"foot_far_2_bent"},{"time":0.1667,"name":"foot_far_1"},{"time":0.4333,"name":"foot_far_1"},{"time":0.6835,"name":"foot_far_2_bent"}]},"foot_near":{"attachment":[{"name":"foot_near_1"},{"time":0.2667,"name":"foot_near_2_bent"},{"time":0.4333,"name":"foot_near_2_bent"},{"time":0.6,"name":"foot_near_1"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_2"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":-74.86,"curve":0.087,"c2":0.5,"c3":0.709},{"time":0.0667,"angle":-68.32,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1667,"angle":-51.45,"curve":"stepped"},{"time":0.3333,"angle":-51.45,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.5,"angle":-78.82,"curve":"stepped"},{"time":0.7333,"angle":-78.82,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":-74.86}]},"arm_lower_near":{"rotate":[{"angle":-59.09,"curve":0.087,"c2":0.5,"c3":0.709},{"time":0.1333,"angle":-68.85,"curve":0.841,"c2":0.01,"c3":0.59,"c4":0.98},{"time":0.5,"angle":-46.93,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"angle":-41.67,"curve":"stepped"},{"time":0.7333,"angle":-41.67,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":-59.09}]},"arm_upper_far":{"rotate":[{"angle":2.7,"curve":"stepped"},{"time":0.0667,"angle":2.7,"curve":0.509,"c3":0.498,"c4":0.97},{"time":0.4333,"angle":-62.11,"curve":"stepped"},{"time":0.5,"angle":-62.11,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"angle":-43.67},{"time":0.7333,"angle":-31.6,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":2.7}],"translate":[{"time":0.0667,"curve":0.509,"c3":0.498,"c4":0.97},{"time":0.4333,"y":76.96,"curve":"stepped"},{"time":0.5,"y":76.96,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"x":-2.07,"y":67.86},{"time":0.7333,"x":-4.96,"y":31.69,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667}]},"arm_upper_near":{"rotate":[{"angle":24.97,"curve":"stepped"},{"time":0.0667,"angle":24.97,"curve":0.571,"c3":0.385,"c4":0.98},{"time":0.4333,"angle":76.92,"curve":"stepped"},{"time":0.5,"angle":76.92,"curve":0.639,"c3":0.412,"c4":0.97},{"time":0.8667,"angle":24.97}],"translate":[{"time":0.0667,"curve":0.571,"c3":0.385,"c4":0.98},{"time":0.5,"x":-20.37,"y":-29.42,"curve":0.639,"c3":0.412,"c4":0.97},{"time":0.8667}]},"foot_far":{"rotate":[{"angle":49.17,"curve":"stepped"},{"time":0.0667,"angle":49.17,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1667,"angle":-17.13},{"time":0.3333,"angle":17.26,"curve":0.152,"c2":0.33,"c3":0.547,"c4":0.94},{"time":0.5,"angle":11.08,"curve":"stepped"},{"time":0.6,"angle":11.08},{"time":0.7333,"angle":51.78,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":49.17}],"translate":[{"x":37.41,"y":27.05,"curve":"stepped"},{"time":0.0667,"x":37.41,"y":27.05,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1667,"x":-2.24,"y":21.46},{"time":0.3333,"x":-6.61,"y":17.14,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"x":2.74,"y":10.43,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.5,"x":-1.07,"y":8.5,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"x":3.42,"y":9.03},{"time":0.7333,"x":31.16,"y":24.53,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"x":37.41,"y":27.05}]},"foot_near":{"rotate":[{"angle":-16.34,"curve":0.087,"c2":0.5,"c3":0.709},{"time":0.0667,"curve":"stepped"},{"time":0.1667},{"time":0.3333,"angle":25.74,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"angle":17.62,"curve":"stepped"},{"time":0.5,"angle":17.62,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"angle":-55.65},{"time":0.7333,"angle":-32.53,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":-16.34}],"translate":[{"x":-7.23,"y":5.9,"curve":"stepped"},{"time":0.1667,"x":-7.23,"y":5.9},{"time":0.3333,"x":19.69,"y":12.11,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"x":26.34,"y":14.77,"curve":"stepped"},{"time":0.5,"x":26.34,"y":14.77,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"x":3.86,"y":12.05,"curve":"stepped"},{"time":0.7333,"x":3.86,"y":12.05,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"x":-7.23,"y":5.9}]},"head":{"rotate":[{"angle":2.1,"curve":"stepped"},{"time":0.0667,"angle":2.1,"curve":0.25,"c3":0.75},{"time":0.1667,"angle":5.14,"curve":"stepped"},{"time":0.3333,"angle":5.14,"curve":0.087,"c2":0.5,"c3":0.709},{"time":0.4333,"angle":-1.14,"curve":"stepped"},{"time":0.5,"angle":-1.14,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.6,"angle":-2.57,"curve":"stepped"},{"time":0.7333,"angle":-2.57,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":2.1}],"translate":[{"time":0.0667,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.1667,"x":-2.25,"y":-0.19,"curve":"stepped"},{"time":0.3333,"x":-2.25,"y":-0.19,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.4333,"curve":"stepped"},{"time":0.5,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"x":-4.52,"y":0.07,"curve":"stepped"},{"time":0.7333,"x":-4.52,"y":0.07,"curve":0.25,"c3":0.75},{"time":0.8667}]},"leg_lower_far":{"rotate":[{"angle":-6.6,"curve":0.087,"c2":0.5,"c3":0.709},{"time":0.0667,"angle":1.58,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1667,"angle":-42.44},{"time":0.3333,"angle":-47.3,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"angle":20.36,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.5,"angle":35.54,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"angle":-19.2},{"time":0.7333,"angle":-26.92,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":-6.6}],"translate":[{"time":0.5,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"x":-9.58,"y":-0.57,"curve":"stepped"},{"time":0.7333,"x":-9.58,"y":-0.57,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667}]},"leg_lower_near":{"rotate":[{"angle":-7.98,"curve":0.087,"c2":0.5,"c3":0.709},{"time":0.0667,"angle":1.01,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1667,"angle":-50.99},{"time":0.3333,"angle":-44.04,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"angle":-23.3,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.5,"angle":-17.55,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"angle":-90.21},{"time":0.7333,"angle":-89.45,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":-7.98}],"translate":[{"time":0.0667,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1667,"x":1.67,"y":6.96},{"time":0.3333,"x":2,"y":11.47,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"curve":"stepped"},{"time":0.5,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"x":7.46,"y":12.21,"curve":"stepped"},{"time":0.7333,"x":7.46,"y":12.21,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667}]},"leg_upper_far":{"rotate":[{"angle":-43.48,"curve":0.087,"c2":0.5,"c3":0.709},{"time":0.0667,"angle":-50.63,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1667,"angle":-31.42},{"time":0.3333,"angle":-6.01,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"angle":-6.04,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.5,"angle":-7.7,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"angle":9.28},{"time":0.7333,"angle":-22.53,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":-43.48}],"translate":[{"x":-0.57,"y":-61.18,"curve":0.087,"c2":0.5,"c3":0.709},{"time":0.0667,"x":-0.38,"y":-65.7,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1667,"x":-5.54,"y":-38.93},{"time":0.3333,"x":-2.97,"y":-20.44,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"x":-0.65,"y":-25.02,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.5,"x":1.42,"y":-22.59,"curve":"stepped"},{"time":0.6,"x":1.42,"y":-22.59},{"time":0.7333,"x":2.68,"y":-33.84,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"x":-0.57,"y":-61.18}]},"leg_upper_near":{"rotate":[{"angle":44.58,"curve":0.087,"c2":0.5,"c3":0.709},{"time":0.0667,"angle":45.6,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1667,"angle":52.34},{"time":0.3333,"angle":20.73,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"angle":3.69,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.5,"angle":-1.79,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"angle":45.79},{"time":0.7333,"angle":70.05,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":44.58}],"translate":[{"x":1.94,"y":40.95,"curve":"stepped"},{"time":0.1667,"x":1.94,"y":40.95},{"time":0.3333,"x":4.37,"y":18.44,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"x":4.66,"y":-1.97,"curve":"stepped"},{"time":0.5,"x":4.66,"y":-1.97,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"x":-2.69,"y":22.24},{"time":0.7333,"x":3.3,"y":29.75,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"x":1.94,"y":40.95}]},"torso":{"rotate":[{"angle":-1.26,"curve":"stepped"},{"time":0.0667,"angle":-1.26,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1667,"angle":-5.02,"curve":0.25,"c3":0.931,"c4":0.61},{"time":0.3333,"angle":-3.79,"curve":0.085,"c2":0.35,"c3":0.587,"c4":0.87},{"time":0.4333,"angle":0.95,"curve":"stepped"},{"time":0.5,"angle":0.95,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"angle":1.01,"curve":"stepped"},{"time":0.7333,"angle":1.01,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":-1.26}],"translate":[{"y":6.79,"curve":"stepped"},{"time":0.0667,"y":6.79,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1667,"y":-22.63},{"time":0.3333,"y":-9.05,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"y":6.79,"curve":"stepped"},{"time":0.5,"y":6.79,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"y":-18.11,"curve":0.066,"c2":0.45,"c3":0.75},{"time":0.7333,"y":-22.63,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"y":6.79}]},"waist":{"rotate":[{"angle":2.49,"curve":"stepped"},{"time":0.1667,"angle":2.49},{"time":0.3333,"angle":1.6,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.4333,"angle":-1.75,"curve":"stepped"},{"time":0.5,"angle":-1.75,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.6,"angle":-3.81,"curve":"stepped"},{"time":0.7333,"angle":-3.81,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8667,"angle":2.49}],"translate":[{"time":0.6},{"time":0.6667,"x":4.52,"y":-0.07},{"time":0.7333}]}}},"walk2":{"slots":{"foot_far":{"attachment":[{"name":"foot_far_2_bent"},{"time":0.1,"name":"foot_far_1"},{"time":0.3667,"name":"foot_far_1"},{"time":0.6333,"name":"foot_far_2_bent"}]},"foot_near":{"attachment":[{"name":"foot_near_1"},{"time":0.2,"name":"foot_near_2_bent"},{"time":0.3667,"name":"foot_near_2_bent"},{"time":0.5333,"name":"foot_near_1"}]},"leg_lower_near":{"attachment":[{"name":"leg_lower_near_2"}]}},"bones":{"arm_lower_far":{"rotate":[{"angle":-0.69,"curve":0.516,"c3":0.765,"c4":0.48},{"time":0.2,"angle":21.97,"curve":0.234,"c2":0.47,"c3":0.453,"c4":0.98},{"time":0.4333,"angle":-3,"curve":0.539,"c3":0.752,"c4":0.51},{"time":0.6667,"angle":-18.02,"curve":0.225,"c2":0.51,"c3":0.478,"c4":0.98},{"time":0.8667,"angle":-0.69}]},"arm_lower_near":{"rotate":[{"angle":-6.95,"curve":0.516,"c3":0.765,"c4":0.48},{"time":0.2,"angle":-22.88,"curve":0.234,"c2":0.47,"c3":0.453,"c4":0.98},{"time":0.4333,"angle":7.27,"curve":0.539,"c3":0.752,"c4":0.51},{"time":0.6667,"angle":19.19,"curve":0.225,"c2":0.51,"c3":0.478,"c4":0.98},{"time":0.8667,"angle":-6.95}]},"arm_upper_far":{"rotate":[{"angle":21.26,"curve":0.516,"c3":0.453,"c4":0.98},{"time":0.4333,"angle":222.02,"curve":0.516,"c3":0.453,"c4":0.98},{"time":0.8667,"angle":21.26}],"translate":[{"curve":0.516,"c3":0.453,"c4":0.98},{"time":0.4333,"x":3.56,"y":34.19,"curve":0.516,"c3":0.453,"c4":0.98},{"time":0.8667}]},"arm_upper_near":{"rotate":[{"angle":-13.1,"curve":0.516,"c3":0.453,"c4":0.98},{"time":0.4333,"angle":-257.34,"curve":0.516,"c3":0.453,"c4":0.98},{"time":0.8667,"angle":-13.1}],"translate":[{"curve":0.516,"c3":0.453,"c4":0.98},{"time":0.4333,"x":-2.96,"y":-28.49,"curve":0.516,"c3":0.453,"c4":0.98},{"time":0.8667}]},"foot_far":{"rotate":[{"angle":49.17,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1,"angle":-17.13},{"time":0.2667,"angle":17.26,"curve":0.152,"c2":0.33,"c3":0.547,"c4":0.94},{"time":0.4333,"angle":11.08,"curve":"stepped"},{"time":0.5333,"angle":11.08},{"time":0.6667,"angle":51.78,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"angle":49.17}],"translate":[{"x":37.41,"y":27.05,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1,"x":-2.24,"y":21.46},{"time":0.2667,"x":-3.7,"y":12.97,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"x":1.82,"y":5.63,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.4333,"x":2.22,"y":6.56,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"x":3.95,"y":6.92},{"time":0.6667,"x":31.16,"y":24.53,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"x":37.41,"y":27.05}]},"foot_near":{"rotate":[{"time":0.1},{"time":0.2667,"angle":25.74,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"angle":17.62,"curve":"stepped"},{"time":0.4333,"angle":17.62,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"angle":-55.65},{"time":0.6667,"angle":-32.53,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"angle":-16.34},{"time":0.8667}],"translate":[{"x":-7.23,"y":5.9,"curve":"stepped"},{"time":0.1,"x":-7.23,"y":5.9},{"time":0.2667,"x":19.69,"y":12.11,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"x":26.34,"y":14.77,"curve":"stepped"},{"time":0.4333,"x":26.34,"y":14.77,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"x":3.86,"y":12.05,"curve":"stepped"},{"time":0.6667,"x":3.86,"y":12.05,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"x":-7.23,"y":5.9}]},"leg_lower_far":{"rotate":[{"angle":1.58,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1,"angle":-42.44},{"time":0.2667,"angle":-47.3,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"angle":20.36,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.4333,"angle":35.54,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"angle":-19.2},{"time":0.6667,"angle":-26.92,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"angle":-6.6},{"time":0.8667,"angle":1.58}],"translate":[{"time":0.4333,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"x":-9.58,"y":-0.57,"curve":"stepped"},{"time":0.6667,"x":-9.58,"y":-0.57,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8}]},"leg_lower_near":{"rotate":[{"angle":1.01,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1,"angle":-50.99},{"time":0.2667,"angle":-44.04,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"angle":-23.3,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.4333,"angle":-17.55,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"angle":-90.21},{"time":0.6667,"angle":-89.45,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"angle":-7.98},{"time":0.8667,"angle":1.01}],"translate":[{"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1,"x":1.67,"y":6.96},{"time":0.2667,"x":2,"y":11.47,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"curve":"stepped"},{"time":0.4333,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"x":7.46,"y":12.21,"curve":"stepped"},{"time":0.6667,"x":7.46,"y":12.21,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8}]},"leg_upper_far":{"rotate":[{"angle":-50.63,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1,"angle":-31.42},{"time":0.2667,"angle":-6.01,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"angle":-6.04,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.4333,"angle":-7.7,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"angle":9.28},{"time":0.6667,"angle":-22.53,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"angle":-43.48},{"time":0.8667,"angle":-50.63}],"translate":[{"x":-0.38,"y":-65.7,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1,"x":-5.54,"y":-38.93},{"time":0.2667,"x":-2.97,"y":-20.44,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"x":-0.65,"y":-25.02,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.4333,"x":1.42,"y":-22.59,"curve":"stepped"},{"time":0.5333,"x":1.42,"y":-22.59},{"time":0.6667,"x":2.68,"y":-33.84,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"x":-0.57,"y":-61.18},{"time":0.8667,"x":-0.38,"y":-65.7}]},"leg_upper_near":{"rotate":[{"angle":45.6,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1,"angle":52.34},{"time":0.2667,"angle":20.73,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"angle":3.69,"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.4333,"angle":-1.79,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"angle":45.79},{"time":0.6667,"angle":70.05,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"angle":44.58},{"time":0.8667,"angle":45.6}],"translate":[{"x":1.94,"y":40.95,"curve":"stepped"},{"time":0.1,"x":1.94,"y":40.95},{"time":0.2667,"x":4.37,"y":18.44,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"x":4.66,"y":-1.97,"curve":"stepped"},{"time":0.4333,"x":4.66,"y":-1.97,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"x":-2.69,"y":22.24},{"time":0.6667,"x":3.3,"y":29.75,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"x":1.94,"y":40.95}]},"torso":{"rotate":[{"angle":7.73,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1,"angle":3.97,"curve":0.25,"c3":0.931,"c4":0.61},{"time":0.2667,"angle":5.19,"curve":0.085,"c2":0.35,"c3":0.587,"c4":0.87},{"time":0.3667,"angle":9.94,"curve":"stepped"},{"time":0.4333,"angle":9.94,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"angle":10.01,"curve":"stepped"},{"time":0.6667,"angle":10.01,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"angle":7.73}],"translate":[{"y":6.79,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.1,"y":-22.63},{"time":0.2667,"y":-9.05,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"y":6.79,"curve":"stepped"},{"time":0.4333,"y":6.79,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"y":-18.11,"curve":0.066,"c2":0.45,"c3":0.75},{"time":0.6667,"y":-22.63,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"y":6.79}]},"waist":{"rotate":[{"angle":-6.5,"curve":"stepped"},{"time":0.1,"angle":-6.5},{"time":0.2667,"angle":-7.39,"curve":0.152,"c2":0.33,"c3":0.658,"c4":0.84},{"time":0.3667,"angle":-10.75,"curve":"stepped"},{"time":0.4333,"angle":-10.75,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"angle":-12.81,"curve":"stepped"},{"time":0.6667,"angle":-12.81,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"angle":-6.5}],"translate":[{"time":0.5333},{"time":0.6,"x":4.52,"y":-0.07},{"time":0.6667}]},"head":{"rotate":[{"angle":-0.89,"curve":0.25,"c3":0.75},{"time":0.1,"angle":2.14,"curve":"stepped"},{"time":0.2667,"angle":2.14,"curve":0.087,"c2":0.5,"c3":0.709},{"time":0.3667,"angle":-1.74,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.4333,"angle":-0.65,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.5333,"angle":-4.15},{"time":0.6667,"angle":-5.57,"curve":0.179,"c2":0.32,"c3":0.709,"c4":0.84},{"time":0.8,"angle":-0.89}],"translate":[{"curve":0.16,"c2":0.54,"c3":0.75},{"time":0.1,"x":-2.25,"y":-0.19,"curve":"stepped"},{"time":0.2667,"x":-2.25,"y":-0.19,"curve":0.25,"c3":0.985,"c4":0.6},{"time":0.3667,"curve":"stepped"},{"time":0.4333,"curve":0.25,"c3":0.952,"c4":0.48},{"time":0.5333,"x":-4.52,"y":0.07,"curve":"stepped"},{"time":0.6667,"x":-4.52,"y":0.07,"curve":0.25,"c3":0.75},{"time":0.8}]}}}}},"orangegirl":{"skeleton":{"hash":"tkf54xpbwxIbcipoy+V3XUkOMDI","spine":"3.8.14-beta","x":-286.65,"y":-36.36,"width":379.5,"height":614.39},"bones":[{"name":"root"},{"name":"bone","parent":"root","x":-0.51,"y":332.94},{"name":"Layer 14","parent":"bone","length":29.21,"rotation":151.14,"x":-2.25,"y":3},{"name":"Layer 41","parent":"bone","length":126.02,"rotation":-81.49,"x":27,"y":-21.75},{"name":"Layer 44","parent":"bone","length":99.18,"rotation":-93.15,"x":-6.75,"y":-44.25},{"name":"Layer 37","parent":"Layer 41","length":105.87,"rotation":-0.9,"x":133.25,"y":3.56},{"name":"Layer 42","parent":"Layer 44","length":93.46,"rotation":-5.84,"x":112.82,"y":-2.84},{"name":"Layer 43","parent":"Layer 44","x":-12.07,"y":-27.27},{"name":"bone2","parent":"Layer 14","length":30.54,"rotation":-36.21,"x":30.23,"y":-0.47},{"name":"Layer 38","parent":"Layer 37","length":43.56,"rotation":-10.27,"x":147.15,"y":-3.02},{"name":"Layer 40","parent":"Layer 37","x":136.47,"y":-0.08},{"name":"Layer 45","parent":"Layer 42","length":17.51,"rotation":-34.1,"x":139.35,"y":2.27},{"name":"Layer 46","parent":"Layer 42","x":124.88,"y":-3.92},{"name":"bone3","parent":"bone2","length":37.51,"rotation":-13.39,"x":41.28,"y":-0.16},{"name":"Layer 24","parent":"bone3","length":22.56,"rotation":3.6,"x":59,"y":4.04},{"name":"Layer 27","parent":"bone3","length":53.54,"rotation":144.08,"x":53.42,"y":41.32},{"name":"Layer 36","parent":"bone3","length":66.27,"rotation":136.15,"x":46.16,"y":5.68},{"name":"bone17","parent":"bone3","x":11.84,"y":9.36},{"name":"bone4","parent":"Layer 45","length":26.03,"rotation":-35.02,"x":25.04,"y":2.87},{"name":"Layer 15","parent":"Layer 24","length":12.95,"rotation":-4.95,"x":25.32,"y":1.7},{"name":"Layer 25","parent":"Layer 24","x":4.51,"y":14.03},{"name":"Layer 30","parent":"Layer 27","length":60.07,"rotation":-6.74,"x":61.3,"y":1.04},{"name":"Layer 31","parent":"Layer 36","length":65.18,"rotation":-3.6,"x":79.83,"y":-2.75},{"name":"Layer 48","parent":"bone17","length":18.62,"rotation":149.1,"x":-3.89,"y":3.38},{"name":"Layer 16","parent":"Layer 15","x":25.12,"y":-7.75},{"name":"Layer 17","parent":"Layer 15","x":44.63,"y":18.53},{"name":"Layer 18","parent":"Layer 15","x":18.49,"y":22.6},{"name":"Layer 19","parent":"Layer 15","x":67.16,"y":11.77},{"name":"Layer 20","parent":"Layer 15","x":45.29,"y":-19.5},{"name":"Layer 21","parent":"Layer 15","x":87.67,"y":-37.52},{"name":"Layer 22","parent":"Layer 15","length":24.96,"rotation":152.19,"x":38.81,"y":-47.49},{"name":"Layer 23","parent":"Layer 15","length":19.97,"rotation":138.09,"x":73.77,"y":4.55},{"name":"Layer 29","parent":"Layer 30","x":74.61,"y":-3.14},{"name":"Layer 34","parent":"Layer 31","x":76.08,"y":5.56},{"name":"Layer 35","parent":"Layer 31","length":39.58,"rotation":8.51,"x":89.2,"y":5.34},{"name":"Layer 49","parent":"Layer 15","rotation":4.95,"x":74.42,"y":-67.22},{"name":"bone16","parent":"Layer 48","length":19.8,"rotation":-6.29,"x":23.57,"y":-0.3},{"name":"Layer 33","parent":"Layer 35","length":47.46,"rotation":-3.6,"x":21.43,"y":-42.96,"transform":"noScale"},{"name":"bone11","parent":"Layer 49","length":29.98,"rotation":157.73,"x":-21.92,"y":-4.9},{"name":"bone14","parent":"Layer 23","length":16.35,"rotation":1.35,"x":23.47,"y":1.01},{"name":"bone5","parent":"Layer 21","length":29.91,"rotation":114.17,"x":6.98,"y":19.16},{"name":"bone6","parent":"Layer 21","length":25.84,"rotation":138.72,"x":-6.19,"y":6.11},{"name":"bone7","parent":"Layer 21","length":31.93,"rotation":157.02,"x":-15.86,"y":-7.15},{"name":"bone8","parent":"Layer 21","length":29.19,"rotation":-176.24,"x":-20.03,"y":-22.23},{"name":"bone9","parent":"Layer 22","length":22.37,"rotation":-9.39,"x":25.75,"y":0.87},{"name":"bone10","parent":"bone9","length":14.44,"rotation":-7.24,"x":25.48,"y":0.57},{"name":"bone12","parent":"bone11","length":26.46,"rotation":-2.7,"x":32.88,"y":-0.23},{"name":"bone15","parent":"bone14","length":23.67,"rotation":5.4,"x":19.2,"y":0.08},{"name":"bone13","parent":"bone12","length":26.3,"rotation":-4.95,"x":31.31,"y":-0.61}],"slots":[{"name":"Layer 27","bone":"Layer 27","attachment":"orangegirl/Layer 27"},{"name":"Layer 30","bone":"Layer 30","attachment":"orangegirl/Layer 30"},{"name":"Layer 29","bone":"Layer 29","attachment":"orangegirl/Layer 29"},{"name":"Layer 28","bone":"bone3","attachment":"orangegirl/Layer 28"},{"name":"Layer 43","bone":"Layer 43","attachment":"orangegirl/Layer 43"},{"name":"Layer 45","bone":"Layer 45","attachment":"orangegirl/Layer 45"},{"name":"Layer 47","bone":"Layer 46","attachment":"orangegirl/Layer 47"},{"name":"Layer 42","bone":"Layer 42","attachment":"orangegirl/Layer 42"},{"name":"Layer 46","bone":"Layer 46","attachment":"orangegirl/Layer 46"},{"name":"Layer 44","bone":"Layer 44","attachment":"orangegirl/Layer 44"},{"name":"Layer 14","bone":"Layer 14","attachment":"orangegirl/Layer 14"},{"name":"Layer 48","bone":"Layer 48","attachment":"orangegirl/Layer 48"},{"name":"Layer 39","bone":"Layer 40","attachment":"orangegirl/Layer 39"},{"name":"Layer 38","bone":"Layer 38","attachment":"orangegirl/Layer 38"},{"name":"Layer 37","bone":"Layer 37","attachment":"orangegirl/Layer 37"},{"name":"Layer 41","bone":"Layer 41","attachment":"orangegirl/Layer 41"},{"name":"Layer 40","bone":"Layer 40","attachment":"orangegirl/Layer 40"},{"name":"Layer 32","bone":"Layer 33","attachment":"orangegirl/Layer 32"},{"name":"Layer 31","bone":"Layer 31","attachment":"orangegirl/Layer 31"},{"name":"Layer 25","bone":"Layer 25","attachment":"orangegirl/Layer 25"},{"name":"Layer 24","bone":"Layer 24","attachment":"orangegirl/Layer 24"},{"name":"Layer 26","bone":"Layer 25","attachment":"orangegirl/Layer 26"},{"name":"Layer 36","bone":"Layer 36","attachment":"orangegirl/Layer 36"},{"name":"Layer 35","bone":"Layer 35","attachment":"orangegirl/Layer 35"},{"name":"Layer 34","bone":"Layer 34","attachment":"orangegirl/Layer 34"},{"name":"Layer 33","bone":"Layer 33","attachment":"orangegirl/Layer 33"},{"name":"Layer 23","bone":"Layer 23","attachment":"orangegirl/Layer 23"},{"name":"Layer 49","bone":"Layer 49","attachment":"orangegirl/Layer 49"},{"name":"Layer 15","bone":"Layer 15","attachment":"orangegirl/Layer 15"},{"name":"Layer 20","bone":"Layer 20","attachment":"orangegirl/Layer 20"},{"name":"Layer 16","bone":"Layer 16","attachment":"orangegirl/Layer 16"},{"name":"Layer 22","bone":"Layer 22","attachment":"orangegirl/Layer 22"},{"name":"Layer 19","bone":"Layer 19","attachment":"orangegirl/Layer 19"},{"name":"Layer 21","bone":"Layer 21","attachment":"orangegirl/Layer 21"},{"name":"Layer 18","bone":"Layer 18","attachment":"orangegirl/Layer 18"},{"name":"Layer 17","bone":"Layer 17","attachment":"orangegirl/Layer 17"}],"skins":[{"name":"default","attachments":{"Layer 14":{"orangegirl/Layer 14":{"type":"mesh","uvs":[0.15356,0.32471,0.17092,0.15966,0.30268,0.06831,0.4661,0.12852,0.49011,0.26624,0.50644,0.35437,0.60184,0.47595,0.73358,0.5185,0.88671,0.55811,0.99559,0.66578,1,0.824,0.9482,0.94753,0.75822,0.99632,0.52228,0.95065,0.3895,0.82504,0.34966,0.72643,0.33026,0.65584,0.26182,0.61017,0.18318,0.48768,0.31494,0.25516,0.34966,0.41709,0.44874,0.54373,0.56415,0.62055,0.74086,0.67557,0.64076,0.82089,0.86955,0.83127,0.88691,0.67557,0.34584,0.52141],"triangles":[0,19,20,20,4,5,20,19,4,0,1,19,19,3,4,1,2,19,19,2,3,16,17,27,17,18,27,27,18,20,18,0,20,14,15,22,15,21,22,15,16,21,16,27,21,22,6,7,22,21,6,27,20,21,21,5,6,21,20,5,13,24,12,12,25,11,12,24,25,13,14,24,11,25,10,24,23,25,25,26,10,25,23,26,24,14,22,26,9,10,24,22,23,23,8,26,26,8,9,22,7,23,23,7,8],"vertices":[2,8,62.59,29.3,0.33333,13,13.9,33.6,0.66667,1,13,43.02,24.37,1,1,13,54.57,-3.13,1,1,13,37.62,-30.87,1,2,8,45.84,-32.31,0.33333,13,11.9,-30.21,0.66667,3,2,37.63,-40.9,0.33333,8,29.85,-28.25,0.33333,13,-4.6,-29.97,0.33333,2,2,11.2,-29.92,0.66667,8,2.05,-35.01,0.33333,2,1,27.02,26.79,0.8,2,-14.15,-34.97,0.2,1,1,55.66,19.52,1,1,1,76.03,-0.29,1,1,1,76.87,-29.4,1,1,1,67.19,-52.13,1,1,1,31.66,-61.12,1,1,1,-12.46,-52.74,1,2,1,-37.3,-29.63,0.66667,2,14.94,45.5,0.33333,2,1,-44.75,-11.49,0.33333,2,30.23,33.21,0.66667,2,2,39.68,23.59,0.66667,8,-6.59,24.99,0.33333,2,2,54.95,22.41,0.33333,8,6.43,33.06,0.66667,2,8,33.06,36.91,0.66667,13,-16.58,34.16,0.33333,2,8,61.49,-3.46,0.5,13,20.43,1.48,0.5,3,2,57.72,-16.63,0.33333,8,31.73,3.2,0.33333,13,-10.07,1.06,0.33333,2,2,30.24,-5.17,0.66667,8,2.79,-3.79,0.33333,2,1,-4.65,8,0.33333,2,4.52,-3.22,0.66667,2,1,28.39,-2.11,0.66667,2,-29.3,-10.32,0.33333,1,1,9.69,-28.85,1,1,1,52.47,-30.75,1,1,1,55.71,-2.09,1,3,2,49.08,0.52,0.42617,8,14.62,11.93,0.45254,13,-28.73,5.59,0.12129],"hull":19}},"Layer 15":{"orangegirl/Layer 15":{"type":"mesh","uvs":[0.22206,0.00733,0.0992,0.18843,0.09152,0.39516,0,0.53184,0,0.73516,0.04545,0.9043,0.15103,1,0.45818,1,0.74997,0.95385,0.9477,0.82058,1,0.62069,1,0.29436,0.821,0.08421,0.57144,4.9E-4,0.45626,0.05858,0.27389,0.26702,0.19902,0.51305,0.11456,0.59164,0.128,0.69074,0.11264,0.80179,0.14911,0.90772,0.43131,0.79154,0.67895,0.51647,0.74613,0.25506],"triangles":[7,20,21,7,21,8,5,20,6,7,6,20,9,8,22,5,19,20,20,19,21,5,4,19,8,21,22,9,22,10,19,18,21,19,4,18,18,16,21,21,16,22,4,17,18,4,3,17,18,17,16,10,22,11,22,23,11,16,17,2,17,3,2,16,15,22,22,15,23,23,15,14,23,14,13,16,2,15,2,1,15,23,12,11,1,0,15,15,0,14,23,13,12,14,0,13],"vertices":[93.56,3.68,77.67,17.64,57.44,21.96,45.42,32.39,25.41,35.97,8.05,34.98,-3.03,27.41,-7.85,0.51,-7.89,-25.87,2.12,-45.54,20.97,-53.65,53.1,-59.41,76.59,-47.44,88.75,-27.05,84.84,-15.94,67.19,3.72,44.15,14.62,37.74,23.4,27.77,23.98,17.08,27.28,6.08,25.95,13.09,-0.82,36.27,-27.36,60.95,-37.86],"hull":14}},"Layer 16":{"orangegirl/Layer 16":{"type":"mesh","uvs":[0.38018,0,0.65476,0.18361,0.98426,0.38649,1,0.80828,0.76459,1,0.26424,1,0,0.88303,0,0.41319,0,0,0.28255,0.49861,0.59374,0.68548],"triangles":[5,10,4,4,10,3,5,9,10,5,6,9,6,7,9,10,2,3,10,1,2,10,9,1,9,0,1,9,7,0,7,8,0],"vertices":[24.37,-3.41,17.23,-9.94,9.21,-17.87,-4.15,-15.93,-9.03,-8.36,-6.56,5.43,-1.57,12.06,13.23,9.4,26.25,7.07,9.15,2.1,1.72,-5.42],"hull":9}},"Layer 17":{"orangegirl/Layer 17":{"type":"mesh","uvs":[0.67837,0,1,0.20649,1,0.52086,0.69546,0.95824,0.16581,1,0,0.79422,0,0.42518,0,0,0.22561,0,0.19998,0.41834,0.51606,0.54136],"triangles":[4,10,3,10,5,9,10,4,5,3,10,2,5,6,9,10,9,0,2,10,1,0,9,8,10,0,1,6,7,9,9,7,8],"vertices":[16.91,-7.9,10.69,-13.32,2.95,-11.93,-6.73,-4.01,-5.89,6.6,-0.24,8.96,8.84,7.33,19.3,5.46,18.5,1.02,8.3,3.37,4.16,-2.31],"hull":9}},"Layer 18":{"orangegirl/Layer 18":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[-8.96,-10.18,-5.61,8.52,8.17,6.05,4.82,-12.65],"hull":4}},"Layer 19":{"orangegirl/Layer 19":{"x":-1.27,"y":-2.37,"scaleX":1.154,"scaleY":1.154,"rotation":-100.18,"width":13,"height":7}},"Layer 20":{"orangegirl/Layer 20":{"x":0.62,"y":-3.07,"rotation":-100.18,"width":24,"height":19}},"Layer 21":{"orangegirl/Layer 21":{"type":"mesh","uvs":[0.31353,0.00659,0.23242,0.03221,0.11161,0.06638,0.13923,0.13473,0.07883,0.23083,0.04258,0.28209,0,0.29276,0,0.40168,0.04258,0.45294,0.04949,0.5405,0.15131,0.51487,0.23415,0.58321,0.39464,0.67291,0.51717,0.74339,0.59483,0.86512,0.67077,0.98258,0.70183,0.94414,0.7467,1,0.80193,0.96336,0.86233,1,0.89512,0.91424,1,0.95909,1,0.80746,1,0.65155,1,0.41663,0.9072,0.2052,0.66041,0.04289,0.53616,0,0.38429,0,0.44814,0.12191,0.33252,0.1454,0.20998,0.23724,0.13232,0.37605,0.54651,0.22869,0.405,0.29917,0.3446,0.3846,0.63798,0.32693,0.56722,0.44867,0.48438,0.59816,0.76051,0.39955,0.68285,0.6003,0.65178,0.79037,0.85025,0.45721,0.86233,0.58108,0.86233,0.77756],"triangles":[43,42,24,43,24,23,44,43,23,44,23,22,20,44,22,18,16,44,20,22,21,20,18,44,17,16,18,19,18,20,40,39,42,41,40,44,16,41,44,40,37,39,13,38,40,41,13,40,14,13,41,15,14,41,16,15,41,40,42,43,40,43,44,39,36,25,38,35,37,12,11,38,37,33,36,37,36,39,38,37,40,12,38,13,30,0,28,34,30,29,35,34,37,11,35,38,3,2,1,1,0,30,3,1,30,31,3,30,4,3,31,31,30,34,32,4,31,5,4,32,35,31,34,32,31,35,7,6,5,7,5,32,8,7,32,10,32,35,9,8,32,10,9,32,11,10,35,42,39,25,24,42,25,29,28,27,30,28,29,33,27,26,36,33,26,29,27,33,34,29,33,25,36,26,34,33,37],"vertices":[2,29,18.87,27.41,0.21,40,2.66,-14.22,0.79,1,40,10.45,-17.06,1,1,40,21.87,-21.55,1,1,40,22.69,-15.49,1,1,40,31.97,-12.51,1,1,40,37.24,-11.15,1,1,40,41.21,-12.82,1,1,40,46.12,-5.63,1,1,40,44.95,0.13,1,1,40,48.34,6.3,1,1,40,38.86,10.3,1,1,40,35.17,19.44,1,1,41,36.7,1.89,1,1,42,34.52,-12.64,1,1,42,42.31,-2.98,1,1,42,49.8,6.43,1,1,42,46.12,8.75,1,1,43,45.39,-24.48,1,1,43,43.86,-18.46,1,1,43,48.14,-13.37,1,1,43,42.26,-8.56,1,1,43,48.24,0.65,1,1,43,36.47,3.57,1,1,43,24.36,6.57,1,2,29,-25.41,-33.7,0.38,43,6.12,11.09,0.62,1,29,-7.14,-27.64,1,1,29,9.95,-5.88,1,1,29,15.5,5.62,1,1,29,18.15,20.42,1,1,29,7.44,15.92,1,1,40,7.37,-3.99,1,1,40,21.53,-4.77,1,1,40,34.15,0.07,1,1,29,-2.69,7.84,1,2,29,-5.77,22.63,0.33333,40,8.39,10.21,0.66667,1,40,17.18,12.48,1,2,41,0.56,8.2,0.78,42,-0.62,-8.37,0.22,2,41,12.52,7.24,0.78,42,10.43,-13.04,0.22,2,41,26.99,6.4,0.78,42,23.91,-18.38,0.22,1,42,2.35,4.75,1,1,42,19.72,0.81,1,1,42,35.23,1.19,1,3,29,-25.99,-18.53,0.23,42,4.88,14.43,0.2233,43,5.7,-4.08,0.5467,2,42,14.28,17.8,0.29,43,15.61,-5.3,0.71,2,42,29.6,21.29,0.29,43,30.87,-9.08,0.71],"hull":29}},"Layer 22":{"orangegirl/Layer 22":{"type":"mesh","uvs":[0.48596,0.01436,0.42787,0.24563,0.30144,0.44982,0.04516,0.66859,0.09642,0.71652,0,0.93737,0,0.9978,0.40395,1,0.71148,0.8332,0.93701,0.81028,0.86183,0.57483,1,0.27688,1,0,0.79349,0,0.49279,0,0.29802,0.85403,0.49279,0.5915,0.69782,0.24771],"triangles":[6,15,7,7,15,8,6,5,15,5,4,15,15,16,8,15,4,2,8,10,9,4,3,2,15,2,16,8,16,10,2,1,16,16,17,10,16,1,17,10,17,11,17,13,11,13,12,11,1,0,17,17,0,13,13,0,14],"vertices":[1,30,-15.65,-16.51,1,2,30,3.31,-13.53,0.66667,44,-19.8,-17.87,0.33333,3,30,21.18,-14.48,0.33333,44,-2.01,-15.89,0.33333,45,-25.19,-19.8,0.33333,2,44,19.79,-19.16,0.33333,45,-3.15,-20.29,0.66667,1,45,-1.35,-15.96,1,1,45,16.33,-9.75,1,1,45,20.43,-6.96,1,1,45,9.2,9.84,1,1,45,-10.76,14.84,1,2,44,9.89,25.84,0.33333,45,-18.66,23.11,0.66667,3,30,22.46,15.33,0.33333,44,-5.6,13.72,0.33333,45,-32.5,9.13,0.33333,2,30,-2.92,14.51,0.66667,44,-30.51,8.78,0.33333,1,30,-24.55,7.63,1,1,30,-21.43,-2.21,1,1,30,-16.87,-16.54,1,1,45,2.29,-1.28,1,1,44,4,-2.09,1,1,30,-0.62,-0.62,1],"hull":15}},"Layer 23":{"orangegirl/Layer 23":{"type":"mesh","uvs":[0.77855,0,0.55612,0.10278,0.34981,0.31202,0.09837,0.47328,0,0.59038,0.11771,0.64029,0.08225,0.82842,0.15317,0.93592,0.28534,0.87257,0.41428,0.97815,0.73987,1,0.84625,0.79578,0.86559,0.57502,1,0.35234,1,0.13733,1,0,0.53356,0.79386,0.30468,0.65181,0.50132,0.48479,0.75599,0.22756,0.25955,0.49823],"triangles":[9,16,10,10,16,11,9,8,16,7,6,8,8,6,17,8,17,16,17,6,5,11,16,12,17,18,16,5,20,17,4,3,5,16,18,12,17,20,18,5,3,20,18,2,1,20,2,18,20,3,2,18,19,12,12,19,13,18,1,19,19,14,13,19,0,14,19,1,0,0,15,14],"vertices":[1,31,-8.72,-8.48,1,2,31,5.26,-13.7,0.66667,39,-18.55,-14.28,0.33333,2,31,26.85,-13.21,0.33333,39,3.04,-14.29,0.66667,2,39,22.16,-18.53,0.66667,47,1.2,-18.81,0.33333,2,39,33.79,-17.76,0.33333,47,12.85,-19.14,0.66667,1,47,14.24,-11.61,1,1,47,30.21,-6.24,1,1,47,37.3,1.2,1,1,47,29.23,5.17,1,1,47,34.86,15.33,1,1,47,29.34,31.8,1,2,39,26.88,30.18,0.33333,47,10.48,29.24,0.66667,3,31,32.39,22.35,0.33333,39,9.41,21.13,0.33333,47,-7.76,21.87,0.33333,2,31,11.78,17.99,0.66667,39,-11.29,17.25,0.33333,1,31,-4.49,7.93,1,1,31,-14.89,1.51,1,1,47,17.32,14.14,1,1,47,10.99,-2.19,1,1,39,12.25,0.41,1,1,31,9.14,1.15,1,1,39,19.76,-10.04,1],"hull":16}},"Layer 24":{"orangegirl/Layer 24":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[-5.68,-10.22,3.45,23.57,35.3,14.97,26.18,-18.82],"hull":4}},"Layer 25":{"orangegirl/Layer 25":{"type":"mesh","uvs":[1,1,0.31335,1,0.15715,1,0,1,0,0,1,0,0.15715,0.21761,0.31115,0.22671],"triangles":[0,7,5,2,7,1,0,1,7,7,2,6,2,3,6,3,4,6,5,7,4,7,6,4],"vertices":[-19.33,-33.18,-8.59,6.6,-6.15,15.65,-3.69,24.75,24.3,17.19,8.67,-40.73,15.76,9.74,13.09,0.88],"hull":6}},"Layer 26":{"orangegirl/Layer 26":{"type":"mesh","uvs":[1,1,0.53537,1,0,1,0,0,0.52769,0,1,0],"triangles":[1,5,0,2,4,1,1,4,5,2,3,4],"vertices":[-23.75,-36.12,-17.58,-13.25,-10.46,13.12,17.54,5.56,10.52,-20.42,4.24,-43.68],"hull":6}},"Layer 27":{"orangegirl/Layer 27":{"type":"mesh","uvs":[0.41059,0.00477,0.15411,0.1904,0.2345,0.31327,0.06606,0.54072,0,0.7734,0,0.95379,0.14645,1,0.4795,1,0.72068,0.73941,1,0.41262,1,0.07275,0.82534,0.03666,0.64794,0,0.39385,0.20542,0.60601,0.07116,0.29107,0.63216,0.66966,0.25482],"triangles":[6,15,7,7,15,8,15,6,4,6,5,4,4,3,15,15,16,8,8,16,9,15,13,16,3,2,15,15,2,13,16,10,9,2,1,13,16,11,10,13,14,16,16,14,11,13,0,14,13,1,0,14,12,11,14,0,12],"vertices":[-11.14,-20.71,8.66,-27.5,15.97,-19.24,36.85,-20.12,55.76,-15.61,69.23,-9.5,69.29,-0.47,61.59,16.52,36.55,19.99,5.68,23.17,-19.7,11.65,-18.35,1.52,-16.99,-8.77,4.23,-14.77,-10.7,-8.49,38.48,-5.55,1.54,0.97],"hull":13}},"Layer 28":{"orangegirl/Layer 28":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[-10.16,19.31,-1.98,59.49,71.51,44.53,63.34,4.36],"hull":4}},"Layer 29":{"orangegirl/Layer 29":{"x":8.88,"y":1.71,"scaleX":1.245,"scaleY":1.245,"rotation":121.13,"width":55,"height":33}},"Layer 30":{"orangegirl/Layer 30":{"type":"mesh","uvs":[0.85119,1.5E-4,0.50674,4.9E-4,0.15203,0.30903,0,0.75224,0,1,0.09745,1,0.43511,1,0.79324,0.64205,1,0.30413,1,0,0.36349,0.56614],"triangles":[5,10,6,6,10,7,10,5,3,5,4,3,3,2,10,8,10,0,8,7,10,10,1,0,10,2,1,0,9,8],"vertices":[-10.62,-4.32,-0.63,-20.82,30.24,-25.39,64.23,-14.8,80.78,-4.82,77.96,-0.14,68.18,16.04,33.91,18.78,5.37,15.07,-14.94,2.8,41.29,-4.88],"hull":10}},"Layer 31":{"orangegirl/Layer 31":{"type":"mesh","uvs":[0.69501,0.40595,0.31735,0.60724,0,0.9149,0.08528,0.97043,0.13069,1,0.35208,0.99611,0.76663,0.77194,1,0.58323,1,0.38994,0.47796,0.69645],"triangles":[4,3,5,5,9,6,5,3,9,3,1,9,3,2,1,7,6,8,8,6,9,9,1,0,9,0,8],"vertices":[-9.07,-12.7,37.65,-19.9,95.64,-12.38,98.75,-0.86,100.4,5.27,88.45,20.67,36.73,28.26,-0.84,26.4,-26.98,7.47,41.42,0.29],"hull":9}},"Layer 32":{"orangegirl/Layer 32":{"type":"mesh","uvs":[0.00316,0.1807,0.01148,0.65625,0.42929,1,0.74564,0.97323,1,0.60342,1,0.09138,0.56657,0,0,0,0.5606,0.46525],"triangles":[2,8,3,2,1,8,3,8,4,1,0,8,8,5,4,8,6,5,8,0,6,0,7,6],"vertices":[2.86,50.12,21.88,61.86,28.84,81.64,22.55,89.67,3.46,87.69,-17.17,75.29,-13.7,61.19,-4.36,45.65,5.13,72.29],"hull":8}},"Layer 33":{"orangegirl/Layer 33":{"type":"mesh","uvs":[1,0.10432,1,0.3342,0.86923,0.43068,0.84775,0.61411,0.68602,0.65059,0.70197,0.71774,0.53807,0.75189,0.54699,0.82256,0.44571,0.83328,0.42883,0.94405,0.34597,1,0.09124,1,0,0.93691,0,0.75347,0.06822,0.6963,0.04674,0.64032,0.10812,0.57362,0.0805,0.51287,0.18178,0.4283,0.15109,0.30681,0.32909,0.22105,0.33523,0.10908,0.50095,0,0.85235,0,0.32909,0.68201,0.52551,0.65223,0.40121,0.57362,0.65133,0.50453,0.46259,0.41043,0.62218,0.26035,0.81399,0.10789,0.21578,0.84424],"triangles":[11,31,10,10,31,9,11,12,31,9,31,8,31,13,14,31,12,13,31,24,8,31,14,24,6,8,24,8,6,7,6,24,25,25,24,26,6,4,5,6,25,4,14,16,24,14,15,16,24,16,26,4,25,27,27,25,28,4,27,3,3,27,2,16,18,26,16,17,18,25,26,28,26,18,28,28,29,27,27,29,2,29,30,2,2,30,1,18,20,28,18,19,20,28,20,29,30,0,1,20,21,29,21,22,29,29,22,30,30,23,0,30,22,23],"vertices":[-30.84,12.1,-2.67,29.04,16.63,23.71,40.34,35.18,54.06,22.48,61.38,28.95,74.94,15.87,83.09,21.93,90.2,13.08,104.74,19.64,116.34,15.88,130.9,-8.35,128.39,-21.68,105.91,-35.2,95,-32.92,89.37,-39.09,77.68,-38.16,71.82,-45.27,55.66,-41.86,42.53,-53.74,21.83,-43.12,7.76,-50.79,-15.09,-43.06,-35.18,-9.63,78.33,-9.16,63.45,7.33,60.92,-10.28,38.15,8.42,37.41,-16.47,9.89,-12.34,-19.77,-5.33,104.69,-7.98],"hull":24}},"Layer 34":{"orangegirl/Layer 34":{"type":"mesh","uvs":[0.16558,0,0,0.28639,0,0.63468,0.22356,0.54854,0.52029,0.68711,0.66354,1,0.81361,1,1,0.8107,1,0.33133,0.70106,0.02423,0.39751,0,0.30201,0.15906,0.66695,0.31635,0.85795,0.6609],"triangles":[7,6,13,6,5,13,5,4,13,13,8,7,4,12,13,4,3,12,13,12,8,2,1,3,3,11,12,3,1,11,12,9,8,11,10,12,12,10,9,1,0,11,11,0,10],"vertices":[1.21,-27.19,18.48,-26.13,32.87,-15.71,21.96,-8.15,17.94,9.46,26.16,25.31,21.23,32.12,7.29,34.91,-12.51,20.57,-15.38,-2.17,-6.41,-16.67,3.3,-16.24,-2.19,5.02,5.77,23.99],"hull":11}},"Layer 35":{"orangegirl/Layer 35":{"type":"mesh","uvs":[0,0.83001,0.21789,0.40926,0.40889,0.09369,0.5912,0,0.86323,0.02172,1,0.12137,1,0.40095,1,0.76634,0.86613,0.97395,0.67223,1,0.37705,0.92966,0.19763,1,0,1,0.12239,0.90475,0.33364,0.73313,0.57963,0.40095,0.60567,0.77465,0.79088,0.51998],"triangles":[10,16,9,9,16,8,12,13,11,11,13,10,12,0,13,8,16,7,13,14,10,10,14,16,13,0,14,0,1,14,14,15,16,16,17,7,16,15,17,17,6,7,14,1,15,17,15,6,1,2,15,15,4,6,4,5,6,15,3,4,15,2,3],"vertices":[67.08,-22.24,34.68,-22.84,9.55,-21.68,-1.73,-13.97,-8.66,2.66,-6.72,13.84,10.41,22.72,32.79,34.32,49.58,33.08,57.06,22.54,61.72,3.01,71.48,-5.26,77.49,-16.84,67.93,-12.7,51,-5.77,23.18,-1.91,45.28,11.48,24.05,14.25],"hull":13}},"Layer 36":{"orangegirl/Layer 36":{"type":"mesh","uvs":[0.74021,0.5485,0.42537,0.79568,0.25116,1,0,1,0,0.75261,0.21758,0.32567,0.3771,0.07288,0.69823,0.00921,0.9438,0.08224,0.98177,0.20369,1,0.262,1,0.58408,0.28685,0.57472,0.39809,0.39495,0.42327,0.27324,0.66675,0.12343,0.83676,0.1871,0.69193,0.44738,0.92491,0.3987,0.49044,0.54663,0.5633,0.34071,0.68884,0.24621],"triangles":[15,6,7,16,15,7,8,16,7,16,8,9,21,15,16,14,6,15,20,14,15,5,6,14,21,20,15,13,5,14,13,14,20,10,18,16,10,16,9,18,17,21,18,21,16,20,21,17,19,13,20,19,20,17,0,17,18,19,17,0,12,5,13,12,13,19,18,10,11,0,18,11,4,5,12,1,12,19,1,19,0,3,12,2,12,3,4,1,2,12],"vertices":[19.25,31.97,55.87,21.23,81.96,18.98,94.17,-0.34,72.85,-13.83,25.46,-20.37,-4.09,-21.89,-25.2,-0.66,-30.85,22.21,-22.23,31.75,-18.09,36.33,9.68,53.89,43.56,-1.47,22.65,-2.71,10.93,-7.41,-13.82,3.15,-16.6,19.69,12.88,22.75,-2.65,38.01,31.23,12.66,9.94,7.04,-4.31,11.54],"hull":12}},"Layer 37":{"orangegirl/Layer 37":{"type":"mesh","uvs":[0,0.22365,0.20224,0.46288,0.23399,0.77742,0.29749,0.94577,0.52085,0.94282,0.85538,0.93839,1,0.56182,1,0.18377,0.74653,0,0.23399,0,0,0.08779,0.46985,0.21036,0.5651,0.51456,0.53335,0.76266],"triangles":[4,3,13,4,13,5,13,3,2,5,13,6,6,13,12,13,2,12,12,2,1,12,7,6,1,11,12,7,11,8,7,12,11,1,9,11,1,0,9,0,10,9,11,9,8],"vertices":[15.92,-15.15,58.21,-9.38,112.07,-14.78,141.24,-15.09,142.39,-2.63,144.12,16.04,81,32.65,16.54,41.26,-16.67,31.38,-20.47,2.93,-7.24,-12.05,17.14,11.23,69.71,9.59,111.77,2.17],"hull":11}},"Layer 38":{"orangegirl/Layer 38":{"type":"mesh","uvs":[0,0.88159,0.29577,1,0.54309,1,0.98425,0.84274,1,0.53197,0.75699,0,0.48962,0,0.22225,0,0.12867,0.36761,0,0.56782,0.23562,0.73218,0.50967,0.46622],"triangles":[3,2,11,0,10,1,11,2,10,2,1,10,0,9,10,3,11,4,9,8,10,10,8,11,6,8,7,8,6,11,11,5,4,11,6,5],"vertices":[60.81,-16.13,70.35,-4.43,69.91,4.95,55.79,21.08,29.37,20.46,-15.37,9.15,-14.9,-1,-14.43,-11.15,16.95,-13.26,34.17,-17.36,47.71,-7.77,24.65,1.59],"hull":10}},"Layer 39":{"orangegirl/Layer 39":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[18.76,19.27,12.54,-27.32,-38.01,-20.56,-31.79,26.03],"hull":4}},"Layer 40":{"orangegirl/Layer 40":{"type":"mesh","uvs":[1,1,0.35851,1,0,1,0,0,0.37298,0,1,0],"triangles":[1,4,0,4,5,0,4,1,3,1,2,3],"vertices":[18.76,19.27,15.19,-7.43,13.2,-22.36,-25.46,-17.19,-23.38,-1.66,-19.89,24.44],"hull":6}},"Layer 41":{"orangegirl/Layer 41":{"type":"mesh","uvs":[0,0.3658,0.29578,0.76147,0.38952,0.91209,0.54373,1,0.75842,1,1,0.88401,1,0.64915,1,0.38749,1,0.08244,0.66771,0,0.45302,0,0.20507,0,0,0.06968,0.25345,0.22795,0.51349,0.59299,0.61026,0.86231,0.53164,0.06585,0.66771,0.07606,0.82797,0.22667,0.77354,0.30836,0.77656,0.53428,0.51652,0.19093,0.78261,0.7602,0.32113,0.1455,0.40923,0.30429],"triangles":[3,15,4,4,22,5,4,15,22,3,2,15,15,2,14,22,6,5,2,1,14,15,14,22,0,13,1,1,13,14,14,20,22,22,20,6,20,7,6,13,24,14,14,19,20,14,24,19,20,19,7,19,18,7,18,8,7,0,12,13,24,21,19,19,21,17,21,16,17,19,17,18,13,23,24,24,23,21,12,11,13,13,11,23,18,17,8,21,23,16,23,10,16,23,11,10,16,9,17,8,17,9,16,10,9],"vertices":[21.59,-37.26,103.14,-24.35,133.94,-21,153.16,-10.78,155.83,7.06,136.01,30.54,89.79,37.46,38.29,45.17,-21.74,54.16,-42.1,28.98,-44.77,11.15,-47.86,-9.45,-36.69,-28.54,-2.39,-12.15,72.69,-1.3,126.89,-1.2,-30.83,15.74,-27.13,26.74,4.5,35.62,19.9,28.69,64.4,22.28,-6.4,10.8,108.94,16.13,-17.78,-4.1,14.57,-1.46],"hull":13}},"Layer 42":{"orangegirl/Layer 42":{"type":"mesh","uvs":[0.16315,0.99898,0.44371,0.99724,0.79688,0.67428,1,0.36913,0.94653,0,0.61132,0,0.12047,0,0.10252,0.35132,0,0.77228,0,1,0.46167,0.52727],"triangles":[9,8,0,1,0,10,1,10,2,10,0,8,8,7,10,2,10,3,3,5,4,5,3,10,10,7,5,5,7,6],"vertices":[116.01,-0.96,113.69,12.3,69.89,22.53,29.48,26,-17.15,16.02,-14.63,0.13,-10.95,-23.14,33.95,-16.9,88.35,-13.27,117.37,-8.68,53.67,3.67],"hull":10}},"Layer 43":{"orangegirl/Layer 43":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[17.44,12.64,18.54,-7.33,-20.4,-9.48,-21.5,10.49],"hull":4}},"Layer 44":{"orangegirl/Layer 44":{"type":"mesh","uvs":[0.21904,1,0.69007,1,0.91616,0.73145,1,0.51546,1,0.07159,0.65709,0,0.41216,0,0.04476,0,0,0.20832,0,0.69974,0,0.803,0,1,0.14368,0.88799,0.30854,0.67597,0.10155,0.8105],"triangles":[5,4,3,6,8,7,13,8,6,9,8,13,5,13,6,14,10,9,5,3,13,2,13,3,13,14,9,12,14,13,12,11,10,12,10,14,0,12,13,11,12,0,1,13,2,0,13,1],"vertices":[115.28,-9.74,113.7,18.95,74.06,30.58,42.51,33.97,-21.76,30.43,-30.97,8.97,-30.15,-5.95,-28.92,-28.33,1.39,-29.39,72.54,-25.47,87.49,-24.65,116.01,-23.08,99.31,-15.22,68.06,-6.87,88.24,-18.4],"hull":12}},"Layer 45":{"orangegirl/Layer 45":{"type":"mesh","uvs":[0.73405,0.00381,0.55487,0.00802,0.45565,0.28794,0.30484,0.42272,0.13418,0.51602,0,0.65598,0,0.98774,0.06192,0.99033,0.29293,1,0.64218,1,1,0.8737,1,0.37606,0.89618,0,0.12228,0.72337,0.44374,0.54712,0.70568,0.37088],"triangles":[15,0,12,15,1,0,2,1,15,7,13,8,9,8,14,8,13,14,7,6,13,6,5,13,9,14,15,14,4,3,14,13,4,13,5,4,14,3,2,14,2,15,15,10,9,15,11,10,11,15,12],"vertices":[1,6,122.43,-4.39,1,1,6,124.43,-15.68,1,3,11,12.06,-18.5,0.33333,18,1.64,-24.95,0.33333,6,138.97,-19.81,0.33333,2,11,23.48,-21.03,0.33333,18,12.45,-20.47,0.66667,1,18,24.08,-18.24,1,1,18,33.89,-13.3,1,1,18,37.24,2.61,1,1,18,33.38,3.55,1,1,18,19.01,7.06,1,2,11,29.38,14.06,0.33333,18,-2.86,11.66,0.66667,2,11,9.22,26.55,0.66667,18,-26.54,10.31,0.33333,1,11,-8.59,9.89,1,1,6,120.63,5.83,1,1,18,26.91,-8.46,1,2,11,21.86,-10.38,0.33333,18,5,-12.67,0.66667,3,11,4.1,-4.04,0.33333,18,-13.18,-17.68,0.33333,6,140.48,-3.37,0.33333],"hull":13}},"Layer 46":{"orangegirl/Layer 46":{"type":"mesh","uvs":[1,1,0.75544,1,0.36729,1,0,1,0,0,1,0,0.36283,0.29905,0.74206,0.31786],"triangles":[6,4,5,7,6,5,3,4,6,2,6,7,3,6,2,0,1,7,2,7,1,0,7,5],"vertices":[9.01,25.17,10.5,15.75,12.87,0.8,15.11,-13.35,-21.44,-19.14,-27.54,19.38,-12.72,-3.43,-14.35,11.28],"hull":6}},"Layer 47":{"orangegirl/Layer 47":{"x":-9.9,"y":3.95,"rotation":99,"width":32,"height":31}},"Layer 48":{"orangegirl/Layer 48":{"type":"mesh","uvs":[0.28555,0.17551,0.15605,0.31275,0,0.51003,0,0.73877,0.17085,0.90746,0.52976,0.94463,0.79987,0.83598,0.92567,0.58437,1,0.35563,1,0,0.61116,0,0.17825,0.60724,0.42986,0.7645,0.44096,0.40138,0.64816,0.53862,0.74807,0.24413],"triangles":[15,9,8,15,10,9,8,7,15,13,10,15,4,12,5,5,12,6,4,11,12,4,3,11,12,14,6,3,2,11,6,14,7,12,13,14,12,11,13,2,1,11,7,14,15,11,1,13,14,13,15,1,0,13,13,0,10],"vertices":[1,23,1.15,-17.91,1,2,23,11.88,-21.14,0.66667,36,-9.34,-21.99,0.33333,2,23,26.81,-24.33,0.33333,36,5.84,-23.53,0.66667,1,36,19.45,-17,1,1,36,25.72,-4.32,1,1,36,20,13.24,1,1,36,7.58,22.55,1,2,23,15.78,21.84,0.66667,36,-10.17,21.15,0.33333,1,17,-14.61,-13.99,1,1,17,8.39,-18.68,1,1,17,12.35,0.75,1,1,36,7.69,-12.56,1,1,36,11.49,3.5,1,1,23,12.58,-5.49,1,1,36,-6.77,7.08,1,2,23,-2.4,5.84,0.46,17,-4.83,-2.87,0.54],"hull":11}},"Layer 49":{"orangegirl/Layer 49":{"type":"mesh","uvs":[0.01083,0.15096,0.11456,0.04188,0.28542,0,0.59203,0,0.84221,0.09707,0.97035,0.2377,1,0.41906,1,0.59255,0.91848,0.70031,0.92764,0.79231,0.83916,0.745,0.80713,0.79494,0.80713,0.88562,0.74611,0.85014,0.69729,0.90534,0.68356,0.97105,0.61644,0.95659,0.61492,1,0.54932,0.96579,0.53559,1,0.48525,0.99996,0.43796,0.92242,0.3922,0.8094,0.39372,0.59517,0.21829,0.41118,0.02914,0.32707,0,0.27581,0.49288,0.93162,0.49898,0.78574,0.56763,0.55969,0.60271,0.82385,0.66221,0.67271,0.69119,0.53209,0.78882,0.67929,0.81628,0.50581,0.76136,0.39672,0.90933,0.56363,0.92001,0.44798,0.89255,0.34152],"triangles":[17,18,16,18,19,27,19,20,27,20,21,27,15,16,14,16,18,30,18,27,30,16,30,14,27,21,28,14,30,13,13,11,12,22,23,28,27,28,30,21,22,28,30,31,13,11,31,33,11,13,31,30,28,31,11,33,10,10,8,9,28,29,31,10,33,8,33,36,8,31,32,33,33,32,34,31,29,32,8,36,7,36,34,37,32,29,35,32,35,34,34,35,37,35,38,37,33,34,36,36,37,7,35,29,3,37,38,6,35,4,38,28,23,29,23,24,29,37,6,7,29,24,3,3,24,2,38,5,6,24,0,1,24,1,2,35,3,4,38,4,5,26,0,25,24,25,0],"vertices":[1,35,23.4,71.59,1,1,35,34.06,56.68,1,1,35,34.33,36.78,1,1,35,25.38,3.63,1,1,35,5.89,-20.13,1,1,35,-15.5,-29.23,1,1,35,-39.12,-26.29,1,2,35,-60.9,-20.41,0.66667,46,-4.06,29.18,0.33333,3,35,-72.04,-7.94,0.25,38,45.23,21.8,0.25,46,11.3,22.58,0.5,1,46,22.91,25.64,1,1,46,18.55,14.82,1,2,46,25.56,12.4,0.75,48,-6.86,12.46,0.25,2,46,37.17,14.42,0.33333,48,4.54,15.47,0.66667,1,48,1.83,7.69,1,1,48,10.16,4.23,1,1,48,18.81,4.93,1,2,46,49.92,-5.04,0.25,48,18.92,-2.82,0.75,1,48,24.42,-1.54,1,1,48,21.99,-9.78,1,1,48,26.69,-10.13,1,1,48,28.12,-15.58,1,2,46,48.96,-25.5,0.33333,48,19.73,-23.28,0.66667,1,46,35.36,-33.06,1,1,35,-43.53,45.24,1,1,35,-15.32,57.97,1,1,35,0.76,75.58,1,1,35,8.04,76.99,1,2,46,49.09,-19.24,0.33333,48,19.31,-17.03,0.66667,3,38,62.1,-23.44,0.33333,46,30.29,-21.81,0.33333,48,0.8,-21.21,0.33333,2,38,31.99,-19.47,0.5,46,0.02,-19.26,0.5,2,46,33.18,-9.51,0.66667,48,2.63,-8.71,0.33333,2,38,45.25,-7.13,0.33333,46,12.68,-6.31,0.66667,2,38,26.7,-6.18,0.5,46,-5.89,-6.24,0.5,2,38,44.33,7.05,0.33333,46,11.1,7.81,0.66667,2,38,21.57,7.29,0.66667,46,-11.65,6.98,0.33333,1,38,8.26,-0.58,1,2,38,27.73,18.57,0.66667,46,-6.03,18.53,0.33333,1,38,12.66,17.88,1,1,38,-0.69,13.11,1],"hull":27}}}}],"animations":{"animation":{"bones":{"bone":{"rotate":[{"angle":-3.29,"curve":0.25,"c3":0.75},{"time":0.6667,"angle":-8.93,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-3.29}],"translate":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":5.12,"y":-17.72,"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 36":{"rotate":[{"angle":2.38,"curve":0.25,"c3":0.75},{"time":0.6667,"angle":15.54,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":2.38}],"translate":[{"x":-0.43,"y":7.36,"curve":0.25,"c3":0.75},{"time":0.6667,"x":-8.14,"y":-1.62,"curve":0.25,"c3":0.75},{"time":1.3333,"x":-0.43,"y":7.36}],"scale":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":0.961,"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 31":{"rotate":[{"angle":8.81,"curve":0.32,"c2":0.29,"c3":0.757},{"time":0.5333,"angle":-3.95,"curve":0.25,"c3":0.75},{"time":1.2,"angle":10.72,"curve":0.284,"c3":0.625,"c4":0.38},{"time":1.3333,"angle":8.81}],"scale":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":0.946,"y":1.032,"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 27":{"rotate":[{"angle":6.86,"curve":0.306,"c2":0.23,"c3":0.756},{"time":0.5667,"angle":19.05,"curve":0.25,"c3":0.75},{"time":1.2333,"angle":5.67,"curve":0.294,"c3":0.631,"c4":0.37},{"time":1.3333,"angle":6.86}],"translate":[{"x":1.93,"y":-4.54,"curve":0.25,"c3":0.75},{"time":0.6667,"x":1.32,"y":7.98,"curve":0.25,"c3":0.75},{"time":1.3333,"x":1.93,"y":-4.54}],"scale":[{"x":1.082,"curve":0.25,"c3":0.75},{"time":0.6667,"x":1.072,"curve":0.25,"c3":0.75},{"time":1.3333,"x":1.082}]},"Layer 30":{"rotate":[{"angle":-4.78,"curve":0.345,"c2":0.37,"c3":0.757},{"time":0.4667,"angle":-6.98,"curve":0.25,"c3":0.75},{"time":1,"angle":3.49,"curve":0.269,"c3":0.618,"c4":0.42},{"time":1.3333,"angle":-4.78}],"scale":[{"x":1.067,"curve":0.25,"c3":0.75},{"time":0.6667,"x":0.921,"curve":0.25,"c3":0.75},{"time":1.3333,"x":1.067}]},"Layer 14":{"rotate":[{"angle":-23.11,"curve":0.25,"c3":0.75},{"time":0.7,"angle":-9.69,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-23.11}],"translate":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":4.72,"y":-0.08,"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 41":{"rotate":[{"angle":8.96,"curve":0.25,"c3":0.75},{"time":0.6667,"angle":4.72,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":8.96}],"translate":[{"x":-5.63,"curve":0.25,"c3":0.75},{"time":0.6667,"x":6.07,"y":0.19,"curve":0.25,"c3":0.75},{"time":1.3333,"x":-5.63}],"scale":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":0.943,"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 44":{"rotate":[{"curve":0.25,"c3":0.75},{"time":0.6667,"angle":-4.91,"curve":0.25,"c3":0.75},{"time":1.3333}],"translate":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":-3.37,"y":-0.1,"curve":0.25,"c3":0.75},{"time":1.3333}],"scale":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":0.959,"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 37":{"rotate":[{"angle":3.73,"curve":0.25,"c3":0.75},{"time":0.6667,"angle":18.56,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":3.73}],"scale":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":0.999,"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 42":{"rotate":[{"curve":0.25,"c3":0.75},{"time":0.6667,"angle":17.71,"curve":0.25,"c3":0.75},{"time":1.3333}],"scale":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":0.983,"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 43":{"translate":[{"x":-0.08,"y":1.47,"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.6667,"x":-0.02,"y":0.21,"curve":0.375,"c2":0.5,"c3":0.75},{"time":1.3333,"x":-0.08,"y":1.47}],"scale":[{"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.6667,"y":1.165,"curve":0.375,"c2":0.5,"c3":0.75},{"time":1.3333}]},"bone2":{"rotate":[{"angle":-8.04,"curve":0.382,"c2":0.57,"c3":0.737},{"time":0.2333,"angle":-10.36,"curve":0.25,"c3":0.75},{"time":0.9,"angle":-2.75,"curve":0.244,"c3":0.646,"c4":0.59},{"time":1.3333,"angle":-8.04}],"translate":[{"x":5.72,"y":-6.44,"curve":0.25,"c3":0.75},{"time":0.6667,"x":6.24,"y":-5.26,"curve":0.25,"c3":0.75},{"time":1.3333,"x":5.72,"y":-6.44}]},"Layer 38":{"rotate":[{"curve":0.25,"c3":0.75},{"time":0.6667,"angle":-4.77,"curve":0.25,"c3":0.75},{"time":1.3333}],"scale":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":0.963,"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 45":{"rotate":[{"angle":4.52,"curve":0.25,"c3":0.75},{"time":0.6667,"angle":-3.42,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":4.52}],"scale":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":1.017,"curve":0.25,"c3":0.75},{"time":1.3333}]},"bone3":{"rotate":[{"angle":3.34,"curve":0.37,"c2":0.47,"c3":0.753},{"time":0.3667,"angle":4.13,"curve":0.25,"c3":0.75},{"time":1.0333,"angle":2.74,"curve":0.253,"c3":0.621,"c4":0.48},{"time":1.3333,"angle":3.34}],"translate":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":-1.11,"y":-1.7,"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 24":{"rotate":[{"angle":12.27,"curve":0.25,"c3":0.75},{"time":0.4667,"angle":11.62,"curve":0.25,"c3":0.75},{"time":1.1333,"angle":12.02,"curve":0.269,"c3":0.618,"c4":0.42},{"time":1.3333,"angle":12.27}],"translate":[{"x":-2.52,"y":7.99,"curve":0.25,"c3":0.75},{"time":0.6667,"x":-2.18,"y":10.17,"curve":0.25,"c3":0.75},{"time":1.3333,"x":-2.52,"y":7.99}]},"Layer 48":{"rotate":[{"angle":-16.95},{"time":0.2667,"angle":-6.82,"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.7667,"angle":0.08,"curve":0.244,"c3":0.694,"c4":0.77},{"time":1.3333,"angle":-16.95}],"scale":[{"x":0.918,"curve":0.25,"c3":0.75},{"time":0.6667,"x":0.918,"curve":0.25,"c3":0.75},{"time":1.3333,"x":0.918}]},"bone4":{"rotate":[{"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.6667,"angle":4.66,"curve":0.375,"c2":0.5,"c3":0.75},{"time":1.3333}],"translate":[{"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.6667,"x":-1.95,"y":2.02,"curve":0.375,"c2":0.5,"c3":0.75},{"time":1.3333}]},"Layer 15":{"rotate":[{"angle":23.52,"curve":0.289,"c2":0.17,"c3":0.755},{"time":0.6,"angle":18.31,"curve":0.25,"c3":0.75},{"time":1.2667,"angle":23.75,"curve":0.305,"c3":0.64,"c4":0.36},{"time":1.3333,"angle":23.52}]},"Layer 23":{"rotate":[{"angle":-4.94,"curve":0.25,"c3":0.75},{"time":0.6667,"angle":0.75,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-4.94}],"translate":[{"x":1.1,"y":-5.08,"curve":0.25,"c3":0.75},{"time":0.6667,"x":1.49,"y":2.01,"curve":0.25,"c3":0.75},{"time":1.3333,"x":1.1,"y":-5.08}]},"bone16":{"rotate":[{"angle":-8.61,"curve":0.382,"c2":0.58,"c3":0.731},{"time":0.2,"angle":-13.11,"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.8667,"angle":5.46,"curve":0.243,"c3":0.655,"c4":0.63},{"time":1.3333,"angle":-8.61}],"scale":[{"x":1.035,"curve":0.25,"c3":0.75},{"time":0.6667,"x":1.036,"curve":0.25,"c3":0.75},{"time":1.3333,"x":1.035}]},"Layer 16":{"translate":[{"x":3.17,"y":2.91,"curve":0.289,"c2":0.17,"c3":0.755},{"time":0.6,"x":-2.86,"y":-4.21,"curve":0.25,"c3":0.75},{"time":1.2667,"x":3.44,"y":3.22,"curve":0.305,"c3":0.64,"c4":0.36},{"time":1.3333,"x":3.17,"y":2.91}]},"Layer 17":{"translate":[{"x":1.34,"y":2.16,"curve":0.289,"c2":0.17,"c3":0.755},{"time":0.6,"x":-2.35,"y":-1.15,"curve":0.25,"c3":0.75},{"time":1.2667,"x":1.5,"y":2.31,"curve":0.305,"c3":0.64,"c4":0.36},{"time":1.3333,"x":1.34,"y":2.16}]},"Layer 18":{"rotate":[{"angle":-1.61,"curve":0.289,"c2":0.17,"c3":0.755},{"time":0.6,"angle":-4.54,"curve":0.25,"c3":0.75},{"time":1.2667,"angle":-1.48,"curve":0.305,"c3":0.64,"c4":0.36},{"time":1.3333,"angle":-1.61}],"translate":[{"x":4.57,"y":3.99,"curve":0.289,"c2":0.17,"c3":0.755},{"time":0.6,"x":-2.09,"y":-1.45,"curve":0.25,"c3":0.75},{"time":1.2667,"x":4.87,"y":4.23,"curve":0.305,"c3":0.64,"c4":0.36},{"time":1.3333,"x":4.57,"y":3.99}]},"Layer 19":{"rotate":[{"angle":-4.78,"curve":0.306,"c2":0.23,"c3":0.756},{"time":0.5667,"angle":-5.99,"curve":0.25,"c3":0.75},{"time":1.2333,"angle":-4.67,"curve":0.294,"c3":0.631,"c4":0.37},{"time":1.3333,"angle":-4.78}],"translate":[{"x":1.29,"y":0.73,"curve":0.306,"c2":0.23,"c3":0.756},{"time":0.5667,"x":-1.47,"y":-2.21,"curve":0.25,"c3":0.75},{"time":1.2333,"x":1.54,"y":1,"curve":0.294,"c3":0.631,"c4":0.37},{"time":1.3333,"x":1.29,"y":0.73}],"scale":[{"x":1.067,"y":0.839,"curve":0.306,"c2":0.23,"c3":0.756},{"time":0.5667,"x":1.067,"y":1.109,"curve":0.25,"c3":0.75},{"time":1.2333,"x":1.067,"y":0.815,"curve":0.294,"c3":0.631,"c4":0.37},{"time":1.3333,"x":1.067,"y":0.839}]},"Layer 20":{"translate":[{"x":2.14,"y":4.23,"curve":0.306,"c2":0.23,"c3":0.756},{"time":0.5667,"x":-2.8,"y":-2.33,"curve":0.25,"c3":0.75},{"time":1.2333,"x":2.47,"y":4.77,"curve":0.294,"c3":0.631,"c4":0.37},{"time":1.3333,"x":2.14,"y":4.23}]},"Layer 21":{"translate":[{"x":2.6,"y":2.14,"curve":0.369,"c2":0.63,"c3":0.706},{"time":0.1,"x":2.71,"y":2.38,"curve":0.25,"c3":0.75},{"time":0.7667,"x":1.35,"y":-0.56,"curve":0.244,"c3":0.694,"c4":0.77},{"time":1.3333,"x":2.6,"y":2.14}]},"Layer 22":{"rotate":[{"angle":-5.51,"curve":0.369,"c2":0.63,"c3":0.706},{"time":0.1,"angle":-6.05,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.7667,"angle":0.53,"curve":0.244,"c3":0.694,"c4":0.77},{"time":1.3333,"angle":-5.51}],"translate":[{"x":4.7,"y":7.63,"curve":0.369,"c2":0.63,"c3":0.706},{"time":0.1,"x":4.36,"y":8.55,"curve":0.369,"c2":0.63,"c3":0.706},{"time":0.7667,"x":0.47,"y":-1.63,"curve":0.244,"c3":0.694,"c4":0.77},{"time":1.3333,"x":4.7,"y":7.63}],"scale":[{"y":1.127}]},"Layer 34":{"rotate":[{"curve":0.25,"c3":0.75},{"time":0.6667,"angle":-9.12,"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 35":{"rotate":[{"angle":-2.31,"curve":0.295,"c2":0.2,"c3":0.647,"c4":0.6},{"time":0.4667,"angle":-14.3,"curve":0.25,"c3":0.75},{"time":1.1333,"curve":0.294,"c3":0.631,"c4":0.37},{"time":1.3333,"angle":-2.31}]},"bone11":{"rotate":[{"angle":-2.13,"curve":0.31,"c2":0.26,"c3":0.655,"c4":0.63},{"time":0.3667,"angle":1.75,"curve":0.25,"c3":0.75},{"time":1.0333,"angle":-3.87,"curve":0.28,"c3":0.623,"c4":0.39},{"time":1.3333,"angle":-2.13}],"translate":[{"x":0.12,"y":5.45,"curve":0.25,"c3":0.75},{"time":0.6667,"x":-0.38,"y":-0.72,"curve":0.25,"c3":0.75},{"time":1.3333,"x":0.12,"y":5.45}]},"bone14":{"rotate":[{"angle":2.82,"curve":0.382,"c2":0.58,"c3":0.731},{"time":0.2,"angle":-3.37,"curve":0.25,"c3":0.75},{"time":0.8667,"angle":22.19,"curve":0.243,"c3":0.655,"c4":0.63},{"time":1.3333,"angle":2.82}]},"Layer 33":{"translate":[{"x":-4.52,"y":8.38}]},"bone12":{"rotate":[{"angle":-3.95,"curve":0.25,"c3":0.75},{"time":0.6667,"angle":25.25,"curve":0.25,"c3":0.75},{"time":1.3333,"angle":-3.95}]},"bone15":{"rotate":[{"angle":-4.7,"curve":0.379,"c2":0.52,"c3":0.747},{"time":0.3,"angle":-20.33,"curve":0.25,"c3":0.75},{"time":0.9667,"angle":15.68,"curve":0.247,"c3":0.63,"c4":0.53},{"time":1.3333,"angle":-4.7}]},"bone5":{"rotate":[{"angle":-3.34,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.4,"angle":6.09,"curve":0.25,"c3":0.75},{"time":1.0667,"angle":-10.87,"curve":0.25,"c3":0.625,"c4":0.5},{"time":1.3333,"angle":-3.34}],"translate":[{"x":-2.14,"y":-3.26,"curve":0.25,"c3":0.75},{"time":0.6667,"x":0.01,"y":2.36,"curve":0.25,"c3":0.75},{"time":1.3333,"x":-2.14,"y":-3.26}]},"bone6":{"rotate":[{"angle":-9.27,"curve":0.32,"c2":0.29,"c3":0.757},{"time":0.5333,"angle":11.66,"curve":0.294,"c3":0.631,"c4":0.37},{"time":1.2,"angle":-12.4,"curve":0.284,"c3":0.625,"c4":0.38},{"time":1.3333,"angle":-9.27}],"translate":[{"x":3.31,"y":2.98,"curve":0.25,"c3":0.75},{"time":0.6667,"x":5.46,"y":8.61,"curve":0.25,"c3":0.75},{"time":1.3333,"x":3.31,"y":2.98}]},"bone7":{"rotate":[{"angle":0.28,"curve":0.379,"c2":0.52,"c3":0.747},{"time":0.3,"angle":4.51,"curve":0.25,"c3":0.625,"c4":0.5},{"time":0.9667,"angle":-5.24,"curve":0.247,"c3":0.63,"c4":0.53},{"time":1.3333,"angle":0.28}]},"bone8":{"rotate":[{"angle":354.93,"curve":0.271,"c2":0.09,"c3":0.753},{"time":0.6333,"angle":4.51,"curve":0.25,"c3":0.625,"c4":0.5},{"time":1.3,"angle":354.76,"curve":0.318,"c3":0.652,"c4":0.34},{"time":1.3333,"angle":354.93}],"translate":[{"x":-4.31,"y":-4.88}]},"bone9":{"rotate":[{"angle":-1.31,"curve":0.379,"c2":0.6,"c3":0.724},{"time":0.1667,"angle":-5.55,"curve":0.333,"c2":0.33,"c3":0.758},{"time":0.8333,"angle":17.45,"curve":0.242,"c3":0.667,"c4":0.67},{"time":1.3333,"angle":-1.31}]},"bone10":{"rotate":[{"angle":-10.84,"curve":0.372,"c2":0.62,"c3":0.711},{"time":0.2333,"angle":-14.88,"curve":0.25,"c3":0.75},{"time":0.9,"angle":4.71,"curve":0.35,"c2":0.39,"c3":0.7,"c4":0.78},{"time":1.3333,"angle":-10.84}]},"bone13":{"rotate":[{"angle":-2.93,"curve":0.369,"c2":0.63,"c3":0.706},{"time":0.1,"angle":-3.87,"curve":0.25,"c3":0.75},{"time":0.7667,"angle":7.52,"curve":0.244,"c3":0.694,"c4":0.77},{"time":1.3333,"angle":-2.93}]},"bone17":{"rotate":[{"angle":11.45,"curve":0.34,"c2":0.66,"c3":0.674},{"time":0.2333,"angle":0.29,"curve":0.25,"c3":0.75},{"time":0.7667,"angle":3.49,"curve":0.362,"c2":0.55,"c3":0.699,"c4":0.91},{"time":1.3333,"angle":11.45}],"translate":[{"x":-1.26,"y":6.76,"curve":0.34,"c2":0.66,"c3":0.674},{"time":0.2333,"x":-1.93,"y":6.82,"curve":0.25,"c3":0.75},{"time":0.7667,"x":-3.49,"y":-4.86,"curve":0.362,"c2":0.55,"c3":0.699,"c4":0.91},{"time":1.3333,"x":-1.26,"y":6.76}]}},"deform":{"default":{"Layer 14":{"orangegirl/Layer 14":[{"offset":10,"vertices":[0.17511,-2.19607,0.52448,-2.14304,-4.80162,-6.29134,0.95139,-7.86011,2.22595,-7.59804,-0.93208,-6.63786,4.04083,-5.33596,-0.20708,1.32806,1.10863,-0.86313,-3.25075,-4.47073,-3.25075,-4.47073,-3.25075,-4.47073,-3.25075,-4.47073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.19748,-0.0247,-0.138,-0.14343,0,0,0,0,6.4454,-0.05251,6.32904,1.21796,5.03868,-3.78267,6.3074,-0.19594,6.21939,1.05187,1.82692,5.58286,-1.72516,5.61504,-5.66851,-4.87488,1.47644,7.32932,-1.41998,-1.06506,0.46576,1.71289,-0.70397,-0.7038,0,0,0,0,-0.19748,-0.0247,-0.138,-0.14343,-0.10965,-0.16609],"curve":0.25,"c3":0.75},{"time":0.6667,"offset":8,"vertices":[3.21011,-7.31416,0.30215,-10.24179,2.29907,-9.99156,-7.47295,-11.53435,1.6431,-13.70501,4.10159,-13.1768,-2.4946,-9.70241,4.44513,-8.75349,3.99944,3.22092,-1.83356,-4.41431,3.98488,4.11566,0,0,0,0,0,0,0,0,-3.04341,-0.52341,-3.04341,-0.52341,2.50107,1.81155,0,0,0,0,-1.55475,-3.03104,0.19421,-3.40125,-1.75223,-3.05574,0.05621,-3.54467,3.97983,-2.53079,4.35513,-1.81149,-2.37274,-23.6548,2.53244,-23.63902,-11.65488,-15.18803,-1.57919,-18.89253,2.32803,-18.81264,-8.59618,-7.26733,-3.55481,-11.34726,9.85075,1.41199,-8.55498,-6.25031,4.59882,1.33939,-3.53877,-3.22513,7.99583,1.88739,0,0,0,0,-11.00572,-3.26353,-7.83453,-7.96437,-6.01007,-9.47874],"curve":0.25,"c3":0.75},{"time":1.3333,"offset":10,"vertices":[0.17511,-2.19607,0.52448,-2.14304,-4.80162,-6.29134,0.95139,-7.86011,2.22595,-7.59804,-0.93208,-6.63786,4.04083,-5.33596,-0.20708,1.32806,1.10863,-0.86313,-3.25075,-4.47073,-3.25075,-4.47073,-3.25075,-4.47073,-3.25075,-4.47073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.19748,-0.0247,-0.138,-0.14343,0,0,0,0,6.4454,-0.05251,6.32904,1.21796,5.03868,-3.78267,6.3074,-0.19594,6.21939,1.05187,1.82692,5.58286,-1.72516,5.61504,-5.66851,-4.87488,1.47644,7.32932,-1.41998,-1.06506,0.46576,1.71289,-0.70397,-0.7038,0,0,0,0,-0.19748,-0.0247,-0.138,-0.14343,-0.10965,-0.16609]}]},"Layer 15":{"orangegirl/Layer 15":[{"vertices":[0.05713,0.04374,0.05713,0.04374,0.05713,0.04374,0.05713,0.04374,0.20074,0.81644,2.03446,3.1747,1.51574,3.9942,3.08138,1.8079,3.81697,3.18871,3.91774,3.2642,2.97876,2.53714,0.05713,0.04374,0.05713,0.04374,0.05713,0.04374,1.33739,1.54935,1.29132,1.50873,-1.04889,1.3038,4.44944,4.65007,3.6851,4.91736,1.47034,3.96105,2.74986,4.77454,0.99611,0.7708,0.05713,0.04374,0.05713,0.04374],"curve":0.289,"c2":0.17,"c3":0.755},{"time":0.6,"vertices":[0.53452,0.40937,0.53452,0.40937,0.53452,0.40937,0.53452,0.40937,0.53452,0.40937,0.53452,0.40937,0.53452,0.40937,0.53452,0.40937,-1.83365,-1.3646,0.53452,0.40937,0.53452,0.40937,0.53452,0.40937,0.53452,0.40937,0.53452,0.40937,-0.92941,-0.72367,-2.01215,-1.67831,-3.64355,-2.92789,-3.64355,-2.92789,-3.64355,-2.92789,-0.92941,-0.72367,-0.92941,-0.72367,0.53452,0.40937,0.53452,0.40937,0.53452,0.40937],"curve":0.25,"c3":0.75},{"time":1.2667,"vertices":[0.03591,0.02749,0.03591,0.02749,0.03591,0.02749,0.03591,0.02749,0.18591,0.83453,2.10113,3.2976,1.55935,4.15352,3.19457,1.87005,4.06811,3.39108,4.06811,3.39108,3.0874,2.63171,0.03591,0.02749,0.03591,0.02749,0.03591,0.02749,1.43814,1.65037,1.43814,1.65037,-0.93357,1.49187,4.80913,4.98687,4.01082,5.26604,1.57699,4.16926,2.91339,5.0189,1.01663,0.78686,0.03591,0.02749,0.03591,0.02749],"curve":0.305,"c3":0.64,"c4":0.36},{"time":1.3333,"vertices":[0.05713,0.04374,0.05713,0.04374,0.05713,0.04374,0.05713,0.04374,0.20074,0.81644,2.03446,3.1747,1.51574,3.9942,3.08138,1.8079,3.81697,3.18871,3.91774,3.2642,2.97876,2.53714,0.05713,0.04374,0.05713,0.04374,0.05713,0.04374,1.33739,1.54935,1.29132,1.50873,-1.04889,1.3038,4.44944,4.65007,3.6851,4.91736,1.47034,3.96105,2.74986,4.77454,0.99611,0.7708,0.05713,0.04374,0.05713,0.04374]}]},"Layer 16":{"orangegirl/Layer 16":[{"vertices":[0.9121,0.82552,0.92126,0.81582,2.52534,1.22618,2.52295,1.20771,2.51262,1.20082,2.49355,1.20391,0.16291,-0.85973,0.16623,-0.83927,0.16916,-0.82127,0.79329,0.15807,0.91538,0.79434],"curve":0.289,"c2":0.17,"c3":0.755},{"time":0.6,"vertices":[1.2908,-0.87923,1.5062,-1.1071,1.76471,-1.35269,1.70865,-1.78668,1.46585,-1.94864,1.01779,-1.87585,0.81393,-1.7321,0.89212,-1.25122,0.96082,-0.82834,1.12457,-1.37596,1.36801,-1.61189],"curve":0.25,"c3":0.75},{"time":1.2667,"vertices":[0.89526,0.90129,0.89526,0.90129,2.55914,1.34079,2.55914,1.34079,2.55914,1.34079,2.55914,1.34079,0.13397,-0.82096,0.13397,-0.82096,0.13397,-0.82096,0.77856,0.22625,0.89526,0.90129],"curve":0.305,"c3":0.64,"c4":0.36},{"time":1.3333,"vertices":[0.9121,0.82552,0.92126,0.81582,2.52534,1.22618,2.52295,1.20771,2.51262,1.20082,2.49355,1.20391,0.16291,-0.85973,0.16623,-0.83927,0.16916,-0.82127,0.79329,0.15807,0.91538,0.79434]}]},"Layer 17":{"orangegirl/Layer 17":[{"vertices":[-0.02612,-0.0221,2.51111,3.61754,-0.24831,6.10068,3.29332,3.26915,2.711,1.37508,0.91052,-0.50553,0.03102,-2.7848,2.93593,-3.04771,1.45369,-3.00921,0.64013,-1.34791,0.4117,0.57261],"curve":0.289,"c2":0.17,"c3":0.755},{"time":0.6,"vertices":[-0.61389,-0.51936,-0.35211,0.0471,0.20587,1.38501,0.20587,1.38501,0.95459,1.09768,0,0,0.91437,-0.06736,3.56116,-0.61594,2.07892,-0.57745,0,0,0.95459,1.09768],"curve":0.25,"c3":0.75},{"time":1.2667,"offset":2,"vertices":[2.63837,3.77623,-0.26849,6.31027,3.43054,3.35289,2.78906,1.38741,0.95099,-0.528,-0.00824,-2.90557,2.90814,-3.15578,1.4259,-3.11729,0.66858,-1.40781,0.38757,0.54927],"curve":0.305,"c3":0.64,"c4":0.36},{"time":1.3333,"vertices":[-0.02612,-0.0221,2.51111,3.61754,-0.24831,6.10068,3.29332,3.26915,2.711,1.37508,0.91052,-0.50553,0.03102,-2.7848,2.93593,-3.04771,1.45369,-3.00921,0.64013,-1.34791,0.4117,0.57261]}]},"Layer 18":{"orangegirl/Layer 18":[{"vertices":[-1.64929,5.69569,-0.32039,0.09671,-1.34393,0.21388,-1.39415,4.37973],"curve":0.289,"c2":0.17,"c3":0.755},{"time":0.6,"curve":0.25,"c3":0.75},{"time":1.2667,"vertices":[-1.7226,5.94883,-0.33463,0.101,-1.40366,0.22338,-1.45612,4.57438],"curve":0.305,"c3":0.64,"c4":0.36},{"time":1.3333,"vertices":[-1.64929,5.69569,-0.32039,0.09671,-1.34393,0.21388,-1.39415,4.37973]}]},"Layer 21":{"orangegirl/Layer 21":[{"vertices":[-2.90479,-2.39697,-1.134,3.66266,0.31714,1.62515,-0.5188,2.08878,1.09491,0.21213,0.34814,0.07742,-0.07333,0.02658,-0.36234,0.19601,-0.81573,-0.30927,-0.78293,-0.7948,-1.1073,-1.23572,-0.41614,-1.64166,0.54056,-1.37823,0,0,-0.2403,-0.06383,0.27606,-3.58043,0.55835,-3.22539,0.41931,-3.13789,-0.50146,-2.8946,-0.55951,-2.66772,0.0838,-2.79983,-0.33167,-2.46046,0.09045,-1.80918,-0.74121,-1.60297,-1.59729,-1.39085,2.06073,1.53607,-2.02728,-1.58291,1.81671,2.23145,0,0,-3.68341,-1.35974,-4.42084,-3.32454,-0.57959,1.85233,1.19217,0.15677,1.07611,-0.65573,0.05243,-0.89981,0.62201,0.87703,2.79114,3.62211,2.39505,-3.89417,2.155,-3.93097,-0.31897,-0.48169,-0.47675,-0.32455,-0.04495,-1.13504,-0.47058,-1.03294,-0.19879,-0.15076,-0.2403,-0.06383,-1.23187,-3.28895,-0.57678,-3.43739,0.00861,-3.42311,2.08984,2.13651,-1.10358,-2.77767,-2.04309,-2.18386,-1.28052,-2.98283,-2.28387,-2.31008,-0.18518,-2.809,-1.19934,-2.54776],"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[-0.88708,1.90549,2.12082,0.14493,1.87054,0.23218,1.52231,0.3605,-0.4801,1.71707,-0.75974,1.62006,-0.91898,1.57486,-1.03986,1.62302,-1.18527,1.40076,-1.32712,2.16837,-1.42679,1.97842,-1.13763,1.86362,-1.32846,2.34338,0.43439,3.01584,2.36871,4.86619,2.36871,4.86619,2.36871,4.86619,2.36871,4.86619,3.8139,1.53864,1.82956,0.38965,1.82956,0.38965,1.82956,0.38965,-0.38129,-2.6877,-0.38129,-2.6877,-0.38129,-2.6877,-0.00568,2.71428,-0.38129,-2.6877,-0.34033,-0.43988,0,0,0,0,-0.86298,2.16551,-0.78674,-0.54812,-0.18985,2.31973,-0.6199,2.33389,-0.99973,2.17792,-1.69135,-1.57591,-1.69135,-1.57591,-0.7504,2.18674,-1.04932,3.05652,0.8233,3.01532,1.25153,2.86418,1.638,5.1584,2.36871,4.86619,1.638,5.1584,2.36871,4.86619,2.36871,4.86619,2.36871,4.86619,2.36871,4.86619,-1.75458,-0.64642,1.37177,1.27076,1.82956,0.38965,1.37177,1.27076,1.82956,0.38965,1.37177,1.27076,1.82956,0.38965],"curve":0.25,"c3":0.75},{"time":1.3333,"vertices":[-2.90479,-2.39697,-1.134,3.66266,0.31714,1.62515,-0.5188,2.08878,1.09491,0.21213,0.34814,0.07742,-0.07333,0.02658,-0.36234,0.19601,-0.81573,-0.30927,-0.78293,-0.7948,-1.1073,-1.23572,-0.41614,-1.64166,0.54056,-1.37823,0,0,-0.2403,-0.06383,0.27606,-3.58043,0.55835,-3.22539,0.41931,-3.13789,-0.50146,-2.8946,-0.55951,-2.66772,0.0838,-2.79983,-0.33167,-2.46046,0.09045,-1.80918,-0.74121,-1.60297,-1.59729,-1.39085,2.06073,1.53607,-2.02728,-1.58291,1.81671,2.23145,0,0,-3.68341,-1.35974,-4.42084,-3.32454,-0.57959,1.85233,1.19217,0.15677,1.07611,-0.65573,0.05243,-0.89981,0.62201,0.87703,2.79114,3.62211,2.39505,-3.89417,2.155,-3.93097,-0.31897,-0.48169,-0.47675,-0.32455,-0.04495,-1.13504,-0.47058,-1.03294,-0.19879,-0.15076,-0.2403,-0.06383,-1.23187,-3.28895,-0.57678,-3.43739,0.00861,-3.42311,2.08984,2.13651,-1.10358,-2.77767,-2.04309,-2.18386,-1.28052,-2.98283,-2.28387,-2.31008,-0.18518,-2.809,-1.19934,-2.54776]}]},"Layer 22":{"orangegirl/Layer 22":[{"vertices":[-1.41529,-2.65146,-1.41529,-2.65146,-1.41026,-2.65368,0.14924,-1.82706,0.38905,-1.67817,0.78579,-1.35932,0.77496,-0.52392,1.02335,-0.16566,1.02335,-0.16566,-0.04325,0.11212,-0.04325,0.11212,0.19097,1.11263,0.60313,-0.28845,1.43708,0.24514,1.40656,0.42362,1.30439,2.14153,1.34515,2.13195,1.07679,2.28388,0.95689,2.28675,0.98195,2.27814,4.33189,1.51671,0.1188,0.0155,-1.41529,-2.65146,0.07224,1.96753,0.34628,3.215,0.1188,0.0155],"curve":0.369,"c2":0.63,"c3":0.706},{"time":0.1,"vertices":[-1.39244,-2.7675,-1.39244,-2.7675,-1.38792,-2.76978,0.1721,-1.9431,0.41139,-1.79427,0.82904,-1.47144,0.7973,-0.64002,1.0666,-0.27778,1.0666,-0.27778,0,0,0,0,-0.03311,1.30172,0.37905,-0.09935,1.2497,0.45912,1.18249,0.61271,1.11612,2.35498,1.15776,2.34593,0.85271,2.47297,0.76863,2.5002,0.79456,2.49212,4.14363,1.73016,0,0,-1.39244,-2.7675,-0.04249,1.93824,0.2274,3.19983],"curve":0.25,"c3":0.75},{"time":0.7667,"vertices":[-1.66783,-1.36916,-1.66783,-1.36916,-1.65721,-1.37068,-0.1033,-0.54476,0.14211,-0.39517,0.3078,-0.12024,0.52801,0.75908,0.54536,1.07342,0.54536,1.07342,-0.52124,1.3512,-0.52124,1.3512,2.66733,-0.9771,3.07949,-2.37818,3.50791,-2.11961,3.88293,-1.66611,3.38492,-0.21736,3.41597,-0.2328,3.55315,0.19415,3.03743,-0.07215,3.05277,-0.08661,6.41243,-0.84218,1.43164,0.18686,-1.66783,-1.36916,1.34023,2.29132,1.66007,3.38265,1.43164,0.18686],"curve":0.244,"c3":0.694,"c4":0.77},{"time":1.3333,"vertices":[-1.41529,-2.65146,-1.41529,-2.65146,-1.41026,-2.65368,0.14924,-1.82706,0.38905,-1.67817,0.78579,-1.35932,0.77496,-0.52392,1.02335,-0.16566,1.02335,-0.16566,-0.04325,0.11212,-0.04325,0.11212,0.19097,1.11263,0.60313,-0.28845,1.43708,0.24514,1.40656,0.42362,1.30439,2.14153,1.34515,2.13195,1.07679,2.28388,0.95689,2.28675,0.98195,2.27814,4.33189,1.51671,0.1188,0.0155,-1.41529,-2.65146,0.07224,1.96753,0.34628,3.215,0.1188,0.0155]}]},"Layer 24":{"orangegirl/Layer 24":[{"vertices":[1.03632,3.57697,1.03632,3.57697,1.03632,3.57697,1.03632,3.57697],"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[-0.11575,-2.44227,-0.11575,-2.44227,-0.11575,-2.44227,-0.11575,-2.44227],"curve":0.25,"c3":0.75},{"time":1.3333,"vertices":[1.03632,3.57697,1.03632,3.57697,1.03632,3.57697,1.03632,3.57697]}]},"Layer 25":{"orangegirl/Layer 25":[{"offset":4,"vertices":[1.63474,4.13668,0,0,0,0,0,0,1.63474,4.13668],"curve":0.25,"c3":0.75},{"time":0.6667,"offset":2,"vertices":[-6.68701,-15.23603,-4.32626,-5.36677,-5.27972,-0.23512,-3.95526,0.68173,5.90005,0.2447,-4.32626,-5.36677,-6.68701,-15.23603],"curve":0.25,"c3":0.75},{"time":1.3333,"offset":4,"vertices":[1.63474,4.13668,0,0,0,0,0,0,1.63474,4.13668]}]},"Layer 26":{"orangegirl/Layer 26":[{"offset":4,"vertices":[0.88678,4.40195,0.88678,4.40195],"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[4.33743,-0.82659,-2.81589,-10.9244,-7.0061,-10.98568,-7.0061,-10.98568,-2.81589,-10.9244,4.30136,2.33356],"curve":0.25,"c3":0.75},{"time":1.3333,"offset":4,"vertices":[0.88678,4.40195,0.88678,4.40195]}]},"Layer 27":{"orangegirl/Layer 27":[{"vertices":[-1.65826,4.19098,-1.65826,4.19098,-2.5343,1.63101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.5343,1.63101],"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[4.39368,0.07538,4.57755,0.19751,4.57889,1.21092,0,0,0,0,0,0,0.33313,5.49666,0,0,2.51675,6.08661,2.73044,7.72655,0,0,0.58063,0.52634,4.68658,-2.36279,5.24503,2.43059,4.87222,1.45609,3.86349,5.86345,0.33313,5.49666],"curve":0.25,"c3":0.75},{"time":1.3333,"vertices":[-1.65826,4.19098,-1.65826,4.19098,-2.5343,1.63101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.5343,1.63101]}]},"Layer 28":{"orangegirl/Layer 28":[{"vertices":[-19.55502,-13.24926,-8.63733,8.43211,-1.10889,-2.2411,-1.10889,-2.2411],"curve":0.247,"c3":0.63,"c4":0.53},{"time":0.3667,"vertices":[-26.89351,-21.43072,-12.24606,14.16291,-2.03648,-3.40041,-0.48118,-0.97248],"curve":0.248,"c3":0.628,"c4":0.51},{"time":0.7,"vertices":[-31.30139,-32.22338,-15.68004,9.43523,-0.52036,-1.05166,-0.52036,-1.05166],"curve":0.377,"c2":0.51,"c3":0.748},{"time":1,"vertices":[-26.03697,-20.47579,-18.66742,5.32239,-0.55444,-1.12055,-0.55444,-1.12055],"curve":0.375,"c2":0.5,"c3":0.75},{"time":1.3333,"vertices":[-19.55502,-13.24926,-8.63733,8.43211,-1.10889,-2.2411,-1.10889,-2.2411]}]},"Layer 30":{"orangegirl/Layer 30":[{"vertices":[0.24055,-2.46506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.24055,-2.46506],"curve":0.25,"c3":0.75},{"time":0.6667,"offset":2,"vertices":[-1.55801,2.72546,0,0,2.01685,-2.15363,2.01685,-2.15363,0.46167,3.11702,2.01685,-2.15363,2.01685,-2.15363,0,0,0,0,3.97678,3.80516],"curve":0.25,"c3":0.75},{"time":1.3333,"vertices":[0.24055,-2.46506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.24055,-2.46506]}]},"Layer 31":{"orangegirl/Layer 31":[{"vertices":[-1.73892,2.13925,0,0,0,0,0.21997,-1.99396,0,0,0,0,0,0,0,0,0.21997,-1.99396,0.21997,-1.99396],"curve":0.25,"c3":0.75},{"time":0.6667,"offset":6,"vertices":[0.5916,7.64511,0,0,0.9623,6.40926,0,0,0,0,0.36682,3.34332,-7.57501,5.45633],"curve":0.25,"c3":0.75},{"time":1.3333,"vertices":[-1.73892,2.13925,0,0,0,0,0.21997,-1.99396,0,0,0,0,0,0,0,0,0.21997,-1.99396,0.21997,-1.99396]}]},"Layer 32":{"orangegirl/Layer 32":[{"offset":2,"vertices":[-2.40073,-0.84612,-2.35554,-0.71766,-2.39641,-0.66554,0,0,-2.25375,1.12057,-2.25375,1.12057,-2.46265,1.17606],"curve":0.369,"c2":0.63,"c3":0.706},{"time":0.1,"offset":2,"vertices":[-2.42554,-0.8576,-2.42554,-0.8576,-2.42554,-0.8576,0,0,-2.46265,1.17606,-2.46265,1.17606,-2.46265,1.17606],"curve":0.25,"c3":0.75},{"time":0.7667,"offset":2,"vertices":[-2.12654,-0.71918,-1.58203,0.82889,-2.07446,1.457,0,0,0.05484,0.50739,0.05484,0.50739,-2.46265,1.17606],"curve":0.244,"c3":0.694,"c4":0.77},{"time":1.3333,"offset":2,"vertices":[-2.40073,-0.84612,-2.35554,-0.71766,-2.39641,-0.66554,0,0,-2.25375,1.12057,-2.25375,1.12057,-2.46265,1.17606]}]},"Layer 33":{"orangegirl/Layer 33":[{"vertices":[0.43114,-0.19184,0.9033,-1.09897,5.15075,-1.96879,0.00768,-0.11738,-1.92547,0.27115,0,0,0.07174,0.46108,-0.26543,0.34669,-0.37443,-1.1928,-0.28503,0.65508,0.32883,0.69636,0.74936,-0.00341,0.39762,-0.5376,-0.09787,-0.53284,-0.29353,-0.49204,-0.15357,-0.4349,-1.88917,-0.40069,-0.68919,-0.36373,1.29681,-0.51007,2.6E-4,0.22102,0.76063,-0.67229,-0.13531,-0.01063,1.08286,-0.61109,0.44076,-0.14366,2.72657,-1.81211,2.18398,-1.69233,4.0613,-3.54325,4.93289,-1.72657,5.04606,-3.23324,4.7252,-0.8343,2.59954,-2.04701,5.21424,-2.42631],"curve":0.369,"c2":0.63,"c3":0.706},{"time":0.1,"offset":2,"vertices":[1.19512,-0.89313,1.11961,-0.37103,0,0,-1.86506,-0.00327,0,0,-1.19506,0.89322,0,0,-1.50603,-0.88565,-0.12976,-0.09723,-0.04454,-0.04587,-0.05249,-0.03293,-0.14271,-0.07458,-0.08013,0.06207,-0.03515,0.05264,0,0,-1.34295,0.0723,0,0,-1.34295,0.07224,0,0,1.11961,-0.37103,0,0,1.19512,-0.89313,0,0,0.00174,-0.04727,2.20509,-0.39697,1.5694,-1.63849,2.38701,0.0788,2.61349,-1.48746,3.1356,-1.4119,2.9878,-2.23285,5.90957,-2.55472],"curve":0.25,"c3":0.75},{"time":0.7667,"vertices":[5.19579,-2.31192,-2.32167,-3.37375,-4.22021,-0.63159,0.09257,-1.41458,-2.5931,3.30383,0,0,-4.36259,5.1987,-3.1988,4.17804,-6.30275,4.92609,-2.00101,8.96902,4.45501,8.89899,9.61086,0.32275,6.36892,-5.65451,-0.29395,-7.10745,-3.14896,-6.51147,-1.85066,-5.24106,-7.92568,-5.62778,-8.30558,-4.38336,-9.10059,-2.92807,0.00319,2.6636,-3.20663,-4.00162,-1.63068,-0.12808,-0.15781,2.50583,5.31176,-1.73129,-6.75891,-0.24298,-5.58496,2.38666,-7.99838,-3.52045,-6.53023,-0.60541,-7.66938,-1.45355,-5.65926,-3.36938,-1.69127,0.00681,-2.47008,-1.0072],"curve":0.244,"c3":0.694,"c4":0.77},{"time":1.3333,"vertices":[0.43114,-0.19184,0.9033,-1.09897,5.15075,-1.96879,0.00768,-0.11738,-1.92547,0.27115,0,0,0.07174,0.46108,-0.26543,0.34669,-0.37443,-1.1928,-0.28503,0.65508,0.32883,0.69636,0.74936,-0.00341,0.39762,-0.5376,-0.09787,-0.53284,-0.29353,-0.49204,-0.15357,-0.4349,-1.88917,-0.40069,-0.68919,-0.36373,1.29681,-0.51007,2.6E-4,0.22102,0.76063,-0.67229,-0.13531,-0.01063,1.08286,-0.61109,0.44076,-0.14366,2.72657,-1.81211,2.18398,-1.69233,4.0613,-3.54325,4.93289,-1.72657,5.04606,-3.23324,4.7252,-0.8343,2.59954,-2.04701,5.21424,-2.42631]}]},"Layer 34":{"orangegirl/Layer 34":[{"vertices":[0.7636,1.45425,1.85603,1.58466,-1.01463,-0.71191,-1.01463,-0.71191,-1.01463,-0.71191,-1.01463,-0.71191,1.35779,0.75867,0,0,1.56446,-0.87296,-0.55927,0.21146,2.57657,-3.01495,7.73225,0.73431,7.73225,0.73431,7.73225,0.73431],"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[2.10257,1.98586,-3.03235,2.85754,0,0,0,0,0,0,0,0,-5.95149,-0.14172,0,0,-0.42717,0.46941,-0.95123,0.39796,-1.40576,0.1328,-8.58733,0.35806,-8.58733,0.35806,-8.58733,0.35806],"curve":0.25,"c3":0.75},{"time":1.3333,"vertices":[0.7636,1.45425,1.85603,1.58466,-1.01463,-0.71191,-1.01463,-0.71191,-1.01463,-0.71191,-1.01463,-0.71191,1.35779,0.75867,0,0,1.56446,-0.87296,-0.55927,0.21146,2.57657,-3.01495,7.73225,0.73431,7.73225,0.73431,7.73225,0.73431]}]},"Layer 35":{"orangegirl/Layer 35":[{"vertices":[-5.91086,-1.0795,0,0,0,0,0,0,0,0,0,0,0,0,1.80795,-0.89822,-1.76233,-2.49368,-2.67679,-3.08673,-3.37933,-0.45975,-5.91086,-1.0795,-5.91086,-1.0795,-5.91086,-1.0795,1.42604,-2.33591,9.61356,-0.40775,0.49065,-0.5141,7.86463,0.49683]},{"time":0.6667,"offset":28,"vertices":[-6.59262,2.06793,-3.92279,1.03802,-6.59262,2.06793,-3.92279,1.03802],"curve":0.25,"c3":0.75},{"time":1.3333,"vertices":[-5.91086,-1.0795,0,0,0,0,0,0,0,0,0,0,0,0,1.80795,-0.89822,-1.76233,-2.49368,-2.67679,-3.08673,-3.37933,-0.45975,-5.91086,-1.0795,-5.91086,-1.0795,-5.91086,-1.0795,1.42604,-2.33591,9.61356,-0.40775,0.49065,-0.5141,7.86463,0.49683]}]},"Layer 36":{"orangegirl/Layer 36":[{"vertices":[-0.55215,0.2731,3.69379,-0.39825,3.69379,-0.39825,3.69379,-0.39825,-0.55215,0.2731,1.98856,-2.01053,6.2345,-2.68188,6.2345,-2.68188,3.69379,-0.39825,0.64991,0.97693,-1.68095,4.10375,-11.75357,9.99238,-0.88525,-1.18417,5.31459,-5.32208,6.42516,-8.79028,4.98297,-9.43729,5.31459,-5.32208,3.93858,-6.18732,1.41277,-1.24183,-0.55215,0.2731,5.38184,-10.6138,3.93965,-11.2608],"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[-3.84827,2.6058,-7.14905,5.41795,-1.23975,1.19124,-5.27243,2.76942,-2.32767,0.50549,-1.98254,-0.00952,-8.04593,-2.64816,-9.38156,-7.47491,-3.5072,-1.63297,-3.84328,-1.56702,-3.33209,0.34371,-1.048,2.40594,-13.75943,6.52719,-14.6969,4.75217,-18.02554,4.66318,-13.8446,3.4101,-10.70868,0.30428,-16.16693,2.83209,-5.69346,-1.32599,-16.04822,6.7139,-20.45432,5.62036,-15.35889,4.15057],"curve":0.25,"c3":0.75},{"time":1.3333,"vertices":[-0.55215,0.2731,3.69379,-0.39825,3.69379,-0.39825,3.69379,-0.39825,-0.55215,0.2731,1.98856,-2.01053,6.2345,-2.68188,6.2345,-2.68188,3.69379,-0.39825,0.64991,0.97693,-1.68095,4.10375,-11.75357,9.99238,-0.88525,-1.18417,5.31459,-5.32208,6.42516,-8.79028,4.98297,-9.43729,5.31459,-5.32208,3.93858,-6.18732,1.41277,-1.24183,-0.55215,0.2731,5.38184,-10.6138,3.93965,-11.2608]}]},"Layer 37":{"orangegirl/Layer 37":[{"curve":0.25,"c3":0.75},{"time":0.6667,"offset":18,"vertices":[0.56833,0.14588,0,0,0.89313,2.34333,0.18405,5.30385,1.0826,3.1094],"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 38":{"orangegirl/Layer 38":[{"curve":0.25,"c3":0.75},{"time":0.6667,"offset":2,"vertices":[0.13928,3.3726,0.2136,3.92911,0.1115,0.83475,0.11149,0.83473,0,0,0,0,0,0,0,0,0,0,0.48316,3.6172],"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 40":{"orangegirl/Layer 40":[{"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[-1.63484,0.14756,0.25928,7.00574,1.44616,2.14532,0.31318,-1.69501,0.25928,7.00574],"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 41":{"orangegirl/Layer 41":[{"offset":42,"vertices":[0.75128,-1.25662],"curve":0.25,"c3":0.75},{"time":0.6667,"offset":8,"vertices":[0.95444,7.79398,0,0,-0.15341,-1.24699,-0.15341,-1.24699,1.33807,-1.89987,0,0,0,0,0,0,0,0,-0.47751,15.62436,2.06851,9.40593,2.00623,11.89949,-1.84015,10.22757,-1.16559,10.5437,-1.16559,10.5437,-2.99768,12.05354,0.71429,8.45516,-1.0267,17.3553,2.43015,8.05411,-2.47818,14.21538,-3.22964,15.47202],"curve":0.25,"c3":0.75},{"time":1.3333,"offset":42,"vertices":[0.75128,-1.25662]}]},"Layer 42":{"orangegirl/Layer 42":[{"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[0.44743,2.49087,0,0,0,0,-1.64507,0.38885,0,0,-0.53281,3.82752,-7.25861,2.24779,-0.12569,0.87719,0,0,0,0,1.23495,3.68614],"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 43":{"orangegirl/Layer 43":[{"offset":2,"vertices":[-1.73145,1.22185,1.0451,3.30569],"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[1.06821,0.26834,3.14307,-0.71808,-0.2243,-0.17757],"curve":0.25,"c3":0.75},{"time":1.3333,"offset":2,"vertices":[-1.73145,1.22185,1.0451,3.30569]}]},"Layer 44":{"orangegirl/Layer 44":[{"offset":12,"vertices":[0.28452,-5.20607,0,0,0,0,0,0,0,0,0,0,0.14893,-2.72391,0.28452,-5.20607],"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[-0.11646,1.39981,0,0,0,0,0,0,0,0,0.26373,9.53623,-0.18552,14.93478,-0.18668,2.24312,-0.05334,0.64088,-0.05695,-1.6972,1.2189,-0.15748,0,0,-0.51236,6.15742,-0.45285,3.06046,1.2189,-0.15748],"curve":0.25,"c3":0.75},{"time":1.3333,"offset":12,"vertices":[0.28452,-5.20607,0,0,0,0,0,0,0,0,0,0,0.14893,-2.72391,0.28452,-5.20607]}]},"Layer 45":{"orangegirl/Layer 45":[{"curve":0.25,"c3":0.75},{"time":0.6667,"offset":10,"vertices":[-0.80888,0.42868,-0.92402,-0.02227,1.2496,-1.83169,1.2496,-1.83169,1.2496,-1.83169,1.2496,-1.83169,1.2496,-1.83169,0,0,0,0,-3.56068,-1.5259,-2.26229,-3.03098,0,0,0,0,1.2496,-1.83169,-0.80888,0.42868,-0.92402,-0.02227],"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 46":{"orangegirl/Layer 46":[{"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[-3.49928,-0.43932,-2.34684,1.98759,-1.24182,2.12631,0,0,0,0,-1.28923,-0.16187,-1.24182,2.12631,-1.24182,2.12631],"curve":0.25,"c3":0.75},{"time":1.3333}]},"Layer 48":{"orangegirl/Layer 48":[{"vertices":[4.20801,-4.134,4.20801,-4.134,5.11742,-3.05878,2.05524,2.20349,1.285,2.58575,-0.36971,2.8573,3.46272,-2.78723,3.46272,-2.78723,0.50061,-1.81009,6.9274,-2.07736,7.1751,-0.41727,-0.72916,8.58368,-1.83881,6.64337,0.6608,5.472,5.11742,-3.05878,3.46272,-2.78723,4.20801,-4.134,5.11742,-3.05878,4.20801,-4.134,0.6608,5.472]},{"time":0.3333,"vertices":[2.75285,2.28097,2.77536,1.85089,2.05008,2.30266,2.15317,7.29325,-0.06982,7.18826,-0.06982,7.18826,4.69245,0.15307,4.00689,-2.04025,2.45002,-0.47653,7.00067,-0.21704,6.55495,1.13335,-1.63219,5.19025,-3.48734,3.49259,-2.23753,2.90691,4.67374,-0.01704,4.67374,-0.01704,4.51936,-0.8376,4.67374,-0.01704,4.51936,-0.8376,-2.23753,2.90691]},{"time":0.6667,"vertices":[3.6485,5.05754,3.0795,3.68994,2.75449,5.269,2.92773,9.01588,1.43103,9.28148,1.43103,9.28148,4.26749,3.36492,2.89636,-1.02171,2.08687,-0.60934,6.4045,0.93729,5.513,1.85271,-2.53522,1.79681,-5.13586,0.34182,-5.13586,0.34182,4.23007,3.02469,4.23007,3.02469,4.83072,2.45879,4.23007,3.02469,4.83072,2.45879,-5.13586,0.34182],"curve":0.25,"c3":0.625,"c4":0.5},{"time":1,"vertices":[3.56053,-0.10475,3.59599,-0.78255,3.33702,0.05329,3.56053,-0.10475,3.32747,0.23565,3.32747,0.23565,3.32747,0.23565,2.6232,-2.12778,1.06633,-0.56407,5.19044,0.51025,4.31535,1.18838,-1.02618,2.8137,-2.32651,2.0862,-2.32651,2.0862,3.29005,-0.10458,3.29005,-0.10458,3.52312,-0.44498,3.29005,-0.10458,3.52312,-0.44498,-2.32651,2.0862],"curve":0.375,"c2":0.5,"c3":0.75},{"time":1.3333,"vertices":[4.20801,-4.134,4.20801,-4.134,5.11742,-3.05878,2.05524,2.20349,1.285,2.58575,-0.36971,2.8573,3.46272,-2.78723,3.46272,-2.78723,0.50061,-1.81009,6.9274,-2.07736,7.1751,-0.41727,-0.72916,8.58368,-1.83881,6.64337,0.6608,5.472,5.11742,-3.05878,3.46272,-2.78723,4.20801,-4.134,5.11742,-3.05878,4.20801,-4.134,0.6608,5.472]}]},"Layer 49":{"orangegirl/Layer 49":[{"vertices":[-0.4782,0.67334,-0.40621,0.80783,-0.26221,1.07685,-0.26221,1.07685,0.26638,0.56764,-2.80293,-1.31384,-2.37312,2.98322,-2.37312,2.98322,3.39433,-1.29298,-5.95052,-3.19775,4.0877,5.37055,3.209,5.93987,3.209,5.93987,3.209,5.93987,4.47938,3.56471,3.88059,4.14609,4.47938,3.56471,3.88059,4.14609,3.23872,2.183,3.23707,0.61113,3.23707,0.61113,1.40537,1.21314,1.17469,1.39526,1.17469,1.39526,1.17469,1.39526,1.17469,1.39526,1.17469,1.39526,0,0,0,0,0,0,0,0,-2.52091,0.23039,-0.4782,0.67334,-0.4782,0.67334,1.40537,1.21314,1.17469,1.39526,0,0,0,0,0,0,0,0,0,0,-0.02376,-0.31221,-0.03259,-0.31142,1.87909,-1.64216,1.91058,-1.37178,1.46961,-5.0647,2.01342,-4.81702,4.68707,1.40994,4.25407,2.07694,2.60065,-3.26027,2.92779,-2.89365,0.482,-2.55866,2.0164,2.60111,1.54989,2.85945,1.61304,-0.75424,1.61304,-0.75424],"curve":0.25,"c3":0.75},{"time":0.6667,"vertices":[0.91323,2.80645,1.70891,4.29272,3.30021,7.26572,3.30021,7.26572,1.16257,4.4209,0.4186,6.00239,0.6147,7.67039,2.84368,12.3717,0.36412,-12.28923,2.09456,7.79216,1.10066,-7.98446,0.25386,-7.45123,0.65901,-11.29376,0.40703,-9.09334,1.20519,-8.07238,0.97558,-8.07588,-0.18272,-12.30712,-0.53195,-12.26937,0.0038,-9.75519,-0.30488,-10.5073,-0.29698,-11.16284,-0.60663,-11.29564,-0.95048,-11.25381,-0.86167,-11.67584,-0.66499,-9.83445,-0.71537,-10.18621,-1.13368,-10.26638,-1.00311,-6.34358,-1.18219,-6.31263,-3.5509,-7.29217,0,0,0.72839,2.76637,0.91323,2.80645,0.91323,2.80645,-0.92777,-9.62328,-1.22364,-9.57312,-0.41827,-4.87172,-0.8587,-4.8136,-0.99426,-4.78736,1.74078,2.22095,1.93536,2.05378,-0.36531,-8.528,-0.60651,-8.51436,1.8728,-1.13245,1.73291,-1.2775,0.53198,-5.42204,0.00818,-5.42763,1.33429,-4.07215,1.66051,-4.16613,1.54278,-4.98763,1.05426,-5.08674,0.9964,-4.00177,2.21053,-7.96378,1.0095,-7.97005,1.99548,-7.6864,1.14825,-6.13899],"curve":0.25,"c3":0.75},{"time":1.3333,"vertices":[-0.4782,0.67334,-0.40621,0.80783,-0.26221,1.07685,-0.26221,1.07685,0.26638,0.56764,-2.80293,-1.31384,-2.37312,2.98322,-2.37312,2.98322,3.39433,-1.29298,-5.95052,-3.19775,4.0877,5.37055,3.209,5.93987,3.209,5.93987,3.209,5.93987,4.47938,3.56471,3.88059,4.14609,4.47938,3.56471,3.88059,4.14609,3.23872,2.183,3.23707,0.61113,3.23707,0.61113,1.40537,1.21314,1.17469,1.39526,1.17469,1.39526,1.17469,1.39526,1.17469,1.39526,1.17469,1.39526,0,0,0,0,0,0,0,0,-2.52091,0.23039,-0.4782,0.67334,-0.4782,0.67334,1.40537,1.21314,1.17469,1.39526,0,0,0,0,0,0,0,0,0,0,-0.02376,-0.31221,-0.03259,-0.31142,1.87909,-1.64216,1.91058,-1.37178,1.46961,-5.0647,2.01342,-4.81702,4.68707,1.40994,4.25407,2.07694,2.60065,-3.26027,2.92779,-2.89365,0.482,-2.55866,2.0164,2.60111,1.54989,2.85945,1.61304,-0.75424,1.61304,-0.75424]}]}}}}}},"raptor":{"skeleton":{"hash":"LUIJxpDugzZuf2tLniRqCRSvWZg","spine":"3.8.14-beta","x":-821.35,"y":-75.07,"width":1296.89,"height":1055.12},"bones":[{"name":"root"},{"name":"hip","parent":"root","rotation":3.16,"x":-136.79,"y":415.48},{"name":"torso1","parent":"hip","length":126.26,"rotation":-4.98,"x":30.04,"y":-0.4},{"name":"saddle","parent":"torso1","length":50.92,"rotation":91.8,"x":25.31,"y":70.65},{"name":"spineboy-hip","parent":"saddle","length":0.53,"rotation":90.02,"x":81.88,"y":2.69},{"name":"spineboy-torso","parent":"spineboy-hip","length":122.45,"rotation":-75.86,"x":1.05,"y":-2.11},{"name":"torso2","parent":"torso1","length":121.2,"rotation":39.85,"x":126.26,"y":-0.38},{"name":"neck","parent":"torso2","length":70.6,"rotation":41.38,"x":121.2,"y":0.35},{"name":"head","parent":"neck","length":105.51,"rotation":9.83,"x":70.6,"y":0.04},{"name":"horn-rear","parent":"head","length":73.78,"rotation":44.32,"x":104.76,"y":-242.01},{"name":"rear-arm-target","parent":"horn-rear","rotation":-133.55,"x":232.68,"y":245.85},{"name":"back-arm","parent":"spineboy-torso","length":67.21,"rotation":-120.9,"x":96.33,"y":-38.47},{"name":"back-bracer","parent":"back-arm","length":43.69,"rotation":17.48,"x":67.22,"y":-0.32},{"name":"back-hand","parent":"back-bracer","length":41.98,"rotation":9.21,"x":43.68,"y":0.06,"transform":"noRotationOrReflection"},{"name":"spineboy-rear-arm-goal","parent":"saddle","x":-30.44,"y":-100.08},{"name":"back-thigh","parent":"spineboy-hip","length":71.16,"rotation":160.75,"x":-9.57,"y":2.32},{"name":"back-knee","parent":"back-thigh","length":97.17,"rotation":-54.98,"x":71.16,"y":-0.28},{"name":"horn-front","parent":"head","length":87.48,"rotation":49.36,"x":87.97,"y":-235.15},{"name":"front-arm-target","parent":"horn-front","rotation":-138.6,"x":294.58,"y":234.18},{"name":"front-arm","parent":"spineboy-torso","length":74.52,"rotation":-118.17,"x":101.38,"y":9.79},{"name":"front-bracer","parent":"front-arm","length":39.85,"rotation":20.31,"x":74.52,"y":-0.42},{"name":"front-arm1","parent":"torso2","length":109.99,"rotation":224.54,"x":46.37,"y":-84.62},{"name":"front-arm2","parent":"front-arm1","length":86.33,"rotation":105.24,"x":109.99,"y":0.2},{"name":"front-foot-goal","parent":"root","rotation":-0.95,"x":-45.8,"y":-28.67},{"name":"front-leg-goal","parent":"front-foot-goal","x":-106.06,"y":115.58},{"name":"front-leg1","parent":"hip","length":251.75,"rotation":-51.51,"x":27.36,"y":-28.28},{"name":"front-leg2","parent":"front-leg1","length":208.55,"rotation":261.94,"x":251.04,"y":0.16},{"name":"front-leg3","parent":"front-leg2","length":118.18,"rotation":85.46,"x":208.5,"y":-1.64},{"name":"front-foot1","parent":"front-leg3","length":57.79,"rotation":54.46,"x":118.2,"y":-0.79,"scaleX":1.127},{"name":"front-foot2","parent":"front-foot1","length":56.19,"rotation":-2.16,"x":57.79,"y":-0.02,"scaleX":0.731,"scaleY":0.823,"transform":"noRotationOrReflection"},{"name":"front-foot3","parent":"front-foot2","length":129.88,"rotation":-2.7,"x":49.71,"y":20.66,"scaleX":1.155},{"name":"front-hand","parent":"front-arm2","length":47.56,"rotation":-56.83,"x":86.33,"y":0.06},{"name":"front-hand2","parent":"front-bracer","length":58.19,"rotation":13.9,"x":39.98,"y":-0.9,"transform":"noRotationOrReflection"},{"name":"spineboy-front-arm-goal","parent":"saddle","x":-50.71,"y":-96.93},{"name":"front-thigh","parent":"spineboy-hip","length":77.79,"rotation":163.34,"x":15.52,"y":17.02},{"name":"lower-leg","parent":"front-thigh","length":111.5,"rotation":-49.62,"x":77.93,"y":-0.11},{"name":"gun","parent":"spineboy-hip","length":181.35,"rotation":107.12,"x":16.86,"y":-7.89,"scaleX":0.816,"scaleY":0.816},{"name":"neck2","parent":"spineboy-torso","length":32.05,"rotation":-45.23,"x":113.44,"y":-15.22},{"name":"head2","parent":"neck2","length":167.19,"rotation":11.66,"x":25.68,"y":-0.77},{"name":"jaw","parent":"head","length":203.76,"rotation":-125.79,"x":49.11,"y":-68.46},{"name":"rear-arm1","parent":"torso2","length":109.56,"rotation":-124.72,"x":57.05,"y":-95.39},{"name":"rear-arm2","parent":"rear-arm1","length":85.8,"rotation":123.56,"x":109.57,"y":-0.01},{"name":"rear-foot-goal","parent":"root","x":33.44,"y":30.82},{"name":"rear-leg-goal","parent":"rear-foot-goal","x":-127.51,"y":75.99},{"name":"rear-leg1","parent":"hip","length":226.28,"rotation":-54.76,"x":55.19,"y":-71.25},{"name":"rear-leg2","parent":"rear-leg1","length":172.59,"rotation":-92.25,"x":226.32,"y":0.23},{"name":"rear-leg3","parent":"rear-leg2","length":103.05,"rotation":82.82,"x":172.32,"y":2.21},{"name":"rear-foot1","parent":"rear-leg3","length":84.51,"rotation":75.43,"x":102.38,"y":-0.03},{"name":"rear-foot2","parent":"rear-foot1","length":102.31,"rotation":-6.14,"x":84.5,"y":-0.35,"transform":"noRotationOrReflection"},{"name":"rear-hand","parent":"rear-arm2","length":45.81,"rotation":-76.28,"x":85.8,"y":0.11},{"name":"saddle-strap-front1","parent":"saddle","length":97.28,"rotation":-148.12,"x":-27.36,"y":-73.39},{"name":"saddle-strap-front2","parent":"saddle-strap-front1","length":102.74,"rotation":-11.14,"x":97.29,"y":0.31},{"name":"saddle-strap-rear1","parent":"saddle","length":38.62,"rotation":151.14,"x":-33.34,"y":87.33},{"name":"saddle-strap-rear2","parent":"saddle-strap-rear1","length":54.36,"x":38.63,"y":-0.02},{"name":"saddle-strap-rear3","parent":"saddle-strap-rear2","length":44.05,"rotation":3.63,"x":54.87,"y":0.2},{"name":"stirrup","parent":"saddle","length":78.17,"rotation":-68.86,"x":-81.94,"y":-103.38},{"name":"stirrup-strap1","parent":"saddle","length":43.7,"rotation":-135,"x":-20.38,"y":-29.37},{"name":"stirrup-strap2","parent":"stirrup-strap1","length":51.62,"rotation":9.39,"x":43.71},{"name":"tail1","parent":"hip","length":81.26,"rotation":153.61,"x":-20.87,"y":6.87},{"name":"tail2","parent":"tail1","length":81.26,"rotation":10.42,"x":81.26},{"name":"tail3","parent":"tail2","length":65.01,"rotation":12.18,"x":81.26},{"name":"tail4","parent":"tail3","length":65.01,"x":65.01},{"name":"tail5","parent":"tail4","length":70.53,"rotation":4.36,"x":65.01},{"name":"tail6","parent":"tail5","length":70.53,"x":70.53},{"name":"tail7","parent":"tail6","length":63.13,"rotation":2.35,"x":70.53},{"name":"tail8","parent":"tail7","length":54.46,"rotation":0.97,"x":63.13},{"name":"tail9","parent":"tail8","length":49.21,"rotation":-1.29,"x":54.46},{"name":"tongue1","parent":"head","length":55.12,"rotation":-129.04,"x":20.82,"y":-104.75},{"name":"tongue2","parent":"tongue1","length":44.67,"rotation":8.93,"x":55.6,"y":0.93},{"name":"tongue3","parent":"tongue2","length":43.65,"rotation":12.86,"x":44.27,"y":-0.21},{"name":"dust-root","parent":"root"},{"name":"dust","parent":"dust-root","x":231.15,"y":-2.15,"scaleX":2.2847,"scaleY":1.427},{"name":"dust2","parent":"dust-root","x":-147.58,"y":-2.15,"scaleX":1.6346,"scaleY":1.0209},{"name":"tail10","parent":"tail9","length":45.53,"rotation":0.36,"x":49.21},{"name":"dust3","parent":"dust-root","x":429.77,"y":20.67,"scaleX":2.2847,"scaleY":1.427},{"name":"dust4","parent":"dust-root","x":29.91,"y":14.02,"scaleX":1.6346,"scaleY":1.0209},{"name":"jaw-inside","parent":"jaw","x":94.7,"y":33.64},{"name":"bone","parent":"head2","length":39.92,"rotation":-35.23,"x":166.09,"y":-79.27},{"name":"bone2","parent":"bone","length":47.42,"rotation":51.8,"x":39.92},{"name":"bone3","parent":"head2","length":45.41,"rotation":-12.34,"x":179.8,"y":-20.91},{"name":"bone4","parent":"bone3","length":43.31,"rotation":42.01,"x":44.64,"y":0.3},{"name":"bone5","parent":"bone4","length":44.88,"rotation":48.8,"x":43.31}],"slots":[{"name":"back-hand","bone":"back-hand","attachment":"raptor/back-hand"},{"name":"back-arm","bone":"back-arm","attachment":"raptor/back-arm"},{"name":"back-bracer","bone":"back-bracer","attachment":"raptor/back-bracer"},{"name":"back-knee","bone":"back-knee","attachment":"raptor/back-knee"},{"name":"raptor-jaw-inside","bone":"jaw-inside","color":"646464ff","attachment":"raptor/raptor-jaw"},{"name":"raptor-mouth-inside","bone":"jaw","attachment":"raptor/raptor-mouth-inside"},{"name":"raptor-horn-back","bone":"horn-rear","attachment":"raptor/raptor-horn-back"},{"name":"raptow-jaw-tooth","bone":"jaw","attachment":"raptor/raptor-jaw-tooth"},{"name":"raptor-tongue","bone":"root","attachment":"raptor/raptor-tongue"},{"name":"raptor-hindleg-back","bone":"rear-leg1","attachment":"raptor/raptor-hindleg-back"},{"name":"dust2","bone":"dust3"},{"name":"dust3","bone":"dust4"},{"name":"raptor-arm-back","bone":"root","attachment":"raptor/raptor-arm-back"},{"name":"back-thigh","bone":"back-thigh","attachment":"raptor/back-thigh"},{"name":"raptor-body","bone":"torso1","attachment":"raptor/raptor-body"},{"name":"raptor-saddle-strap-front","bone":"saddle-strap-front1","attachment":"raptor/raptor-saddle-strap-front"},{"name":"raptor-saddle-strap-rear","bone":"saddle-strap-rear1","attachment":"raptor/raptor-saddle-strap-rear"},{"name":"raptor-saddle-w-shadow","bone":"saddle","attachment":"raptor/raptor-saddle-w-shadow"},{"name":"raptor-saddle-noshadow","bone":"saddle"},{"name":"raptor-jaw","bone":"jaw","attachment":"raptor/raptor-jaw"},{"name":"raptor-front-arm","bone":"root","attachment":"raptor/raptor-front-arm"},{"name":"raptor-front-leg","bone":"front-leg1","attachment":"raptor/raptor-front-leg"},{"name":"neck","bone":"neck2","attachment":"raptor/neck"},{"name":"spineboy-torso","bone":"spineboy-torso","attachment":"raptor/torso"},{"name":"head","bone":"head2","attachment":"raptor/head"},{"name":"eyes-open","bone":"head2","attachment":"raptor/eyes-open"},{"name":"mouth-smile","bone":"head2","attachment":"raptor/mouth-smile"},{"name":"visor","bone":"head2","attachment":"raptor/visor"},{"name":"raptor-horn","bone":"horn-front","attachment":"raptor/raptor-horn"},{"name":"front-thigh","bone":"front-thigh","attachment":"raptor/front-thigh"},{"name":"stirrup-back","bone":"stirrup","attachment":"raptor/stirrup-back"},{"name":"lower-leg","bone":"lower-leg","attachment":"raptor/lower-leg"},{"name":"stirrup-strap","bone":"stirrup","attachment":"raptor/stirrup-strap"},{"name":"stirrup-front","bone":"stirrup","attachment":"raptor/stirrup-front"},{"name":"gun","bone":"gun","attachment":"raptor/gun-nohand"},{"name":"front-arm","bone":"front-arm","attachment":"raptor/front-arm"},{"name":"front-bracer","bone":"front-bracer","attachment":"raptor/front-bracer"},{"name":"front-hand","bone":"front-hand2","attachment":"raptor/front-hand"},{"name":"dust01","bone":"dust"},{"name":"dust1","bone":"dust2"},{"name":"tail-shadow","bone":"torso1","color":"00000000"}],"ik":[{"name":"front-arm-goal","bones":["front-arm","front-bracer"],"target":"front-arm-target"},{"name":"front-foot-goal","order":2,"bones":["front-leg3","front-foot1"],"target":"front-foot-goal"},{"name":"front-leg-goal","order":1,"bones":["front-leg1","front-leg2"],"target":"front-leg-goal","bendPositive":false},{"name":"rear-arm-goal","order":3,"bones":["back-arm","back-bracer"],"target":"rear-arm-target"},{"name":"rear-foot-goal","order":5,"bones":["rear-leg3","rear-foot1"],"target":"rear-foot-goal"},{"name":"rear-leg-goal","order":4,"bones":["rear-leg1","rear-leg2"],"target":"rear-leg-goal","bendPositive":false},{"name":"spineboy-front-leg-goal","order":6,"bones":["front-thigh","lower-leg"],"target":"spineboy-front-arm-goal","bendPositive":false},{"name":"spineboy-rear-leg-goal","order":7,"bones":["back-thigh","back-knee"],"target":"spineboy-rear-arm-goal","bendPositive":false},{"name":"stirrup","order":8,"bones":["stirrup-strap1","stirrup-strap2"],"target":"stirrup"}],"skins":[{"name":"default","attachments":{"back-arm":{"raptor/back-arm":{"x":29.72,"y":2.05,"rotation":16.76,"width":91,"height":57}},"back-bracer":{"raptor/back-bracer":{"x":13.2,"y":-4.28,"rotation":-0.73,"width":77,"height":55}},"back-hand":{"raptor/back-hand":{"x":18.61,"y":4.24,"rotation":-10.99,"width":72,"height":68}},"back-knee":{"raptor/back-knee":{"x":45.77,"y":20.47,"rotation":74.23,"width":97,"height":134}},"back-thigh":{"raptor/back-thigh":{"x":37.85,"y":-4.37,"rotation":19.25,"width":78,"height":47}},"dust01":{"raptor/dust01":{"scaleX":-1,"width":96,"height":73},"raptor/dust02":{"scaleX":-1,"width":86,"height":88},"raptor/dust03":{"scaleX":-1,"width":62,"height":52}},"dust1":{"raptor/dust01":{"width":96,"height":73},"raptor/dust02":{"width":86,"height":88},"raptor/dust03":{"width":62,"height":52}},"dust2":{"raptor/dust01":{"scaleX":-1,"width":96,"height":73},"raptor/dust02":{"scaleX":-1,"width":86,"height":88},"raptor/dust03":{"scaleX":-1,"width":62,"height":52}},"dust3":{"raptor/dust01":{"width":96,"height":73},"raptor/dust02":{"width":86,"height":88},"raptor/dust03":{"width":62,"height":52}},"eyes-open":{"raptor/eyes-open":{"x":93.24,"y":-25.45,"rotation":-70.58,"width":93,"height":89}},"front-arm":{"raptor/front-arm":{"x":31.38,"y":5.09,"rotation":14.02,"width":96,"height":60}},"front-bracer":{"raptor/front-bracer":{"x":11.68,"y":-1.37,"rotation":-6.28,"width":81,"height":58}},"front-hand":{"raptor/front-hand":{"x":35.7,"y":7.84,"rotation":-13.97,"width":82,"height":75},"raptor/front-open-hand":{"x":42.55,"y":4.62,"rotation":62.19,"width":86,"height":87},"raptor/gun":{"x":98.91,"y":22.98,"rotation":56.35,"width":213,"height":206}},"front-thigh":{"raptor/front-thigh":{"x":45.7,"y":-3.1,"rotation":16.66,"width":114,"height":58}},"gun":{"raptor/gun-nohand":{"type":"mesh","uvs":[0.71081,0.16149,0.85808,0.41785,1,0.6649,1,1,0.71457,1,0.49803,0.69051,0.30183,0.41009,0,0.58226,0,0.11741,0.27187,0.1243,0.24857,0,0.36658,0,0.61804,0,0.70575,0.53546,0.53669,0.26855],"triangles":[3,13,2,5,13,4,3,4,13,13,6,14,13,5,6,13,1,2,6,8,9,6,7,8,13,14,1,14,0,1,6,9,14,9,11,14,14,12,0,14,11,12,9,10,11],"vertices":[23.49,50.64,83.87,46.33,142.06,42.18,197.91,3.35,163.7,-45.87,86.16,-47.35,15.9,-48.69,8.42,-120.68,-69.06,-66.82,-35.33,-20.74,-58.84,-10.35,-44.69,10,-14.55,53.36,85.21,6.44,20.46,8.21],"hull":13}},"head":{"raptor/head":{"type":"mesh","uvs":[0.73461,0.04542,0.88414,0.17033,0.88955,0.31976,0.91126,0.27463,0.9461,0.20217,1,0.29892,1,0.34554,1,0.4508,0.91249,0.51206,0.84514,0.51207,0.8209,0.59663,0.77915,0.67257,0.73605,0.75464,0.83571,0.73994,0.84784,0.84528,0.7549,0.93101,0.63773,1,0.39394,1,0.14747,0.82935,0,0.59419,0,0.36645,0.09623,0.20353,0.21474,0.14594,0.45179,0.15693,0.51509,0.1263,0.507,0.07853,0.42079,0,0.56221,0,0.19055,0.39949,0.27942,0.31373,0.79396,0.479,0.76029,0.85997,0.53421,0.16964,0.53207,0.04286,0.61949,0.08784,0.70424,0.16685,0.69053,0.432,0.85592,0.37861,0.45844,0.34997,0.48658,0.30193,0.66307,0.35065,0.58439,0.39448,0.70468,0.26242,0.51985,0.21924],"triangles":[23,24,32,32,24,34,35,34,0,34,25,33,34,24,25,33,27,34,34,27,0,25,26,33,33,26,27,32,35,42,35,0,1,32,34,35,36,40,37,40,42,37,37,42,2,40,43,42,2,42,1,43,32,42,42,35,1,7,37,6,37,2,6,6,2,5,2,3,5,3,4,5,8,37,7,10,36,30,10,11,36,15,16,31,18,12,17,38,18,28,12,31,16,12,41,36,41,12,18,41,18,38,38,28,29,15,31,14,12,16,17,14,31,13,31,12,13,18,19,28,12,36,11,19,20,28,29,28,21,38,39,41,28,20,21,39,43,40,38,29,39,21,22,29,29,22,39,22,23,39,39,23,43,43,23,32,41,39,40,10,30,9,41,40,36,8,9,37,9,30,37,30,36,37],"vertices":[4,78,104.37,61.36,1.7E-4,79,97.55,28.7,0.02495,80,58.33,-14.31,0.29446,81,-0.88,-20.72,0.68043,4,77,67.76,66.16,0.00139,78,69.21,19.04,0.077,79,87.24,-25.34,0.80658,80,14.49,-47.57,0.11502,3,77,43.19,28.99,0.10855,78,24.81,15.35,0.61823,79,50.15,-50.03,0.27322,3,77,55.77,36.56,0.00412,78,38.53,10.15,0.9783,79,64.68,-47.95,0.01758,1,78,60.57,1.79,1,1,78,32.5,-14.23,1,1,78,18.62,-14.92,1,2,77,45.01,-20.18,0.76042,78,-12.71,-16.48,0.23958,1,38,166.12,-105.42,1,1,38,160.05,-88.21,1,1,38,134.1,-90.39,1,1,38,108.99,-87.24,1,1,38,82.04,-84.36,1,1,38,95.16,-108.38,1,1,38,66.64,-121.91,1,1,38,34.17,-106.65,1,1,38,4.23,-83.54,1,2,38,-17.74,-21.23,0.99385,77,-183.64,-58.64,0.00615,1,38,8.01,58.67,1,1,38,60.82,119.66,1,1,38,124.82,142.22,1,3,38,179.28,133.77,0.94385,80,42.73,164.31,0.02735,81,123.25,108.67,0.0288,3,38,206.14,109.19,0.90085,80,53.91,129.66,0.04882,81,104.53,77.43,0.05033,4,38,224.42,47.51,0.5441,79,28.95,76.38,0.02138,80,39.26,67.02,0.1911,81,47.76,47.19,0.24342,4,38,238.73,34.37,0.20163,79,45.75,66.6,0.01748,80,45.19,48.52,0.20502,81,37.74,30.54,0.57587,4,38,251.42,41.17,0.04103,79,56.69,75.96,0.00142,80,59.59,48.14,0.05275,81,46.95,19.46,0.90481,3,38,265.73,70.99,1.0E-5,80,86.77,66.97,0,81,79.02,11.41,0.99999,1,81,46.15,-8.3,1,1,38,132.71,90.25,1,1,38,164.81,76.03,1,1,38,164.73,-71.85,1,1,38,54.62,-100.99,1,4,38,228.27,25.19,0.27948,79,37.49,55.39,0.04667,80,31.56,45.72,0.29438,81,26.66,38.96,0.37947,3,38,263.71,38.3,0.00762,80,68.84,39.57,0.00991,81,46.59,6.85,0.98247,4,38,258.94,11.5,0.01199,79,70.38,48.58,7.0E-5,80,51.44,18.64,0.07826,81,19.38,6.16,0.90968,3,38,244.37,-17.99,1.9E-4,80,24.18,0.23,0.99884,81,-12.43,14.54,9.7E-4,1,38,168.62,-40.76,1,3,77,25.61,19.96,0.50536,78,6.84,23.59,0.2645,79,30.44,-51.51,0.23014,1,38,170.76,26.69,1,4,38,186.8,24.26,0.75057,79,-2.82,45.62,0.07609,80,-4.94,65.43,0.10488,81,17.45,79.4,0.06845,3,77,-12.2,56.99,0.01171,78,12.56,76.2,8.7E-4,79,10.01,-2.69,0.98742,1,38,169.6,-9.91,1,4,38,217.55,-27.57,0.00156,79,38.3,1.56,0.97801,80,-3.86,5.17,0.01942,81,-27.18,38.9,0.00101,4,38,213.04,23.94,0.43153,79,22.88,50.92,0.09832,80,17.71,52.17,0.26174,81,22.39,53.63,0.20841],"hull":28}},"lower-leg":{"raptor/lower-leg":{"x":76.2,"y":22.21,"rotation":66.28,"width":146,"height":195}},"mouth-smile":{"raptor/mouth-grind":{"x":27.66,"y":-31.33,"rotation":-70.58,"width":93,"height":59},"raptor/mouth-smile":{"x":27.66,"y":-31.33,"rotation":-70.58,"width":93,"height":59}},"neck":{"raptor/neck":{"x":15.1,"y":-1.67,"rotation":-58.92,"width":36,"height":41}},"raptor-arm-back":{"raptor/raptor-arm-back":{"type":"mesh","uvs":[0.38712,0.29362,0.31383,0.46513,0.29243,0.51522,0.32476,0.49311,0.57587,0.32139,0.63255,0.28263,0.71632,0.34508,0.94948,0.51888,0.94948,0.60129,1,0.65257,1,0.90624,0.95463,0.99934,0.88957,0.83205,0.80295,0.99999,0.75236,0.75696,0.6654,0.71301,0.62289,0.63243,0.58195,0.65032,0.22479,0.80641,0.07792,0.73315,0.07825,0.6655,0.07985,0.34307,0,0.29728,0,0,0.32335,0],"triangles":[6,15,16,5,6,16,5,16,4,6,7,15,16,17,4,8,15,7,14,15,8,12,14,8,12,8,9,12,9,10,11,12,10,13,14,12,17,3,4,19,20,2,18,19,2,18,2,3,18,3,17,21,22,23,24,21,23,0,21,24,1,21,0,1,20,21,2,20,1],"vertices":[2,40,36.95,33.31,0.91667,41,68.54,41.05,0.08333,2,40,66.02,20.36,0.76814,41,41.42,24.4,0.23186,2,40,74.51,16.58,0.64468,41,33.5,19.53,0.35532,2,40,70.89,21.97,0.29072,41,40,19.47,0.70928,3,40,42.78,63.9,0.11484,41,90.47,18.95,0.60855,49,-17.2,9.01,0.27661,2,41,101.86,18.84,0.45956,49,-14.39,20.05,0.54044,2,41,106.48,2.09,0.0625,49,2.98,20.56,0.9375,1,49,51.32,21.99,1,1,49,60.41,11.11,1,1,49,72.39,9.62,1,1,49,100.37,-23.87,1,1,49,104.96,-40.9,1,1,49,78.37,-25.62,1,1,49,86.06,-56.84,1,1,49,52.92,-30.05,1,2,41,62.25,-43.93,0.0625,49,37.19,-33.34,0.9375,2,41,64.89,-28.66,0.3125,49,22.99,-27.14,0.6875,2,41,57.7,-27.17,0.30612,49,19.84,-33.78,0.69388,2,40,124.19,3.84,0.19395,41,-5.1,-14.24,0.80605,2,40,110.78,-19.65,0.3125,41,-16.89,10.11,0.6875,2,40,99.15,-19.2,0.51614,41,-9.94,19.44,0.48386,2,40,43.73,-17.04,0.9375,41,23.18,63.93,0.0625,1,40,35.41,-29.78,1,1,40,-15.69,-28.02,1,1,40,-13.88,24.65,1],"hull":25}},"raptor-body":{"raptor/raptor-body":{"type":"mesh","uvs":[0.8907,0.10482,0.96887,0.19119,1,0.22559,1,0.42959,0.96605,0.42852,0.88729,0.42604,0.87568,0.48273,0.84333,0.51754,0.82904,0.55205,0.82121,0.60686,0.82251,0.70257,0.73186,0.8671,0.61644,0.92854,0.51981,0.91397,0.49661,0.90968,0.43941,0.70668,0.40192,0.67998,0.37208,0.6698,0.34675,0.65911,0.3241,0.65115,0.29383,0.64388,0.26897,0.63651,0.24305,0.62817,0.21492,0.61724,0.18738,0.6056,0.17121,0.59836,0.15588,0.59319,0.13906,0.59004,0.12523,0.58504,0.11128,0.58012,0.09712,0.57853,0.08453,0.57472,0.07159,0.57295,0.05793,0.57316,0.04447,0.57135,0.03052,0.57041,0.01776,0.57126,2.6E-4,0.57017,0,0.56366,0,0.55428,0.01552,0.54537,0.02851,0.53811,0.04362,0.52949,0.05682,0.5228,0.07055,0.51486,0.08274,0.50776,0.09638,0.50081,0.10907,0.49495,0.1233,0.48744,0.13991,0.47872,0.15649,0.46905,0.1721,0.45863,0.1889,0.45032,0.21568,0.43712,0.24053,0.42409,0.26662,0.40948,0.2977,0.3932,0.32692,0.38001,0.35247,0.36778,0.37649,0.35818,0.3999,0.34533,0.43709,0.32202,0.48969,0.35534,0.55807,0.39867,0.61175,0.40674,0.67137,0.4157,0.68415,0.31314,0.68674,0.14742,0.78179,0.08354,0.51486,0.74573,0.61952,0.75425,0.70113,0.7287,0.79523,0.27517,0.6532,0.59038,0.53789,0.54937,0.42895,0.52207,0.32783,0.50347,0.24422,0.51349,0.09755,0.54022,0.04399,0.55206,0.35306,0.50643,0.27085,0.50766,0.15671,0.52387,0.07104,0.54547,0.84225,0.21417,0.79908,0.17403,0.82032,0.25663,0.59601,0.57004,0.49108,0.53764,0.90134,0.22999,0.91501,0.20685,0.93008,0.22022,0.93356,0.25981,0.91919,0.27882,0.90621,0.26546,0.94034,0.26053,0.93493,0.21667,0.91642,0.19315,0.89354,0.22324,0.90268,0.28635,0.91967,0.28222,0.90644,0.2962,0.94715,0.26552,0.1892,0.51827,0.1253,0.5336,0.88854,0.26797,0.4035,0.50822,0.05761,0.54906,0.0172,0.55923,0.02978,0.5555,0.08455,0.54236,0.11122,0.53595,0.13948,0.52938,0.17229,0.52198,0.21679,0.51441,0.29918,0.50373,0.3782,0.50732,0.48861,0.73646,0.53095,0.82964,0.85765,0.31721,0.85355,0.37353,0.87689,0.32129,0.83122,0.32125,0.83889,0.41,0.84846,0.43147,0.75173,0.49519,0.7661,0.4385,0.77472,0.39174,0.74737,0.55212],"triangles":[8,125,7,7,126,124,7,124,6,124,126,123,6,124,5,124,123,5,123,120,5,120,121,5,120,123,122,123,127,122,120,122,119,107,33,79,34,109,79,33,34,79,36,38,108,36,108,35,108,109,35,34,35,109,36,37,38,38,39,108,39,40,108,108,40,109,40,41,109,109,41,79,41,42,79,79,42,107,42,43,107,30,31,78,78,31,110,110,31,83,32,33,107,107,83,32,31,32,83,107,43,83,110,83,44,83,43,44,78,110,45,110,44,45,78,45,46,27,28,112,112,28,104,28,29,104,30,78,29,78,111,29,29,111,104,111,78,46,104,111,47,111,46,47,112,104,48,104,47,48,112,48,49,24,25,103,103,25,113,25,26,113,113,26,82,27,112,26,26,112,82,82,112,49,113,82,50,82,49,50,103,113,51,113,50,51,103,51,52,22,23,77,77,23,114,23,24,114,114,24,103,114,103,52,77,114,53,114,52,53,77,53,54,20,21,115,115,21,81,21,22,81,81,22,77,81,77,54,115,81,55,81,54,55,115,55,56,18,19,80,19,20,76,19,76,80,76,20,115,80,57,58,76,115,56,56,57,76,80,76,57,116,106,17,17,18,116,116,18,80,106,59,60,116,58,59,106,116,59,116,80,58,106,75,16,15,16,75,16,17,106,61,75,60,60,75,106,15,117,14,69,117,74,74,15,88,74,117,15,88,15,75,74,88,63,88,75,63,63,75,62,61,62,75,4,2,3,4,121,101,101,102,4,2,4,1,4,5,121,127,72,122,127,66,72,120,119,121,101,121,99,119,122,86,122,72,86,99,121,105,121,119,105,119,86,105,66,67,72,101,100,102,95,102,92,92,102,93,101,99,100,99,93,100,99,94,93,99,105,94,93,102,100,93,94,92,72,85,86,72,67,85,86,84,105,105,89,94,105,98,89,105,84,98,102,1,4,94,89,92,95,91,96,102,95,96,102,96,1,89,91,92,95,92,91,86,85,84,89,90,91,89,98,90,90,98,97,91,90,96,90,97,96,96,97,1,97,98,84,0,97,84,84,85,0,97,0,1,67,68,85,85,68,0,128,73,125,65,125,73,128,125,8,125,126,7,125,65,126,126,127,123,126,65,127,127,65,66,11,71,10,71,9,10,71,128,9,71,73,128,9,128,8,13,118,12,12,70,11,12,118,70,70,71,11,118,69,70,69,87,70,70,73,71,70,87,73,87,69,74,87,64,65,87,74,64,65,73,87,74,63,64,118,13,117,118,117,69,117,13,14],"vertices":[1,8,150.46,-173.4,1,1,8,103.13,-273.12,1,1,8,84.28,-312.84,1,1,8,-31.97,-315.07,1,1,8,-32.18,-272.15,1,1,39,132.3,-5.43,1,1,39,139.96,-40.09,1,2,6,212.35,-93.85,0.24458,39,119.18,-80.5,0.75542,3,6,186.02,-98.37,0.36683,7,-16.62,-116.93,0.104,39,116.54,-107.08,0.52917,3,6,159.12,-117.04,0.51003,7,-49.15,-113.15,0.13653,39,127.38,-137.99,0.35343,2,6,127.06,-161.22,0.92701,7,-102.41,-125.11,0.07299,2,2,216.16,-140.78,0.35624,6,-20.95,-165.39,0.64376,3,1,85.73,-187.22,0.27847,2,71.69,-181.28,0.64389,6,-157.81,-103.92,0.07763,3,1,-35.83,-172.97,0.43431,2,-50.64,-177.64,0.31361,58,-66.53,167.75,0.25208,3,1,-64.98,-169.1,0.46475,2,-80.01,-176.31,0.22315,58,-38.7,177.24,0.3121,4,1,-131.54,-50.02,0.15053,58,73.86,100.15,0.48259,59,10.83,99.84,0.2923,60,-47.78,112.45,0.07458,5,1,-178.13,-32.52,0.06246,58,123.37,105.18,0.20925,59,60.43,95.83,0.34319,60,-0.14,98.07,0.28064,61,-65.15,98.07,0.10446,4,58,160.26,114.97,0.09233,59,98.48,98.8,0.24709,60,37.68,92.94,0.4141,61,-27.33,92.94,0.24649,4,59,131.05,100.18,0.12837,60,69.81,87.42,0.37711,61,4.8,87.42,0.37128,62,-53.39,91.74,0.12323,4,59,159.96,102.29,0.05413,60,98.52,83.38,0.25843,61,33.51,83.38,0.43127,62,-25.07,85.53,0.25617,4,60,136.84,79.9,0.1282,61,71.83,79.9,0.35967,62,12.87,79.15,0.38245,63,-57.66,79.15,0.12968,3,61,103.32,76.25,0.24826,62,43.99,73.11,0.46617,63,-26.54,73.11,0.28557,4,61,136.14,72.06,0.11054,62,76.4,66.45,0.36597,63,5.87,66.45,0.41283,64,-61.89,69.04,0.11066,3,62,111.51,58.15,0.23548,63,40.98,58.15,0.49589,64,-27.14,59.31,0.26863,3,62,145.85,49.49,0.10482,63,75.32,49.49,0.42875,64,6.82,49.25,0.46643,3,63,95.48,44.18,0.27382,64,26.74,43.12,0.61831,65,-35.66,43.73,0.10787,3,63,114.65,40.1,0.1288,64,45.73,38.26,0.61461,65,-16.75,38.55,0.25659,2,64,66.7,34.36,0.51566,65,4.15,34.29,0.48434,3,64,83.81,29.78,0.27667,65,21.18,29.43,0.61411,66,-33.93,28.67,0.10922,3,64,101.09,25.22,0.11761,65,38.38,24.58,0.62148,66,-16.63,24.21,0.26091,2,65,56.06,21.59,0.51073,66,1.11,21.62,0.48927,3,65,71.62,17.57,0.27823,66,16.75,17.95,0.6147,73,-32.34,18.15,0.10707,3,65,87.75,14.64,0.11765,66,32.95,15.39,0.61537,73,-16.16,15.49,0.26698,2,66,50.17,13.87,0.48399,73,1.05,13.87,0.51601,2,66,67.02,11.23,0.26531,73,17.88,11.12,0.73469,2,66,84.54,9.03,0.10722,73,35.39,8.81,0.89278,1,73,51.5,7.67,1,1,73,73.46,4.83,1,1,73,73.4,1.11,1,1,73,72.83,-4.22,1,1,73,52.8,-7.3,1,2,66,85.31,-9.54,0.10902,73,36.04,-9.77,0.89098,2,66,65.83,-12.63,0.2678,73,16.54,-12.74,0.7322,2,66,48.86,-14.84,0.48663,73,-0.44,-14.84,0.51337,3,65,85.2,-18.4,0.12171,66,31.15,-17.7,0.61472,73,-18.17,-17.59,0.26357,3,65,69.41,-20.61,0.28363,66,15.42,-20.27,0.61168,73,-33.92,-20.06,0.10469,2,65,51.82,-22.53,0.51571,66,-2.13,-22.58,0.48429,3,64,99.03,-23.36,0.1217,65,35.5,-23.97,0.62236,66,-18.41,-24.39,0.25594,3,64,80.7,-25.82,0.28356,65,17.14,-26.12,0.61067,66,-36.72,-26.95,0.10577,2,64,59.32,-28.67,0.52367,65,-4.3,-28.6,0.47633,3,63,109.73,-30.49,0.13166,64,37.92,-32.07,0.6201,65,-25.75,-31.64,0.24824,3,63,89.69,-35.26,0.2786,64,17.7,-36.02,0.62027,65,-46.03,-35.25,0.10114,3,62,138.73,-38.75,0.11364,63,68.2,-38.75,0.4282,64,-3.91,-38.62,0.45816,3,62,104.51,-44.28,0.25002,63,33.98,-44.28,0.49059,64,-38.33,-42.75,0.25939,4,61,141.32,-44.19,0.10836,62,72.73,-49.86,0.38463,63,2.2,-49.86,0.4034,64,-70.32,-47.02,0.10361,4,60,173.49,-53.09,0.05317,61,108.48,-53.09,0.23336,62,39.31,-56.24,0.45758,63,-31.22,-56.24,0.25589,4,60,134.4,-63.07,0.13574,61,69.39,-63.07,0.35761,62,-0.43,-63.22,0.39109,63,-70.96,-63.22,0.11556,4,59,191.72,-49.04,0.05282,60,97.62,-71.24,0.26817,61,32.61,-71.24,0.42391,62,-37.72,-68.58,0.2551,4,59,161.85,-63.21,0.13529,60,65.44,-78.79,0.38705,61,0.43,-78.79,0.35973,62,-70.38,-73.65,0.11793,3,59,133.53,-75.44,0.29932,60,35.17,-84.77,0.45298,61,-29.84,-84.77,0.2477,4,58,202.03,-68.6,0.08571,59,106.37,-89.31,0.24457,60,5.7,-92.6,0.51385,61,-59.31,-92.6,0.15587,5,2,-167.93,155.52,0.05783,58,164.28,-99.61,0.38789,59,63.63,-112.98,0.2592,60,-41.07,-106.71,0.24394,61,-106.08,-106.71,0.05114,2,2,-100.78,139.1,0.17623,58,95.76,-108.83,0.82377,3,2,-13.46,117.74,0.51552,58,6.67,-120.82,0.41991,59,-95.22,-105.33,0.06457,3,2,54.53,115.7,0.71641,6,19.32,135.09,0.16571,58,-57.38,-143.74,0.11788,4,2,130.03,113.44,0.21394,6,75.83,84.97,0.42016,7,21.89,93.48,0.27903,8,-32.04,100.39,0.08688,3,6,124.35,121.37,0.08109,7,82.36,88.71,0.27214,8,26.73,85.37,0.64677,1,8,121.24,83.9,1,1,8,159.95,-35.53,1,3,1,-37.38,-76.87,0.45731,2,-60.53,-82.04,0.14887,58,-22.43,82.35,0.39382,2,1,94.49,-88.2,0.1695,2,71.83,-81.88,0.8305,2,2,174.37,-63.42,0.34256,6,-3.45,-79.22,0.65744,2,7,130.25,-45.05,0.12976,8,51.07,-54.61,0.87024,2,2,110.85,13.08,0.80225,6,-3.21,20.21,0.19775,3,1,-2.83,33.51,0.13931,2,-35.68,30.92,0.27972,58,-4.33,-31.88,0.58097,3,58,128.08,9.01,0.256,59,47.67,0.4,0.51782,60,-32.75,7.48,0.22618,3,60,95.24,-0.88,0.27638,61,30.23,-0.88,0.45612,62,-34.75,1.77,0.2675,4,61,135.79,6.68,0.10554,62,71.08,1.28,0.38067,63,0.55,1.28,0.41246,64,-69.87,4.14,0.10133,2,65,52.98,-0.04,0.51268,66,-1.48,-0.08,0.48732,2,66,66.58,0.23,0.26199,73,17.37,0.12,0.73801,4,59,143.1,13.6,0.12991,60,63.32,0.25,0.38542,61,-1.69,0.25,0.36974,62,-66.49,5.32,0.11494,3,61,102.18,2.77,0.24383,62,37.27,-0.07,0.48113,63,-33.26,-0.07,0.27504,3,63,111.3,0.71,0.12458,64,40.76,-0.96,0.63251,65,-22.38,-0.58,0.24291,3,65,86.62,-1,0.11304,66,32.18,-0.27,0.62723,73,-17.04,-0.16,0.25972,2,8,86.97,-113.36,0.936,39,14.27,56.97,0.064,1,8,108.8,-58.38,1,1,8,62.24,-86.11,1,1,2,38.16,21.93,1,1,58,52.57,-14.31,1,1,8,79.39,-188.21,1,1,8,92.9,-205.24,1,1,8,85.65,-224.43,1,1,8,63.18,-229.26,1,1,8,51.99,-211.3,1,1,8,59.29,-194.75,1,1,8,62.94,-237.84,1,1,8,87.79,-230.52,1,1,8,100.75,-206.86,1,1,8,83.05,-178.28,1,1,8,47.3,-190.53,1,1,8,50.07,-211.95,1,1,8,41.78,-195.38,1,1,8,60.25,-246.5,1,3,62,140.63,-0.06,0.10402,63,70.1,-0.06,0.43142,64,-0.43,-0.04,0.46457,3,64,80.81,0.61,0.28111,65,17.69,0.32,0.61786,66,-36.77,-0.51,0.10103,1,8,57.43,-172.46,1,4,58,160.72,14.66,0.07294,59,80.79,0.05,0.52904,60,-0.45,0.15,0.29423,61,-65.46,0.15,0.1038,2,66,49.27,0.15,0.48779,73,0.06,0.15,0.51221,1,73,51.5,0.78,1,2,66,84.66,0.48,0.10205,73,35.46,0.26,0.89795,3,65,69.45,-0.76,0.2776,66,15,-0.42,0.62336,73,-34.21,-0.2,0.09904,3,64,98.66,0.16,0.11065,65,35.53,-0.44,0.63549,66,-18.92,-0.87,0.25385,2,64,62.75,0,0.51638,65,-0.38,0.01,0.48362,3,63,91.57,0.8,0.27488,64,21.06,-0.07,0.62473,65,-42.07,0.64,0.10039,3,62,105.71,-0.22,0.24009,63,35.18,-0.22,0.50187,64,-35.33,1.22,0.25804,4,60,131.44,-0.1,0.12721,61,66.43,-0.1,0.36421,62,1.41,-0.21,0.39171,63,-69.12,-0.21,0.11687,3,59,112.05,6.85,0.30035,60,31.55,0.2,0.4476,61,-33.46,0.2,0.25205,4,1,-70.27,-69.99,0.36182,2,-93.89,-78.03,0.10243,58,10.09,90.8,0.43318,59,-53.58,102.18,0.10256,3,1,-19.42,-125.63,0.38084,2,-38.41,-129.05,0.41913,58,-60.18,118.05,0.20002,2,8,28.63,-133.95,0.896,39,65.1,21.69,0.104,1,39,80.22,-7.1,1,1,8,26.77,-158.31,1,2,8,25.69,-100.6,0.14301,39,39.76,-0.2,0.85699,1,39,77.89,-34.86,1,1,39,94.91,-37.38,1,2,6,128.53,-12.98,0.23822,7,-3.31,-14.85,0.76178,2,7,31.85,-26.55,0.92786,39,14.06,-103.08,0.07214,3,7,60.08,-32.18,0.73794,8,-15.86,-29.96,0.18482,39,6.77,-75.22,0.07724,2,6,104.32,-35.29,0.42642,7,-36.22,-15.59,0.57358],"hull":69}},"raptor-front-arm":{"raptor/raptor-front-arm":{"type":"mesh","uvs":[0.39563,0.1396,0.38771,0.30213,0.31231,0.41784,0.27287,0.47836,0.33389,0.4507,0.5488,0.35329,0.64093,0.31153,0.73024,0.3653,1,0.5277,1,0.86607,0.93243,1,0.86176,0.80967,0.75576,0.99765,0.71748,1,0.70276,0.77443,0.62032,0.73448,0.58793,0.64519,0.53561,0.6582,0.13449,0.75798,0,0.69219,0.01846,0.56358,0.05499,0.30918,0,0.27863,0,0.12423,0,0,0.19596,0,0.40243,0,0.24536,0.19241,0.21679,0.0811],"triangles":[6,7,16,6,16,5,15,16,7,7,14,15,8,14,7,11,14,8,11,8,9,12,14,11,13,14,12,10,11,9,17,4,5,16,17,5,18,19,3,18,3,4,18,4,17,0,28,26,23,25,28,28,25,26,23,24,25,27,28,0,27,22,23,27,23,28,1,27,0,21,22,27,21,27,1,2,21,1,2,20,21,3,20,2,19,20,3],"vertices":[2,21,3.07,31.88,0.51075,6,66.56,-109.48,0.48925,1,21,35.87,35.63,1,2,21,60.94,27.12,0.84641,22,46.49,31.13,0.15359,2,21,74.06,22.67,0.34921,22,36.5,21.54,0.65079,3,21,67.01,31.59,0.10938,22,47.67,23.69,0.78125,31,-40.94,-19.44,0.10938,2,22,86.98,31.25,0.65079,31,-25.75,17.61,0.34921,2,22,103.84,34.49,0.34375,31,-19.24,33.5,0.65625,2,22,114.04,19.51,0.10938,31,-1.12,33.84,0.89063,1,31,53.62,34.88,1,1,31,96.03,-19.16,1,1,31,104.2,-47.32,1,1,31,71.34,-23.98,1,1,31,81.39,-64.61,1,1,31,76.81,-68.82,1,1,31,46.66,-34.26,1,2,22,73.14,-45.76,0.10938,31,31.14,-36.12,0.89063,2,22,73.98,-26.91,0.34375,31,15.82,-25.1,0.65625,2,22,65.11,-26.69,0.65079,31,10.78,-32.41,0.34921,3,21,133.56,9.13,0.10938,22,-2.94,-25.03,0.78125,31,-27.85,-88.47,0.10938,2,21,123.67,-14.43,0.34921,22,-19.29,-5.39,0.65079,2,21,97.41,-15.44,0.84641,22,-8.08,18.38,0.15359,1,21,45.47,-17.43,1,2,21,40.69,-27.18,0.45035,6,-1.69,-93.8,0.54965,2,21,-2.74,-29.64,0.44352,6,19,-72.94,0.55648,1,6,32.12,-48.46,1,1,6,57.57,-67.43,1,1,6,84.38,-87.42,1,2,21,16.44,5.22,0.71821,6,46.31,-101.87,0.28179,2,21,-4.52,5.32,0.48851,6,52.82,-81.95,0.51149],"hull":27}},"raptor-front-leg":{"raptor/raptor-front-leg":{"type":"mesh","uvs":[0.55117,0.17818,0.6279,0.36027,0.66711,0.4533,0.6488,0.51528,0.53554,0.56894,0.32335,0.66947,0.28674,0.72087,0.32539,0.80401,0.36258,0.80144,0.42056,0.79744,0.61015,0.78436,0.73352,0.81335,0.84813,0.84029,1,0.93855,0.732,0.92345,0.62439,0.91738,0.72813,1,0.58574,1,0.47086,0.98249,0.36708,0.96668,0.26307,0.95082,0.16267,0.93552,0.03859,0.72238,0,0.66947,0.0374,0.62999,0.1647,0.49563,0.23732,0.45681,0.2702,0.43923,0.28064,0.43365,0.223,0.40571,0.12565,0.35851,0,0.2976,0,0.1524,0,0,0.32132,0,0.32222,0.22778,0.44931,0.38031,0.47664,0.44362,0.4615,0.47375,0.35106,0.53247,0.20091,0.65257,0.18528,0.72148,0.25222,0.86314,0.30942,0.88124,0.55694,0.89613,0.55858,0.89208,0.47493,0.8534,0.6059,0.91526,0.39706,0.8913,0.1323,0.09352,0.36997,0.45346,0.37163,0.43828,0.32516,0.39424,0.2376,0.34426,0.34066,0.47415,0.51677,0.90503,0.07821,0.26333,0.05796,0.13086,0.09601,0.05963,0.29303,0.03825],"triangles":[46,9,10,45,46,10,44,46,45,55,46,44,15,47,45,10,15,45,44,45,47,55,44,47,11,15,10,14,15,11,14,11,12,14,12,13,48,8,9,48,9,46,48,43,8,48,46,55,19,43,48,20,43,19,18,48,55,19,48,18,17,55,47,18,55,17,17,47,15,16,17,15,22,24,41,23,24,22,42,41,6,42,6,7,43,42,7,43,7,8,21,22,41,21,41,42,20,42,43,21,42,20,50,28,51,27,28,50,38,51,37,50,51,38,54,27,50,26,27,54,3,37,2,38,37,3,39,54,50,39,50,38,4,38,3,39,38,4,40,25,26,24,25,40,39,40,26,39,26,54,5,40,39,5,39,4,6,40,5,41,24,40,41,40,6,59,34,0,34,58,33,59,58,34,49,58,59,57,33,58,57,58,49,32,33,57,56,57,49,32,57,56,35,59,0,49,59,35,56,49,35,31,32,56,53,56,35,30,56,53,31,56,30,36,35,0,36,0,1,52,53,35,36,52,35,29,30,53,29,53,52,28,29,52,51,52,36,28,52,51,37,36,1,51,36,37,37,1,2],"vertices":[2,25,128.03,88.47,0.85041,1,158.83,-71.92,0.14959,2,25,219.55,53.15,0.77988,26,-48.05,-38.59,0.22012,2,25,266.31,35.11,0.53545,26,-36.73,10.22,0.46455,2,25,286.89,9.8,0.35167,26,-14.56,34.15,0.64833,2,25,281.55,-41.24,0.09228,26,36.71,36,0.90772,3,25,271.54,-136.86,0.05787,26,132.77,39.48,0.71426,27,35,78.76,0.22788,3,26,158.22,55.17,0.5308,27,52.66,54.64,0.38143,28,7.02,85.54,0.08776,5,26,167.14,99.49,0.21499,27,97.55,49.25,0.35358,28,28.72,45.88,0.14221,29,-21.26,49.99,0.22491,30,-72.3,25.96,0.06432,5,26,154.23,105.56,0.07538,27,102.57,62.61,0.23051,28,42.51,49.56,0.28379,29,-7.07,51.4,0.27005,30,-58.17,28.03,0.14027,4,27,109.72,83.4,0.11607,28,64.09,55.24,0.08124,29,15.13,53.52,0.36962,30,-36.1,31.19,0.43307,1,30,35.81,41.81,1,1,30,83.66,29.43,1,1,30,128.11,17.93,1,1,30,188.73,-29.42,1,2,29,145.37,-10.99,0.34248,30,84.02,-27.11,0.65752,2,29,93.3,-7.6,0.48,30,44.87,-26.18,0.52,2,29,133.18,-49.83,0.776,30,86.69,-66.48,0.224,2,29,78.79,-50.15,0.768,30,32.38,-69.36,0.232,2,29,35.36,-41.46,0.88989,30,-9.88,-62.73,0.11011,1,29,-4.92,-33.56,1,3,27,155.05,-5.14,0.35918,28,17.88,-32.51,0.30633,29,-44.62,-25.61,0.3345,4,26,254.98,126.28,0.10155,27,131.22,-36.21,0.54212,28,-21.25,-31.18,0.20873,29,-83.02,-17.98,0.1476,3,26,240.34,7.81,0.25587,27,11.94,-30.99,0.61615,28,-86.32,68.91,0.12798,2,26,239.27,-23.1,0.45486,27,-18.96,-32.37,0.54514,3,25,187.65,-209.74,0.09777,26,216.67,-33.36,0.58893,27,-30.98,-10.65,0.3133,2,25,163.86,-128.68,0.19603,26,139.75,-68.26,0.80397,2,25,165.75,-94.49,0.31963,26,105.59,-71.26,0.68037,2,25,166.4,-79.07,0.46225,26,90.23,-72.77,0.53775,2,25,166.49,-74.17,0.53786,26,85.43,-73.29,0.46214,2,25,141.54,-82.47,0.73138,26,97.13,-96.82,0.26862,2,25,99.76,-97.08,0.85324,26,117.34,-136.23,0.14676,2,25,45.01,-114.56,0.83615,1,-51.09,-135.29,0.16385,1,1,-42.95,-58.39,1,1,1,-52.66,17.56,1,1,1,70.07,18.78,1,1,25,93.55,4.14,1,2,25,185.14,-6.67,0.75462,26,15.99,-64.28,0.24539,2,25,217.11,-18.75,0.50845,26,23.47,-30.93,0.49155,2,25,225.64,-32.92,0.32528,26,36.31,-20.51,0.67472,2,25,223,-84.74,0.20193,26,87.97,-15.86,0.79807,3,25,235.62,-168.07,0.08091,26,168.7,8.29,0.57148,27,6.75,40.47,0.34761,3,26,191.8,35.81,0.32545,27,36.01,19.63,0.57243,28,-31.15,78.74,0.10211,4,26,206.64,111.54,0.10808,27,112.69,10.83,0.52068,28,6.26,11.23,0.23518,29,-49.03,19.43,0.13606,3,27,130.61,26.42,0.35068,28,29.36,5.72,0.28241,29,-27.13,10.26,0.36691,2,29,67.47,3.17,0.384,30,18.56,-16.63,0.616,1,30,19.07,-14.52,1,2,29,36.01,24.95,0.384,30,-13.89,3.64,0.616,2,29,86.23,-6.55,0.488,30,37.76,-25.46,0.512,4,26,164.9,153.55,0.02264,27,151.19,56,0.23908,28,65.44,5.56,0.19254,29,8.45,4.28,0.54574,2,25,-9.28,-17.51,0.22806,1,7.72,-30.86,0.77194,2,25,195.91,-53.82,0.42369,26,61.12,-47.06,0.57631,2,25,190.1,-48.45,0.53231,26,56.62,-53.56,0.46769,2,25,161.27,-48.26,0.79874,26,60.44,-82.13,0.20126,2,25,120.38,-58.54,0.85455,26,76.31,-121.19,0.14545,2,25,197.37,-69.23,0.3355,26,76.18,-43.47,0.6645,5,26,131.21,175.78,0.00966,27,167.22,97.41,0.10203,28,97.38,0.84,0.08217,29,54.09,-2.79,0.51264,30,4.74,-23.22,0.29349,3,25,49.5,-83.17,0.6783,1,-17.26,-114.16,0.27193,26,110.66,-187.93,0.04977,3,25,-9.83,-51.31,0.41821,1,-21.43,-46.95,0.58033,26,87.4,-251.12,0.00145,2,25,-31.44,-20.43,0.27617,1,-6.57,-12.31,0.72383,2,25,0.92,47.46,0.41417,1,68.18,-4.06,0.58583],"hull":35}},"raptor-hindleg-back":{"raptor/raptor-hindleg-back":{"type":"mesh","uvs":[0.45041,0.09352,0.56934,0.23361,0.65294,0.47297,0.66354,0.50822,0.63175,0.54255,0.32384,0.69723,0.30069,0.73876,0.27934,0.77704,0.30417,0.83513,0.31059,0.85014,0.34101,0.85047,0.45165,0.85164,0.59556,0.81882,0.91177,0.92548,1,1,0.56337,0.96427,0.4835,0.98261,0.29879,0.98027,0.22808,0.98389,0.15998,0.98738,0.15424,0.95547,0.13895,0.87048,0.07371,0.78726,0,0.753,0,0.7049,0,0.671,0.11876,0.64653,0.16535,0.5266,0.28496,0.47398,0.29011,0.45774,0.29427,0.4446,0.20635,0.40396,0.06129,0.33691,0,0.25247,0,0,0.30793,0,0.276,0.20262,0.40398,0.31122,0.48439,0.45964,0.48318,0.48384,0.47029,0.51062,0.22698,0.67328,0.17142,0.7242,0.17122,0.78242,0.22996,0.89469,0.24677,0.90829,0.28672,0.9146,0.46583,0.91414],"triangles":[15,13,14,16,47,15,15,12,13,15,47,12,18,46,17,18,45,46,17,47,16,17,46,47,47,10,11,47,46,10,47,11,12,45,18,19,44,45,20,20,45,19,20,21,44,46,9,10,46,45,9,45,44,9,21,43,44,44,8,9,44,7,8,44,43,7,21,22,43,43,22,42,43,42,7,22,23,24,24,42,22,7,42,6,42,41,6,6,41,5,24,26,42,42,26,41,24,25,26,5,40,4,5,41,40,41,28,40,26,27,41,41,27,28,40,39,4,28,29,40,40,29,39,4,39,3,39,2,3,29,30,39,39,38,2,39,30,38,38,1,2,30,37,38,38,37,1,30,31,37,31,36,37,31,32,36,32,33,36,37,0,1,37,36,0,33,34,36,36,35,0,36,34,35],"vertices":[1,44,53.94,69.16,1,1,44,126.23,67.31,1,2,44,226.42,31.14,0.9375,45,-30.88,-1.11,0.0625,2,44,240.84,25.33,0.7,45,-25.65,13.52,0.3,2,44,246.67,8.06,0.3,45,-8.61,20.02,0.7,3,44,240.82,-115.25,0.0625,45,114.81,19.01,0.875,46,9.48,59.16,0.0625,2,45,131.07,29.69,0.7,46,22.12,44.36,0.3,2,45,146.07,39.54,0.3,46,33.76,30.71,0.7,3,45,152.6,65.01,0.12567,46,59.85,27.41,0.75203,47,15.86,48.05,0.1223,3,45,154.29,71.6,0.05444,46,66.6,26.56,0.78402,47,16.73,41.31,0.16154,3,46,71.2,35.76,0.64716,47,26.79,39.17,0.1317,48,-67.33,18.96,0.22114,3,46,87.93,69.21,0.0625,47,63.37,31.39,0.675,48,-30.18,23.3,0.2625,2,47,113.82,35.72,0.10381,48,16.23,43.56,0.89619,1,48,128.14,12.02,1,1,48,161.85,-15.82,1,2,47,90.99,-23.36,0.01381,48,13.52,-19.72,0.98619,2,47,62.98,-25.82,0.7,48,-12.23,-31.02,0.3,3,46,115.12,-1.34,0.08333,47,1.94,-12.66,0.83333,48,-74.27,-38.11,0.08333,2,46,106.11,-23.53,0.3,47,-21.81,-9.53,0.7,2,46,97.44,-44.91,0.7,47,-44.67,-6.51,0.3,2,46,84.26,-40.69,0.9375,47,-43.91,7.3,0.0625,1,46,49.19,-29.47,1,2,45,206.75,5.37,0.13333,46,7.44,-33.78,0.86667,2,45,219.64,-20.52,0.36111,46,-16.64,-49.81,0.63889,2,45,208.41,-37.83,0.72083,46,-35.22,-40.82,0.27917,2,45,200.49,-50.03,0.91667,46,-48.31,-34.49,0.08333,1,45,161.11,-36.98,1,2,44,150.1,-116.77,0.08333,45,119.88,-71.55,0.91667,2,44,154.99,-70.72,0.42846,45,73.68,-68.48,0.57154,2,44,150.31,-65.27,0.35605,45,68.43,-73.37,0.64395,2,44,146.52,-60.87,0.59148,45,64.18,-77.33,0.40852,2,44,115.13,-75.09,0.8446,45,79.61,-108.13,0.1554,1,44,63.33,-98.54,1,1,44,21.78,-94.56,1,1,44,-66.69,-32.05,1,1,44,-6.63,52.97,1,1,44,58.15,-6.01,1,1,44,121.17,2.44,1,1,44,188.87,-12.1,1,2,44,197.12,-18.43,0.7,45,19.79,-28.44,0.3,2,44,203.99,-28.62,0.3,45,29.7,-21.18,0.7,1,45,136.67,-7.43,1,2,45,164.32,0.67,0.7,46,-2.53,7.74,0.3,2,45,177.98,21.58,0.25,46,19.92,-3.2,0.75,1,46,71.94,-6.3,1,2,46,79.66,-3.72,0.7,47,-9.29,21.05,0.3,2,46,87.98,7.26,0.3125,47,3.43,15.76,0.6875,3,46,114.17,61.85,0.04,47,62.84,4.16,0.7,48,-21.96,-2.67,0.26],"hull":36}},"raptor-horn":{"raptor/raptor-horn":{"x":156.21,"y":74.11,"rotation":-137.26,"width":363,"height":159}},"raptor-horn-back":{"raptor/raptor-horn-back":{"x":121.43,"y":83.01,"rotation":-132.22,"width":351,"height":153}},"raptor-jaw":{"raptor/raptor-jaw":{"type":"mesh","uvs":[0.40985,0.2217,0.42215,0.3988,0.67895,0.53819,0.75891,0.62838,0.83469,0.585,0.81705,0.81244,0.63281,0.94488,0.39908,0.96947,0.19457,0.89404,0.2161,0.6497,0,0.46112,0,0,0.26069,0,0.19457,0.29385,0.60678,0.81243,0.42896,0.88938],"triangles":[13,11,12,10,11,13,13,12,0,13,0,1,9,13,1,10,13,9,14,1,2,14,2,3,9,1,14,5,3,4,14,3,5,15,9,14,8,9,15,6,14,5,15,14,6,7,8,15,7,15,6],"vertices":[1,39,28.6,68.86,1,1,39,69.66,38.95,1,1,39,150.72,72.89,1,1,39,186.17,74.8,1,1,39,191.66,100.45,1,1,39,237.78,54.27,1,1,39,230.32,-13.08,1,1,39,189.56,-72,1,1,39,132.76,-105.61,1,1,39,83.72,-55.39,1,2,39,-21.32,-87.34,0.32267,8,-19.53,-0.74,0.67733,1,8,113.45,16.95,1,1,8,116.37,-62.49,1,1,39,1.86,5.44,1,1,39,196.29,5.37,1,1,39,177.99,-50.23,1],"hull":13}},"raptor-jaw-inside":{"raptor/raptor-jaw":{"type":"mesh","uvs":[0.55999,0.75741,0.43054,0.61202,0.33622,0.50344,0.42215,0.3988,0.67895,0.53819,0.75891,0.62838,0.83469,0.585,0.82502,0.70963,0.77983,0.76564,0.68254,0.81468],"triangles":[1,3,4,2,3,1,7,5,6,0,1,4,0,4,5,8,5,7,9,0,5,8,9,5],"vertices":[89.41,-11.77,32.16,-14.98,-10.13,-16.83,-15.99,22.52,65.07,56.46,100.52,58.37,106.01,84.02,131.28,58.71,134.58,37.84,126.08,6.14],"hull":10}},"raptor-mouth-inside":{"raptor/raptor-mouth-inside":{"type":"mesh","uvs":[1,0.29017,0.37217,1,0,1,0,0,1,0],"triangles":[1,2,3,0,1,3,3,4,0],"vertices":[1,8,26.56,-211.68,1,1,39,130.45,-7.83,1,1,39,109.72,-24.21,1,1,8,47.22,-139.7,1,1,8,50.33,-210.63,1],"hull":5}},"raptor-saddle-noshadow":{"raptor/raptor-saddle-noshadow":{"x":80.84,"y":10.63,"rotation":-88.65,"width":326,"height":375}},"raptor-saddle-strap-front":{"raptor/raptor-saddle-strap-front":{"x":128.83,"y":-4.72,"rotation":61.29,"width":114,"height":189}},"raptor-saddle-strap-rear":{"raptor/raptor-saddle-strap-rear":{"type":"mesh","uvs":[0.855,0.06803,1,0.13237,1,0.20266,0.95982,0.26524,0.88584,0.38045,0.80684,0.46413,0.74038,0.53454,0.81676,0.58951,0.51962,1,0.45161,1,0.01739,0.84071,0,0.8089,0.24646,0.3664,0.37921,0.39151,0.42457,0.32099,0.49229,0.21571,0.57673,0.10986,0.66437,0,0.70169,0,0.56029,0.46322,0.68822,0.29773,0.76846,0.18722,0.6153,0.39206],"triangles":[7,8,6,9,10,13,13,11,12,6,8,19,8,9,19,9,13,19,13,10,11,19,22,6,13,14,19,19,14,22,6,22,5,22,20,5,5,20,4,14,15,22,22,15,20,20,21,4,15,16,20,4,21,3,20,16,21,2,3,0,3,21,0,0,1,2,21,16,18,16,17,18,21,18,0],"vertices":[1,52,3.91,-3.27,1,1,52,4.25,15.05,1,1,52,13.24,20.29,1,2,52,23.43,21.2,0.7,53,-15.2,21.22,0.3,3,52,41.12,22.88,0.3,53,2.49,22.9,0.6375,54,-33.83,24.97,0.0625,3,52,52.07,21.72,0.0625,53,13.44,21.75,0.6375,54,-22.98,23.12,0.3,2,53,18.39,20.76,0.25,54,-18.1,21.82,0.75,1,54,-18.76,33.09,1,1,54,49.93,31.57,1,1,54,53.21,25,1,1,54,53.11,-27.49,1,1,54,49.74,-31.27,1,1,54,-20.74,-36.77,1,1,54,-23.83,-22.28,1,3,52,53.48,-24.62,0.0625,53,14.85,-24.6,0.575,54,-24.52,-23.22,0.3625,3,52,41.45,-26.12,0.3,53,2.81,-26.1,0.6375,54,-36.62,-23.95,0.0625,2,52,24.38,-26.12,0.7,53,-14.25,-26.1,0.3,1,52,5.57,-26.13,1,1,52,3.54,-22.65,1,1,54,-23.09,-0.04,1,2,52,41.67,-1.73,0.3125,53,3.03,-1.7,0.6875,2,52,23.85,-2.47,0.7,53,-14.78,-2.45,0.3,2,53,13.95,-1.5,0.64583,54,-23.94,-0.11,0.35417],"hull":19}},"raptor-saddle-w-shadow":{"raptor/raptor-saddle-w-shadow":{"type":"mesh","uvs":[0.29849,0.09165,0.25764,0.13843,0.32431,0.28893,0.45069,0.49094,0.56076,0.52519,0.69936,0.49802,0.71567,0.41179,0.83797,0.32673,0.91271,0.31019,1,0.48621,1,0.58072,0.93717,0.76264,0.88417,0.87014,0.73741,0.92212,0.28898,0.87014,0.16257,0.80317,0.10295,0.69443,0.10449,0.63657,0.2315,0.61431,0.10559,0.39199,0,0.35689,0,0.27026,0.11186,0,0.17021,0,0.24413,0,0.46427,0.84179,0.56755,0.84415,0.94668,0.62443,0.9263,0.39407,0.2137,0.18682,0.18239,0.28963,0.21653,0.33824,0.32307,0.44535,0.38606,0.52911,0.39069,0.55971,0.36568,0.6032,0.38235,0.62414,0.43979,0.65474,0.53891,0.67729,0.62321,0.6789,0.70381,0.65555,0.74827,0.62655,0.78996,0.58387,0.80571,0.53233,0.79737,0.50334,0.75661,0.47515,0.72789,0.47837,0.20634,0.08376,0.17577,0.12886,0.13686,0.18765,0.11185,0.28751,0.17762,0.36321,0.26192,0.46066,0.30546,0.50012,0.31565,0.55488,0.79181,0.69018,0.86592,0.60562,0.89927,0.50817,0.84925,0.44294,0.81868,0.39462],"triangles":[47,23,24,47,24,0,47,22,23,1,47,0,48,47,1,29,48,1,48,49,22,47,48,22,49,48,29,21,22,49,50,21,49,29,1,2,30,49,29,30,29,2,50,49,30,31,30,2,20,21,50,51,50,30,51,30,31,19,20,50,19,50,51,8,9,28,7,8,28,59,7,28,59,6,7,58,59,28,32,31,2,3,32,2,52,31,32,51,31,52,45,6,59,45,59,58,46,6,45,46,5,6,53,52,32,33,53,32,44,45,58,57,58,28,57,28,9,44,58,57,3,33,32,43,44,57,54,53,33,34,33,3,54,33,34,57,9,10,46,44,43,44,46,45,35,54,34,56,43,57,27,56,57,42,43,56,52,19,51,18,52,53,18,53,54,18,19,52,36,35,34,10,27,57,46,42,5,43,42,46,41,5,42,37,34,3,37,3,4,36,34,37,40,5,41,4,5,40,38,37,4,39,38,4,40,39,4,55,42,56,41,42,55,11,56,27,55,56,11,11,27,10,18,16,17,15,16,18,25,37,38,26,25,38,39,26,38,18,36,14,35,18,54,36,18,35,14,36,37,14,37,25,15,18,14,12,55,11,55,13,40,55,40,41,13,55,12,39,40,13,26,39,13,25,26,13,14,25,13],"vertices":[232.38,79.91,214.53,92.81,158.62,69.75,83.86,26.78,71.86,-9.39,83.11,-54.33,115.57,-58.88,148.39,-97.99,155.17,-122.2,89.85,-152.2,54.42,-153.04,-14.27,-134.17,-54.97,-117.85,-75.59,-70.47,-59.55,76.13,-35.41,117.92,4.9,138.32,26.6,138.32,35.92,97.13,118.3,140.13,130.65,174.85,163.13,175.61,265.31,141.55,265.76,122.53,266.32,98.44,-47.57,19.25,-47.66,-14.43,37.62,-136.05,123.83,-127.37,196.05,106.7,157.27,116,139.3,104.44,99.97,68.78,69.05,47.51,57.62,45.73,41.12,53.49,33.4,47.88,22.37,28.89,14.67,-3.62,14.72,-31.11,24.09,-57.17,35.3,-71.4,51.62,-84.61,71.07,-89.29,81.87,-86.32,92.13,-72.78,90.7,-63.45,234.63,110.01,217.49,119.58,195.15,131.74,157.52,139.01,129.65,116.9,93.76,88.57,79.3,74.03,58.85,70.23,11.79,-86.16,44.06,-109.56,80.84,-119.57,104.91,-102.69,122.79,-92.3],"hull":25}},"raptor-tongue":{"raptor/raptor-tongue":{"type":"mesh","uvs":[0.35242,0.21561,0.4794,0.44246,0.62072,0.61177,0.80563,0.75374,1,0.90297,1,1,0.8971,1,0.72055,0.92255,0.50668,0.82872,0.30402,0.70725,0.10537,0.57889,0,0.50622,0,0,0.26225,0],"triangles":[8,7,6,6,4,5,4,6,3,6,7,3,7,8,3,8,2,3,9,10,1,8,9,2,9,1,2,1,10,0,10,11,0,0,12,13,0,11,12],"vertices":[2,67,3.64,27.05,0.6875,68,-47.27,33.88,0.3125,3,67,39.1,19.46,0.3125,68,-13.42,20.87,0.625,69,-51.54,33.38,0.0625,3,67,71.56,19.03,0.0625,68,18.59,15.4,0.625,69,-21.56,20.92,0.3125,2,68,55.03,16.86,0.3125,69,14.29,14.24,0.6875,2,68,93.34,18.4,0.08333,69,51.98,7.21,0.91667,1,69,56.09,-4.51,1,2,68,85.07,-1.49,0.08333,69,39.49,-10.33,0.91667,2,68,54.23,-9.18,0.3125,69,7.71,-10.97,0.6875,3,67,75.14,-14.72,0.0625,68,16.87,-18.5,0.625,69,-30.77,-11.74,0.3125,3,67,38.8,-25.81,0.3125,68,-20.75,-23.8,0.625,69,-68.63,-8.54,0.0625,2,67,2.4,-35.78,0.6875,68,-58.25,-27.99,0.3125,2,67,-17.29,-40.63,0.91667,68,-78.46,-29.72,0.08333,1,67,-59.92,8.19,1,2,67,-26.14,37.69,0.91667,68,-75.02,49.02,0.08333],"hull":14}},"raptow-jaw-tooth":{"raptor/raptor-jaw-tooth":{"x":217.25,"y":97.37,"rotation":49.5,"width":73,"height":96}},"spineboy-torso":{"raptor/torso":{"x":55.88,"y":4.87,"rotation":-104.14,"width":108,"height":182}},"stirrup-back":{"raptor/stirrup-back":{"x":53.2,"y":31.34,"rotation":-21.13,"width":87,"height":69}},"stirrup-front":{"raptor/stirrup-front":{"x":36.14,"y":20.39,"rotation":-21.13,"width":89,"height":100}},"stirrup-strap":{"raptor/stirrup-strap":{"type":"mesh","uvs":[0.36823,0.27894,0.45738,0.38897,0.54452,0.49652,0.67872,0.59135,0.81977,0.69102,1,0.77344,1,1,0.77957,1,0.6373,0.8163,0.53364,0.72349,0.40534,0.60861,0.30886,0.52535,0.2105,0.44048,0,0.26245,0,0,0.30637,0,0.20242,0.23001],"triangles":[2,10,1,9,10,2,9,2,3,8,9,3,8,3,4,7,8,4,7,4,5,7,5,6,16,14,15,13,14,16,16,15,0,12,16,0,12,0,1,13,16,12,11,12,1,10,11,1],"vertices":[2,56,24.72,8.04,0.80345,57,-17.42,11.02,0.19655,2,56,37.95,8.04,0.59979,57,-4.37,8.87,0.40021,2,56,50.88,8.05,0.36895,57,8.39,6.77,0.63105,2,56,65.92,12.27,0.17748,57,23.92,8.48,0.82252,2,56,81.73,16.71,0.05943,57,40.24,10.28,0.94057,2,56,98.83,25.04,0.0121,57,58.47,15.72,0.9879,2,56,114.44,11.58,0.00191,57,71.67,-0.11,0.99809,2,56,100.47,-4.61,0.01818,57,55.25,-13.81,0.98182,2,56,78.8,-4.14,0.07488,57,33.95,-9.81,0.92512,2,56,65.83,-6.24,0.2028,57,20.81,-9.77,0.7972,2,56,49.79,-8.84,0.39972,57,4.56,-9.71,0.60028,2,56,37.94,-10.97,0.62658,57,-7.48,-9.89,0.37342,2,56,25.86,-13.15,0.82035,57,-19.76,-10.07,0.17965,2,56,0.25,-18.03,0.95289,57,-45.82,-10.7,0.04711,2,56,-17.84,-2.43,0.9771,57,-61.11,7.64,0.0229,2,56,1.58,20.07,0.94775,57,-38.29,26.68,0.05225,2,56,10.84,-1.24,0.9771,57,-32.63,4.14,0.0229],"hull":16}},"tail-shadow":{"raptor/raptor-tail-shadow":{"type":"mesh","uvs":[1,0.50387,0.89276,1,0.82069,0.96993,0.72927,0.92231,0.64083,0.87624,0.54988,0.83667,0.47106,0.80022,0.40123,0.7783,0.32238,0.75321,0.25301,0.73107,0.20375,0.71883,0.11753,0.71414,0,0.72519,0,0.66338,0.10358,0.57282,0.18201,0.5128,0.23534,0.47512,0.30555,0.4281,0.37968,0.37769,0.44858,0.3281,0.51987,0.2798,0.61007,0.21367,0.70725,0.14608,0.80109,0.08082,0.90134,0],"triangles":[10,11,14,13,14,11,10,14,15,12,13,11,9,10,15,8,9,16,9,15,16,8,16,17,7,8,17,6,7,18,7,17,18,6,18,19,5,6,19,4,20,21,4,5,20,5,19,20,2,22,23,3,21,22,4,21,3,3,22,2,23,24,0,23,0,2,1,2,0],"vertices":[1,62,-0.16,6.41,1,2,62,43.27,66.87,0.7548,63,-27.26,66.87,0.2452,2,62,70.22,61.76,0.53679,63,-0.31,61.76,0.46321,3,62,104.36,54.09,0.13235,63,33.83,54.09,0.82952,64,-34.46,55.55,0.03813,3,62,137.38,46.66,0.00439,63,66.85,46.66,0.62467,64,-1.77,46.78,0.37094,3,63,100.85,40.01,0.0995,64,31.93,38.73,0.87982,65,-30.54,39.26,0.02068,3,63,130.31,33.97,4.6E-4,64,61.12,31.5,0.57172,65,-1.48,31.52,0.42782,2,64,87.09,26.38,0.04275,65,24.4,25.98,0.95725,2,65,53.62,19.67,0.64526,66,-1.28,19.64,0.35474,2,65,79.33,14.11,0.00246,66,24.54,14.67,0.99754,2,66,42.92,11.57,0.84959,73,-6.22,11.61,0.15041,1,73,26.1,8.09,1,1,73,70.35,5.47,1,1,73,69.65,-2.28,1,1,73,29.73,-10.12,1,2,66,48.91,-14.99,0.57427,73,-0.4,-14.98,0.42573,1,66,28.47,-18.03,1,2,65,55.57,-21.74,0.40024,66,1.6,-21.71,0.59976,3,64,90.66,-24.62,0.00715,65,27.1,-25.08,0.98709,66,-26.78,-25.69,0.00576,2,64,64.22,-28.51,0.5083,65,0.61,-28.53,0.4917,3,63,108.73,-30.63,0.01005,64,36.91,-32.16,0.9784,65,-26.76,-31.72,0.01155,2,63,74.35,-37.29,0.50429,64,2.29,-37.41,0.49571,3,62,107.88,-44.01,0.04245,63,37.35,-44.01,0.94684,64,-34.96,-42.61,0.01071,2,62,72.14,-50.49,0.52154,63,1.61,-50.49,0.47846,2,62,33.89,-58.82,0.93522,63,-36.64,-58.82,0.06478],"hull":25}},"visor":{"raptor/visor":{"x":99.13,"y":6.51,"rotation":-70.58,"width":261,"height":168}}}}],"animations":{"gun-grab":{"slots":{"front-hand":{"attachment":[{"name":"raptor/front-open-hand"},{"time":0.2333,"name":"raptor/gun"}]},"gun":{"attachment":[{"time":0.2333,"name":null}]}},"bones":{"front-hand2":{"rotate":[{},{"time":0.1333,"angle":12.34},{"time":0.2333,"angle":-89.55,"curve":"stepped"},{"time":0.2667,"angle":-89.55},{"time":0.3333,"angle":-79.79},{"time":0.6667,"angle":-10.18}],"scale":[{},{"time":0.2333,"x":0.938,"y":0.938},{"time":0.6667}]},"front-arm":{"rotate":[{},{"time":0.1,"angle":-32},{"time":0.2333,"angle":223.11,"curve":0.25,"c3":0.75},{"time":0.3333,"angle":155.19,"curve":0.25,"c3":0.75},{"time":0.5333,"angle":246.14,"curve":0.184,"c2":0.34,"c3":0.75},{"time":0.6667,"angle":-56.75}],"translate":[{},{"time":0.2333,"x":6.5,"y":-2.66},{"time":0.3333,"x":6.84,"y":4.8},{"time":0.6667}]},"front-bracer":{"rotate":[{},{"time":0.2333,"angle":86.02,"curve":"stepped"},{"time":0.2667,"angle":86.02},{"time":0.3333,"angle":114.95},{"time":0.5333,"angle":81.86,"curve":0.25,"c3":0.75},{"time":0.6667,"angle":34.74}]}},"ik":{"front-arm-goal":[{"mix":0}]}},"gun-holster":{"slots":{"front-hand":{"attachment":[{"name":"raptor/gun"},{"time":0.3,"name":"raptor/front-open-hand"},{"time":0.6667,"name":"raptor/front-hand"}]},"gun":{"attachment":[{"name":null},{"time":0.3,"name":"raptor/gun-nohand"}]}},"bones":{"front-hand2":{"rotate":[{"angle":-10.18},{"time":0.1667,"angle":-88.65},{"time":0.3,"angle":-89.52},{"time":0.4667,"angle":-35.36},{"time":0.6667,"angle":0.18}],"scale":[{},{"time":0.3,"x":0.888,"y":0.888}]},"front-arm":{"rotate":[{"angle":-56.75},{"time":0.1667,"angle":162.12},{"time":0.3,"angle":216.91},{"time":0.4667,"angle":200.21},{"time":0.6667,"angle":-25.24}],"translate":[{}]},"front-bracer":{"rotate":[{"angle":34.74},{"time":0.1667,"angle":97.01},{"time":0.3,"angle":97.41},{"time":0.4,"angle":99.27},{"time":0.4667,"angle":116.1}]}},"ik":{"front-arm-goal":[{"mix":0,"curve":"stepped"},{"time":0.4667,"mix":0},{"time":0.6667,"mix":0.996}]}},"jump":{"slots":{"dust01":{"color":[{"time":0.9667,"color":"ffffff00"},{"time":1.0667,"color":"ffffffff"},{"time":1.3333,"color":"ffffff00"}],"attachment":[{"time":0.9667,"name":"raptor/dust01"},{"time":1.0667,"name":"raptor/dust02"},{"time":1.1667,"name":"raptor/dust03"}]},"dust1":{"color":[{"time":0.4,"color":"ffffff00"},{"time":0.5,"color":"ffffffff"},{"time":0.8667,"color":"ffffff00","curve":"stepped"},{"time":1,"color":"ffffff00"},{"time":1.1,"color":"ffffffff"},{"time":1.3667,"color":"ffffff00"}],"attachment":[{"time":0.4,"name":"raptor/dust01"},{"time":0.5,"name":"raptor/dust02"},{"time":0.6333,"name":"raptor/dust03"},{"time":1,"name":"raptor/dust01"},{"time":1.1,"name":"raptor/dust02"},{"time":1.2,"name":"raptor/dust03"}]},"dust2":{"color":[{"time":0.9333,"color":"cdcdcd00"},{"time":1.0333,"color":"ccccccff"},{"time":1.3,"color":"cccccc00"}],"attachment":[{"time":0.9333,"name":"raptor/dust01"},{"time":1.0333,"name":"raptor/dust02"},{"time":1.1333,"name":"raptor/dust03"}]},"dust3":{"color":[{"time":0.4,"color":"cccccc00"},{"time":0.5,"color":"ccccccff"},{"time":0.8667,"color":"cccccc00","curve":"stepped"},{"time":1,"color":"cccccc00"},{"time":1.1,"color":"ccccccff"},{"time":1.4667,"color":"cccccc00"}],"attachment":[{"time":0.4,"name":"raptor/dust01"},{"time":0.5,"name":"raptor/dust02"},{"time":0.6333,"name":"raptor/dust03"},{"time":1,"name":"raptor/dust01"},{"time":1.1,"name":"raptor/dust02"},{"time":1.2333,"name":"raptor/dust03"}]},"mouth-smile":{"attachment":[{"time":0.1333,"name":"raptor/mouth-grind"},{"time":0.9,"name":"raptor/mouth-smile"}]}},"bones":{"front-foot-goal":{"rotate":[{"curve":"stepped"},{"time":0.3},{"time":0.4,"angle":-41.64},{"time":0.4667,"angle":-69.67},{"time":0.5333,"angle":-12.81},{"time":0.6667,"angle":5.74},{"time":0.9667}],"translate":[{"y":36.5,"curve":"stepped"},{"time":0.4,"y":36.5},{"time":0.4333,"x":-51.5,"y":55.55},{"time":0.4667,"x":-134.04,"y":111.1},{"time":0.5,"x":-128.33,"y":165.93},{"time":0.5333,"x":-12.99,"y":277.66},{"time":0.6667,"x":243.74,"y":685.02,"curve":0.55,"c3":0.928,"c4":0.67},{"time":0.9667,"x":95.94,"y":36.5}]},"hip":{"rotate":[{"angle":-4.48},{"time":0.1333,"angle":-23.03},{"time":0.4,"angle":19.24,"curve":0.228,"c2":0.46,"c3":0.75},{"time":0.6667,"angle":31.43},{"time":0.9667,"angle":-10.76},{"time":1.0667,"angle":-18.59},{"time":1.2333,"angle":3.45},{"time":1.3667,"angle":-4.48}],"translate":[{"x":-100.65,"y":49.77},{"time":0.1333,"x":9.38,"y":-109.07,"curve":0.246,"c3":0.609,"c4":0.42},{"time":0.2667,"x":150.37,"y":-76.51,"curve":0.401,"c2":0.34,"c3":0.858,"c4":0.88},{"time":0.4,"x":361.01,"y":36.69},{"time":0.6667,"x":5.37,"y":486.67,"curve":0.665,"c3":0.883,"c4":0.6},{"time":0.9667,"x":-82.29,"y":108.4},{"time":1.0667,"x":84.63,"y":-79.01},{"time":1.1333,"x":181,"y":-57.13},{"time":1.2333,"x":238.12,"y":50.64,"curve":0.25,"c3":0.75},{"time":1.3667,"x":213.2,"y":49.77}]},"rear-foot-goal":{"rotate":[{"curve":"stepped"},{"time":0.3},{"time":0.4,"angle":-41.64},{"time":0.4667,"angle":-69.67},{"time":0.5333,"angle":-57.97},{"time":1,"angle":-9.2},{"time":1.0333,"angle":-7.79}],"translate":[{"curve":"stepped"},{"time":0.4},{"time":0.4333,"x":-87.33,"y":23.79},{"time":0.4667,"x":-172.24,"y":47.59},{"time":0.5,"x":-205.57,"y":86.83},{"time":0.5333,"x":-176.81,"y":207.15},{"time":0.6667,"x":61.3,"y":639.9,"curve":0.651,"c2":0.41,"c3":0.756,"c4":0.91},{"time":1.0333,"x":235.63}]},"front-leg-goal":{"rotate":[{}],"translate":[{"curve":"stepped"},{"time":0.4},{"time":0.4667,"x":-11.12,"y":1.13},{"time":0.5,"x":35.48,"y":8.27},{"time":0.5333,"x":6.65,"y":-19.6},{"time":0.6667,"x":-46.09,"y":-54.23},{"time":1,"x":-0.4,"y":24.3},{"time":1.0667}]},"rear-leg-goal":{"rotate":[{}],"translate":[{"curve":"stepped"},{"time":0.4},{"time":0.4667,"x":22.17,"y":54.94},{"time":0.5,"x":38.22,"y":65.55},{"time":0.5333,"x":20.12,"y":-2.63},{"time":0.6667,"x":-3.59,"y":-12.74},{"time":1,"x":-43,"y":-42.05},{"time":1.0667,"x":-29.03,"y":-3.97}]},"tail1":{"rotate":[{},{"time":0.1333,"angle":-11.02},{"time":0.4,"angle":0.53},{"time":0.5333,"angle":8.64},{"time":1,"angle":-9.74},{"time":1.0667,"angle":-4.46,"curve":0.243,"c3":0.649},{"time":1.3667}]},"tail3":{"rotate":[{},{"time":0.1333,"angle":-9.81},{"time":0.2333,"angle":-22.06},{"time":0.3,"angle":-26.63},{"time":0.4,"angle":-17.42},{"time":0.5333,"angle":-6.59},{"time":0.6667,"angle":1.28},{"time":0.8667,"angle":-7.23},{"time":1,"angle":-12.78},{"time":1.0667,"angle":-12.03},{"time":1.1,"angle":-11.94},{"time":1.1667,"angle":-4.94},{"time":1.3667}]},"torso2":{"rotate":[{},{"time":0.1333,"angle":0.52},{"time":0.4,"angle":-1.91},{"time":0.6667,"angle":3},{"time":1,"angle":-3.26},{"time":1.0667,"angle":4.82},{"time":1.3667}]},"front-arm1":{"rotate":[{},{"time":0.2667,"angle":-308.79},{"time":0.5,"angle":-398.7},{"time":0.7667,"angle":-297.81},{"time":1,"angle":62.19},{"time":1.0667,"angle":-325.37},{"time":1.1333,"angle":-374.43},{"time":1.3667}]},"neck":{"rotate":[{},{"time":0.1333,"angle":-5.01},{"time":0.4,"angle":-7.26},{"time":0.6667,"angle":10.19},{"time":1,"angle":24.02},{"time":1.0667,"angle":4.83},{"time":1.1667,"angle":-1.79},{"time":1.3667}],"translate":[{},{"time":0.1333,"x":-23.92,"y":-8.77,"curve":0.146,"c2":0.61,"c3":0.75},{"time":0.4,"x":29.55,"y":-17.63},{"time":0.6667,"x":8.9,"y":-2.9},{"time":1},{"time":1.0667,"x":52.78,"y":-42.59},{"time":1.1667,"x":27.85,"y":-19.16}]},"rear-arm1":{"rotate":[{},{"time":0.1333,"angle":51.21},{"time":0.5333,"angle":-38.7},{"time":0.8667,"angle":62.19,"curve":"stepped"},{"time":1.0333,"angle":62.19},{"time":1.1,"angle":34.63},{"time":1.1667,"angle":-14.43},{"time":1.3667}]},"spineboy-hip":{"translate":[{},{"time":0.1333,"x":40.49,"y":-30.56},{"time":0.3333,"x":53.35,"y":-66.67},{"time":0.4,"x":38.42,"y":-79.98},{"time":0.5667,"x":48.41,"y":-88.19},{"time":0.6667,"x":46.33,"y":-75.54},{"time":1,"x":41.71,"y":-19.46},{"time":1.1667}]},"tail5":{"rotate":[{"angle":6.72},{"time":0.1333,"angle":7.22},{"time":0.2333,"angle":-10.93},{"time":0.3,"angle":-14.58},{"time":0.4,"angle":-5.79},{"time":0.5333,"angle":5.75},{"time":0.5667,"angle":8.65},{"time":0.6333,"angle":17.01},{"time":0.6667,"angle":11.44},{"time":0.8667,"angle":8.39},{"time":1,"angle":3.54},{"time":1.0667,"angle":-20.69},{"time":1.1,"angle":-22.16},{"time":1.1667,"angle":-18.9},{"time":1.2667,"angle":-10.15},{"time":1.3667}]},"front-arm2":{"rotate":[{},{"time":0.1333,"angle":23.11},{"time":0.5,"angle":-75.93},{"time":0.7667,"angle":-1.41},{"time":1.0667,"angle":26.87},{"time":1.1333,"angle":-56.15},{"time":1.3667}]},"gun":{"rotate":[{},{"time":0.1333,"angle":15.28},{"time":0.4,"angle":-53.41},{"time":0.7667,"angle":-63.35},{"time":1.0667,"angle":-29.92},{"time":1.2,"angle":7.24},{"time":1.3,"angle":-3.7},{"time":1.3667}]},"head":{"rotate":[{},{"time":0.1333,"angle":22.2,"curve":0.25,"c3":0.75},{"time":0.2333,"angle":-11.5,"curve":0.483,"c3":0.686},{"time":0.4333,"angle":10.27},{"time":0.6667,"angle":-40.57,"curve":0.145,"c2":0.48,"c3":0.75},{"time":1,"angle":-23.3},{"time":1.0667,"angle":21.8},{"time":1.1667,"angle":15.37},{"time":1.3667}],"translate":[{"curve":"stepped"},{"time":0.2333},{"time":0.4333,"x":23.4,"y":-54.02},{"time":0.6667,"x":26.32,"y":-20.79},{"time":1,"x":19.04,"y":1.7}]},"rear-arm2":{"rotate":[{},{"time":0.1333,"angle":23.11},{"time":0.5,"angle":-75.93},{"time":0.7667,"angle":-1.41},{"time":1.0667,"angle":26.87},{"time":1.1333,"angle":-56.15},{"time":1.3667}]},"spineboy-torso":{"rotate":[{"angle":-4.78},{"time":0.1333,"angle":-36.59},{"time":0.2667,"angle":-24.94},{"time":0.3333,"angle":-20.34},{"time":0.6667,"angle":-11.2},{"time":1,"angle":10.49},{"time":1.1333,"angle":-30.21,"curve":0.25,"c3":0.75},{"time":1.3,"angle":-17.91},{"time":1.3667,"angle":-31.12}]},"tail7":{"rotate":[{"angle":6.72},{"time":0.1333,"angle":14.46},{"time":0.2333,"angle":20.19},{"time":0.3,"angle":-12.08},{"time":0.4,"angle":-13.06},{"time":0.5333,"angle":7.14},{"time":0.5667,"angle":23.54},{"time":0.6667,"angle":9.86},{"time":0.8667,"angle":10.31},{"time":1,"angle":6.72},{"time":1.0667,"angle":-11.17},{"time":1.1,"angle":-16.51},{"time":1.1667,"angle":-11.98},{"time":1.2667,"angle":-8.74},{"time":1.3667}]},"front-foot2":{"rotate":[{"curve":"stepped"},{"time":0.4},{"time":0.4333,"angle":-28.28},{"time":0.4667,"angle":-40.52},{"time":0.5333,"angle":-67.11},{"time":0.6667,"angle":-16.7},{"time":0.9667,"angle":24.85},{"time":1.0667}]},"front-hand":{"rotate":[{},{"time":0.6667,"angle":-27.75},{"time":1.0667,"angle":-27.1},{"time":1.3667}]},"jaw":{"rotate":[{"angle":0.83},{"time":0.1333,"angle":3.45},{"time":0.3333,"angle":-3.98},{"time":0.4667,"angle":-10.78,"curve":0.609,"c3":0.75},{"time":0.9,"angle":2.06},{"time":0.9333,"angle":-3.14},{"time":1.2333,"angle":0.83}],"translate":[{"x":-10.21,"y":13.96}]},"rear-foot2":{"rotate":[{"curve":"stepped"},{"time":0.4},{"time":0.4333,"angle":-18.7},{"time":0.4667,"angle":-28.34},{"time":0.5333,"angle":-126.75},{"time":0.6667,"angle":-63.79},{"time":0.9333,"angle":11.7},{"time":1,"angle":24.85},{"time":1.0667}]},"rear-hand":{"rotate":[{},{"time":0.6667,"angle":-27.75},{"time":1.0667,"angle":-27.1},{"time":1.3667}]},"tail9":{"rotate":[{"angle":6.72},{"time":0.1333,"angle":10.15},{"time":0.2333,"angle":21.25},{"time":0.3,"angle":-7.52},{"time":0.4,"angle":-13.06},{"time":0.5333,"angle":10.6},{"time":0.5667,"angle":23.27},{"time":0.6667,"angle":9.49},{"time":0.8667,"angle":23.25},{"time":1,"angle":16.01},{"time":1.0667,"angle":-11.17},{"time":1.1,"angle":-17.02},{"time":1.1667,"angle":-22.43},{"time":1.2667,"angle":-13.57},{"time":1.3667}]},"front-foot3":{"rotate":[{"curve":"stepped"},{"time":0.4},{"time":0.4333,"angle":8.47},{"time":0.4667,"angle":3.02},{"time":0.5333,"angle":-19.17},{"time":0.6667,"angle":-15.11},{"time":0.9667,"angle":10.78},{"time":1.0667}]},"head2":{"rotate":[{"angle":18.08},{"time":0.1333,"angle":44.55},{"time":0.3,"angle":23.94},{"time":0.4,"angle":16.51},{"time":0.6333,"angle":11.09},{"time":0.9667,"angle":7.01},{"time":1.0667,"angle":26.78},{"time":1.1333,"angle":31.89},{"time":1.2333,"angle":16.95},{"time":1.3,"angle":30.99},{"time":1.3667,"angle":31.09}]},"neck2":{"rotate":[{"angle":-0.77},{"time":0.1333,"angle":15.96},{"time":0.3,"angle":5.09},{"time":0.4,"angle":-2.34},{"time":0.6333,"angle":-7.76},{"time":0.9667,"angle":-11.84},{"time":1.0667,"angle":7.94},{"time":1.1333,"angle":13.05},{"time":1.2333,"angle":-1.91},{"time":1.3667,"angle":12.24}]},"front-arm-target":{"translate":[{"x":-0.43,"y":-9.01},{"time":0.1333,"x":-27.62,"y":9.05},{"time":0.2667,"x":10.24,"y":-25.26},{"time":0.4,"x":16.65,"y":-40.28},{"time":0.5,"x":12.66,"y":-34.61},{"time":0.6667,"x":2.73,"y":-3.04},{"time":0.9667,"x":-6.56,"y":0.7},{"time":1.0667,"x":12.25,"y":-29.51}]},"front-hand2":{"rotate":[{},{"time":0.1333,"angle":-22.27},{"time":0.2667,"angle":-16.91},{"time":0.4333,"angle":-2.22},{"time":0.6667,"angle":-6.95}]},"stirrup":{"rotate":[{},{"time":0.3,"angle":-13.39,"curve":"stepped"},{"time":0.9667,"angle":-13.39},{"time":1.2333}]},"spineboy-front-arm-goal":{"translate":[{"time":0.2667},{"time":0.4333,"x":19.72,"y":-2.18},{"time":0.5333,"x":19.39,"y":-3.07},{"time":0.6667,"x":-3.87,"y":6.01},{"time":1.0667,"x":-10.92,"y":4.87},{"time":1.3667}]},"dust":{"translate":[{"time":0.9667,"x":-65.56,"curve":0.188,"c2":0.23,"c3":0.75},{"time":1.3333,"x":275}],"scale":[{"time":0.9333},{"time":1.2,"x":0.404,"y":0.404}]},"dust2":{"translate":[{"time":0.4,"x":73.55,"curve":0.386,"c2":0.6,"c3":0.75},{"time":0.8667,"x":-373.31,"y":44.37,"curve":"stepped"},{"time":1,"x":73.55,"curve":0.263,"c2":0.3,"c3":0.75},{"time":1.4333,"x":-130.91}],"scale":[{"time":0.4,"curve":"stepped"},{"time":0.5},{"time":0.8667,"x":0.834,"y":0.834,"curve":"stepped"},{"time":1.1},{"time":1.3667,"x":0.404,"y":0.404}]},"tail2":{"rotate":[{},{"time":0.2333,"angle":-6.06},{"time":0.3,"angle":-7.05},{"time":0.4,"angle":4.7},{"time":0.5333,"angle":-1.99},{"time":1,"angle":-0.83},{"time":1.0667,"angle":-3.56},{"time":1.1,"angle":-7.07},{"time":1.1667,"angle":-6.46}]},"tail4":{"rotate":[{"angle":6.72},{"time":0.1333,"angle":5.9},{"time":0.2333,"angle":-2.65},{"time":0.3,"angle":-3.31},{"time":0.4,"angle":0.99},{"time":0.5333,"angle":7.03},{"time":1,"angle":5.36},{"time":1.0667,"angle":-0.43},{"time":1.1,"angle":-3.37},{"time":1.1667,"angle":-2.18},{"time":1.2667,"angle":3.65}]},"tail6":{"rotate":[{"angle":6.72},{"time":0.1333,"angle":20.13},{"time":0.2333,"angle":-3.52},{"time":0.3,"angle":-4.18},{"time":0.4,"angle":-11.91},{"time":0.5333,"angle":4.01},{"time":0.5667,"angle":8.34},{"time":0.8667,"angle":5.66},{"time":1,"angle":9.81},{"time":1.0667,"angle":-15.56},{"time":1.1,"angle":-18.28},{"time":1.1667,"angle":-10.86},{"time":1.2667,"angle":3.69}]},"tail8":{"rotate":[{"angle":6.72},{"time":0.1333,"angle":14.81},{"time":0.2333,"angle":17.13},{"time":0.3,"angle":-10.98},{"time":0.4,"angle":-14.47},{"time":0.5333,"angle":4.33},{"time":0.5667,"angle":13.57},{"time":0.8667,"angle":9.11},{"time":1,"angle":9.41},{"time":1.0667,"angle":-15.96},{"time":1.1,"angle":-20.19},{"time":1.1667,"angle":-23.17},{"time":1.2667,"angle":-11.89}]},"tail10":{"rotate":[{"angle":6.72},{"time":0.1333,"angle":0.52},{"time":0.2333,"angle":10.93},{"time":0.3,"angle":-7.46},{"time":0.4,"angle":-12.6},{"time":0.5333,"angle":11.74},{"time":1,"angle":3.35},{"time":1.0667,"angle":-22.02},{"time":1.1,"angle":-26.24},{"time":1.1667,"angle":-29.22},{"time":1.2667,"angle":-17.95}]},"dust4":{"translate":[{"time":0.4,"x":-32.73,"curve":0.263,"c2":0.3,"c3":0.75},{"time":0.8667,"x":-342.03,"y":56.39,"curve":"stepped"},{"time":1,"x":-32.73,"curve":0.263,"c2":0.3,"c3":0.75},{"time":1.5667,"x":-241.95,"y":10.37}],"scale":[{"time":0.5},{"time":0.8667,"x":0.748,"y":0.748,"curve":"stepped"},{"time":1.1},{"time":1.4667,"x":0.748,"y":0.748}]},"dust3":{"translate":[{"time":0.9333,"x":-65.56,"curve":0.188,"c2":0.23,"c3":0.75},{"time":1.3,"x":275}],"scale":[{"time":1.0333},{"time":1.3,"x":0.404,"y":0.404}]},"saddle-strap-rear1":{"rotate":[{},{"time":0.1667,"angle":-3.99},{"time":0.2667,"angle":-2.13},{"time":0.5333,"angle":1.36},{"time":0.9333,"angle":-1.8},{"time":1.3333,"angle":-0.3},{"time":1.4333}]},"saddle-strap-rear2":{"rotate":[{},{"time":0.1667,"angle":-4},{"time":0.2667,"angle":-2.14},{"time":0.5333,"angle":1.35},{"time":0.9333,"angle":-1.81},{"time":1.3333,"angle":-0.32},{"time":1.4333}]},"saddle-strap-rear3":{"rotate":[{},{"time":0.1667,"angle":-4},{"time":0.2667,"angle":-2.14},{"time":0.5333,"angle":1.35},{"time":0.9333,"angle":-1.81},{"time":1.3333,"angle":-0.32},{"time":1.4333}]},"rear-leg1":{"translate":[{},{"time":0.4667,"x":-12.67,"y":-22.45},{"time":0.9}]},"bone3":{"rotate":[{},{"time":0.1,"angle":3.16},{"time":0.1667,"angle":-7.3},{"time":0.2667,"angle":14.19},{"time":0.3333,"angle":5.37},{"time":0.5,"angle":-1.88},{"time":0.7667,"angle":2.1},{"time":0.9667,"angle":8.65},{"time":1.0333,"angle":-10.01},{"time":1.1,"angle":-14.96},{"time":1.1667,"angle":2.21},{"time":1.2333,"angle":6.21},{"time":1.3,"angle":1.14},{"time":1.4,"angle":-2.77}]},"bone4":{"rotate":[{},{"time":0.1,"angle":3.16},{"time":0.1667,"angle":-7.3},{"time":0.2667,"angle":14.19},{"time":0.3333,"angle":5.37},{"time":0.5,"angle":-1.88},{"time":0.7667,"angle":2.1},{"time":0.9667,"angle":8.65},{"time":1.0333,"angle":-10.01},{"time":1.1,"angle":-14.96},{"time":1.1667,"angle":2.21},{"time":1.2333,"angle":6.21},{"time":1.3,"angle":1.14},{"time":1.4,"angle":-2.77}]},"bone5":{"rotate":[{},{"time":0.1,"angle":3.16},{"time":0.1667,"angle":-7.3},{"time":0.2667,"angle":14.19},{"time":0.3333,"angle":5.37},{"time":0.5,"angle":-1.88},{"time":0.7667,"angle":2.1},{"time":0.9667,"angle":8.65},{"time":1.0333,"angle":-10.01},{"time":1.1,"angle":-14.96},{"time":1.1667,"angle":2.21},{"time":1.2333,"angle":6.21},{"time":1.3,"angle":1.14},{"time":1.4,"angle":-2.77}]},"bone":{"rotate":[{},{"time":0.1,"angle":3.16},{"time":0.1667,"angle":-7.3},{"time":0.2667,"angle":14.19},{"time":0.3333,"angle":5.37},{"time":0.5,"angle":-1.88},{"time":0.7667,"angle":2.1},{"time":0.9667,"angle":8.65},{"time":1.0333,"angle":-10.01},{"time":1.1,"angle":-14.96},{"time":1.1667,"angle":2.21},{"time":1.2333,"angle":6.21},{"time":1.3,"angle":1.14},{"time":1.4,"angle":-2.77}]},"bone2":{"rotate":[{},{"time":0.1,"angle":3.16},{"time":0.1667,"angle":-7.3},{"time":0.2667,"angle":14.19},{"time":0.3333,"angle":5.37},{"time":0.5,"angle":-1.88},{"time":0.7667,"angle":2.1},{"time":0.9667,"angle":8.65},{"time":1.0333,"angle":-10.01},{"time":1.1,"angle":-14.96},{"time":1.1667,"angle":2.21},{"time":1.2333,"angle":6.21},{"time":1.3,"angle":1.14},{"time":1.4,"angle":-2.77}]}},"deform":{"default":{"raptor-body":{"raptor/raptor-body":[{},{"time":0.1333,"offset":458,"vertices":[1.74036,-2.22608,-9.63611,-4.39496,-10.76492,-2.17071,-0.30984,2.6773,10.09714,4.32944,10.52585,2.19383]},{"time":0.3333},{"time":0.4333,"offset":458,"vertices":[6.3717,-3.87701,-0.64294,-10.32703,-8.98572,-4.46783,-8.53622,6.94458,1.49112,10.1131,8.55499,4.55597,0,0,0,0,0,0,5.49994,-1.16241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.2113,0.53571]},{"time":1.0333}]}}}},"roar":{"slots":{"mouth-smile":{"attachment":[{"time":0.6,"name":"raptor/mouth-grind"},{"time":1.4333,"name":"raptor/mouth-smile"}]}},"bones":{"hip":{"rotate":[{"curve":0.25,"c3":0.75},{"time":0.2,"angle":-27.34,"curve":0.334,"c2":0.4,"c3":0.656,"c4":0.73},{"time":0.3,"angle":-22.37,"curve":0.45,"c2":0.09,"c3":0.724,"c4":0.65},{"time":0.5333,"angle":-3.36},{"time":0.6,"angle":-5.46},{"time":0.6667,"angle":-0.43},{"time":1.5667,"angle":-12.77,"curve":0.295,"c3":0.521,"c4":0.96},{"time":1.8}],"translate":[{"curve":0.817,"c2":0.01,"c3":0.75},{"time":0.2,"x":-225.6,"y":-78.54,"curve":0.334,"c2":0.4,"c3":0.657,"c4":0.73},{"time":0.3,"x":-339.74,"y":-70.39,"curve":0.475,"c3":0.793,"c4":0.67},{"time":0.5333,"x":-121.06,"y":-146.24},{"time":0.6,"x":-9.1,"y":-87.2},{"time":0.6667,"x":44.98,"y":-13.34},{"time":0.7333,"x":41.57,"y":-6.52},{"time":0.8,"x":44.98,"y":-13.34},{"time":0.8667,"x":41.57,"y":-6.52,"curve":0.25,"c3":0.75},{"time":1.2333,"x":48.94,"y":-29.36,"curve":0.574,"c2":0.03,"c3":0.619,"c4":0.76},{"time":1.5667,"x":-127.64,"y":26.21,"curve":0.36,"c2":0.01,"c3":0.701,"c4":0.55},{"time":1.7333,"x":-45.45,"y":70.65,"curve":0.355,"c2":0.39,"c3":0.69,"c4":0.76},{"time":1.8,"x":-25.54,"y":44.36,"curve":0.056,"c2":0.99,"c3":0.683,"c4":0.64},{"time":2}]},"torso2":{"rotate":[{},{"time":0.2,"angle":0.52},{"time":0.6,"angle":-22.13},{"time":1.5667,"angle":0.52},{"time":1.8}]},"spineboy-torso":{"rotate":[{},{"time":0.2,"angle":-12.47},{"time":0.3,"angle":-37.77},{"time":0.4,"angle":-51.05},{"time":0.5,"angle":-59.08},{"time":0.6,"angle":-73.34},{"time":0.6667,"angle":-74.18},{"time":0.8,"angle":-68.39},{"time":0.8667,"angle":-67.25},{"time":1.1,"angle":-62.14},{"time":1.2,"angle":-64.59},{"time":1.3667,"angle":-50.19},{"time":1.5667,"angle":-12.47},{"time":1.8}]},"head2":{"rotate":[{"angle":12.98},{"time":0.2,"angle":29.86},{"time":0.3,"angle":38.44},{"time":0.6,"angle":42.77},{"time":0.7,"angle":46.69},{"time":0.8667,"angle":45.89},{"time":1.2,"angle":45.61},{"time":1.2667,"angle":42.06},{"time":1.3667,"angle":48.76},{"time":1.5667,"angle":29.86},{"time":1.8},{"time":2,"angle":12.98}]},"neck2":{"rotate":[{},{"time":0.2,"angle":11.08},{"time":0.6,"angle":37.25},{"time":1.2,"angle":33.93},{"time":1.3667,"angle":27.8},{"time":1.5667,"angle":11.08},{"time":1.8}]},"front-arm1":{"rotate":[{},{"time":0.2,"angle":25.6,"curve":0.28,"c2":0.54,"c3":0.53,"c4":0.78},{"time":0.6,"angle":-393.29},{"time":0.6667,"angle":-379.24},{"time":0.8333,"angle":-388.76},{"time":1.3667,"angle":-18.16},{"time":1.8,"angle":-346.22},{"time":2}]},"front-arm2":{"rotate":[{},{"time":0.2,"angle":23.11,"curve":0.331,"c2":0.42,"c3":0.647,"c4":0.74},{"time":0.4333,"angle":-9.34,"curve":0.311,"c2":0.38,"c3":0.639,"c4":0.7},{"time":0.5,"angle":-5.4,"curve":0.287,"c2":0.38,"c3":0.611,"c4":0.69},{"time":0.6,"angle":-52.61},{"time":0.7667,"angle":-65.84},{"time":1.0333,"angle":-39.95},{"time":1.3667,"angle":-67.86},{"time":1.8,"angle":-8.99},{"time":2}]},"front-hand":{"rotate":[{},{"time":0.2,"angle":-7.24},{"time":0.5,"angle":-25.8},{"time":0.6,"angle":33.41},{"time":0.7667,"angle":52.51},{"time":1.4,"angle":-30.97},{"time":1.5667,"angle":-7.24},{"time":1.8}]},"rear-arm2":{"rotate":[{},{"time":0.2333,"angle":23.11,"curve":0.324,"c2":0.45,"c3":0.628,"c4":0.76},{"time":0.4333,"angle":-2.44,"curve":0.3,"c2":0.38,"c3":0.628,"c4":0.7},{"time":0.5333,"angle":-22.11,"curve":0.307,"c2":0.35,"c3":0.638,"c4":0.68},{"time":0.6,"angle":-77.6},{"time":0.7667,"angle":-66.07},{"time":1.3667,"angle":-58.31},{"time":1.8,"angle":-8.99},{"time":2}]},"rear-hand":{"rotate":[{},{"time":0.2,"angle":-7.24},{"time":0.4333,"angle":-36},{"time":0.6,"angle":10.34},{"time":0.7667,"angle":55.96},{"time":1.2333,"angle":8.39},{"time":1.8}]},"rear-arm1":{"rotate":[{},{"time":0.2333,"angle":51.21,"curve":0.28,"c2":0.54,"c3":0.53,"c4":0.78},{"time":0.6,"angle":-19.18},{"time":0.7667,"angle":-25.79},{"time":1.3667,"angle":-3.03},{"time":1.8,"angle":13.78},{"time":2}]},"neck":{"rotate":[{},{"time":0.2,"angle":-8.26,"curve":0.28,"c2":0.54,"c3":0.53,"c4":0.78},{"time":0.6,"angle":13.44},{"time":1.5667,"angle":-8.26,"curve":0.28,"c2":0.54,"c3":0.53,"c4":0.78},{"time":1.8}],"translate":[{},{"time":0.2,"x":-19.98,"y":-1.45,"curve":0.28,"c2":0.54,"c3":0.53,"c4":0.78},{"time":0.6,"x":35.7,"y":-47.38},{"time":1.4667,"x":2.83,"y":-4.9},{"time":1.5667,"x":12.18,"y":3.64},{"time":1.8,"x":2.83,"y":-4.9},{"time":2}]},"head":{"rotate":[{},{"time":0.2,"angle":9.94,"curve":0.28,"c2":0.54,"c3":0.53,"c4":0.78},{"time":0.6,"angle":23.25},{"time":0.7333,"angle":24.85},{"time":0.9333,"angle":25.3},{"time":1.3667,"angle":27.9},{"time":1.5667,"angle":12,"curve":0.237,"c2":0.4,"c3":0.587,"c4":0.72},{"time":1.6667,"angle":11.92,"curve":0.293,"c2":0.42,"c3":0.69,"c4":0.67},{"time":1.9}],"translate":[{"time":0.2,"curve":0.28,"c2":0.54,"c3":0.53,"c4":0.78},{"time":0.6,"x":12.3,"y":-89.23},{"time":0.6667,"x":18.74,"y":-87.42},{"time":0.7333,"x":16.57,"y":-87.92},{"time":0.8,"x":18.74,"y":-87.42},{"time":0.8667,"x":16.57,"y":-87.92},{"time":0.9333,"x":18.74,"y":-87.42},{"time":1.3667,"x":27.31,"y":-84.9},{"time":1.5667}]},"jaw":{"rotate":[{"angle":-1.2},{"time":0.2,"angle":1.83},{"time":0.4333,"angle":-13.72},{"time":0.6,"angle":304.71},{"time":0.7333,"angle":-49.51},{"time":0.7667,"angle":-47.49},{"time":0.8,"angle":-45.13},{"time":0.8333,"angle":-43.73},{"time":0.8667,"angle":-43.36},{"time":0.9,"angle":-40.64},{"time":0.9333,"angle":-42.02,"curve":0.775,"c2":0.06,"c3":0.821,"c4":0.7},{"time":1.4,"angle":-17.61},{"time":1.5667,"angle":-8.79,"curve":0.28,"c2":0.54,"c3":0.53,"c4":0.78},{"time":1.8}],"translate":[{"x":-3.44,"y":2.51},{"time":0.2,"curve":0.28,"c2":0.54,"c3":0.53,"c4":0.78},{"time":0.6,"x":-19.47,"y":17.94},{"time":0.6667,"x":-30.92,"y":23.07},{"time":1.5667,"x":-3.44,"y":2.51}]},"tongue1":{"rotate":[{"time":0.1667,"angle":16.25},{"time":0.2,"angle":15.93,"curve":0.33,"c2":0.42,"c3":0.644,"c4":0.74},{"time":0.3333,"angle":-0.58,"curve":0.27,"c2":0.42,"c3":0.581,"c4":0.72},{"time":0.5,"angle":5.31},{"time":0.6,"angle":-4.66},{"time":0.6667,"angle":5.7},{"time":0.7,"angle":13.7},{"time":0.8333,"angle":16.75},{"time":1,"angle":15.1},{"time":1.1,"angle":17.24},{"time":1.2667,"angle":2.26},{"time":1.5667,"angle":32.1,"curve":0.28,"c2":0.54,"c3":0.53,"c4":0.78},{"time":1.8}],"translate":[{"x":-22.37,"y":13.32}],"scale":[{"time":0.2},{"time":0.5667,"x":1.16},{"time":0.7,"x":1.413},{"time":0.8333,"x":1.632},{"time":1.5667}]},"torso1":{"rotate":[{"time":0.6},{"time":0.6667,"angle":-6.14},{"time":0.7333,"angle":-3.57},{"time":0.8,"angle":-6.14},{"time":0.8667,"angle":-3.57},{"time":1,"angle":3.56},{"time":1.3667,"angle":-6.11},{"time":1.5667}]},"horn-rear":{"rotate":[{"time":0.2},{"time":1,"angle":7.62},{"time":1.8}]},"horn-front":{"rotate":[{"time":0.2},{"time":1,"angle":7.62},{"time":1.8}]},"front-leg-goal":{"translate":[{},{"time":0.1333,"x":94.98,"y":17.68,"curve":"stepped"},{"time":0.1667,"x":94.98,"y":17.68},{"time":0.3,"x":-61.43,"y":-80.97,"curve":0.591,"c2":0.02,"c3":0.565,"c4":0.73},{"time":0.6,"x":54.8,"y":26.89},{"time":0.6667,"x":104.34,"y":47.28},{"time":1.2333,"x":126.91,"y":52.57,"curve":0.452,"c2":0.26,"c3":0.698,"c4":0.49},{"time":1.5667,"x":49.5,"y":28.71},{"time":2}]},"rear-leg-goal":{"translate":[{},{"time":0.2,"x":-40.46,"y":-17.34,"curve":0.33,"c2":0.42,"c3":0.644,"c4":0.74},{"time":0.4333,"x":-39.15,"y":-5.5,"curve":0.27,"c2":0.42,"c3":0.581,"c4":0.72},{"time":0.6,"x":17.09,"y":42.26},{"time":1.2333,"x":31.18,"y":60.17,"curve":0.452,"c2":0.26,"c3":0.698,"c4":0.49},{"time":1.5667,"x":-19.04,"y":19.62},{"time":2}]},"spineboy-hip":{"translate":[{},{"time":0.2,"x":35.97,"y":-11.83},{"time":0.3,"x":42.12,"y":-39.3},{"time":0.4333,"x":48.96,"y":-59.92},{"time":0.5,"x":48.85,"y":-52.7},{"time":0.6,"x":49.06,"y":-51.25},{"time":0.6667,"x":56.03,"y":-56.03},{"time":0.7333,"x":43.66,"y":-49.87},{"time":0.8,"x":42.93,"y":-49.25},{"time":0.8667,"x":34.13,"y":-41.42},{"time":1,"x":43.1,"y":-52.61},{"time":1.2667,"x":53.82,"y":-63.04},{"time":1.3667,"x":60.15,"y":-45.04},{"time":1.5667,"x":35.97,"y":-11.83},{"time":1.8}]},"front-hand2":{"rotate":[{},{"time":0.2,"angle":-21.93},{"time":0.3,"angle":-23.29},{"time":0.4,"angle":-29.8},{"time":0.5,"angle":-36.62},{"time":0.6,"angle":-40.49},{"time":0.6667,"angle":-38.28},{"time":0.7333,"angle":-33.33},{"time":0.8,"angle":-28.06},{"time":1.3,"angle":-27.17},{"time":1.4,"angle":-27.62},{"time":1.5667}]},"front-arm-target":{"translate":[{"time":0.2},{"time":0.6,"x":42.84,"y":-71.37},{"time":0.8,"x":23.9,"y":-69.35},{"time":1.3,"x":21.13,"y":-48.34},{"time":1.4,"x":17.74,"y":-52.7},{"time":1.5667}]},"gun":{"rotate":[{},{"time":0.2,"angle":15.28},{"time":0.3333,"angle":-13.87},{"time":0.4,"angle":-40.91,"curve":0.761,"c3":0.95,"c4":0.87},{"time":0.6,"angle":-15.61},{"time":0.6667,"angle":-43.39,"curve":0.45,"c3":0.75},{"time":0.7333,"angle":-25.56},{"time":1,"angle":-23.42},{"time":1.1667,"angle":-21.64},{"time":1.3667,"angle":-27.73},{"time":1.5667,"angle":-6.38},{"time":1.7,"angle":-14.44},{"time":1.8},{"time":1.9,"angle":-15.75},{"time":2}],"translate":[{"time":0.2},{"time":0.6,"x":-18.37,"y":-9.19},{"time":1.5667}]},"tail1":{"rotate":[{},{"time":0.2667,"angle":-14.69,"curve":0.28,"c2":0.54,"c3":0.53,"c4":0.78},{"time":0.6},{"time":0.7667,"angle":2.68},{"time":0.9333,"angle":3.2,"curve":0.377,"c2":0.02,"c3":0.713,"c4":0.59},{"time":1.1667,"angle":-9.15,"curve":0.431,"c2":0.33,"c3":0.738,"c4":0.84},{"time":1.3,"angle":-14.94},{"time":1.5667,"angle":-11.02,"curve":0.335,"c2":0.34,"c3":0.668,"c4":0.67},{"time":1.6667,"angle":-10.95,"curve":0.335,"c2":0.35,"c3":0.667,"c4":0.69},{"time":1.8},{"time":2,"angle":1.01}]},"tail3":{"rotate":[{"angle":-4.66},{"time":0.1333,"angle":-1.14},{"time":0.2667,"angle":-10.12,"curve":0.145,"c2":0.39,"c3":0.515,"c4":0.72},{"time":0.4667,"angle":-27.25,"curve":0.296,"c2":0.39,"c3":0.64,"c4":0.73},{"time":0.6,"angle":1.58},{"time":0.7333,"angle":-9.15},{"time":0.8333,"angle":-9.17},{"time":0.9333,"angle":-8.75},{"time":1.2,"angle":-1.6},{"time":1.3333,"angle":-14.48},{"time":1.5,"angle":-9.35},{"time":1.6667,"angle":17.55},{"time":1.8333,"angle":21.29},{"time":2,"angle":-4.66}]},"tail5":{"rotate":[{"angle":5.3},{"time":0.1333,"angle":13.48},{"time":0.2667,"angle":22.33},{"time":0.4667,"angle":-17.34,"curve":0.269,"c2":0.43,"c3":0.578,"c4":0.72},{"time":0.6,"angle":-7.88},{"time":0.7333,"angle":-2.96},{"time":0.8333,"angle":-5.92},{"time":0.9333,"angle":-5.02},{"time":1.2,"angle":6.61},{"time":1.3333,"angle":14.51},{"time":1.5,"angle":-15.86},{"time":1.6667,"angle":-4.49},{"time":2,"angle":5.3}]},"tail7":{"rotate":[{"angle":-10.89},{"time":0.1333,"angle":12.24},{"time":0.2667,"angle":19.39},{"time":0.4667,"angle":-11.34,"curve":0.269,"c2":0.43,"c3":0.578,"c4":0.72},{"time":0.6,"angle":-10.79},{"time":0.7333,"angle":-0.59},{"time":0.8333,"angle":9.29},{"time":0.9333,"angle":-4.49},{"time":1.2,"angle":7.15},{"time":1.3333,"angle":15.05},{"time":1.5,"angle":-11.36},{"time":1.6667,"angle":-25.05},{"time":1.8333,"angle":-9.49},{"time":2,"angle":-10.89}]},"tail9":{"rotate":[{"angle":-10.89},{"time":0.1333,"angle":18.57},{"time":0.2667,"angle":23.95},{"time":0.4667,"angle":-15.74,"curve":0.269,"c2":0.43,"c3":0.578,"c4":0.72},{"time":0.6,"angle":-9.8},{"time":0.7333,"angle":8.13},{"time":0.8333,"angle":11.04},{"time":0.9333,"angle":-2.74},{"time":1.2,"angle":8.89},{"time":1.3333,"angle":16.79},{"time":1.5,"angle":-9.62},{"time":1.6667,"angle":-23.3},{"time":1.8333,"angle":-7.74},{"time":2,"angle":-10.89}]},"tongue2":{"rotate":[{},{"time":0.1667,"angle":6.48},{"time":0.2,"angle":4.21},{"time":0.2667,"angle":52.29},{"time":0.5,"angle":17.71},{"time":0.6,"angle":2.84},{"time":0.6667,"angle":10.48},{"time":0.7,"angle":-9.91},{"time":0.7333,"angle":-12.97},{"time":0.7667,"angle":-5.12},{"time":0.8,"angle":-5.09},{"time":0.8333,"angle":1.23},{"time":1,"angle":-33.21},{"time":1.2,"angle":14.14},{"time":1.3667,"angle":12.21},{"time":1.5667,"angle":-13.32},{"time":1.8}],"translate":[{"time":0.2},{"time":0.5,"x":6.19,"y":1.67,"curve":"stepped"},{"time":1.0667,"x":6.19,"y":1.67},{"time":1.3}]},"tongue3":{"rotate":[{},{"time":0.1667,"angle":6.48},{"time":0.2,"angle":4.21},{"time":0.2667,"angle":52.29},{"time":0.5,"angle":17.71},{"time":0.6,"angle":13.82},{"time":0.6667,"angle":-2.82},{"time":0.7,"angle":-6.98},{"time":0.7333,"angle":-20.11},{"time":0.7667,"angle":-0.12},{"time":0.8,"angle":-7.1},{"time":0.8333,"angle":1.23},{"time":1,"angle":-33.21},{"time":1.2,"angle":14.14},{"time":1.3667,"angle":19.46},{"time":1.5667,"angle":-36.24},{"time":1.8}],"translate":[{"time":0.2},{"time":0.5,"x":11.48,"y":3.7},{"time":1.2333}]},"saddle-strap-rear1":{"rotate":[{"angle":-2.53},{"time":0.2,"angle":-6.38},{"time":0.2667,"angle":-12.9},{"time":0.5,"angle":-4.15},{"time":0.6,"angle":-20.2},{"time":0.7,"angle":-5.55},{"time":0.8,"angle":-3.4},{"time":1.3333,"angle":-6.7},{"time":1.5667,"angle":-10.34},{"time":1.6333,"angle":-9.23},{"time":1.8},{"time":2,"angle":-2.53}],"scale":[{"time":0.6},{"time":0.6667,"x":1.083},{"time":0.8,"x":1.097},{"time":1.5667}]},"front-foot-goal":{"rotate":[{},{"time":0.1,"angle":-31.3},{"time":0.1667,"angle":-17.24},{"time":1.6,"angle":-2.25},{"time":1.6667,"angle":-21.66},{"time":1.8}],"translate":[{},{"time":0.0333,"x":-101.15,"y":98.46},{"time":0.1,"x":-308.64,"y":72.48},{"time":0.1667,"x":-392.1,"y":9.43,"curve":"stepped"},{"time":1.6,"x":-392.1,"y":9.43},{"time":1.6667,"x":-308.05,"y":111.02},{"time":1.8}]},"front-foot2":{"rotate":[{},{"time":0.0333,"angle":-34.39},{"time":0.1,"angle":-11.91},{"time":0.2,"angle":-11.36},{"time":1.6,"angle":14.29},{"time":1.6667,"angle":-41.83},{"time":1.7333,"angle":-1.1},{"time":1.8}],"scale":[{"time":0.5667},{"time":0.6667,"x":1.051}]},"front-foot3":{"rotate":[{},{"time":0.0333,"angle":8},{"time":0.1,"angle":-1.59},{"time":0.2,"angle":16.32},{"time":1.6,"angle":-8.75},{"time":1.6667,"angle":-12.37},{"time":1.8}],"translate":[{"x":-29.67,"curve":"stepped"},{"time":1.6,"x":-29.67},{"time":1.6667,"x":-34.03,"y":8.95},{"time":2,"x":-29.67}],"scale":[{"time":0.5667},{"time":0.6667,"x":1.058}]},"back-hand":{"rotate":[{"angle":-21.46},{"time":0.2,"angle":-21.93},{"time":0.3,"angle":-8.39},{"time":0.4,"angle":-5.38},{"time":0.5,"angle":-30.38},{"time":0.6,"angle":-55.56},{"time":0.6667,"angle":-18.74},{"time":0.7333,"angle":-20.26},{"time":0.8,"angle":-21.46}]},"saddle":{"rotate":[{"angle":-3.18},{"time":0.6},{"time":0.8,"angle":-3.18}],"translate":[{"x":12.68,"y":-2.67},{"time":0.6,"x":9.26,"y":-0.42},{"time":0.7,"x":12.68,"y":-2.67}]},"saddle-strap-rear2":{"rotate":[{"angle":-0.47},{"time":0.1667,"angle":-0.59},{"time":0.2667,"angle":0.8},{"time":0.4,"angle":5.75},{"time":0.5,"angle":-11.85},{"time":0.6,"angle":0.04},{"time":0.7,"angle":-15.16},{"time":0.8,"angle":0.19},{"time":0.9333,"angle":-5.81},{"time":1.0333,"angle":-5.1},{"time":1.1333,"angle":-10.89},{"time":1.2333,"angle":-5.48},{"time":1.3333,"angle":-2.87},{"time":1.5667,"angle":7.26},{"time":1.6333,"angle":3.24},{"time":2,"angle":-0.47}],"scale":[{"time":0.6},{"time":0.8,"x":1.017}]},"saddle-strap-front1":{"rotate":[{"angle":-0.37},{"time":0.2667,"angle":0.04},{"time":0.4667,"angle":-4},{"time":0.6,"angle":-7},{"time":0.7,"angle":-7.25},{"time":0.8,"angle":-3.69},{"time":1.4667,"angle":-0.58},{"time":1.7667,"angle":0.55},{"time":2,"angle":-0.37}]},"saddle-strap-front2":{"rotate":[{"angle":-0.37},{"time":0.2667,"angle":0.04},{"time":0.4667,"angle":-4},{"time":0.6,"angle":-7},{"time":0.7,"angle":-7.25},{"time":0.8,"angle":-3.69},{"time":1.4667,"angle":-0.58},{"time":1.7667,"angle":0.55},{"time":2,"angle":-0.37}]},"saddle-strap-rear3":{"rotate":[{"angle":6.92},{"time":0.1667,"angle":-9.93},{"time":0.2667,"angle":0.57},{"time":0.5,"angle":-9.02},{"time":0.6,"angle":4.39},{"time":0.7,"angle":-3.88},{"time":0.8,"angle":-6.97},{"time":0.9333,"angle":7.13},{"time":1.0333,"angle":4.19},{"time":1.1333,"angle":7.88},{"time":1.2333,"angle":1.74},{"time":1.3333,"angle":-1.47},{"time":1.5667,"angle":0.93},{"time":1.6333,"angle":2.77},{"time":2,"angle":6.92}]},"rear-arm-target":{"translate":[{},{"time":0.6,"x":56.17,"y":-58.56},{"time":0.8,"x":34.47,"y":-59.19},{"time":2}]},"tail2":{"rotate":[{"angle":-4.33},{"time":0.1333,"angle":-15.43},{"time":0.2667,"angle":-9.41},{"time":0.7333,"angle":0.95},{"time":0.9333,"angle":-1.28},{"time":1.3333,"angle":-16.53},{"time":1.5,"angle":-5.17},{"time":1.6667,"angle":7.32},{"time":1.8333,"angle":11.05},{"time":2,"angle":-4.33}]},"tail4":{"rotate":[{"angle":13.37},{"time":0.1333,"angle":7.68},{"time":0.2667,"angle":6.84},{"time":0.4667,"angle":-2.28},{"time":0.7333,"angle":-2.62},{"time":0.8333,"angle":-6.07},{"time":0.9333,"angle":2.21},{"time":1.2,"angle":9.58},{"time":1.3333,"angle":-0.15},{"time":1.5,"angle":-20.79},{"time":1.6667,"angle":-9.43},{"time":1.8333,"angle":-5.7},{"time":2,"angle":13.37}]},"tail6":{"rotate":[{"angle":5.3},{"time":0.1333,"angle":7.74},{"time":0.2667,"angle":10.2},{"time":0.4667,"angle":-12.04},{"time":0.6,"angle":-1.26},{"time":0.9333,"angle":-4.96},{"time":1.2,"angle":6.67},{"time":1.3333,"angle":14.57},{"time":1.5,"angle":-11.84},{"time":1.6667,"angle":-25.53},{"time":1.8333,"angle":-9.25},{"time":2,"angle":5.3}]},"tail8":{"rotate":[{"angle":-10.89},{"time":0.1333,"angle":6.12},{"time":0.2667,"angle":15.74},{"time":0.4667,"angle":-21.25},{"time":0.6,"angle":-8.03},{"time":0.7333,"angle":4.9},{"time":0.8333,"angle":1.83},{"time":0.9333,"angle":-11.95},{"time":1.2,"angle":-0.32},{"time":1.3333,"angle":7.59},{"time":1.5,"angle":-18.82},{"time":1.6667,"angle":-32.51},{"time":1.8333,"angle":-16.95},{"time":2,"angle":-10.89}]},"tail10":{"rotate":[{"angle":-10.89},{"time":0.1333,"angle":4.18},{"time":0.2667,"angle":4.66},{"time":0.4667,"angle":-20.32},{"time":0.7333,"angle":1.73},{"time":0.8333,"angle":-1.06},{"time":0.9333,"angle":-14.83},{"time":1.2,"angle":-3.2},{"time":1.3333,"angle":4.7},{"time":1.5,"angle":-21.71},{"time":1.6667,"angle":-35.4},{"time":1.8333,"angle":-19.84},{"time":2,"angle":-10.89}]},"jaw-inside":{"rotate":[{},{"time":0.7333,"angle":13.77}],"translate":[{},{"time":0.5667,"x":-4.3,"y":4.48},{"time":0.7333,"x":-23.59,"y":-9.32}],"scale":[{"time":0.5667},{"time":0.7333,"x":1.119}]},"bone":{"rotate":[{},{"time":0.1667,"angle":-6.45},{"time":0.2667,"angle":4.84},{"time":0.6667,"angle":14.69},{"time":0.7667,"angle":-1.4},{"time":0.8333,"angle":3.9},{"time":1.3333,"angle":0.49},{"time":1.5,"angle":-8.16},{"time":1.5667,"angle":4.87},{"time":1.6333,"angle":-1.8},{"time":1.8333,"angle":1.81},{"time":2}]},"bone2":{"rotate":[{},{"time":0.1667,"angle":-6.45},{"time":0.2667,"angle":4.84},{"time":0.6667,"angle":14.69},{"time":0.7667,"angle":-1.4},{"time":0.8333,"angle":3.9},{"time":1.3333,"angle":0.49},{"time":1.5,"angle":-8.16},{"time":1.5667,"angle":4.87},{"time":1.6333,"angle":-1.8},{"time":1.8333,"angle":1.81},{"time":2}]},"bone3":{"rotate":[{},{"time":0.1667,"angle":-6.45},{"time":0.2667,"angle":4.84},{"time":0.6667,"angle":14.69},{"time":0.7667,"angle":-1.4},{"time":0.8333,"angle":3.9},{"time":1.3333,"angle":0.49},{"time":1.5,"angle":-8.16},{"time":1.5667,"angle":4.87},{"time":1.6333,"angle":-1.8},{"time":1.8333,"angle":1.81},{"time":2}]},"bone4":{"rotate":[{},{"time":0.1667,"angle":-6.45},{"time":0.2667,"angle":4.84},{"time":0.6667,"angle":14.69},{"time":0.7667,"angle":-1.4},{"time":0.8333,"angle":3.9},{"time":1.3333,"angle":0.49},{"time":1.5,"angle":-8.16},{"time":1.5667,"angle":4.87},{"time":1.6333,"angle":-1.8},{"time":1.8333,"angle":1.81},{"time":2}]},"bone5":{"rotate":[{},{"time":0.1667,"angle":-6.45},{"time":0.2667,"angle":4.84},{"time":0.6667,"angle":14.69},{"time":0.7667,"angle":-1.4},{"time":0.8333,"angle":3.9},{"time":1.3333,"angle":0.49},{"time":1.5,"angle":-8.16},{"time":1.5667,"angle":4.87},{"time":1.6333,"angle":-1.8},{"time":1.8333,"angle":1.81},{"time":2}]}},"deform":{"default":{"raptor-body":{"raptor/raptor-body":[{},{"time":0.1667,"offset":38,"vertices":[17.20447,2.58527,16.91513,4.06912,15.53468,-7.83276,16.94922,-0.31917,16.91287,1.1535,-13.97229,-9.59964,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-6.7829,10.2714,5.25179,11.13231,9.69022,7.59036]},{"time":0.5667,"offset":12,"vertices":[-9.31108,-10.64148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-17.2807,2.35294,-17.4198,0.84387,-15.58569,7.82584,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-23.06187,34.92276,17.85608,37.84985,32.94675,25.80722,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.0E-5,0,0,0,-0.55209,25.09595]},{"time":0.6667,"offset":10,"vertices":[-3.50739,-1.35785,-25.99295,-15.34705,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-21.77461,0.91987,-21.65693,-1.6034,-20.3066,7.90774,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-21.18327,31.76294,15.08635,35.00784,27.79752,25.66834,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.0E-5,0,0,0,0.16377,37.63276]},{"time":0.8667,"offset":10,"vertices":[-10.52225,-4.07355,3.0E-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-30.76243,-1.94626,-30.13119,-6.49796,-29.74841,8.07153,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-17.42607,25.4433,9.54691,29.32382,17.49905,25.39059]},{"time":2}]},"raptor-front-leg":{"raptor/raptor-front-leg":[{},{"time":0.1667,"offset":154,"vertices":[-10.88947,-30.36389,-10.71732,-22.72197,25.01976,2.27203,-7.08154,-15.97241,17.35857,1.98693,-7.08154,-15.97241,17.35857,1.98693,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7.08154,-15.97241,-16.2515,-6.41524,0,0,0,0,-2.62177,-5.91267,6.42596,0.73537,-2.62177,-5.91267,6.42596,0.73537,-2.62177,-5.91267,6.42596,0.73537]},{"time":0.5,"offset":148,"vertices":[-13.42749,17.0267,15.81436,-1.82489,12.55496,-3.69128,-14.84991,-27.69955,-12.20212,-20.72182,23.54478,0.26454,-7.08154,-15.97241,17.35857,1.98693,-7.08154,-15.97241,17.35857,1.98693,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7.08154,-15.97241,-16.2515,-6.41524,0,0,0,0,-2.62177,-5.91267,6.42596,0.73537,-2.14818,-17.13634,17.0141,4.48871,0.76036,-16.70564,15.74725,7.14192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7.43222,-10.01694,-8.45212,9.17316,11.75989,-4.15782,0,0,0,0,0,0,0,0,0,0,8.35347,-9.45856,-10.85333,-6.43872]},{"time":0.7,"offset":148,"vertices":[-8.16173,41.49426,18.18862,-10.69293,-6.44682,-46.91269,-10.54358,-11.12482,-6.70166,-2.12044,13.43587,16.82005,-7.08154,-15.97241,17.35857,1.98693,-7.08154,-15.97241,17.35857,1.98693,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3.77762,-30.78729,-28.91833,1.94682,0,0,0,0,-2.62177,-5.91267,6.42596,0.73537,-2.14818,-17.13634,17.0141,4.48871,0.76036,-16.70564,15.74725,7.14192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7.43222,-10.01694,-8.45212,9.17316,11.75989,-4.15782,0.67496,-8.34445,-6.28122,5.53439,6.6424,-5.09544,2.34509,11.36743,6.20795,-9.80856,19.70685,-3.18417,-16.38966,-11.3985]},{"time":1.8}]}}}},"walk":{"slots":{"raptor-jaw-inside":{"color":[{"color":"646464ff"},{"time":0.5333,"color":"808080ff"},{"time":1.0667,"color":"646464ff"}]},"tail-shadow":{"color":[{"color":"0000004a"},{"time":0.1333,"color":"00000000"},{"time":0.2667,"color":"0000000c","curve":"stepped"},{"time":0.4333,"color":"0000000c"},{"time":0.4667,"color":"0000001c"},{"time":0.5333,"color":"00000000","curve":"stepped"},{"time":0.6667,"color":"00000000"},{"time":0.8,"color":"00000024"},{"time":0.9333,"color":"0000003a"},{"time":1.0667,"color":"0000004a"}],"attachment":[{"name":"raptor/raptor-tail-shadow"},{"time":1.0667,"name":"raptor/raptor-tail-shadow"}]}},"bones":{"front-foot-goal":{"rotate":[{},{"time":0.2667,"angle":-51.26},{"time":0.4,"angle":-65.18},{"time":0.5333,"angle":-76.29},{"time":0.8,"angle":-76.53},{"time":1.0667}],"translate":[{"x":343.28,"y":36.5},{"time":0.2667,"x":86.51,"y":36.99},{"time":0.5333,"x":-173.36,"y":37.42},{"time":0.6,"x":-68.16,"y":141.15},{"time":0.7333,"x":91.79,"y":238.01},{"time":0.8,"x":155.9,"y":190.91},{"time":0.9667,"x":303.28,"y":94.41},{"time":1.0667,"x":343.28,"y":36.5}]},"hip":{"rotate":[{"angle":-4.78},{"time":0.0667,"angle":-3.99},{"time":0.2667,"angle":-12.5},{"time":0.5333,"angle":-4.78},{"time":0.6,"angle":-3.99},{"time":0.8,"angle":-12.5},{"time":1.0667,"angle":-4.78}],"translate":[{"x":161.93,"y":4.9,"curve":0.27,"c2":0.38,"c3":0.621,"c4":0.4},{"time":0.0667,"x":165.04,"y":-5.99,"curve":0.245,"c2":0.01,"c3":0.758},{"time":0.2667,"x":178.81,"y":136.53,"curve":0.25,"c3":0.841,"c4":0.81},{"time":0.5333,"x":161.93,"y":4.9,"curve":0.27,"c2":0.38,"c3":0.621,"c4":0.4},{"time":0.6,"x":165.04,"y":-5.99,"curve":0.245,"c2":0.01,"c3":0.758},{"time":0.8,"x":178.81,"y":136.52,"curve":0.25,"c3":0.859,"c4":0.82},{"time":1.0667,"x":161.93,"y":4.9}]},"rear-foot-goal":{"rotate":[{"angle":-62.73},{"time":0.2667,"angle":-107.17},{"time":0.4667,"angle":-40.52},{"time":0.8,"angle":-97.16},{"time":1.0667,"angle":-62.73}],"translate":[{"x":-266.7,"y":-15.47},{"time":0.1333,"x":-87.88,"y":124.85},{"time":0.2667,"x":88.36,"y":134.06},{"time":0.3667,"x":198.39,"y":90.65},{"time":0.4667,"x":308.19,"y":-26.42},{"time":0.6,"x":167.06,"y":-26.42},{"time":1.0667,"x":-266.7,"y":-15.47}]},"front-leg1":{"rotate":[{"angle":27.08,"curve":"stepped"},{"time":1.0667,"angle":27.08}],"translate":[{},{"time":0.0667,"x":-0.22,"y":15.2},{"time":0.5333,"x":-0.34,"y":12.16},{"time":0.7333,"x":-4.75,"y":31.94},{"time":1.0667}]},"front-leg-goal":{"rotate":[{}],"translate":[{"x":-18.05,"y":-2.89},{"time":0.4333,"x":-42.2,"y":-88.63},{"time":0.5333,"x":-27.31,"y":-43.91},{"time":0.7333,"x":-1.52,"y":-94.29},{"time":0.8,"x":-24.29,"y":-116.41},{"time":1,"x":-41.88,"y":-93.3},{"time":1.0667,"x":-18.05,"y":-2.89}]},"rear-leg1":{"rotate":[{"angle":-64.85,"curve":"stepped"},{"time":1.0667,"angle":-64.85}]},"rear-leg-goal":{"rotate":[{}],"translate":[{"x":-2.05,"y":15.12},{"time":0.2667,"x":17.49,"y":-150.44},{"time":0.4667,"x":-40.21,"y":-81.76},{"time":0.5333,"x":-31.69,"y":-82.43},{"time":0.8,"x":2.65,"y":-169.22},{"time":0.9333,"x":-16.77,"y":-98.31},{"time":1.0667,"x":-2.05,"y":15.12}]},"tail1":{"rotate":[{"angle":1.31},{"time":0.0667,"angle":4.14},{"time":0.3333,"angle":-5.78},{"time":0.6333,"angle":4.14},{"time":0.9,"angle":-5.78},{"time":1.0667,"angle":1.31}]},"torso1":{"rotate":[{"angle":7.22},{"time":0.2667,"angle":4.2},{"time":0.5333,"angle":7.22},{"time":0.8,"angle":4.2},{"time":1.0667,"angle":7.22}]},"front-leg2":{"rotate":[{"angle":-347.28,"curve":"stepped"},{"time":1.0667,"angle":-347.28}]},"rear-leg2":{"rotate":[{"angle":27.05,"curve":"stepped"},{"time":1.0667,"angle":27.05}]},"saddle":{"rotate":[{"angle":-2.52},{"time":0.2667,"angle":-4.17},{"time":0.5333,"angle":-3.85},{"time":0.8,"angle":-3.1},{"time":1.0667,"angle":-2.52}],"translate":[{"x":5.87,"y":-0.06},{"time":0.2667,"curve":0.15,"c2":0.28,"c3":0.75},{"time":0.3333,"x":-0.04,"y":5.92,"curve":0.421,"c3":0.85,"c4":0.78},{"time":0.5333,"x":-8.81,"y":0.1},{"time":0.6,"x":-7.83,"y":-2.27},{"time":0.8,"curve":0.15,"c2":0.28,"c3":0.75},{"time":0.8667,"x":-0.04,"y":5.92,"curve":0.421,"c3":0.85,"c4":0.78},{"time":1.0667,"x":5.87,"y":-0.06}]},"torso2":{"rotate":[{"angle":-4.19},{"time":0.2667,"angle":-1.92,"curve":0.25,"c3":0.75},{"time":0.5333,"angle":-4.19},{"time":0.8,"angle":-1.92,"curve":0.25,"c3":0.75},{"time":1.0667,"angle":-4.19}]},"front-arm1":{"rotate":[{"angle":-329.45},{"time":0.5,"angle":-349.54},{"time":1.0667,"angle":-329.45}],"translate":[{"x":20.65,"y":-7.55},{"time":0.5,"x":-9.9,"y":10.94},{"time":0.8,"x":24.1,"y":-1.47},{"time":0.9333,"x":21.73,"y":-3.71},{"time":1.0667,"x":20.65,"y":-7.55}]},"front-leg3":{"rotate":[{"angle":1.14,"curve":"stepped"},{"time":1.0667,"angle":1.14}]},"neck":{"rotate":[{"angle":-22.13},{"time":0.2667,"angle":-4.12},{"time":0.5333,"angle":-22.13},{"time":0.8,"angle":-4.12},{"time":1.0667,"angle":-22.13}],"translate":[{"x":19.46,"y":-14.29},{"time":0.2667,"x":9.68,"y":-8.36},{"time":0.5333,"x":21.46,"y":-15.75},{"time":0.8,"x":9.68,"y":-8.36},{"time":1.0667,"x":19.46,"y":-14.29}]},"rear-arm1":{"rotate":[{"angle":23.86},{"time":0.5,"angle":37.58},{"time":1.0667,"angle":23.86}],"translate":[{},{"time":0.5,"x":11.13,"y":-13.39},{"time":1.0667}]},"rear-leg3":{"rotate":[{"angle":-23.19,"curve":"stepped"},{"time":1.0667,"angle":-23.19}]},"saddle-strap-rear1":{"rotate":[{},{"time":0.1,"angle":2.48},{"time":0.3,"angle":0.48},{"time":0.4333,"angle":-1.31},{"time":0.6,"angle":3.41},{"time":0.6333,"angle":3.21},{"time":0.9,"angle":-2.3},{"time":1.0667}]},"front-arm2":{"rotate":[{"angle":-11.14},{"time":0.5,"angle":22.44},{"time":1.0667,"angle":-11.14}]},"front-foot1":{"rotate":[{"angle":-41.33,"curve":"stepped"},{"time":1.0667,"angle":-41.33}]},"head":{"rotate":[{"angle":21.06},{"time":0.2667,"angle":14.73,"curve":0.375,"c2":0.5,"c3":0.75},{"time":0.5333,"angle":21.06},{"time":0.8,"angle":14.73,"curve":0.375,"c2":0.5,"c3":0.75},{"time":1.0667,"angle":21.06}],"translate":[{"x":9.88,"y":-14.4},{"time":0.2667,"x":5.05,"y":2.22},{"time":0.5333,"x":7.52,"y":-10.95},{"time":0.8,"x":5.05,"y":2.22},{"time":1.0667,"x":9.88,"y":-14.4}]},"rear-arm2":{"rotate":[{},{"time":0.5,"angle":-30.21},{"time":1.0667}]},"rear-foot1":{"rotate":[{"angle":2.07,"curve":"stepped"},{"time":1.0667,"angle":2.07}]},"saddle-strap-rear2":{"rotate":[{"angle":-4.45},{"time":0.1,"angle":-0.18},{"time":0.3,"angle":-1.85},{"time":0.4333,"angle":-4.59},{"time":0.6,"angle":0.52},{"time":0.6333,"angle":0.39},{"time":0.9,"angle":-4.05},{"time":1.0667,"angle":-4.45}]},"stirrup":{"rotate":[{},{"time":0.2667,"angle":-4.96},{"time":0.5333},{"time":0.8,"angle":-4.96},{"time":1.0667}],"translate":[{"x":8.98,"y":4.99},{"time":0.2667,"x":4.85,"y":1},{"time":0.5333,"x":7.76,"y":-2.99},{"time":0.8,"x":4.85,"y":1},{"time":1.0667,"x":8.98,"y":4.99}]},"front-foot2":{"rotate":[{"angle":36.9},{"time":0.0667,"angle":7.88},{"time":0.1333,"angle":4.67},{"time":0.4,"angle":7.59},{"time":0.5333,"angle":8.08},{"time":0.6667,"angle":-67.33},{"time":0.7333,"angle":-65.24},{"time":1,"angle":27.75},{"time":1.0667,"angle":36.9}]},"front-hand":{"rotate":[{"angle":9.49},{"time":0.5,"angle":-48.61},{"time":1.0667,"angle":9.49}]},"horn-rear":{"translate":[{},{"time":0.2667,"x":12.34,"y":9.16},{"time":0.5333},{"time":0.8,"x":12.34,"y":9.16},{"time":1.0667}]},"jaw":{"rotate":[{"angle":-2.84},{"time":0.2,"angle":-10.94},{"time":0.3333,"angle":-10.86},{"time":0.6667,"angle":-16.61},{"time":0.8667,"angle":-9.25},{"time":1.0667,"angle":-2.84}],"translate":[{"x":-0.34,"y":-2.02},{"time":0.2667,"x":0.79,"y":9.47},{"time":0.5,"x":0.93,"y":6.09},{"time":0.7333,"x":0.79,"y":9.47},{"time":1.0667,"x":-0.34,"y":-2.02}]},"rear-foot2":{"rotate":[{},{"time":0.1333,"angle":-82.38},{"time":0.2667,"angle":-110.31},{"time":0.4333,"angle":36.22},{"time":0.5333,"angle":2.1},{"time":1.0667}]},"rear-hand":{"rotate":[{"angle":-28.89},{"time":0.5,"angle":12.2},{"time":1.0667,"angle":-28.89}]},"saddle-strap-rear3":{"rotate":[{"angle":-1.32},{"time":0.1,"angle":2.95},{"time":0.3,"angle":1.28},{"time":0.4333,"angle":-1.46},{"time":0.6,"angle":3.65},{"time":0.6333,"angle":3.52},{"time":0.9,"angle":-0.92},{"time":1.0667,"angle":-1.32}]},"tongue1":{"rotate":[{},{"time":0.3333,"angle":13.73},{"time":0.6667,"angle":-1.69},{"time":0.9333,"angle":17.04},{"time":1.0667}]},"front-foot3":{"rotate":[{"angle":-1.65},{"time":0.0667,"angle":-3.21},{"time":0.1333,"angle":-3.94},{"time":0.2667,"angle":-3.82},{"time":0.5333,"angle":-5.89},{"time":0.6333,"angle":-25.29},{"time":0.8333,"angle":-7.16},{"time":1,"angle":10.93},{"time":1.0667,"angle":-1.65}]},"tongue2":{"rotate":[{},{"time":0.3333,"angle":-5.68},{"time":0.6667,"angle":-1.69},{"time":0.9333,"angle":-7.7},{"time":1.0667}]},"tongue3":{"rotate":[{},{"time":0.3333,"angle":-45.22},{"time":0.6667,"angle":-1.69},{"time":0.9333,"angle":-32.34},{"time":1.0667}]},"head2":{"rotate":[{"angle":38.6},{"time":0.2667,"angle":43.19},{"time":0.5333,"angle":38.6},{"time":0.8,"angle":43.19},{"time":1.0667,"angle":38.6}]},"neck2":{"rotate":[{"angle":9.65},{"time":0.2667,"angle":14.71},{"time":0.5333,"angle":9.65},{"time":0.8,"angle":14.71},{"time":1.0667,"angle":9.65}]},"spineboy-hip":{"translate":[{"x":30.8,"y":-38.27,"curve":0.413,"c3":0.873,"c4":0.78},{"time":0.2667,"x":-12.88,"y":0.58,"curve":0.139,"c2":0.18,"c3":0.75},{"time":0.5333,"x":33.99,"y":-13.71,"curve":0.367,"c3":0.867,"c4":0.82},{"time":0.8,"x":-12.88,"y":0.58,"curve":0.164,"c2":0.17,"c3":0.75},{"time":1.0667,"x":30.8,"y":-38.27}]},"spineboy-torso":{"rotate":[{"angle":-42.71},{"time":0.2667,"angle":-29.48,"curve":0.493,"c3":0.75},{"time":0.5333,"angle":-40.76},{"time":0.8,"angle":-29.48,"curve":0.493,"c3":0.75},{"time":1.0667,"angle":-42.71}]},"front-arm":{"translate":[{},{"time":0.3333,"x":-14.43,"y":-11.03},{"time":0.5333},{"time":0.8,"x":-14.43,"y":-11.03},{"time":1.0667}]},"gun":{"rotate":[{"angle":-11.68,"curve":0.379,"c2":0.6,"c3":0.724},{"time":0.0667,"angle":-17.6},{"time":0.3333,"angle":14.46,"curve":0.25,"c3":0.75},{"time":0.6,"angle":-24.74,"curve":0.326,"c2":0.01,"c3":0.716},{"time":0.8667,"angle":14.46,"curve":0.242,"c3":0.667,"c4":0.67},{"time":1.0667,"angle":-11.68}],"translate":[{"x":0.84,"y":-3.82},{"time":0.0667},{"time":0.3333,"x":3.38,"y":-15.28},{"time":0.6},{"time":0.8667,"x":3.38,"y":-15.28},{"time":1.0667,"x":0.84,"y":-3.82}]},"tail2":{"rotate":[{"angle":9.88},{"time":0.1333,"angle":-0.81},{"time":0.2333,"angle":-2.7},{"time":0.3,"angle":-11.33},{"time":0.4333,"angle":-15.11},{"time":0.5333,"angle":9.88},{"time":0.6667,"angle":-0.81},{"time":0.7667,"angle":-2.7},{"time":0.8333,"angle":-11.33},{"time":0.9667,"angle":-15.11},{"time":1.0667,"angle":9.88}]},"tail3":{"rotate":[{"angle":-7.15},{"time":0.1333,"angle":7.47},{"time":0.2333,"angle":-0.7},{"time":0.3,"angle":-6.29},{"time":0.4333,"angle":0.13},{"time":0.5333,"angle":-7.15},{"time":0.6667,"angle":7.47},{"time":0.7667,"angle":-0.7},{"time":0.8333,"angle":-6.29},{"time":0.9667,"angle":0.13},{"time":1.0667,"angle":-7.15}]},"tail4":{"rotate":[{"angle":-4.53},{"time":0.1333,"angle":11.46},{"time":0.2333,"angle":5.93},{"time":0.3,"angle":2.43},{"time":0.4333,"angle":0.24},{"time":0.5333,"angle":-4.53},{"time":0.6667,"angle":11.46},{"time":0.7667,"angle":5.93},{"time":0.8333,"angle":2.43},{"time":0.9667,"angle":0.24},{"time":1.0667,"angle":-4.53}]},"tail5":{"rotate":[{"angle":-9.9},{"time":0.1333,"angle":11.7},{"time":0.2333,"angle":13.82},{"time":0.3,"angle":10.26},{"time":0.4333,"angle":-4.1},{"time":0.5333,"angle":-9.9},{"time":0.6667,"angle":11.7},{"time":0.7667,"angle":13.82},{"time":0.8333,"angle":10.26},{"time":0.9667,"angle":-4.1},{"time":1.0667,"angle":-9.9}]},"tail6":{"rotate":[{"angle":-9.9},{"time":0.1333,"angle":13.73},{"time":0.2333,"angle":15.23},{"time":0.3,"angle":12.03},{"time":0.4333,"angle":-10.82},{"time":0.5333,"angle":-9.9},{"time":0.6667,"angle":13.73},{"time":0.7667,"angle":15.23},{"time":0.8333,"angle":12.03},{"time":0.9667,"angle":-10.82},{"time":1.0667,"angle":-9.9}],"scale":[{},{"time":0.1333,"x":0.845},{"time":0.2667,"x":0.91},{"time":0.4,"x":0.834},{"time":0.5333,"x":0.92},{"time":0.6667,"x":0.884},{"time":0.8,"x":0.967},{"time":0.9333,"x":0.904},{"time":1.0667}]},"tail7":{"rotate":[{"angle":-9.9},{"time":0.1333,"angle":9.57},{"time":0.2333,"angle":10.69},{"time":0.3,"angle":8.31},{"time":0.4333,"angle":-9.18},{"time":0.5333,"angle":-9.9},{"time":0.6667,"angle":9.57},{"time":0.7667,"angle":10.69},{"time":0.8333,"angle":8.31},{"time":0.9667,"angle":-9.18},{"time":1.0667,"angle":-9.9}],"scale":[{},{"time":0.1333,"x":0.845},{"time":0.2667,"x":0.91},{"time":0.4,"x":0.834},{"time":0.5333,"x":0.92},{"time":0.6667,"x":0.884},{"time":0.8,"x":0.967},{"time":0.9333,"x":0.904},{"time":1.0667}]},"tail8":{"rotate":[{"angle":-9.9},{"time":0.0667,"angle":-14.09},{"time":0.1333,"angle":-6.85},{"time":0.2,"angle":10.88},{"time":0.2333,"angle":9.63},{"time":0.3,"angle":9.48},{"time":0.4333,"angle":-10.9},{"time":0.4667,"angle":-21.91},{"time":0.5333,"angle":-9.9},{"time":0.6,"angle":-14.09},{"time":0.6667,"angle":-6.85},{"time":0.7333,"angle":10.88},{"time":0.7667,"angle":9.63},{"time":0.8333,"angle":9.48},{"time":0.9667,"angle":-10.9},{"time":1,"angle":-21.91},{"time":1.0667,"angle":-9.9}],"scale":[{},{"time":0.1333,"x":0.845},{"time":0.2667,"x":0.91},{"time":0.4,"x":0.834},{"time":0.5333,"x":0.92},{"time":0.6667,"x":0.884},{"time":0.8,"x":0.967},{"time":0.9333,"x":0.904},{"time":1.0667}]},"tail9":{"rotate":[{"angle":-6.79},{"time":0.0333,"angle":-20.12},{"time":0.1333,"angle":-9.9},{"time":0.2,"angle":-18.42},{"time":0.2667,"angle":-15.51},{"time":0.3333,"angle":10.33},{"time":0.3667,"angle":13.13},{"time":0.4333,"angle":4.99},{"time":0.5,"angle":6.54},{"time":0.5667,"angle":-20.12},{"time":0.6667,"angle":-9.9},{"time":0.7333,"angle":-18.42},{"time":0.8,"angle":-15.51},{"time":0.8667,"angle":10.33},{"time":0.9,"angle":13.13},{"time":0.9667,"angle":4.99},{"time":1.0333,"angle":6.54},{"time":1.0667,"angle":-6.79}],"scale":[{"x":0.904},{"time":0.1333},{"time":0.2667,"x":0.845},{"time":0.4,"x":0.91},{"time":0.5333,"x":0.834},{"time":0.6667,"x":0.92},{"time":0.8,"x":0.884},{"time":0.9333,"x":0.967},{"time":1.0667,"x":0.904}]},"tail10":{"rotate":[{"angle":-5.98},{"time":0.0333,"angle":-12.6},{"time":0.0667,"angle":-23.33},{"time":0.1333,"angle":-9.9},{"time":0.2,"angle":-23.4},{"time":0.2667,"angle":-25.45},{"time":0.3333,"angle":2.64},{"time":0.3667,"angle":6.57},{"time":0.4333,"angle":13.89},{"time":0.5667,"angle":-12.6},{"time":0.6,"angle":-23.33},{"time":0.6667,"angle":-9.9},{"time":0.7333,"angle":-23.4},{"time":0.8,"angle":-25.45},{"time":0.8667,"angle":2.64},{"time":0.9,"angle":6.57},{"time":0.9667,"angle":13.89},{"time":1.0667,"angle":-5.98}],"scale":[{"x":0.904},{"time":0.1333},{"time":0.2667,"x":0.845},{"time":0.4,"x":0.91},{"time":0.5333,"x":0.834},{"time":0.6667,"x":0.92},{"time":0.8,"x":0.884},{"time":0.9333,"x":0.967},{"time":1.0667,"x":0.904}]},"horn-front":{"translate":[{"x":-2.29,"y":-13.82},{"time":0.2667,"x":-1.21,"y":-7.32},{"time":0.5333,"x":0.81,"y":5.71},{"time":0.8,"x":0.88,"y":-4.18},{"time":1.0667,"x":-2.29,"y":-13.82}]},"saddle-strap-front2":{"rotate":[{"angle":9.54},{"time":0.2667,"angle":5.97},{"time":0.5333,"angle":0.32},{"time":0.6,"angle":2.65},{"time":0.8,"angle":3.68},{"time":1.0667,"angle":9.54}]},"saddle-strap-front1":{"rotate":[{"angle":9.54},{"time":0.2667,"angle":5.97},{"time":0.5333,"angle":0.32},{"time":0.6,"angle":2.65},{"time":0.8,"angle":3.68},{"time":1.0667,"angle":9.54}]},"jaw-inside":{"translate":[{"x":-8.34,"y":-3.22},{"time":0.5333,"x":1.17,"y":-1.6},{"time":1.0667,"x":-8.34,"y":-3.22}]},"bone":{"rotate":[{},{"time":0.1,"angle":-8.07},{"time":0.1667,"angle":-8.59},{"time":0.5333,"angle":-11.19},{"time":0.6333,"angle":-8.07},{"time":0.7,"angle":-8.59},{"time":1.0667}]},"bone2":{"rotate":[{},{"time":0.1,"angle":-8.07},{"time":0.1667,"angle":14.12},{"time":0.3333,"angle":-10.54},{"time":0.5333,"angle":-13.65},{"time":0.6333,"angle":-8.07},{"time":0.7,"angle":14.12},{"time":0.8667,"angle":-10.54},{"time":1.0667}]},"bone3":{"rotate":[{},{"time":0.1,"angle":5.59},{"time":0.1667,"angle":8.3},{"time":0.3333,"angle":-1.12},{"time":0.5333,"angle":-5.17},{"time":0.6333,"angle":5.59},{"time":0.7,"angle":8.3},{"time":0.8667,"angle":-1.12},{"time":1.0667}]},"bone4":{"rotate":[{},{"time":0.1,"angle":5.59},{"time":0.1667,"angle":8.3},{"time":0.3333,"angle":-1.12},{"time":0.5333,"angle":-5.17},{"time":0.6333,"angle":5.59},{"time":0.7,"angle":8.3},{"time":0.8667,"angle":-1.12},{"time":1.0667}]},"bone5":{"rotate":[{},{"time":0.1,"angle":5.59},{"time":0.1667,"angle":8.3},{"time":0.3333,"angle":-1.12},{"time":0.5333,"angle":-5.17},{"time":0.6333,"angle":5.59},{"time":0.7,"angle":8.3},{"time":0.8667,"angle":-1.12},{"time":1.0667}]}},"deform":{"default":{"raptor-body":{"raptor/raptor-body":[{"vertices":[-1.73239,-10.44198,-1.46689,-8.84256,-0.21689,-1.30694,-6.0E-5,-2.0E-5,-1.46689,-8.84256,5.0E-5,0,5.0E-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.0E-5,-6.0E-5,0,0,0,0,0,0,0,0,11.1855,0.31644,11.18935,-0.12109,-9.99716,-5.02722,3.0E-5,-3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,3.0E-5,-3.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,3.0E-5,-3.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,0,0,-3.0E-5,0,-3.0E-5,0,-3.0E-5,0,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,0,-3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,0,0,-6.0E-5,0,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,0,-1.2E-4,6.0E-5,-6.0E-5,6.0E-5,-1.2E-4,6.0E-5,-6.0E-5,0,0,0,-6.0E-5,0,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,-1.2E-4,6.0E-5,-6.0E-5,0,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,-3.0E-5,0,0,-6.0E-5,0,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,-3.0E-5,0,0,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,0,-3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-3.0E-5,0,-3.0E-5,0,-3.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,4.0E-5,-6.0E-5,0,0,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,0,0,0,-4.0E-5,-6.0E-5,-2.0E-5,-15.88501,24.14755,7.25766,27.97704,8.45639,27.63996,-6.0E-5,-2.0E-5,-6.0E-5,-2.0E-5,3.0E-5,-3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,20.14196,0.56873,20.14884,-0.21915,16.40837,-1.58496,11.58151,-11.7309,0.37015,-4.85554,0.16022,-4.86614,4.0E-5,-6.0E-5,0,0,3.0E-5,-3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-32.81676,-12.45938,-35.10101,-0.30017,-34.99226,2.78079,-7.72185,2.23502,-7.8739,1.61874,-7.99338,0.85056,-21.86118,-0.49329,-21.71152,-2.60098,-20.94153,-6.29172,-19.93359,-8.98814,-12.04089,3.64125,-14.95947,2.3022,-13.80969,0.32066,-15.73022,-0.81049,-11.45898,-0.07294,-11.42226,0.93271,-11.4603,0.02835,-11.40939,-1.07846,-18.55936,0.58215,-18.52805,-1.2121,-18.04468,-4.37643,-13.77896,0.60046,-13.7384,-1.2133,-13.37756,-3.33739,-12.2749,1.27342,-14.28076,-0.22295,-16.36969,-1.35783,-6.0E-5,-2.0E-5,5.0E-5,0,-2.82169,-17.00729,-2.46448,-14.85418,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-1.46439,-8.82623,-1.31543,-7.92809,-1.10992,-6.68966,-1.02371,-6.16998,-1.18591,-7.14785,-1.36481,-8.22652,-0.93686,-5.64651,-1.05206,-6.3413,-1.31223,-7.90881,-1.57056,-9.46612,-1.3873,-8.36199,-1.17612,-7.08907,-1.32928,-8.01211,-0.84509,-5.09344,-23.08304,1.6066,-23.01654,-2.38095,-22.50476,-5.38278,-12.38202,2.54651,-12.62036,0.58711,-15.02991,-0.83086,-1.58633,-9.56142,-24.21736,-5.43936,-24.60036,3.29974,-24.21712,5.44556,-24.57144,3.51672,-14.67059,-0.34517,-16.72638,-1.50173,-6.0E-5,0,-7.97382,0.00757,-9.07715,-0.6467,-12.75507,2.36398,-15.34497,0.90794,-18.0415,-0.21636,-11.84271,4.04813,-12.32141,2.15456,-14.99158,0.77748,-12.79285,0.96336,-12.78052,-1.04039,-17.6261,-0.49261,-17.409,-2.80194,-16.75665,-5.47716,-21.79681,-0.04507,-21.46588,-3.78665,-20.78278,-6.5723,-9.61081,1.11224,-9.66833,0.35004,-9.65668,-0.58542,-9.41296,-2.23477,-15.1702,3.14603,-14.83687,4.46405,-15.14316,3.27939,0,0,0,0,0,0,0,0,7.45702,0.21085,7.45959,-0.08096,-6.6649,-3.35132]},{"time":0.2667,"vertices":[-0.2166,-1.30527,-0.18336,-1.10532,-0.02716,-0.16339,-6.0E-5,-2.0E-5,-0.18336,-1.10532,5.0E-5,0,5.0E-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.0E-5,-6.0E-5,0,0,0,0,0,0,0,0,1.39819,0.03955,1.39867,-0.01514,-1.24965,-0.6284,3.0E-5,-3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,3.0E-5,-3.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,3.0E-5,-3.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,0,0,-3.0E-5,0,-3.0E-5,0,-3.0E-5,0,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,0,-3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,0,0,-6.0E-5,0,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,0,-1.2E-4,6.0E-5,-6.0E-5,6.0E-5,-1.2E-4,6.0E-5,-6.0E-5,0,0,0,-6.0E-5,0,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,-1.2E-4,6.0E-5,-6.0E-5,0,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,-3.0E-5,0,0,-6.0E-5,0,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,-3.0E-5,0,0,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,0,-3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-3.0E-5,0,-3.0E-5,0,-3.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,4.0E-5,-6.0E-5,0,0,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,0,0,0,-4.0E-5,-6.0E-5,-2.0E-5,11.49166,6.87846,8.7349,-2.6687,11.45735,-4.60934,-6.0E-5,-2.0E-5,-6.0E-5,-2.0E-5,0,-1.4E-4,1.0E-5,-1.7E-4,-6.0E-5,1.1E-4,-9.02717,-1.82815,-8.99944,-2.08419,-3.65797,-1.03493,-3.47146,1.54946,-5.0E-5,-5.0E-5,-6.0E-5,-2.0E-5,4.0E-5,-1.1E-4,-3.0E-5,-3.0E-5,0,-1.4E-4,1.0E-5,-1.7E-4,-6.0E-5,1.1E-4,1.19474,-1.10259,0.92812,0.10123,0.90294,-0.31594,15.0729,4.11747,15.19727,2.92025,15.0602,-1.70629,18.18047,13.11014,21.13782,7.71683,24.08294,2.81189,25.9774,-1.96117,6.97969,0.18677,7.95368,2.41175,3.30846,-1.19587,4.17032,0.22177,1.47621,-3.10924,0.9801,-3.38627,0.71264,-3.66487,-0.40487,-4.26096,14.20705,12.40575,17.01532,7.88709,19.63374,3.63784,13.32183,6.02744,15.3124,3.51068,16.81614,0.97486,6.62869,-2.36325,8.27107,-0.39574,9.14562,3.04038,-6.0E-5,-2.0E-5,1.1E-4,-6.0E-5,-0.35276,-2.12593,-0.30811,-1.85679,1.0E-5,-1.7E-4,-9.0E-5,6.0E-5,-3.10157,-1.32028,-3.08295,-1.20801,-3.05726,-1.05321,-3.04648,-0.98825,-3.06676,-1.11048,-3.08912,-1.24532,-0.11716,-0.70583,-0.13156,-0.79268,-0.16408,-0.98862,-3.11484,-1.40027,-0.17347,-1.04527,-3.06553,-1.10314,-0.16621,-1.00153,-0.10569,-0.6367,15.75295,9.29565,18.85947,5.70753,21.13696,2.01862,10.15045,3.34682,11.25148,1.79501,12.57044,5.84427,-0.19835,-1.1952,3.74609,4.06871,3.9685,4.75008,4.59175,3.90643,4.7614,3.10173,7.98625,-1.31892,9.25332,2.06863,-6.0E-5,0,0.25203,0.1295,0.2271,0.16943,7.86523,-1.22272,9.26955,1.02952,9.58047,4.71134,8.21227,3.16202,9.13926,1.98164,9.93424,5.05192,9.933,3.97626,11.12183,2.43649,18.28591,4.2393,20.22011,0.72114,21.53036,-2.68092,21.46704,10.31437,25.17102,5.30524,27.77731,0.29309,12.76918,8.25581,13.29114,7.28292,14.69148,3.18368,15.86002,-0.4381,6.52111,1.24054,6.5952,0.12574,6.50193,-0.63672,0,0,0,0,0,0,0,0,0.93213,0.02636,0.93245,-0.01012,-0.83311,-0.41892]},{"time":0.5333,"vertices":[2.41064,15.5181,0.63855,4.10663,0.33716,2.1703,0.05615,0.36137,0.63855,4.10663,-12.88382,-2.24988,5.0E-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.0E-5,-6.0E-5,0,0,-11.69526,-0.33041,-11.6992,0.12662,-7.75577,8.76004,-15.65966,-0.44379,-15.66505,0.16824,13.93645,7.15527,3.0E-5,-3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,3.0E-5,-3.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,3.0E-5,-3.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,0,0,-3.0E-5,0,-3.0E-5,0,-3.0E-5,0,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,0,-3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,0,0,-6.0E-5,0,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,0,-1.2E-4,6.0E-5,-6.0E-5,6.0E-5,-1.2E-4,6.0E-5,-6.0E-5,0,0,0,-6.0E-5,0,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,-1.2E-4,6.0E-5,-6.0E-5,0,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,-3.0E-5,0,0,-6.0E-5,0,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,-3.0E-5,0,0,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,0,-3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-3.0E-5,0,-3.0E-5,0,-3.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,4.0E-5,-6.0E-5,0,0,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,0,0,0,-4.0E-5,-6.0E-5,-2.0E-5,-12.02893,13.58496,2.00912,18.03365,2.78397,17.92991,-6.0E-5,-2.0E-5,-6.0E-5,-2.0E-5,3.0E-5,-3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-35.68569,-1.00909,-35.6978,0.38577,-29.38495,-2.28479,-23.17815,17.93654,0,-4.0E-5,-6.0E-5,-2.0E-5,4.0E-5,-6.0E-5,0,0,3.0E-5,-3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-9.11507,2.24191,-7.77106,5.26505,-7.27872,5.92679,18.54189,7.3241,17.90506,8.76465,16.97614,10.45093,25.34979,1.08032,25.12805,3.52008,26.23853,7.78607,27.15082,11.16714,12.27936,4.58884,12.81525,6.58737,2.09631,0.25529,2.2002,0.59886,12.42097,8.27063,13.09952,7.14938,12.49329,8.1608,11.64825,9.3277,20.66135,7.45007,19.84637,9.40845,19.48682,12.67929,23.3761,3.23181,24.71832,6.27632,25.48083,10.03455,7.67108,2.18302,7.95972,3.50586,8.21252,4.58693,-6.0E-5,-2.0E-5,5.0E-5,0,3.91388,25.19505,3.42969,22.07816,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,2.05255,13.21311,1.84576,11.88197,1.56445,10.07084,1.44916,9.32896,1.67383,10.77518,1.91876,12.3516,1.32996,8.56089,1.48474,9.55747,1.84027,11.8462,2.19794,14.14899,1.95148,12.56187,1.66071,10.69068,1.87244,12.05326,1.2041,7.75156,21.26105,3.70126,22.06598,7.29993,22.72656,10.13725,18.17822,2.49478,19.09631,5.28439,20.84369,8.21603,2.22339,14.313,1.2112,9.3262,4.37169,8.32684,5.08629,7.91138,4.44498,8.2879,5.22137,3.00792,5.05341,3.83084,-6.0E-5,0,0,0,-6.0E-5,0,11.10803,3.84043,11.52826,5.68954,11.96356,7.16939,16.63696,3.23218,17.31641,5.77393,18.62,8.46061,17.16174,5.04568,17.57532,7.64693,20.54541,6.39001,21.21869,9.03537,21.25909,12.21709,26.14914,3.07092,27.41541,7.5188,28.45703,11.05708,24.96385,5.11111,24.48148,7.06558,23.68576,9.39395,23.59863,13.32486,10.42529,7.86185,11.07576,6.91714,10.49429,7.76959,0,0,0,0,0,0,0,0,-15.65966,-0.44379,-15.66505,0.16824,13.93645,7.15527]},{"time":0.8,"offset":38,"vertices":[16.03437,2.63824,15.99692,2.85516,13.27676,-9.36844,13.98628,2.2995,13.95371,2.48871,-11.20251,-8.68344,3.0E-5,-3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,3.0E-5,-3.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,3.0E-5,-3.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,0,0,-3.0E-5,0,-3.0E-5,0,-3.0E-5,0,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,0,-3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,0,0,-6.0E-5,0,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,0,-1.2E-4,6.0E-5,-6.0E-5,6.0E-5,-1.2E-4,6.0E-5,-6.0E-5,0,0,0,-6.0E-5,0,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,-1.2E-4,6.0E-5,-6.0E-5,0,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,-3.0E-5,0,0,-6.0E-5,0,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,-3.0E-5,0,0,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,0,-3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-3.0E-5,0,-3.0E-5,0,-3.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,4.0E-5,-6.0E-5,0,0,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,0,0,0,-4.0E-5,-6.0E-5,-2.0E-5,-4.61301,22.3656,11.32343,19.83123,14.54279,17.6069,-6.0E-5,-2.0E-5,-6.0E-5,-2.0E-5,-1.0E-5,-1.5E-4,1.0E-5,-1.8E-4,-6.0E-5,1.2E-4,16.03436,2.63809,15.99693,2.85498,-6.5246,-0.95636,-5.62189,3.44666,-6.0E-5,-5.0E-5,-6.0E-5,-2.0E-5,4.0E-5,-1.2E-4,-3.0E-5,-3.0E-5,-1.0E-5,-1.5E-4,1.0E-5,-1.8E-4,-6.0E-5,1.2E-4,-31.16388,-14.47467,-31.96829,-12.60034,-33.50363,-7.62723,-15.67404,-7.54257,-16.1824,-6.37985,-17.32532,-1.55136,-9.63904,-3.7999,-10.31979,-0.92398,-11.29289,1.53363,-11.83365,3.81946,-0.76116,0.37372,-0.77516,0.47284,6.0E-5,6.0E-5,-1.2E-4,1.2E-4,-15.94965,-10.91464,-17.41495,-8.38034,-17.9798,-7.08823,-19.24954,-1.72372,-11.73975,-4.62833,-12.56888,-1.12546,-13.75427,1.86774,-4.31284,0.58575,-4.5195,1.45868,-4.60384,2.25964,-6.0E-5,1.2E-4,6.0E-5,6.0E-5,-1.2E-4,1.2E-4,-6.0E-5,-2.0E-5,1.1E-4,-6.0E-5,-6.0E-5,-2.0E-5,-6.0E-5,-2.0E-5,1.0E-5,-1.8E-4,-9.0E-5,6.0E-5,-3.33545,-0.248,-3.33545,-0.248,-3.33545,-0.248,-3.33545,-0.248,-3.33545,-0.248,-3.33545,-0.248,-6.0E-5,-2.0E-5,-6.0E-5,-2.0E-5,-6.0E-5,-2.0E-5,-3.33545,-0.248,-6.0E-5,-2.0E-5,-3.33545,-0.248,-6.0E-5,-2.0E-5,-6.0E-5,-2.0E-5,-6.12589,-0.54849,-6.70357,0.91046,-7.02463,2.26709,-2.38968,0.77112,-2.4345,1.19476,-2.48011,1.5127,-6.0E-5,-2.0E-5,-18.30502,-14.19171,-19.11487,-13.08087,-20.87097,-10.04361,-21.54788,-8.49509,0,0,-6.0E-5,0,-6.0E-5,0,0,0,-6.0E-5,0,-2.4E-4,6.0E-5,-1.0E-5,-6.0E-5,-1.8E-4,-5.5E-4,-1.49728,0.48315,-1.52541,0.74872,-1.55397,0.94781,-3.34583,1.07977,-3.40847,1.67303,-5.45097,0.7402,-5.71207,1.84357,-5.81841,2.85571,-8.14557,-0.72922,-8.91388,1.21048,-9.34079,3.01471,-13.53638,-6.51404,-13.9754,-5.5097,-14.96246,-1.33981,-16.37357,2.22342,-17.52469,-11.99283,-19.13483,-9.20819,-19.7554,-7.7887,0,0,0,0,0,0,0,0,13.98628,2.2995,13.95371,2.48871,-11.20251,-8.68344]},{"time":1.0667,"vertices":[-1.73239,-10.44198,-1.46689,-8.84256,-0.21689,-1.30694,-6.0E-5,-2.0E-5,-1.46689,-8.84256,5.0E-5,0,5.0E-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.0E-5,-6.0E-5,0,0,0,0,0,0,0,0,11.1855,0.31644,11.18935,-0.12109,-9.99716,-5.02722,3.0E-5,-3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,3.0E-5,-3.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,3.0E-5,-3.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,0,0,-3.0E-5,0,-3.0E-5,0,-3.0E-5,0,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,0,-3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,0,0,-6.0E-5,0,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,0,-1.2E-4,6.0E-5,-6.0E-5,6.0E-5,-1.2E-4,6.0E-5,-6.0E-5,0,0,0,-6.0E-5,0,0,0,-1.2E-4,6.0E-5,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,-1.2E-4,6.0E-5,-6.0E-5,0,0,0,-6.0E-5,0,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,0,0,0,-6.0E-5,0,0,0,-6.0E-5,6.0E-5,-6.0E-5,6.0E-5,0,-3.0E-5,0,0,-6.0E-5,0,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,0,-3.0E-5,0,-3.0E-5,0,0,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-6.0E-5,6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,0,0,-3.0E-5,0,-3.0E-5,0,0,-3.0E-5,0,-3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,-3.0E-5,3.0E-5,-3.0E-5,0,-3.0E-5,0,-3.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,-6.0E-5,3.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-6.0E-5,0,4.0E-5,-6.0E-5,0,0,-6.0E-5,3.0E-5,4.0E-5,-6.0E-5,0,0,0,-4.0E-5,-6.0E-5,-2.0E-5,-15.88501,24.14755,7.25766,27.97704,8.45639,27.63996,-6.0E-5,-2.0E-5,-6.0E-5,-2.0E-5,3.0E-5,-3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,20.14196,0.56873,20.14884,-0.21915,16.40837,-1.58496,11.58151,-11.7309,0.37015,-4.85554,0.16022,-4.86614,4.0E-5,-6.0E-5,0,0,3.0E-5,-3.0E-5,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-32.81676,-12.45938,-35.10101,-0.30017,-34.99226,2.78079,-7.72185,2.23502,-7.8739,1.61874,-7.99338,0.85056,-21.86118,-0.49329,-21.71152,-2.60098,-20.94153,-6.29172,-19.93359,-8.98814,-12.04089,3.64125,-14.95947,2.3022,-13.80969,0.32066,-15.73022,-0.81049,-11.45898,-0.07294,-11.42226,0.93271,-11.4603,0.02835,-11.40939,-1.07846,-18.55936,0.58215,-18.52805,-1.2121,-18.04468,-4.37643,-13.77896,0.60046,-13.7384,-1.2133,-13.37756,-3.33739,-12.2749,1.27342,-14.28076,-0.22295,-16.36969,-1.35783,-6.0E-5,-2.0E-5,5.0E-5,0,-2.82169,-17.00729,-2.46448,-14.85418,4.0E-5,-6.0E-5,-6.0E-5,3.0E-5,-1.46439,-8.82623,-1.31543,-7.92809,-1.10992,-6.68966,-1.02371,-6.16998,-1.18591,-7.14785,-1.36481,-8.22652,-0.93686,-5.64651,-1.05206,-6.3413,-1.31223,-7.90881,-1.57056,-9.46612,-1.3873,-8.36199,-1.17612,-7.08907,-1.32928,-8.01211,-0.84509,-5.09344,-23.08304,1.6066,-23.01654,-2.38095,-22.50476,-5.38278,-12.38202,2.54651,-12.62036,0.58711,-15.02991,-0.83086,-1.58633,-9.56142,-24.21736,-5.43936,-24.60036,3.29974,-24.21712,5.44556,-24.57144,3.51672,-14.67059,-0.34517,-16.72638,-1.50173,-6.0E-5,0,-7.97382,0.00757,-9.07715,-0.6467,-12.75507,2.36398,-15.34497,0.90794,-18.0415,-0.21636,-11.84271,4.04813,-12.32141,2.15456,-14.99158,0.77748,-12.79285,0.96336,-12.78052,-1.04039,-17.6261,-0.49261,-17.409,-2.80194,-16.75665,-5.47716,-21.79681,-0.04507,-21.46588,-3.78665,-20.78278,-6.5723,-9.61081,1.11224,-9.66833,0.35004,-9.65668,-0.58542,-9.41296,-2.23477,-15.1702,3.14603,-14.83687,4.46405,-15.14316,3.27939,0,0,0,0,0,0,0,0,7.45702,0.21085,7.45959,-0.08096,-6.6649,-3.35132]}]},"raptor-front-arm":{"raptor/raptor-front-arm":[{"vertices":[0.63858,10.11987,6.64316,-7.66093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.63858,10.11987,6.64316,-7.66093,0.63858,10.11987,6.64316,-7.66093,6.64316,-7.66093,6.64316,-7.66093,6.64316,-7.66093,0.63858,10.11987,6.64316,-7.66093,0.63858,10.11987,6.64316,-7.66093]},{"time":0.5333,"vertices":[2.12625,-9.42834,-6.35226,7.01714,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.12625,-9.42834,-6.35226,7.01714,2.12625,-9.42834,-6.35226,7.01714,-6.35226,7.01714,-6.35226,7.01714,-6.35226,7.01714,2.12625,-9.42834,-6.35226,7.01714,2.12625,-9.42834,-6.35226,7.01714]},{"time":1.0667,"vertices":[0.63858,10.11987,6.64316,-7.66093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.63858,10.11987,6.64316,-7.66093,0.63858,10.11987,6.64316,-7.66093,6.64316,-7.66093,6.64316,-7.66093,6.64316,-7.66093,0.63858,10.11987,6.64316,-7.66093,0.63858,10.11987,6.64316,-7.66093]}]},"raptor-front-leg":{"raptor/raptor-front-leg":[{"offset":154,"vertices":[5.88568,2.31329,5.88568,2.31329,-3.33963,5.37029,5.88568,2.31329,-3.33963,5.37029,5.88568,2.31329,-3.33963,5.37029,5.88568,2.31329,-3.33963,5.37029,5.88568,2.31329,-3.33963,5.37029,3.24279,5.42923,-3.33963,5.37029,3.24279,5.42923,5.48474,1.33588,-3.33963,5.37029,3.24279,5.42923,5.48474,1.33588,6.45844,-3.76048,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.88568,2.31329,6.32144,0.17871]},{"time":0.2667},{"time":0.5333,"offset":148,"vertices":[-18.2879,9.64194,8.54771,-3.97604,0,0,-6.20459,-38.80288,-1.60495,-18.19489,18.00257,-3.08813,1.01712,-11.54924,11.59372,0.06879,1.01712,-11.54924,11.59372,0.06879,1.01712,-11.54924,11.59372,0.06879,1.01712,-11.54924,11.59372,0.06879,7.2315,-9.06223,11.59372,0.06879,7.2315,-9.06223,-5.34506,-9.90634,11.59372,0.06879,7.2315,-9.06223,-5.34506,-9.90634,-15.37766,0.70782,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.90936,-20.67399,-20.69142,0.32318,0.83218,-9.44935,9.48574,0.05627,0.83218,-9.44935,9.48574,0.05627,0.32794,-15.86422,15.83783,-0.97108,0.42538,-16.96904,16.94692,-0.96432,0.83218,-9.44935,9.48574,0.05627,0,0,0,0,0,0,0,0,0,0,-2.43991,-8.71271,-8.55199,2.95432,8.48388,-3.14455,-4.47107,-11.33224,-11.04593,5.13776,10.92845,-5.38319]},{"time":0.6,"offset":148,"vertices":[5.8644,-1.96475]},{"time":0.6667,"offset":52,"vertices":[2.83282,3.82607,2.88747,-3.47459,6.13686,-0.65051,1.80194,5.80962,-3.46157,8.71898,1.95515,17.84987,-2.16496,11.59793,-21.96982,-6.69659,-9.24968,5.30598,3.17815,-2.1165,0.26888,0.03062,0.02821,0.2688,-10.98312,-7.06466,-4.71954,-11.86687,-13.45984,4.74478,-3.79447,-8.00033,0,0,0,0,4.81293,-9.78431,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.41243,0.36704,-0.00642,-0.55221,0,0,0,0,0.7433,-1.29713,0.49036,1.41172,1.3683,-5.24968,3.06253,4.47641,-1.30437,-1.14192,1.71709,-0.23523,-1.14153,-2.38019,2.54447,0.70039,0,0,0,0,7.63262,-3.45871,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.34303,-8.30955,8.08327,3.22951,-3.09877,0.10198,-0.71957,-2.98701,0,0,0,0,0,0,0,0,-0.68984,-0.87758,-1.06615,-0.32834,-1.4312,-0.38682,1.22995,-0.8266]},{"time":0.7,"offset":52,"vertices":[1.41641,1.91303,1.44373,-1.7373,3.06843,-0.32526,0.90097,2.90481,-1.73079,4.35949,0.97757,8.92494,-1.08248,5.79897,-7.52768,-11.41519,-8.67229,-4.663,-0.13032,-9.51013,0.13444,0.01531,0.01411,0.1344,-5.49157,-3.53233,-2.35977,-5.93344,-0.53535,10.74624,-0.16897,6.33698,12.85229,2.43229,8.83852,8.18031,26.96328,-11.50604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.61864,0.55055,-0.00964,-0.82832,0,0,0,0,1.11495,-1.9457,0.73553,2.11757,2.05245,-7.87452,4.59379,6.71461,-1.95655,-1.71288,2.57563,-0.35284,-1.71229,-3.57028,3.8167,1.05059,0,0,0,0,3.81631,-1.72936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.67152,-4.15478,4.04164,1.61476,-0.32874,3.11779,-0.67256,1.78751,0,0,0,0,0,0,0,0,-1.03475,-1.31637,-1.59922,-0.49251,-2.1468,-0.58024,1.84492,-1.2399]},{"time":0.7333,"offset":80,"vertices":[2.70691,7.35512,-0.12915,7.83603,0,0,0,0,14.23546,-11.27834,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.82486,0.73407,-0.01285,-1.10443,0,0,0,0,1.4866,-2.59427,0.98071,2.82343,2.7366,-10.49936,6.12506,8.95282,-2.60873,-2.28384,3.43417,-0.47046,-2.28305,-4.76038,5.08893,1.40079,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.37967,-1.75516,-2.1323,-0.65668,-2.8624,-0.77365,2.4599,-1.6532]},{"time":0.8,"offset":148,"vertices":[4.33227,5.00964]},{"time":0.9,"offset":66,"vertices":[-2.62872,-4.62305,-2.90607,8.52032,-0.22961,8.99833,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.00874,9.84058]},{"time":1.0667,"offset":154,"vertices":[5.88568,2.31329,5.88568,2.31329,-3.33963,5.37029,5.88568,2.31329,-3.33963,5.37029,5.88568,2.31329,-3.33963,5.37029,5.88568,2.31329,-3.33963,5.37029,5.88568,2.31329,-3.33963,5.37029,3.24279,5.42923,-3.33963,5.37029,3.24279,5.42923,5.48474,1.33588,-3.33963,5.37029,3.24279,5.42923,5.48474,1.33588,6.45844,-3.76048,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.88568,2.31329,6.32144,0.17871]}]},"raptor-jaw":{"raptor/raptor-jaw":[{"offset":2,"vertices":[5.26251,2.94318,2.28296,1.27679,4.98703,2.78809,0.60455,0.33795,0,0,1.34418,0.75165,3.53967,1.97955,5.7912,3.23895,6.41522,3.58789,0,0,0,0,0,0,0,0,0,0,3.79169,2.11963,3.79169,2.11963]},{"time":0.2667},{"time":0.5,"offset":2,"vertices":[-9.47989,-8.20044,-9.31476,-8.05737,-8.25192,-7.13806,-1.64343,-1.42157,-1.36691,-1.18243,-4.30679,-3.72552,-8.40979,-7.27472,-8.7276,3.38159,-6.24896,-5.40546,0,0,0,0,0,0,0,0,-9.43863,-8.16437,-5.37057,-4.64551,-5.37057,-4.64551]},{"time":0.7333},{"time":1.0667,"offset":2,"vertices":[5.26251,2.94318,2.28296,1.27679,4.98703,2.78809,0.60455,0.33795,0,0,1.34418,0.75165,3.53967,1.97955,5.7912,3.23895,6.41522,3.58789,0,0,0,0,0,0,0,0,0,0,3.79169,2.11963,3.79169,2.11963]}]},"raptor-saddle-w-shadow":{"raptor/raptor-saddle-w-shadow":[{"vertices":[-0.00729,4.41981,0,0,-0.01709,10.45464,-0.01709,10.45464,-0.01709,10.45464,0,0,0,0,0.01511,-8.47841,-0.0061,3.66493,-0.0061,3.66493,-0.0061,3.66493,-0.0061,3.66493,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.01511,-8.47841,-0.00729,4.41981,0,0,0,0,-0.0061,3.66493,-0.0061,3.66493,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0,0,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841]},{"time":0.2667},{"time":0.5333,"vertices":[0.22061,-8.83728,0,0,0.17395,-6.96783,0.17395,-6.96783,0.17395,-6.96783,0,0,0,0,-0.1377,5.51426,0.12805,-5.12938,0,0,0,0,0.12805,-5.12938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.1377,5.51426,0.22061,-8.83728,0,0,0,0,0.12805,-5.12938,0.12805,-5.12938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,0,0,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426,-0.1377,5.51426]},{"time":0.8},{"time":1.0667,"vertices":[-0.00729,4.41981,0,0,-0.01709,10.45464,-0.01709,10.45464,-0.01709,10.45464,0,0,0,0,0.01511,-8.47841,-0.0061,3.66493,-0.0061,3.66493,-0.0061,3.66493,-0.0061,3.66493,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.01511,-8.47841,-0.00729,4.41981,0,0,0,0,-0.0061,3.66493,-0.0061,3.66493,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0,0,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841,0.01511,-8.47841]}]}}}}}},"spineboy":{"skeleton":{"hash":"YjMV1gl6RXusmAEQb8/JU/Cs8S8","spine":"3.8.14-beta","x":-190.66,"y":-7.91,"width":419.84,"height":685.99},"bones":[{"name":"root","rotation":0.28},{"name":"hip controller","parent":"root","x":-56.6,"y":301.58},{"name":"hip","parent":"hip controller","x":56.6,"y":-54.31},{"name":"rear-foot-ik","parent":"root","x":61.91,"y":0.42},{"name":"rear-ankle-ik","parent":"rear-foot-ik","x":-33.91,"y":37.34},{"name":"rear-thigh","parent":"hip","length":85.72,"rotation":-72.54,"x":8.91,"y":-5.63},{"name":"rear-shin","parent":"rear-thigh","length":121.88,"rotation":-19.83,"x":86.1,"y":-1.33},{"name":"rear-foot","parent":"rear-shin","length":51.58,"rotation":45.78,"x":121.46,"y":-0.76},{"name":"back-foot-tip","parent":"rear-foot","length":50.3,"rotation":-0.85,"x":51.17,"y":0.24,"transform":"noRotationOrReflection"},{"name":"board target","parent":"root","rotation":0.18,"x":230.14,"y":69},{"name":"crosshair","parent":"root","x":377.27,"y":391.04},{"name":"aim-constraint-target","parent":"hip","length":26.24,"rotation":19.61,"x":1.02,"y":5.62},{"name":"clipping","parent":"root"},{"name":"hoverboard controller","parent":"root","x":-13.72,"y":108.59},{"name":"move","parent":"hoverboard controller","x":-10.55,"y":-38.63},{"name":"board","parent":"move","length":100,"rotation":0.18,"x":14.14,"y":-1.72},{"name":"exhaust1","parent":"board","rotation":3.02,"x":-249.68,"y":53.39},{"name":"exhaust2","parent":"board","rotation":26.34,"x":-191.6,"y":-22.92},{"name":"exhaust3","parent":"board","rotation":-12.34,"x":-236.03,"y":80.54,"scaleX":0.7847,"scaleY":0.7847},{"name":"portal-root","parent":"root","x":12.9,"y":328.54,"scaleX":2.0334,"scaleY":2.0334},{"name":"flare1","parent":"portal-root","x":-6.34,"y":-161.57},{"name":"flare2","parent":"portal-root","x":-6.34,"y":-161.57},{"name":"flare3","parent":"portal-root","x":-6.34,"y":-161.57},{"name":"flare4","parent":"portal-root","x":-6.34,"y":-161.57},{"name":"flare5","parent":"portal-root","x":-6.34,"y":-161.57},{"name":"flare6","parent":"portal-root","x":-6.34,"y":-161.57},{"name":"flare7","parent":"portal-root","x":-6.34,"y":-161.57},{"name":"flare8","parent":"portal-root","x":-6.34,"y":-161.57},{"name":"flare9","parent":"portal-root","x":-6.34,"y":-161.57},{"name":"flare10","parent":"portal-root","x":-6.34,"y":-161.57},{"name":"front-foot-ik","parent":"root","x":-13.53,"y":0.04},{"name":"front-ankle-ik","parent":"front-foot-ik","x":-28.4,"y":29.06},{"name":"torso","parent":"hip","length":42.52,"rotation":103.82,"x":-1.62,"y":4.9},{"name":"torso2","parent":"torso","length":42.52,"x":42.52},{"name":"torso3","parent":"torso2","length":42.52,"x":42.52},{"name":"front-upper-arm","parent":"torso3","length":69.45,"rotation":168.38,"x":18.72,"y":19.33},{"name":"front-bracer","parent":"front-upper-arm","length":40.57,"rotation":18.3,"x":68.8,"y":-0.68},{"name":"front-fist","parent":"front-bracer","length":65.39,"rotation":12.43,"x":40.57,"y":0.2},{"name":"front-thigh","parent":"hip","length":74.81,"rotation":-95.51,"x":-17.46,"y":-11.64},{"name":"front-shin","parent":"front-thigh","length":128.77,"rotation":-2.21,"x":78.69,"y":1.6},{"name":"front-foot","parent":"front-shin","length":41.01,"rotation":51.27,"x":128.76,"y":-0.34},{"name":"front-foot-tip","parent":"front-foot","length":56.03,"rotation":-1.68,"x":41.42,"y":-0.09,"transform":"noRotationOrReflection"},{"name":"rear-upper-arm","parent":"torso3","length":51.94,"rotation":-169.56,"x":7.32,"y":-19.22},{"name":"rear-bracer","parent":"rear-upper-arm","length":34.56,"rotation":23.15,"x":51.36},{"name":"gun","parent":"rear-bracer","length":43.11,"rotation":-5.43,"x":34.42,"y":-0.45},{"name":"gun-tip","parent":"gun","rotation":7.1,"x":200.78,"y":52.5},{"name":"neck","parent":"torso3","length":25.45,"rotation":-31.54,"x":42.46,"y":-0.31},{"name":"head","parent":"neck","length":131.79,"rotation":26.1,"x":27.66,"y":-0.26},{"name":"hair1","parent":"head","length":47.23,"rotation":-49.1,"x":149.83,"y":-59.77},{"name":"hair2","parent":"hair1","length":55.57,"rotation":50.42,"x":47.23,"y":0.19},{"name":"hair3","parent":"head","length":62.22,"rotation":-32.17,"x":164.14,"y":3.68},{"name":"hair4","parent":"hair3","length":80.28,"rotation":83.71,"x":62.22,"y":-0.04},{"name":"hoverboard-thruster-front","parent":"board","rotation":-29.2,"x":95.77,"y":-2.99,"transform":"noRotationOrReflection"},{"name":"hoverboard-thruster-rear","parent":"board","rotation":-29.2,"x":-76.47,"y":-4.88,"transform":"noRotationOrReflection"},{"name":"hoverglow-front","parent":"hoverboard-thruster-front","rotation":0.17,"x":-1.78,"y":-37.79},{"name":"hoverglow-rear","parent":"hoverboard-thruster-rear","rotation":0.17,"x":1.06,"y":-35.66},{"name":"muzzle","parent":"rear-bracer","rotation":3.06,"x":242.34,"y":34.26},{"name":"portal","parent":"portal-root"},{"name":"portal-shade","parent":"portal-root"},{"name":"portal-streaks1","parent":"portal-root"},{"name":"portal-streaks2","parent":"portal-root"},{"name":"side-glow1","parent":"board","x":-110.56,"y":2.62},{"name":"side-glow2","parent":"board","x":-110.56,"y":2.62,"scaleX":0.738,"scaleY":0.738},{"name":"muzzle-ring","parent":"muzzle"},{"name":"muzzle-ring2","parent":"muzzle"},{"name":"muzzle-ring3","parent":"muzzle"},{"name":"muzzle-ring4","parent":"muzzle"}],"slots":[{"name":"portal-bg","bone":"portal"},{"name":"portal-shade","bone":"portal-shade"},{"name":"portsl-streaks2","bone":"portal-streaks2","blend":"additive"},{"name":"portal-streaks1","bone":"portal-streaks1","blend":"additive"},{"name":"portal-flare8","bone":"flare8","color":"c3cbffff","blend":"additive"},{"name":"portal-flare9","bone":"flare9","color":"c3cbffff","blend":"additive"},{"name":"portal-flare10","bone":"flare10","color":"c3cbffff","blend":"additive"},{"name":"clipping","bone":"clipping"},{"name":"exhaust3","bone":"exhaust3","color":"5eb4ffff","blend":"additive"},{"name":"hoverboard-thruster-rear","bone":"hoverboard-thruster-rear"},{"name":"hoverboard-thruster-front","bone":"hoverboard-thruster-front"},{"name":"hoverboard-board","bone":"board"},{"name":"side-glow1","bone":"side-glow1","color":"ff8686ff","blend":"additive"},{"name":"side-glow3","bone":"side-glow1","color":"ff8686ff","blend":"additive"},{"name":"side-glow2","bone":"side-glow2","color":"ff8686ff","blend":"additive"},{"name":"hoverglow-front","bone":"hoverglow-front","color":"5eb4ffff","blend":"additive"},{"name":"hoverglow-rear","bone":"hoverglow-rear","color":"5eb4ffff","blend":"additive"},{"name":"exhaust1","bone":"exhaust2","color":"5eb4ffff","blend":"additive"},{"name":"exhaust2","bone":"exhaust1","color":"5eb4ffff","blend":"additive"},{"name":"rear-upper-arm","bone":"rear-upper-arm","attachment":"spineboy/rear-upper-arm"},{"name":"rear-bracer","bone":"rear-bracer","attachment":"spineboy/rear-bracer"},{"name":"gun","bone":"gun","attachment":"spineboy/gun"},{"name":"rear-foot","bone":"rear-foot","attachment":"spineboy/rear-foot"},{"name":"rear-thigh","bone":"rear-thigh","attachment":"spineboy/rear-thigh"},{"name":"rear-shin","bone":"rear-shin","attachment":"spineboy/rear-shin"},{"name":"neck","bone":"neck","attachment":"spineboy/neck"},{"name":"torso","bone":"torso","attachment":"spineboy/torso"},{"name":"front-upper-arm","bone":"front-upper-arm","attachment":"spineboy/front-upper-arm"},{"name":"head","bone":"head","attachment":"spineboy/head"},{"name":"eye","bone":"head","attachment":"spineboy/eye-indifferent"},{"name":"front-thigh","bone":"front-thigh","attachment":"spineboy/front-thigh"},{"name":"front-foot","bone":"front-foot","attachment":"spineboy/front-foot"},{"name":"front-shin","bone":"front-shin","attachment":"spineboy/front-shin"},{"name":"mouth","bone":"head","attachment":"spineboy/mouth-smile"},{"name":"goggles","bone":"head","attachment":"spineboy/goggles"},{"name":"front-bracer","bone":"front-bracer","attachment":"spineboy/front-bracer"},{"name":"front-fist","bone":"front-fist","attachment":"spineboy/front-fist-closed"},{"name":"muzzle","bone":"muzzle"},{"name":"head-bb","bone":"head"},{"name":"portal-flare1","bone":"flare1","color":"c3cbffff","blend":"additive"},{"name":"portal-flare2","bone":"flare2","color":"c3cbffff","blend":"additive"},{"name":"portal-flare3","bone":"flare3","color":"c3cbffff","blend":"additive"},{"name":"portal-flare4","bone":"flare4","color":"c3cbffff","blend":"additive"},{"name":"portal-flare5","bone":"flare5","color":"c3cbffff","blend":"additive"},{"name":"portal-flare6","bone":"flare6","color":"c3cbffff","blend":"additive"},{"name":"portal-flare7","bone":"flare7","color":"c3cbffff","blend":"additive"},{"name":"crosshair","bone":"crosshair"},{"name":"muzzle-glow","bone":"gun-tip","color":"ffffff00","blend":"additive"},{"name":"muzzle-ring","bone":"muzzle-ring","color":"d8baffff","blend":"additive"},{"name":"muzzle-ring2","bone":"muzzle-ring2","color":"d8baffff","blend":"additive"},{"name":"muzzle-ring3","bone":"muzzle-ring3","color":"d8baffff","blend":"additive"},{"name":"muzzle-ring4","bone":"muzzle-ring4","color":"d8baffff","blend":"additive"}],"ik":[{"name":"aim-ik","order":12,"bones":["rear-upper-arm"],"target":"crosshair","mix":0},{"name":"aim-torso-ik","order":7,"bones":["aim-constraint-target"],"target":"crosshair"},{"name":"board-ik","bones":["board"],"target":"board target"},{"name":"front-ankle-ik","order":3,"bones":["front-thigh","front-shin"],"target":"front-ankle-ik","bendPositive":false},{"name":"front-foot-ik","order":5,"bones":["front-foot"],"target":"front-foot-ik"},{"name":"rear-ankle-ik","order":4,"bones":["rear-thigh","rear-shin"],"target":"rear-ankle-ik","bendPositive":false},{"name":"rear-foot-ik","order":6,"bones":["rear-foot"],"target":"rear-foot-ik"}],"transform":[{"name":"aim-front-arm-transform","order":10,"bones":["front-upper-arm"],"target":"aim-constraint-target","rotation":-180,"rotateMix":0,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"aim-head-transform","order":9,"bones":["head"],"target":"aim-constraint-target","rotation":84.3,"rotateMix":0,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"aim-rear-arm-transform","order":11,"bones":["rear-upper-arm"],"target":"aim-constraint-target","x":57.7,"y":56.4,"rotateMix":0,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"aim-torso-transform","order":8,"bones":["torso"],"target":"aim-constraint-target","rotation":69.5,"shearY":-36,"rotateMix":0,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"front-foot-board","order":1,"bones":["front-foot-ik"],"target":"board","x":-69.8,"y":20.7,"rotateMix":0,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"rear-foot-board","order":2,"bones":["rear-foot-ik"],"target":"board","x":86.6,"y":21.3,"rotateMix":0,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"toes-board","order":13,"bones":["front-foot-tip","back-foot-tip"],"target":"board","rotateMix":0,"translateMix":0,"scaleMix":0,"shearMix":0}],"skins":[{"name":"default","attachments":{"clipping":{"clipping":{"type":"clipping","end":"head-bb","vertexCount":9,"vertices":[66.76,509.48,19.98,434.54,5.34,336.28,22.19,247.93,77.98,159.54,182.21,-97.56,1452.26,-99.8,1454.33,843.61,166.57,841.02]}},"crosshair":{"spineboy/crosshair":{"width":89,"height":89}},"exhaust1":{"spineboy/hoverglow-small":{"scaleX":0.4629,"scaleY":0.8129,"rotation":-83.07,"width":274,"height":75}},"exhaust2":{"spineboy/hoverglow-small":{"x":0.01,"y":-0.76,"scaleX":0.4208,"scaleY":0.8403,"rotation":-89.25,"width":274,"height":75}},"exhaust3":{"spineboy/hoverglow-small":{"scaleX":0.4629,"scaleY":0.8129,"rotation":-83.07,"width":274,"height":75}},"eye":{"spineboy/eye-indifferent":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[73.41,-91.35,23.16,-13.11,98.03,34.99,148.28,-43.25],"hull":4},"spineboy/eye-surprised":{"x":85.72,"y":-28.18,"rotation":-70.63,"width":93,"height":89}},"front-bracer":{"spineboy/front-bracer":{"x":12.03,"y":-1.68,"rotation":79.6,"width":58,"height":80}},"front-fist":{"spineboy/front-fist-closed":{"x":35.5,"y":6,"rotation":67.16,"width":75,"height":82},"spineboy/front-fist-open":{"x":39.57,"y":7.76,"rotation":67.16,"width":86,"height":87}},"front-foot":{"spineboy/front-foot":{"type":"mesh","uvs":[0.59417,0.23422,0.62257,0.30336,0.6501,0.37036,0.67637,0.38404,0.72068,0.4071,0.76264,0.42894,1,0.70375,1,1,0.65517,1,0.46923,0.99999,0,1,0,0.39197,0,0,0.17846,0,0.49796,0],"triangles":[8,6,7,6,8,5,5,8,4,4,8,3,8,9,3,9,10,2,1,2,10,9,2,3,0,1,11,0,11,13,0,13,14,11,1,10,11,12,13],"vertices":[2,40,18.17,41.57,0.7896,41,12.46,46.05,0.2104,2,40,24.08,40.76,0.71228,41,16.12,41.34,0.28772,2,40,29.81,39.98,0.55344,41,19.67,36.78,0.44656,2,40,32.81,41.67,0.38554,41,23,35.89,0.61446,2,40,37.86,44.52,0.25567,41,28.61,34.4,0.74433,2,40,42.65,47.22,0.17384,41,33.92,32.99,0.82616,2,40,77.17,55.15,0.14653,41,64.15,14.56,0.85347,2,40,91.7,40.78,0.21579,41,64.51,-5.87,0.78421,2,40,61.15,9.88,0.3654,41,21.08,-6.64,0.6346,2,40,44.67,-6.77,0.5684,41,-2.34,-6.97,0.4316,2,40,3.1,-48.81,0.74826,41,-61.45,-8.09,0.25174,2,40,-26.73,-19.31,0.9085,41,-62.19,33.85,0.0915,2,40,-45.96,-0.29,0.95152,41,-62.66,60.88,0.04848,2,40,-30.15,15.69,0.93027,41,-40.19,61.28,0.06973,2,40,-1.84,44.32,0.86778,41,0.06,61.99,0.13222],"hull":15}},"front-shin":{"spineboy/front-shin":{"type":"mesh","uvs":[0.90031,0.05785,1,0.12828,1,0.21619,0.9025,0.31002,0.78736,0.35684,0.78081,0.39874,0.77215,0.45415,0.77098,0.51572,0.84094,0.63751,0.93095,0.7491,0.95531,0.7793,0.78126,0.87679,0.5613,1,0.2687,1,0,1,0.00279,0.96112,0.01358,0.81038,0.02822,0.60605,0.08324,0.45142,0.18908,0.31882,0.29577,0.2398,0.30236,0.14941,0.37875,0.05902,0.53284,0,0.70538,0,0.41094,0.71968,0.40743,0.54751,0.41094,0.4536,0.4724,0.35186,0.33367,0.27829,0.50226,0.31664,0.65328,0.67507,0.60762,0.52716,0.6006,0.45125,0.62747,0.37543,0.6573,0.3385,0.27843,0.32924,0.18967,0.45203,0.16509,0.58586,0.18265,0.7682,0.50532,0.24634,0.59473,0.17967,0.60161,0.10611,0.51392,0.04327,0.72198,0.28849,0.82343,0.20266,0.86814,0.11377,0.79592,0.04634,0.44858,0.15515,0.25466,0.96219,0.53169,0.9448,0.7531,0.8324],"triangles":[24,0,47,43,23,24,47,43,24,43,22,23,42,43,47,46,47,0,42,47,46,46,0,1,48,22,43,48,43,42,21,22,48,41,48,42,45,42,46,41,42,45,46,1,2,45,46,2,40,48,41,48,20,21,29,48,40,29,20,48,44,41,45,40,41,44,3,45,2,44,45,3,30,29,40,35,30,40,36,19,20,36,20,29,44,35,40,28,29,30,4,44,3,35,44,4,34,30,35,5,35,4,34,28,30,33,28,34,37,19,36,18,19,37,27,29,28,27,28,33,36,29,27,37,36,27,5,34,35,6,34,5,33,34,6,6,32,33,7,32,6,26,37,27,38,18,37,38,37,26,17,18,38,31,32,7,31,7,8,32,25,26,38,26,25,27,33,32,32,26,27,39,38,25,17,38,39,16,17,39,51,31,8,51,8,9,11,51,9,11,9,10,31,50,25,31,25,32,50,31,51,49,39,25,49,25,50,15,16,39,49,15,39,13,49,50,14,15,49,13,14,49,12,50,51,12,51,11,13,50,12],"vertices":[-23.66,19.37,-11.73,28.98,4.34,30.83,22.41,24.87,32.05,16.48,39.77,16.83,49.98,17.3,61.25,18.5,82.85,26.78,102.4,36.46,107.69,39.09,127.15,26.97,151.74,11.65,154.49,-12.18,157.02,-34.07,149.89,-34.66,122.23,-36.97,84.75,-40.09,55.97,-38.88,30.73,-33.05,15.29,-26.03,-1.3,-27.41,-18.54,-23.09,-30.78,-11.79,-32.4,2.27,101.92,-6.52,70.48,-10.44,53.28,-12.14,34.11,-9.28,21.96,-22.13,27.39,-7.59,91.48,12.28,64.88,5.44,51.07,3.26,36.95,3.85,29.92,5.5,31.8,-25.56,55.08,-30.19,79.77,-29.37,112.93,-24.09,14.51,-8.83,1.48,-2.95,-12.03,-3.94,-22.69,-12.41,20.17,9.71,3.53,16.16,-13.14,17.93,-24.78,10.62,-1.62,-15.37,147.71,-14.13,141.93,8.07,119.3,23.74],"hull":25}},"front-thigh":{"spineboy/front-thigh":{"x":42.48,"y":4.45,"rotation":84.87,"width":48,"height":112}},"front-upper-arm":{"spineboy/front-upper-arm":{"x":28.31,"y":7.37,"rotation":97.9,"width":54,"height":97}},"goggles":{"spineboy/goggles":{"type":"mesh","uvs":[0.53653,0.04114,0.72922,0.16036,0.91667,0.33223,0.97046,0.31329,1,0.48053,0.95756,0.5733,0.88825,0.6328,0.86878,0.78962,0.77404,0.8675,0.72628,1,0.60714,0.93863,0.49601,0.88138,0.41558,0.75027,0.32547,0.70084,0.2782,0.58257,0.1721,0.63281,0.17229,0.75071,0.10781,0.79898,0,0.32304,0,0.12476,0.07373,0.07344,0.15423,0.10734,0.23165,0.13994,0.30313,0.02256,0.34802,0,0.42979,0.69183,0.39476,0.51042,0.39488,0.31512,0.45878,0.23198,0.56501,0.28109,0.69961,0.39216,0.82039,0.54204,0.85738,0.62343,0.91107,0.51407,0.72639,0.32147,0.58764,0.19609,0.48075,0.11269,0.37823,0.05501,0.3287,0.17866,0.319,0.305,0.36036,0.53799,0.40327,0.70072,0.30059,0.55838,0.21957,0.2815,0.09963,0.28943,0.56863,0.4368,0.4911,0.37156,0.51185,0.52093,0.67018,0.59304,0.7619,0.68575,0.73296,0.43355],"triangles":[49,8,48,9,48,8,12,25,11,48,9,10,47,48,10,47,10,25,25,10,11,8,49,7,17,15,16,17,18,15,49,32,7,7,32,6,41,42,40,12,41,25,41,12,42,13,14,42,12,13,42,41,40,25,40,26,25,25,26,47,49,31,32,31,49,50,18,44,15,42,14,44,14,15,44,5,6,33,6,32,33,32,31,33,47,45,48,49,48,50,50,45,30,50,48,45,42,44,43,5,33,4,42,39,40,42,43,39,31,50,33,40,39,26,45,47,46,33,2,4,2,33,34,47,26,46,26,27,46,26,39,27,2,3,4,30,45,29,30,34,50,33,50,34,45,46,29,30,29,34,27,28,46,46,28,29,18,19,44,29,35,34,2,34,1,34,35,1,28,27,38,27,39,38,39,43,38,44,19,21,44,21,43,21,19,20,43,22,38,43,21,22,29,28,35,28,36,35,28,38,36,36,0,35,35,0,1,22,23,38,38,37,36,37,23,24,37,38,23,36,37,0,37,24,0],"vertices":[172.09,22.81,170.1,-31.19,159.41,-86.8,167.03,-99.01,143.4,-115.48,125.21,-110.14,109.89,-96.35,83.65,-100.19,63.25,-81.16,38.37,-76.69,37.67,-43.98,37.01,-13.47,50.58,13.55,50.52,38.45,64.95,56.6,47.9,79.96,29.45,73.42,16.31,86.64,81.51,139.38,112.56,150.3,126.97,134.97,128.63,113.28,130.23,92.43,154.79,81.29,162.21,71.48,60.96,13.27,86.33,31.88,116.93,42.6,135.47,31.44,136.98,2.59,131.23,-36.66,118.22,-74.65,108.69,-88.24,130.46,-95.44,144.63,-39.36,152.25,1.7,156.06,32.6,156.22,61.02,132.57,66.41,111.94,61.84,79.04,38.83,57.27,19.31,70.67,52.42,107.02,87.61,95.4,116.7,112.91,-6.87,116.42,15.8,94.82,2.47,97.24,-40.48,90.66,-68.16,127.65,-47.15],"hull":25}},"gun":{"spineboy/gun":{"x":77.3,"y":16.4,"rotation":60.83,"width":210,"height":203}},"head":{"spineboy/head":{"type":"mesh","uvs":[0.75919,0.06107,0.88392,0.17893,0.90174,0.30856,0.94224,0.1966,1,0.26584,1,0.422,0.95864,0.46993,0.92118,0.51333,0.85957,0.5347,0.78388,0.65605,0.74384,0.74838,0.85116,0.75151,0.84828,0.82564,0.81781,0.85367,0.75599,0.85906,0.76237,0.90468,0.65875,1,0.38337,1,0.1858,0.85404,0.12742,0.81091,0.06025,0.69209,0,0.58552,0,0.41021,0.0853,0.20692,0.24243,0.14504,0.5,0.1421,0.50324,0.07433,0.41738,0,0.57614,0,0.85059,0.36087,0.73431,0.43206,0.68481,0.31271,0.72165,0.16718,0.55931,0.04154,0.44764,0.22895,0.23926,0.26559,0.71272,0.44036,0.56993,0.383,0.41678,0.33511,0.293,0.31497,0.70802,0.44502,0.56676,0.38976,0.41521,0.34416,0.28754,0.33017,0.88988,0.50177,0.30389,0.73463,0.2646,0.65675,0.21414,0.61584,0.14613,0.62194,0.10316,0.66636,0.10358,0.72557,0.14505,0.79164,0.20263,0.81355,0.27873,0.80159,0.34947,0.7376,0.23073,0.57073,0.08878,0.60707,0.29461,0.8129,0.73006,0.87883,0.69805,0.87348,0.66166,0.79681],"triangles":[36,37,31,30,31,29,37,41,38,31,37,34,31,32,29,37,38,34,34,25,31,2,32,1,31,25,32,33,32,25,33,25,26,32,0,1,32,33,0,0,33,28,26,27,33,33,27,28,6,29,5,29,2,5,2,4,5,2,29,32,2,3,4,36,30,44,44,30,6,30,29,6,30,36,31,16,58,15,16,59,58,59,16,60,18,57,17,57,54,17,16,17,60,17,54,60,58,14,15,58,59,14,59,60,14,60,10,14,14,10,13,18,53,57,18,52,53,19,51,18,18,51,52,13,10,12,12,10,11,53,52,45,57,45,54,57,53,45,20,50,19,46,45,52,47,46,50,50,48,47,19,50,51,46,52,51,54,41,60,10,60,9,60,41,40,46,51,50,9,60,40,55,42,41,54,55,41,46,54,45,20,49,50,50,49,48,20,56,49,20,21,56,49,56,48,47,55,46,42,55,43,55,54,46,9,40,8,47,48,55,55,48,56,55,56,22,56,21,22,55,22,43,8,44,7,40,36,8,8,36,44,7,44,6,41,37,40,40,37,36,43,22,39,22,23,35,41,42,38,43,39,42,42,39,38,38,39,34,39,22,35,39,35,34,35,24,34,35,23,24,34,24,25],"vertices":[1,51,41.97,-41.8,1,3,49,73.47,27.55,0.18925,51,-5.75,-51.71,0.72419,50,112.98,-11.43,0.08656,3,49,38.23,10.99,0.84284,51,-41.02,-35.22,0.09706,50,92.72,-44.68,0.06011,1,49,73.36,10.89,1,1,49,58.59,-10.38,1,2,48,75.49,-4.56,0.10258,49,14.36,-24.8,0.89742,2,48,59.82,-13.73,0.41734,49,-2.7,-18.57,0.58266,1,47,163.07,-108.68,1,1,47,151.52,-95.05,1,1,47,110.61,-87.69,1,1,47,81.05,-86.58,1,1,47,89.82,-114.32,1,1,47,68.72,-120.91,1,1,47,58.1,-115.89,1,1,47,51.03,-100.63,1,1,47,38.79,-106.76,1,1,47,2.68,-89.7,1,1,47,-22.07,-19.3,1,1,47,1.2,45.63,1,1,47,8.07,64.82,1,1,47,35.44,93.73,1,1,47,59.98,119.66,1,1,47,109.26,136.99,1,1,47,174.07,135.27,1,2,47,205.59,101.22,0.83763,50,-16.8,104.64,0.16237,2,51,58.94,30.5,0.60736,50,38.37,61.9,0.39264,2,51,75.56,19.01,0.94502,50,51.63,77.15,0.05498,1,51,106.7,26.9,1,1,51,83.79,-9.51,1,4,48,44.52,27.24,0.19601,49,19.12,19.33,0.58067,51,-46.83,-15.19,0.07455,50,72.17,-48.25,0.14877,2,48,7.42,19.08,0.79203,50,34.31,-45.25,0.20797,1,50,45.94,-9.06,1,1,51,20.62,-16.35,1,1,51,75.74,0.94,1,3,47,200.44,40.47,0.4822,51,44.59,56.29,0.1495,50,11.17,50.47,0.3683,1,47,171.41,90.12,1,2,48,1.07,18.93,0.79203,50,28.19,-43.54,0.20797,3,47,168.13,-6.01,0.11484,48,-28.64,49.04,0.13133,50,8.54,-6.09,0.75382,2,47,167.83,37.87,0.27101,50,-15.06,30.91,0.72899,1,47,162.36,71.5,1,1,47,163.11,-47.44,1,1,47,165.94,-5.87,1,1,47,165.14,37.38,1,1,47,157.6,71.4,1,1,47,163.5,-99.54,1,1,47,45.38,27.24,1,1,47,63.74,44.98,1,1,47,70.7,61.93,1,1,47,62.88,78.71,1,1,47,46.53,85.3,1,1,47,29.92,79.34,1,1,47,15.08,62.21,1,1,47,14.09,45.33,1,1,47,24.3,27.06,1,1,47,48.64,15.3,1,1,47,84.87,62.14,1,1,47,61.9,94.84,1,1,47,22.54,21.88,1,1,47,43.15,-95.95,1,1,47,41.77,-87.24,1,1,47,60.05,-70.36,1],"hull":29}},"head-bb":{"head":{"type":"boundingbox","vertexCount":6,"vertices":[-19.14,-70.3,40.8,-118.08,257.78,-115.62,285.17,57.18,120.77,164.95,-5.07,76.95]}},"hoverboard-board":{"spineboy/hoverboard-board":{"type":"mesh","uvs":[0.13865,0.56624,0.11428,0.51461,0.07619,0.52107,0.02364,0.52998,0.01281,0.53182,0,0.37979,0,0.2206,0.00519,0.10825,0.01038,0.10726,0.03834,0.10194,0.05091,0,0.08326,0,0.10933,0.04206,0.1382,0.08865,0.18916,0.24067,0.22234,0.4063,0.23886,0.44063,0.83412,0.44034,0.88444,0.38296,0.92591,0.32639,0.95996,0.28841,0.98612,0.28542,1,0.38675,0.99494,0.47104,0.97883,0.53251,0.94409,0.62135,0.90206,0.69492,0.86569,0.71094,0.82822,0.70791,0.81286,0.77127,0.62931,0.77266,0.61364,0.70645,0.47166,0.70664,0.45901,0.77827,0.27747,0.76986,0.2658,0.70372,0.24976,0.71381,0.24601,0.77827,0.23042,0.84931,0.20926,0.90956,0.17299,1,0.15077,0.99967,0.12906,0.90192,0.10369,0.73693,0.10198,0.62482,0.09131,0.47272,0.09133,0.41325,0.15082,0.41868,0.21991,0.51856,0.06331,0.10816,0.08383,0.21696,0.08905,0.37532,0.15903,0.58726,0.17538,0.65706,0.20118,0.8029,0.17918,0.55644,0.22166,0.5802,0.86259,0.57962,0.92346,0.48534,0.96691,0.36881,0.0945,0.13259,0.12688,0.17831,0.15986,0.24682,0.18036,0.31268,0.20607,0.4235,0.16074,0.85403,0.13624,0.70122,0.12096,0.64049,0.02396,0.21811,0.02732,0.37839,0.02557,0.4972,0.14476,0.45736,0.18019,0.51689,0.19692,0.56636],"triangles":[10,11,12,9,10,12,49,9,12,60,49,12,13,60,12,61,60,13,50,49,60,50,60,61,68,8,9,68,9,49,68,49,50,7,8,68,6,7,68,61,13,14,62,61,14,50,61,62,63,62,14,59,20,21,19,20,59,51,50,62,51,62,63,51,69,68,51,68,50,6,68,69,5,6,69,18,19,59,15,63,14,59,21,22,47,51,63,47,46,51,47,63,64,15,64,63,64,15,16,71,46,47,23,59,22,69,51,70,45,46,71,70,51,2,58,18,59,58,59,23,17,18,58,70,5,69,2,51,46,1,45,71,47,48,71,47,64,48,48,72,71,1,71,72,16,48,64,45,2,46,2,45,1,70,4,5,3,70,2,3,4,70,24,58,23,72,0,1,73,55,72,55,0,72,48,73,72,57,17,58,25,57,58,56,48,16,73,48,56,56,16,17,56,17,57,52,0,55,24,25,58,44,0,52,67,44,52,52,56,53,73,52,55,56,52,73,67,52,53,26,57,25,66,67,53,56,32,35,53,56,35,56,57,32,28,31,57,57,31,32,57,27,28,26,27,57,36,53,35,43,44,67,43,67,66,34,35,32,29,31,28,30,31,29,53,54,66,53,36,54,33,34,32,37,54,36,65,43,66,38,54,37,54,65,66,39,65,54,42,43,65,38,39,54,40,42,65,40,41,42,65,39,40],"vertices":[-189.36,15.62,-201.35,23.47,-220.09,22.49,-245.95,21.13,-251.28,20.86,-257.58,43.96,-257.57,68.16,-255.02,85.24,-252.47,85.39,-238.71,86.2,-232.52,101.69,-216.61,101.69,-203.78,95.3,-189.58,88.21,-164.51,65.1,-148.19,39.93,-140.06,34.71,152.82,34.73,177.57,43.45,197.97,52.05,214.72,57.82,227.6,58.27,234.42,42.87,231.94,30.06,224.01,20.72,206.91,7.21,186.23,-3.97,168.34,-6.4,149.9,-5.94,142.35,-15.57,52.04,-15.77,44.33,-5.71,-25.52,-5.73,-31.75,-16.62,-121.07,-15.34,-126.81,-5.28,-134.7,-6.81,-136.54,-16.61,-144.22,-27.41,-154.63,-36.57,-172.47,-50.31,-183.41,-50.26,-194.09,-35.4,-206.56,-10.32,-207.4,6.72,-212.65,29.84,-212.64,38.88,-183.37,38.05,-149.38,22.86,-226.43,85.25,-216.33,68.71,-213.76,44.64,-179.34,12.42,-171.29,1.81,-158.6,-20.36,-169.42,17.11,-148.52,13.49,166.82,13.56,196.76,27.89,218.14,45.6,-211.08,81.54,-195.15,74.59,-178.93,64.17,-168.84,54.16,-156.19,37.31,-178.5,-28.13,-190.55,-4.9,-198.07,4.33,-245.79,68.54,-244.14,44.18,-245,26.12,-186.36,32.17,-168.92,23.12,-160.69,15.6],"hull":45}},"hoverboard-thruster-front":{"spineboy/hoverboard-thruster":{"x":0.02,"y":-7.08,"rotation":0.17,"width":60,"height":64}},"hoverboard-thruster-rear":{"spineboy/hoverboard-thruster":{"x":1.1,"y":-6.29,"rotation":0.17,"width":60,"height":64}},"hoverglow-front":{"spineboy/hoverglow-small":{"x":2.13,"y":-2,"scaleX":0.303,"scaleY":0.495,"rotation":0.15,"width":274,"height":75}},"hoverglow-rear":{"spineboy/hoverglow-small":{"x":1.39,"y":-2.09,"scaleX":0.303,"scaleY":0.495,"rotation":0.61,"width":274,"height":75}},"mouth":{"spineboy/mouth-grind":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[11.28,-85.88,-19.56,1.84,36.09,21.41,66.93,-66.32],"hull":4},"spineboy/mouth-oooo":{"x":23.69,"y":-32.24,"rotation":-70.63,"width":93,"height":59},"spineboy/mouth-smile":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[11.28,-85.89,-19.56,1.85,36.1,21.42,66.94,-66.32],"hull":4}},"muzzle":{"spineboy/muzzle01":{"x":151.97,"y":5.81,"rotation":0.15,"width":542,"height":349},"spineboy/muzzle02":{"x":187.25,"y":5.9,"rotation":0.15,"width":540,"height":337},"spineboy/muzzle03":{"x":231.96,"y":6.02,"rotation":0.15,"width":663,"height":425},"spineboy/muzzle04":{"x":231.96,"y":6.02,"rotation":0.15,"width":596,"height":358},"spineboy/muzzle05":{"x":293.8,"y":6.19,"scaleX":1.1867,"scaleY":1.1867,"rotation":0.15,"width":538,"height":299}},"muzzle-glow":{"spineboy/muzzle-glow":{"width":198,"height":198}},"muzzle-ring":{"spineboy/muzzle-ring":{"x":-1.3,"y":0.32,"scaleX":0.3147,"scaleY":0.3147,"width":49,"height":209}},"muzzle-ring2":{"spineboy/muzzle-ring":{"x":-1.3,"y":0.32,"scaleX":0.3147,"scaleY":0.3147,"width":49,"height":209}},"muzzle-ring3":{"spineboy/muzzle-ring":{"x":-1.3,"y":0.32,"scaleX":0.3147,"scaleY":0.3147,"width":49,"height":209}},"muzzle-ring4":{"spineboy/muzzle-ring":{"x":-1.3,"y":0.32,"scaleX":0.3147,"scaleY":0.3147,"width":49,"height":209}},"neck":{"spineboy/neck":{"x":9.77,"y":-3.01,"rotation":-55.22,"width":36,"height":41}},"portal-bg":{"spineboy/portal-bg":{"x":-3.1,"y":7.25,"scaleX":1.0492,"scaleY":1.0492,"width":266,"height":266}},"portal-flare1":{"spineboy/portal-flare1":{"width":111,"height":60},"spineboy/portal-flare2":{"width":114,"height":61},"spineboy/portal-flare3":{"width":115,"height":59}},"portal-flare10":{"spineboy/portal-flare1":{"width":111,"height":60},"spineboy/portal-flare2":{"width":114,"height":61},"spineboy/portal-flare3":{"width":115,"height":59}},"portal-flare2":{"spineboy/portal-flare1":{"width":111,"height":60},"spineboy/portal-flare2":{"width":114,"height":61},"spineboy/portal-flare3":{"width":115,"height":59}},"portal-flare3":{"spineboy/portal-flare1":{"width":111,"height":60},"spineboy/portal-flare2":{"width":114,"height":61},"spineboy/portal-flare3":{"width":115,"height":59}},"portal-flare4":{"spineboy/portal-flare1":{"width":111,"height":60},"spineboy/portal-flare2":{"width":114,"height":61},"spineboy/portal-flare3":{"width":115,"height":59}},"portal-flare5":{"spineboy/portal-flare1":{"width":111,"height":60},"spineboy/portal-flare2":{"width":114,"height":61},"spineboy/portal-flare3":{"width":115,"height":59}},"portal-flare6":{"spineboy/portal-flare1":{"width":111,"height":60},"spineboy/portal-flare2":{"width":114,"height":61},"spineboy/portal-flare3":{"width":115,"height":59}},"portal-flare7":{"spineboy/portal-flare1":{"width":111,"height":60},"spineboy/portal-flare2":{"width":114,"height":61},"spineboy/portal-flare3":{"width":115,"height":59}},"portal-flare8":{"spineboy/portal-flare1":{"width":111,"height":60},"spineboy/portal-flare2":{"width":114,"height":61},"spineboy/portal-flare3":{"width":115,"height":59}},"portal-flare9":{"spineboy/portal-flare1":{"width":111,"height":60},"spineboy/portal-flare2":{"width":114,"height":61},"spineboy/portal-flare3":{"width":115,"height":59}},"portal-shade":{"spineboy/portal-shade":{"width":266,"height":266}},"portal-streaks1":{"spineboy/portal-streaks1":{"scaleX":0.9774,"scaleY":0.9774,"width":252,"height":256}},"portsl-streaks2":{"spineboy/portsl-streaks2":{"x":-1.64,"y":2.79,"width":250,"height":249}},"rear-bracer":{"spineboy/rear-bracer":{"x":11.15,"y":-2.2,"rotation":66.17,"width":56,"height":72}},"rear-foot":{"spineboy/rear-foot":{"type":"mesh","uvs":[0.48368,0.1387,0.51991,0.21424,0.551,0.27907,0.58838,0.29816,0.63489,0.32191,0.77342,0.39267,1,0.73347,1,1,0.54831,0.99883,0.31161,1,0,1,0,0.41397,0.13631,0,0.41717,0],"triangles":[8,6,7,8,5,6,8,4,5,8,3,4,3,8,9,2,9,10,1,11,0,0,11,12,12,13,0,2,10,1,3,9,2,11,1,10],"vertices":[2,7,10.45,29.41,0.90802,8,-6.74,49.62,0.09198,2,7,16.56,29.27,0.84259,8,-2.65,45.09,0.15741,2,7,21.8,29.15,0.69807,8,0.85,41.2,0.30193,2,7,25.53,31.43,0.52955,8,5.08,40.05,0.47045,2,7,30.18,34.27,0.39303,8,10.33,38.62,0.60697,2,7,44.02,42.73,0.27525,8,25.98,34.36,0.72475,2,7,76.47,47.28,0.21597,8,51.56,13.9,0.78403,2,7,88.09,36.29,0.28719,8,51.55,-2.09,0.71281,2,7,52.94,-0.73,0.47576,8,0.52,-1.98,0.52424,2,7,34.63,-20.23,0.68757,8,-26.23,-2.03,0.31243,2,7,10.44,-45.81,0.84141,8,-61.43,-2,0.15859,2,7,-15.11,-21.64,0.93283,8,-61.4,33.15,0.06717,2,7,-22.57,6.61,0.95922,8,-45.98,57.97,0.04078,2,7,-0.76,29.67,0.94836,8,-14.25,57.95,0.05164],"hull":14}},"rear-shin":{"spineboy/rear-shin":{"x":58.29,"y":-2.75,"rotation":92.37,"width":75,"height":178}},"rear-thigh":{"spineboy/rear-thigh":{"x":33.11,"y":-4.11,"rotation":72.54,"width":65,"height":104}},"rear-upper-arm":{"spineboy/rear-upper-arm":{"x":21.13,"y":4.09,"rotation":89.33,"width":47,"height":87}},"side-glow1":{"spineboy/hoverglow-small":{"x":2.09,"scaleX":0.2353,"scaleY":0.4132,"width":274,"height":75}},"side-glow2":{"spineboy/hoverglow-small":{"x":2.09,"scaleX":0.2353,"scaleY":0.4132,"width":274,"height":75}},"side-glow3":{"spineboy/hoverglow-small":{"x":2.09,"scaleX":0.3586,"scaleY":0.6297,"width":274,"height":75}},"torso":{"spineboy/torso":{"type":"mesh","uvs":[0.6251,0.12672,1,0.26361,1,0.28871,1,0.66021,1,0.68245,0.92324,0.69259,0.95116,0.84965,0.77124,1,0.49655,1,0.27181,1,0.13842,0.77196,0.09886,0.6817,0.05635,0.58471,0,0.45614,0,0.33778,0,0.19436,0.14463,0,0.27802,0,0.72525,0.27835,0.76091,0.46216,0.84888,0.67963,0.68257,0.63249,0.53986,0.3847,0.25443,0.3217,0.30063,0.55174,0.39553,0.79507,0.26389,0.17007,0.5241,0.18674,0.71492,0.76655,0.82151,0.72956,0.27626,0.4304,0.62327,0.52952,0.3455,0.66679,0.53243,0.2914],"triangles":[27,26,16,17,27,16,0,27,17,15,16,26,18,0,1,27,0,18,18,1,2,33,27,18,23,15,26,33,23,26,33,26,27,14,15,23,22,33,18,23,33,22,13,14,23,19,18,2,30,23,22,13,23,30,22,18,19,31,22,19,24,30,22,24,22,31,12,13,30,12,30,24,21,31,19,19,2,3,32,24,31,32,31,21,3,20,19,11,12,24,11,24,32,20,21,19,5,20,3,4,5,3,29,21,20,29,20,5,28,21,29,10,11,32,25,32,21,25,21,28,10,32,25,29,5,6,9,10,25,8,25,28,9,25,8,7,28,29,7,29,6,8,28,7],"vertices":[2,33,87.11,-10.39,2.0E-4,34,44.59,-10.39,0.9998,2,33,59.65,-45.08,0.31254,34,17.13,-45.08,0.68746,3,32,97.67,-44.72,9.0E-5,33,55.15,-44.72,0.34485,34,12.63,-44.72,0.65506,3,32,31.01,-39.45,0.62346,33,-11.51,-39.45,0.37636,34,-54.03,-39.45,1.8E-4,2,32,27.01,-39.14,0.65234,33,-15.5,-39.14,0.34766,2,32,25.79,-31.5,0.75532,33,-16.73,-31.5,0.24468,2,32,-2.61,-32,0.99787,33,-45.13,-32,0.00213,1,32,-28.2,-12.29,1,1,32,-26.08,14.55,1,2,32,-24.35,36.5,0.99999,33,-66.87,36.5,1.0E-5,3,32,17.6,46.3,0.83312,33,-24.92,46.3,0.16679,34,-67.44,46.3,9.0E-5,3,32,34.1,48.89,0.59335,33,-8.42,48.89,0.39652,34,-50.94,48.89,0.01013,3,32,51.83,51.67,0.29262,33,9.32,51.67,0.63181,34,-33.2,51.67,0.07557,3,32,75.34,55.35,0.06656,33,32.82,55.35,0.62298,34,-9.7,55.35,0.31046,3,32,96.58,53.67,0.00696,33,54.06,53.67,0.37036,34,11.54,53.67,0.62268,2,33,79.79,51.64,0.10373,34,37.27,51.64,0.89627,2,33,113.55,34.76,6.3E-4,34,71.04,34.76,0.99937,1,34,70.01,21.72,1,2,33,59.13,-18.02,0.12067,34,16.61,-18.02,0.87933,3,32,68.39,-18.9,0.02967,33,25.87,-18.9,0.88563,34,-16.65,-18.9,0.08469,2,32,28.69,-24.42,0.77602,33,-13.83,-24.42,0.22398,2,32,38.43,-8.84,0.7254,33,-4.09,-8.84,0.2746,2,33,41.48,1.59,0.75167,34,-1.04,1.59,0.24833,3,32,97.5,28.59,9.3E-4,33,54.98,28.59,0.27863,34,12.46,28.59,0.72043,3,32,55.87,27.33,0.20205,33,13.35,27.33,0.75444,34,-29.17,27.33,0.04351,2,32,11.47,21.51,0.96642,33,-31.05,21.51,0.03358,2,33,82.12,25.51,0.02986,34,39.6,25.51,0.97014,2,33,77.12,0.33,0,34,34.6,0.33,1,2,32,14.12,-10.1,0.99252,33,-28.4,-10.1,0.00748,2,32,19.94,-21.03,0.92029,33,-22.58,-21.03,0.07971,3,32,77.83,27.99,0.02606,33,35.31,27.99,0.68013,34,-7.21,27.99,0.29381,2,32,57.36,-4.5,0.00647,33,14.84,-4.5,0.99353,3,32,34.87,24.58,0.67278,33,-7.64,24.58,0.32616,34,-50.16,24.58,0.00106,1,34,15.76,1,1],"hull":18}}}}],"events":{"footstep":{}},"animations":{"aim":{"slots":{"crosshair":{"attachment":[{"name":"spineboy/crosshair"}]}},"bones":{"front-fist":{"rotate":[{"angle":36.08}]},"rear-bracer":{"rotate":[{"angle":-26.55}]},"rear-upper-arm":{"rotate":[{"angle":62.31}]},"front-bracer":{"rotate":[{"angle":9.11}]},"gun":{"rotate":[{"angle":-0.31}]}},"ik":{"aim-ik":[{"mix":0.995}]},"transform":{"aim-front-arm-transform":[{"rotateMix":0.784,"translateMix":0,"scaleMix":0,"shearMix":0}],"aim-head-transform":[{"rotateMix":0.659,"translateMix":0,"scaleMix":0,"shearMix":0}],"aim-torso-transform":[{"rotateMix":0.423,"translateMix":0,"scaleMix":0,"shearMix":0}]},"deform":{"default":{"eye":{"spineboy/eye-indifferent":[{"vertices":[-0.68777,-17.26618,-0.68777,-17.26618,-0.68777,-17.26618,-0.68777,-17.26618]}]},"goggles":{"spineboy/goggles":[{"offset":16,"vertices":[-0.18341,-4.60426,-0.25211,-6.33094]}]},"head":{"spineboy/head":[{"offset":34,"vertices":[-0.22919,-5.75542,-0.22919,-5.75542,-0.22919,-5.75542]}]},"mouth":{"spineboy/mouth-smile":[{"vertices":[5.66431,2.18625,0.48294,-15.04339,0.53525,-20.30316,-7.72803,-7.72495]}]}}}},"death":{"slots":{"eye":{"attachment":[{"name":"spineboy/eye-surprised"},{"time":0.4667,"name":"spineboy/eye-indifferent"}]},"front-fist":{"attachment":[{"name":"spineboy/front-fist-open"}]},"mouth":{"attachment":[{"name":"spineboy/mouth-oooo"}]}},"bones":{"head":{"rotate":[{"angle":-2.83},{"time":0.1333,"angle":-28.74},{"time":0.2333,"angle":11.43},{"time":0.3333,"angle":-50.25},{"time":0.4,"angle":-72.67,"curve":"stepped"},{"time":0.4333,"angle":-72.67},{"time":0.5,"angle":-20.25},{"time":0.5667,"angle":-85.29,"curve":"stepped"},{"time":1.3667,"angle":-85.29}]},"neck":{"rotate":[{"angle":-2.83},{"time":0.1333,"angle":12.35},{"time":0.2333,"angle":29.89},{"time":0.3,"angle":70.36},{"time":0.4,"angle":-10.22,"curve":"stepped"},{"time":0.4333,"angle":-10.22},{"time":0.5,"angle":2.93},{"time":0.5667,"angle":47.95}]},"torso":{"rotate":[{"angle":-8.62},{"time":0.1333,"angle":28.2},{"time":0.2667,"angle":-280.19},{"time":0.4,"angle":-237.23,"curve":"stepped"},{"time":0.4333,"angle":-237.23},{"time":0.5,"angle":76.03}]},"front-upper-arm":{"rotate":[{"angle":-38.86},{"time":0.1333,"angle":-299.59},{"time":0.2667,"angle":-244.75},{"time":0.4,"angle":-292.36},{"time":0.4333,"angle":-315.85},{"time":0.5,"angle":-347.94},{"time":0.7,"angle":-347.33}]},"rear-upper-arm":{"rotate":[{"angle":-44.7},{"time":0.1333,"angle":112.26},{"time":0.2667,"angle":129.08},{"time":0.4,"angle":134.94,"curve":"stepped"},{"time":0.4333,"angle":134.94},{"time":0.5667,"angle":172.6}]},"front-bracer":{"rotate":[{"angle":21.88},{"time":0.1333,"angle":11.49},{"time":0.2667,"angle":-18.82},{"time":0.4,"angle":-18.93},{"time":0.4333,"angle":-18.28},{"time":0.5,"angle":60.62},{"time":0.7,"angle":-18.88}]},"front-fist":{"rotate":[{"angle":-2.33},{"time":0.2667,"angle":26.35},{"time":0.7,"angle":-6.08}]},"rear-bracer":{"rotate":[{"angle":10.36},{"time":0.1333,"angle":-23.12},{"time":0.2667,"angle":-23.12},{"time":0.4,"angle":-23.16,"curve":"stepped"},{"time":0.4333,"angle":-23.16},{"time":0.5667,"angle":-23.2}]},"gun":{"rotate":[{"angle":-2.79},{"time":0.1333,"angle":-24.58}]},"hip":{"translate":[{},{"time":0.2,"x":50.35,"y":151.73},{"time":0.4,"x":5.17,"y":-119.65,"curve":"stepped"},{"time":0.4333,"x":5.17,"y":-119.65},{"time":0.5,"x":50.35,"y":-205.19}]},"front-thigh":{"rotate":[{},{"time":0.1333,"angle":8.47},{"time":0.2667,"angle":115.96},{"time":0.4,"angle":180.66,"curve":"stepped"},{"time":0.4333,"angle":180.66},{"time":0.5,"angle":155.22},{"time":0.6,"angle":97.74}]},"front-shin":{"rotate":[{},{"time":0.1333,"angle":-27.37},{"time":0.2667,"angle":-35.1},{"time":0.4,"angle":-37.73,"curve":"stepped"},{"time":0.4333,"angle":-37.73},{"time":0.5,"angle":-40.07},{"time":0.6,"angle":2.76}]},"rear-thigh":{"rotate":[{},{"time":0.1333,"angle":70.45},{"time":0.2667,"angle":155.35},{"time":0.4,"angle":214.31,"curve":"stepped"},{"time":0.4333,"angle":214.31},{"time":0.5,"angle":169.67},{"time":0.8,"angle":83.27}]},"rear-shin":{"rotate":[{},{"time":0.1333,"angle":18.94},{"time":0.2667,"angle":-21.04},{"time":0.4,"angle":-29.94,"curve":"stepped"},{"time":0.4333,"angle":-29.94},{"time":0.5,"angle":-16.79},{"time":0.8,"angle":7.78}]},"rear-foot":{"rotate":[{},{"time":0.1333,"angle":-11.63},{"time":0.4,"angle":-45.6}]},"front-foot":{"rotate":[{},{"time":0.4,"angle":-48.75}]},"front-foot-tip":{"rotate":[{},{"time":0.1333,"angle":-43.25},{"time":0.2,"angle":6.05},{"time":0.3,"angle":36.84},{"time":0.3667,"angle":74.42},{"time":0.5667,"angle":77.34},{"time":0.7,"angle":59.35}]},"back-foot-tip":{"rotate":[{},{"time":0.1333,"angle":83.04},{"time":0.3,"angle":100.03},{"time":0.3667,"angle":118.36},{"time":0.5667,"angle":115.44},{"time":0.7,"angle":88.21},{"time":0.8333,"angle":53.38}]},"hair4":{"rotate":[{},{"time":0.2,"angle":-23.42},{"time":0.3,"angle":-16.06},{"time":0.3333,"angle":19.03},{"time":0.4333,"angle":-4.91},{"time":0.5667,"angle":1.29}]},"hair2":{"rotate":[{},{"time":0.2,"angle":-23.42},{"time":0.3,"angle":-16.06},{"time":0.3333,"angle":19.03},{"time":0.4333,"angle":-4.91},{"time":0.5667,"angle":1.29}]}},"ik":{"front-ankle-ik":[{"mix":0,"bendPositive":false}],"front-foot-ik":[{"mix":0}],"rear-ankle-ik":[{"mix":0.005,"bendPositive":false}],"rear-foot-ik":[{"mix":0.005}]}},"hoverboard":{"slots":{"exhaust1":{"attachment":[{"name":"spineboy/hoverglow-small"}]},"exhaust2":{"attachment":[{"name":"spineboy/hoverglow-small"}]},"exhaust3":{"attachment":[{"name":"spineboy/hoverglow-small"}]},"front-fist":{"attachment":[{"name":"spineboy/front-fist-open"}]},"hoverboard-board":{"attachment":[{"name":"spineboy/hoverboard-board"}]},"hoverboard-thruster-front":{"attachment":[{"name":"spineboy/hoverboard-thruster"}]},"hoverboard-thruster-rear":{"attachment":[{"name":"spineboy/hoverboard-thruster"}]},"hoverglow-front":{"attachment":[{"name":"spineboy/hoverglow-small"}]},"hoverglow-rear":{"attachment":[{"name":"spineboy/hoverglow-small"}]},"side-glow1":{"attachment":[{"name":"spineboy/hoverglow-small"},{"time":1.3081,"name":null},{"time":1.3417,"name":"spineboy/hoverglow-small"},{"time":2.6498,"name":null}]},"side-glow2":{"attachment":[{"time":0.1006,"name":"spineboy/hoverglow-small"},{"time":1.3417,"name":null},{"time":1.4423,"name":"spineboy/hoverglow-small"},{"time":2.6833,"name":null}]},"side-glow3":{"attachment":[{"name":"spineboy/hoverglow-small"},{"time":1.3081,"name":null},{"time":1.3417,"name":"spineboy/hoverglow-small"},{"time":2.6498,"name":null}]}},"bones":{"exhaust1":{"scale":[{"x":1.593,"y":0.964},{"time":0.369,"y":0.713},{"time":0.5702,"x":1.774,"y":0.883},{"time":0.9727,"x":1.181,"y":0.649},{"time":1.4087,"x":1.893,"y":0.819},{"time":1.6771,"x":1.18,"y":0.686},{"time":1.9789,"x":1.903,"y":0.855},{"time":2.2808,"x":1.311,"y":0.622},{"time":2.6833,"x":1.593,"y":0.964}]},"exhaust2":{"scale":[{"x":1.88,"y":0.832},{"time":0.2683,"x":1.311,"y":0.686},{"time":0.6373,"x":2.01,"y":0.769},{"time":0.9727,"y":0.794},{"time":1.3417,"x":1.699,"y":0.86},{"time":1.5094,"x":1.181,"y":0.713},{"time":2.0796,"x":1.881,"y":0.796},{"time":2.3814,"x":1.3,"y":0.649},{"time":2.6833,"x":1.88,"y":0.832}]},"hoverboard-thruster-front":{"rotate":[{},{"time":1.4087,"angle":11.33},{"time":2.6833}]},"hoverglow-front":{"scale":[{"x":0.849,"y":1.764},{"time":0.2012,"x":0.835,"y":2.033},{"time":0.4696,"x":0.752,"y":1.735},{"time":0.6373,"x":0.809,"y":1.71},{"time":0.805,"x":0.717,"y":1.45},{"time":0.9727,"x":0.777,"y":1.45},{"time":1.0733,"x":0.725,"y":1.241},{"time":1.2746,"x":0.685,"y":1.173},{"time":1.5094,"x":0.825,"y":1.572},{"time":1.61,"x":0.758,"y":1.297},{"time":1.7777,"x":0.725,"y":1.241},{"time":2.0796,"x":0.895,"y":1.857},{"time":2.2137,"x":0.845,"y":1.962},{"time":2.3814,"x":0.802,"y":1.491},{"time":2.5827,"x":0.845,"y":1.31},{"time":2.6833,"x":0.849,"y":1.764}]},"hoverboard-thruster-rear":{"rotate":[{},{"time":1.3417,"angle":7.03},{"time":2.6833}]},"hoverglow-rear":{"scale":[{"x":0.845,"y":1.31},{"time":0.2012,"x":0.856,"y":1.629},{"time":0.369,"x":0.835,"y":2.033},{"time":0.5702,"x":0.752,"y":1.735},{"time":0.805,"x":0.809,"y":1.71},{"time":0.9727,"x":0.717,"y":1.45},{"time":1.174,"x":0.777,"y":1.45},{"time":1.3417,"x":0.725,"y":1.241},{"time":1.5094,"x":0.685,"y":1.173},{"time":1.6771,"x":0.758,"y":1.297},{"time":1.9789,"x":0.725,"y":1.241},{"time":2.0796,"x":0.825,"y":1.572},{"time":2.2137,"x":0.895,"y":1.857},{"time":2.3814,"x":0.845,"y":1.962},{"time":2.5827,"x":0.802,"y":1.491},{"time":2.6833,"x":0.845,"y":1.31}]},"front-upper-arm":{"rotate":[{"angle":-43.13,"curve":0.25,"c3":0.75},{"time":0.9727,"angle":-29.01,"curve":0.25,"c3":0.75},{"time":1.6771,"angle":-36.82,"curve":0.25,"c3":0.75},{"time":2.6833,"angle":-43.13}],"translate":[{"x":-0.59,"y":-2.94,"curve":0.25,"c3":0.75},{"time":0.7,"x":-3.33,"y":-7.96,"curve":0.219,"c2":0.08,"c3":0.755,"c4":0.65},{"time":1.6667,"x":2.56,"y":-0.41,"curve":0.338,"c2":0.66,"c3":0.671},{"time":2.6833,"x":-0.59,"y":-2.94}]},"front-fist":{"rotate":[{"angle":16.07},{"time":0.7379,"angle":-26.01},{"time":2.6833,"angle":16.07}],"translate":[{"curve":0.25,"c3":0.75},{"time":1.2746,"x":0.52,"y":-3.27,"curve":0.25,"c3":0.75},{"time":2.6833}],"shear":[{"y":19.83},{"time":1.2746,"x":15.28,"y":28.31},{"time":2.6833,"y":19.83}]},"front-thigh":{"translate":[{"x":-7.49,"y":8.51}]},"exhaust3":{"scale":[{"x":1.882,"y":0.81},{"time":0.2012,"x":1.731,"y":0.761},{"time":0.5702,"x":1.3,"y":0.649},{"time":0.805,"x":2.051,"y":0.984},{"time":1.0733,"x":1.311,"y":0.686},{"time":1.4087,"x":1.86,"y":0.734},{"time":1.7777,"y":0.794},{"time":2.1467,"x":1.549,"y":0.825},{"time":2.2808,"x":1.181,"y":0.713},{"time":2.6833,"x":1.731,"y":0.78}]},"side-glow1":{"rotate":[{"angle":51.12,"curve":"stepped"},{"time":0.1006,"angle":43.82,"curve":"stepped"},{"time":0.1342,"angle":40.95,"curve":"stepped"},{"time":0.2348,"angle":27.78,"curve":"stepped"},{"time":0.3019,"angle":10.24,"curve":"stepped"},{"time":0.369,"curve":"stepped"},{"time":1.0733,"angle":-25.81,"curve":"stepped"},{"time":1.3417,"angle":51.12,"curve":"stepped"},{"time":1.4423,"angle":43.82,"curve":"stepped"},{"time":1.4758,"angle":40.95,"curve":"stepped"},{"time":1.5765,"angle":27.78,"curve":"stepped"},{"time":1.6435,"angle":10.24,"curve":"stepped"},{"time":1.7106,"curve":"stepped"},{"time":2.415,"angle":-25.81}],"translate":[{"x":338.28,"y":40.22,"curve":"stepped"},{"time":0.1006,"x":331.2,"y":30.39,"curve":"stepped"},{"time":0.1342,"x":318.63,"y":20.59,"curve":"stepped"},{"time":0.2348,"x":302.45,"y":9.64,"curve":"stepped"},{"time":0.3019,"x":276.87,"y":1.13,"curve":"stepped"},{"time":0.369,"x":248.16,"curve":"stepped"},{"time":0.4025,"x":221.36,"curve":"stepped"},{"time":0.5031,"x":195.69,"curve":"stepped"},{"time":0.5367,"x":171.08,"curve":"stepped"},{"time":0.6373,"x":144.84,"curve":"stepped"},{"time":0.6708,"x":121.22,"curve":"stepped"},{"time":0.7715,"x":91.98,"curve":"stepped"},{"time":0.805,"x":62.63,"curve":"stepped"},{"time":0.9056,"x":30.78,"curve":"stepped"},{"time":0.9392,"curve":"stepped"},{"time":1.0398,"x":-28.45,"curve":"stepped"},{"time":1.0733,"x":-67.49,"y":16.82,"curve":"stepped"},{"time":1.1404,"x":-83.07,"y":24.36,"curve":"stepped"},{"time":1.2075,"x":-93.81,"y":29.55,"curve":"stepped"},{"time":1.3417,"x":338.28,"y":40.22,"curve":"stepped"},{"time":1.4423,"x":331.2,"y":30.39,"curve":"stepped"},{"time":1.4758,"x":318.63,"y":20.59,"curve":"stepped"},{"time":1.5765,"x":302.45,"y":9.64,"curve":"stepped"},{"time":1.6435,"x":276.87,"y":1.13,"curve":"stepped"},{"time":1.7106,"x":248.16,"curve":"stepped"},{"time":1.7442,"x":221.36,"curve":"stepped"},{"time":1.8448,"x":195.69,"curve":"stepped"},{"time":1.8783,"x":171.08,"curve":"stepped"},{"time":1.9789,"x":144.84,"curve":"stepped"},{"time":2.0125,"x":121.22,"curve":"stepped"},{"time":2.1131,"x":91.98,"curve":"stepped"},{"time":2.1467,"x":62.63,"curve":"stepped"},{"time":2.2473,"x":30.78,"curve":"stepped"},{"time":2.2808,"curve":"stepped"},{"time":2.3814,"x":-28.45,"curve":"stepped"},{"time":2.415,"x":-67.49,"y":16.82,"curve":"stepped"},{"time":2.4821,"x":-83.07,"y":24.36,"curve":"stepped"},{"time":2.5492,"x":-93.81,"y":29.55}],"scale":[{"x":0.535,"curve":"stepped"},{"time":0.1006,"x":0.594,"curve":"stepped"},{"time":0.1342,"x":0.844,"curve":"stepped"},{"time":0.2348,"curve":"stepped"},{"time":1.0733,"x":0.534,"curve":"stepped"},{"time":1.1404,"x":0.428,"y":0.801,"curve":"stepped"},{"time":1.2075,"x":0.349,"y":0.654,"curve":"stepped"},{"time":1.3417,"x":0.535,"curve":"stepped"},{"time":1.4423,"x":0.594,"curve":"stepped"},{"time":1.4758,"x":0.844,"curve":"stepped"},{"time":1.5765,"curve":"stepped"},{"time":2.415,"x":0.534,"curve":"stepped"},{"time":2.4821,"x":0.428,"y":0.801,"curve":"stepped"},{"time":2.5492,"x":0.349,"y":0.654}]},"side-glow2":{"rotate":[{"time":0.1006,"angle":51.12,"curve":"stepped"},{"time":0.1342,"angle":43.82,"curve":"stepped"},{"time":0.2348,"angle":40.95,"curve":"stepped"},{"time":0.3019,"angle":27.78,"curve":"stepped"},{"time":0.369,"angle":10.24,"curve":"stepped"},{"time":0.4025,"curve":"stepped"},{"time":1.1404,"angle":-25.81,"curve":"stepped"},{"time":1.4423,"angle":51.12,"curve":"stepped"},{"time":1.4758,"angle":43.82,"curve":"stepped"},{"time":1.5765,"angle":40.95,"curve":"stepped"},{"time":1.6435,"angle":27.78,"curve":"stepped"},{"time":1.7106,"angle":10.24,"curve":"stepped"},{"time":1.7442,"curve":"stepped"},{"time":2.4821,"angle":-25.81}],"translate":[{"time":0.1006,"x":338.28,"y":40.22,"curve":"stepped"},{"time":0.1342,"x":331.2,"y":30.39,"curve":"stepped"},{"time":0.2348,"x":318.63,"y":20.59,"curve":"stepped"},{"time":0.3019,"x":302.45,"y":9.64,"curve":"stepped"},{"time":0.369,"x":276.87,"y":1.13,"curve":"stepped"},{"time":0.4025,"x":248.16,"curve":"stepped"},{"time":0.5031,"x":221.36,"curve":"stepped"},{"time":0.5367,"x":195.69,"curve":"stepped"},{"time":0.6373,"x":171.08,"curve":"stepped"},{"time":0.6708,"x":144.84,"curve":"stepped"},{"time":0.7715,"x":121.22,"curve":"stepped"},{"time":0.805,"x":91.98,"curve":"stepped"},{"time":0.9056,"x":62.63,"curve":"stepped"},{"time":0.9392,"x":30.78,"curve":"stepped"},{"time":1.0398,"curve":"stepped"},{"time":1.0733,"x":-28.45,"curve":"stepped"},{"time":1.1404,"x":-67.49,"y":16.82,"curve":"stepped"},{"time":1.2075,"x":-83.07,"y":24.36,"curve":"stepped"},{"time":1.3081,"x":-93.81,"y":29.55,"curve":"stepped"},{"time":1.4423,"x":338.28,"y":40.22,"curve":"stepped"},{"time":1.4758,"x":331.2,"y":30.39,"curve":"stepped"},{"time":1.5765,"x":318.63,"y":20.59,"curve":"stepped"},{"time":1.6435,"x":302.45,"y":9.64,"curve":"stepped"},{"time":1.7106,"x":276.87,"y":1.13,"curve":"stepped"},{"time":1.7442,"x":248.16,"curve":"stepped"},{"time":1.8448,"x":221.36,"curve":"stepped"},{"time":1.8783,"x":195.69,"curve":"stepped"},{"time":1.9789,"x":171.08,"curve":"stepped"},{"time":2.0125,"x":144.84,"curve":"stepped"},{"time":2.1131,"x":121.22,"curve":"stepped"},{"time":2.1467,"x":91.98,"curve":"stepped"},{"time":2.2473,"x":62.63,"curve":"stepped"},{"time":2.2808,"x":30.78,"curve":"stepped"},{"time":2.3814,"curve":"stepped"},{"time":2.415,"x":-28.45,"curve":"stepped"},{"time":2.4821,"x":-67.49,"y":16.82,"curve":"stepped"},{"time":2.5492,"x":-83.07,"y":24.36,"curve":"stepped"},{"time":2.6498,"x":-93.81,"y":29.55}],"scale":[{"time":0.1006,"x":0.535,"curve":"stepped"},{"time":0.1342,"x":0.594,"curve":"stepped"},{"time":0.2348,"x":0.844,"curve":"stepped"},{"time":0.3019,"curve":"stepped"},{"time":1.1404,"x":0.534,"curve":"stepped"},{"time":1.2075,"x":0.428,"y":0.801,"curve":"stepped"},{"time":1.3081,"x":0.349,"y":0.654,"curve":"stepped"},{"time":1.4423,"x":0.535,"curve":"stepped"},{"time":1.4758,"x":0.594,"curve":"stepped"},{"time":1.5765,"x":0.844,"curve":"stepped"},{"time":1.6435,"curve":"stepped"},{"time":2.4821,"x":0.534,"curve":"stepped"},{"time":2.5492,"x":0.428,"y":0.801,"curve":"stepped"},{"time":2.6498,"x":0.349,"y":0.654}]},"torso":{"rotate":[{"angle":-34.73,"curve":0.438,"c3":0.75},{"time":1.3417,"angle":-28.86,"curve":0.25,"c3":0.75},{"time":2.6833,"angle":-34.73}]},"neck":{"rotate":[{"angle":10.2},{"time":0.7379,"angle":16.14},{"time":1.3417,"angle":5.83},{"time":1.6771,"angle":2.68},{"time":2.6833,"angle":10.2}]},"head":{"rotate":[{"angle":10.2,"curve":0.256,"c3":0.62,"c4":0.47},{"time":1.3417,"angle":5.83,"curve":0.25,"c3":0.75},{"time":1.6771,"angle":5.52,"curve":0.25,"c3":0.75},{"time":2.6833,"angle":10.2}],"translate":[{},{"time":0.7379,"x":-4.22,"y":-3.62},{"time":1.6771,"x":0.84,"y":6.01},{"time":2.6833}]},"front-bracer":{"rotate":[{"angle":-11.18,"curve":0.25,"c3":0.75},{"time":1.3417,"angle":-6.91,"curve":0.25,"c3":0.75},{"time":1.6771,"angle":6.91,"curve":0.25,"c3":0.75},{"time":2.6833,"angle":-11.18}]},"rear-upper-arm":{"rotate":[{"angle":31.65,"curve":0.25,"c3":0.75},{"time":1.7777,"angle":20.85,"curve":0.25,"c3":0.75},{"time":2.6833,"angle":31.65}]},"rear-bracer":{"rotate":[{"angle":31},{"time":0.8721,"angle":28.89},{"time":1.7777,"angle":14.83},{"time":2.6833,"angle":31}]},"gun":{"rotate":[{"angle":1.95},{"time":1.174,"angle":12.79},{"time":1.7777,"angle":15.87},{"time":2.6833,"angle":1.95}]},"hip":{"translate":[{"x":-53.49,"y":32.14,"curve":"stepped"},{"time":2.6833,"x":-53.49,"y":32.14}]},"hair1":{"rotate":[{},{"time":1.1069,"angle":11.58},{"time":2.4821,"angle":-2.89},{"time":2.6833}]},"hair2":{"rotate":[{},{"time":1.1069,"angle":11.58},{"time":2.4821,"angle":-2.89},{"time":2.6833}]},"hair3":{"rotate":[{},{"time":1.1069,"angle":11.58},{"time":2.4821,"angle":-2.89},{"time":2.6833}]},"hair4":{"rotate":[{},{"time":1.1069,"angle":11.58},{"time":2.4821,"angle":-2.89},{"time":2.6833}]},"move":{"rotate":[{"curve":0.25,"c3":0.75},{"time":1.3041,"angle":62.26,"curve":0.25,"c3":0.75},{"time":2.6833}],"translate":[{"curve":0.25,"c3":0.75},{"time":0.8721,"x":-4.98,"y":-8.02,"curve":0.25,"c3":0.75},{"time":2.0125,"x":3.21,"y":-9.05,"curve":0.25,"c3":0.75},{"time":2.6833}]}},"transform":{"front-foot-board":[{}],"rear-foot-board":[{}],"toes-board":[{"translateMix":0,"scaleMix":0,"shearMix":0}]},"deform":{"default":{"eye":{"spineboy/eye-indifferent":[{"curve":0.25,"c3":0.75},{"time":0.7379,"vertices":[0.22339,-6.575,0.22339,-6.575,0.22339,-6.575,0.22339,-6.575],"curve":0.25,"c3":0.75},{"time":2.6833}]},"front-foot":{"spineboy/front-foot":[{"offset":28,"vertices":[3.8188,-3.7757,-0.02832,-5.37024,3.8188,-3.7757,-0.02832,-5.37024,3.8188,-3.7757,-0.02832,-5.37024,-3.82159,3.77847,0.02843,5.374]}]},"front-shin":{"spineboy/front-shin":[{"offset":14,"vertices":[0.5298,-1.12677,-1.3465,-3.60365,-12.36655,-8.94841,-12.20981,-6.70827,-6.06447,-6.89757,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.33017,-2.79218,1.48463,-2.29663,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4.99712,-6.78197]},{"time":0.8,"offset":14,"vertices":[0.5298,-1.12677,-2.43842,-4.33009,-13.47652,-9.25232,-14.92363,-7.65495,-6.52638,-6.93362,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.02444,-3.10124,1.48463,-2.29663,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-6.13899,-7.12296]},{"time":1.3,"offset":14,"vertices":[0.5298,-1.12677,-2.78102,-4.19112,-14.39343,-9.33724,-15.76666,-7.62599,-6.40266,-6.92397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.11406,-3.00838,1.48463,-2.29663,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-5.89175,-7.04711]},{"time":2.2,"offset":14,"vertices":[0.5298,-1.12677,-1.03183,-3.33398,-11.47848,-8.12946,-11.30193,-5.72689,-6.17995,-6.90658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.44072,-2.72573,1.48463,-2.29663,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-5.1939,-6.79904]},{"time":2.6667,"offset":14,"vertices":[0.5298,-1.12677,-1.3465,-3.60365,-12.36655,-8.94841,-12.20981,-6.70827,-6.06447,-6.89757,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.33017,-2.79218,1.48463,-2.29663,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4.99712,-6.78197]}]},"goggles":{"spineboy/goggles":[{"curve":0.25,"c3":0.75},{"time":0.7379,"vertices":[0.67711,-3.13914,0.27417,-1.27147,0.15489,-0.72019,0,0,0,0,0,0,0,0,0,0,0.42483,-1.97125,1.55292,-7.20752,0.1845,-0.85692,0.62342,-2.89004,0.80454,-3.72999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.01049,-4.68358,1.14495,-5.30811,1.05917,-4.91033,0.7856,-3.6421,0.88443,-4.1001,0.91542,-4.24387,0.80144,-3.7155,0.7665,-3.55506,0.29612,-1.37293,0.03147,-0.14642,0.22645,-1.05166,0.13694,-0.63699,0.25405,-1.17808,0.55052,-2.5523,0.77677,-3.60118,1.59353,-7.39157,1.35063,-6.26342,1.34974,-6.25925,0.94851,-4.39735,0.83697,-3.88036,0.80624,-3.73668,1.01196,-4.69016,0,0,0.1845,-0.85692,0.1845,-0.85692,0.1845,-0.85692,0.1845,-0.85692,0.1845,-0.85692,0.1845,-0.85692],"curve":0.25,"c3":0.75},{"time":2.6833}]},"head":{"spineboy/head":[{"offset":60,"vertices":[2.77362,1.62589,1.93787,2.56528],"curve":0.25,"c3":0.75},{"time":0.7379,"offset":34,"vertices":[1.96774,-9.13288,1.96774,-9.13288,1.96774,-9.13288,0.52141,-2.41945,0,0,0,0,0,0,0,0,-0.28486,1.32153,-0.28486,1.32153,0,0,0,0,0,0,1.04011,0.60971,0.7267,0.96198,7.3906,-5.46259,3.91425,8.31534,2.51528,-2.75824,2.21405,3.0056,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.35114,5.70461,6.83772,-5.11176,3.67865,7.70451,5.75797,-8.66576,0,0,0,0,0,0,0,0,0,0,0.08572,-3.70304,1.49945,-3.38693,0.21432,-9.25756,0,0,0,0,0.08572,-3.70304,0.21432,-9.25756,0,0,0.10735,-0.51047,0.10735,-0.51047,0.10735,-0.51047,0.10735,-0.51047,0.10735,-0.51047,0.10735,-0.51047,0.10735,-0.51047,0.10735,-0.51047,0.10735,-0.51047,0,0,0,0,0,0,0,0,0.34761,-1.61296,0.26072,-1.20974,0.65176,-3.02431],"curve":0.25,"c3":0.75},{"time":2.6833,"offset":60,"vertices":[2.77362,1.62589,1.93787,2.56528]}]},"hoverboard-board":{"spineboy/hoverboard-board":[{},{"time":0.7379,"offset":1,"vertices":[2.45856,0,0,0,0,0,0,0,0,3.55673,-3.0E-4,3.55673,-3.0E-4,0,0,0,0,0,0,-7.6E-4,-9.84158,-7.6E-4,-9.84158,-7.6E-4,-9.84158,-7.6E-4,-9.84158,-7.6E-4,-9.84158,-7.6E-4,-9.84158,-7.6E-4,-9.84158,-7.6E-4,-9.84158,-7.6E-4,-9.84158,-7.6E-4,-9.84158,-7.6E-4,-9.84158,-7.6E-4,-9.84158,0,0,0,0,0,0,0,0,-4.90558,0.11214,-9.40706,6.2E-4,-6.34871,4.3E-4,-6.34925,-6.57018,-6.34925,-6.57018,-6.34871,4.3E-4,-2.3308,1.7E-4,-2.33133,-6.57045,-2.33133,-6.57045,-2.3308,1.7E-4,0,0,1.2E-4,2.45856,1.2E-4,2.45856,1.2E-4,2.45856,1.2E-4,2.45856,3.3297,4.44005,3.3297,4.44005,3.3297,4.44005,1.2E-4,2.45856,0,0,0,0,0,0,0,0,0,0,-2.46227,1.7E-4,-2.46227,1.7E-4,-2.52316,1.1313,-2.52316,1.1313,-2.52316,1.1313,1.2E-4,2.45856,1.2E-4,2.45856,-9.40694,2.45918,1.88063,0.44197,-2.9E-4,-3.54808,0,0,0,0,0,0,0,0,0,0,-2.52316,1.1313,-2.52316,1.1313,-2.52316,1.1313,-2.46227,1.7E-4,-2.46227,1.7E-4,-2.46227,1.7E-4,0,0,0,0,1.2E-4,2.45856]},{"time":2.6833}]},"mouth":{"spineboy/mouth-smile":[{"curve":0.25,"c3":0.75},{"time":0.7379,"vertices":[0.15454,-6.6912,0.15454,-6.6912,0.15454,-6.6912,0.15454,-6.6912],"curve":0.25,"c3":0.75},{"time":2.6833}]},"rear-foot":{"spineboy/rear-foot":[{"offset":28,"vertices":[-1.93078,1.34782,-0.31417,2.33363,3.05122,0.33946,2.31472,-2.01678,2.17583,-2.05795,-0.04277,-2.99459,1.15429,0.26328,0.97501,-0.67169]}]},"torso":{"spineboy/torso":[{},{"time":0.7379,"offset":14,"vertices":[4.46481,-0.3543,4.46481,-0.35429,4.46481,-0.3543,4.46481,-0.3543,4.46481,-0.35429,4.46481,-0.3543,4.46481,-0.35429,4.46481,-0.3543,4.46481,-0.35429,0,0,-0.59544,-7.5094,0,0,0,0,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,3.0E-5,-1.0E-5,-0.5954,-7.50941,-0.5954,-7.50941,-0.59544,-7.5094,-0.5954,-7.50941,-0.5954,-7.50941,3.86934,-7.86369,3.86935,-7.86369,3.86934,-7.86369,3.86935,-7.86369,-0.5954,-7.50941,-0.5954,-7.50941,-0.59544,-7.5094,-0.5954,-7.50941,-0.5954,-7.50941,-0.59544,-7.5094,-0.5954,-7.50941,-0.5954,-7.50941,-0.59544,-7.5094,-0.5954,-7.50941,-0.5954,-7.50941,-0.5954,-7.50941,0,0,3.0E-5,-1.0E-5,0.35948,-1.81172,0.35962,-1.81179,0,0,0,0,-0.13699,-6.00874,-0.13678,-6.00883,-0.13666,-6.0088,2.46227,-6.26817,2.46274,-6.26834,2.27113,-5.86305,2.27148,-5.86322,2.27164,-5.86306,0.52808,-3.21825]},{"time":1.3417},{"time":1.6771,"offset":4,"vertices":[3.41785,-0.27124,3.41788,-0.27125,3.41785,-0.27124,3.41785,-0.27124,3.41788,-0.27125,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.4682,5.90338,0,0,0,0,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,3.0E-5,-1.0E-5,3.88608,5.63213,3.88608,5.63213,0.4682,5.90338,0.46823,5.90337,0.46823,5.90337,0,0,0,0,0.4682,5.90338,0.46823,5.90337,0.46823,5.90337,0.46823,5.90337,0.4682,5.90338,0.46823,5.90337,0.46823,5.90337,0.4682,5.90338,0.46823,5.90337,0.46823,5.90337,0.4682,5.90338,0.46823,5.90337,0.46823,5.90337,0.46823,5.90337,0,0,3.0E-5,-1.0E-5,0,0,0,0,0,0,0,0,-0.5545,7.37884,-0.5545,7.37883,-0.5545,7.37883,-0.26132,7.75283,-0.26138,7.75283,-0.76694,6.33778,-0.76703,6.33779,-0.76697,6.33778]},{"time":2.6833}]}}}},"idle":{"slots":{"front-fist":{"attachment":[{"name":"spineboy/front-fist-open"}]}},"bones":{"front-foot-ik":{"translate":[{"x":-69.06}]},"hip":{"translate":[{"x":-7.16,"y":-23.15,"curve":0.205,"c3":0.75},{"time":0.6667,"x":-5.33,"y":-35.48,"curve":0.591,"c3":0.642},{"time":1.6667,"x":-7.16,"y":-23.15}]},"rear-foot-ik":{"translate":[{"x":48.87}]},"front-upper-arm":{"rotate":[{"angle":-70.59},{"time":0.8,"angle":-80.61},{"time":1.6667,"angle":-70.59}]},"front-bracer":{"rotate":[{"angle":42.09}]},"rear-upper-arm":{"rotate":[{"angle":39.2},{"time":0.6667,"angle":29.37},{"time":1.6667,"angle":39.2}]},"head":{"rotate":[{"angle":-8.95,"curve":0.25,"c3":0.75},{"time":0.6667,"angle":-4.12,"curve":0.25,"c3":0.75},{"time":1.6667,"angle":-8.95}]},"front-fist":{"rotate":[{},{"time":0.8,"angle":2.04},{"time":1.6667}],"scale":[{},{"time":0.8,"x":0.94},{"time":1.6667}]},"rear-bracer":{"rotate":[{},{"time":0.6667,"angle":16.09},{"time":1.6667}]},"gun":{"rotate":[{},{"time":0.6667,"angle":0.45},{"time":1.6667}]},"torso":{"rotate":[{"angle":-8.85},{"time":0.6667,"angle":-13.61},{"time":1.6667,"angle":-8.85}]},"neck":{"rotate":[{"angle":3.78,"curve":0.25,"c3":0.75},{"time":0.6667,"angle":5.45,"curve":0.25,"c3":0.75},{"time":1.6667,"angle":3.78}]}}},"jump":{"slots":{"front-fist":{"attachment":[{"name":"spineboy/front-fist-open"},{"time":0.2,"name":"spineboy/front-fist-closed"},{"time":0.7407,"name":"spineboy/front-fist-open"}]},"mouth":{"attachment":[{"name":"spineboy/mouth-grind"}]}},"bones":{"front-thigh":{"rotate":[{"angle":91.53,"curve":0.278,"c2":0.46,"c3":0.764},{"time":0.2,"angle":-35.84,"curve":0.761,"c3":0.75},{"time":0.6285,"angle":127.74},{"time":0.7968,"angle":48.18,"curve":0.227,"c2":0.27,"c3":0.433},{"time":0.9651,"angle":45.38},{"time":1.1333,"angle":25.35},{"time":1.3333,"angle":91.53}],"translate":[{"x":-2.57,"y":5.78},{"time":0.6285,"x":8.3,"y":7.99},{"time":0.7968,"x":7.21,"y":-4},{"time":1.3333,"x":-2.57,"y":5.78}]},"torso":{"rotate":[{"angle":-42.64},{"time":0.2,"angle":-5.74},{"time":0.6285,"angle":-50.76},{"time":0.7968,"angle":1.9},{"time":0.8809,"angle":11.59},{"time":0.9931,"angle":-1.9},{"time":1.1333,"angle":11.59},{"time":1.3333,"angle":-42.64}]},"rear-thigh":{"rotate":[{"angle":-26.32},{"time":0.2,"angle":121.44},{"time":0.6285,"angle":70.55},{"time":0.7968,"angle":79.9,"curve":0.296,"c2":0.3,"c3":0.59},{"time":0.9651,"angle":74.06},{"time":1.1333,"angle":99.12},{"time":1.3333,"angle":-26.32}],"translate":[{"x":-0.56,"y":-0.32},{"time":0.6285,"x":-8.5,"y":10.58},{"time":0.7968,"x":-1.96,"y":-0.32},{"time":1.3333,"x":-0.56,"y":-0.32}]},"rear-shin":{"rotate":[{"angle":-78.69},{"time":0.6285,"angle":-55.56},{"time":0.7968,"angle":-62.84},{"time":0.9651,"angle":-41.13},{"time":1.1333,"angle":-80.75},{"time":1.3333,"angle":-78.69}]},"front-upper-arm":{"rotate":[{"angle":-22.62},{"time":0.2,"angle":-246.69},{"time":0.6846,"angle":11.28,"curve":0.246,"c3":0.633,"c4":0.54},{"time":0.7968,"angle":-57.46,"curve":0.38,"c2":0.53,"c3":0.745},{"time":0.909,"angle":-112.6},{"time":1.0492,"angle":-108.61},{"time":1.1333,"angle":-112.6},{"time":1.3333,"angle":-22.62}],"translate":[{"x":6.08,"y":7.15},{"time":0.2,"x":7.23,"y":-13.13,"curve":"stepped"},{"time":0.7968,"x":7.23,"y":-13.13},{"time":1.3333,"x":6.08,"y":7.15}]},"front-bracer":{"rotate":[{"angle":66.47},{"time":0.2,"angle":42.4},{"time":0.6285,"angle":26.06},{"time":0.7968,"angle":13.28},{"time":0.909,"angle":-28.65},{"time":0.9651,"angle":-22.31},{"time":1.0492,"angle":-35.39},{"time":1.1333,"angle":-28.65},{"time":1.3333,"angle":66.47}]},"front-fist":{"rotate":[{"angle":-28.43},{"time":0.6285,"angle":-45.61},{"time":0.7968,"angle":-53.66},{"time":0.909,"angle":7.56},{"time":1.0492,"angle":-32.59},{"time":1.1333,"angle":7.56},{"time":1.3333,"angle":-28.43}]},"rear-upper-arm":{"rotate":[{"angle":39.69},{"time":0.2,"angle":276.58},{"time":0.3,"angle":17.74},{"time":0.6285,"angle":83.38},{"time":0.8529,"angle":33.71,"curve":0.359,"c2":0.64,"c3":0.577,"c4":0.77},{"time":1.1333,"angle":34.56},{"time":1.3333,"angle":39.69}],"translate":[{"x":-3.1,"y":-4.87},{"time":0.2,"x":23.33,"y":49.07},{"time":0.6285,"x":20.78,"y":40.21},{"time":1.3333,"x":-3.1,"y":-4.87}]},"rear-bracer":{"rotate":[{"angle":29.67},{"time":0.2,"angle":45.07},{"time":0.6285,"angle":-4.35},{"time":0.8248,"angle":61.69},{"time":0.8529,"angle":82.6},{"time":0.909,"angle":80.06},{"time":1.0492,"angle":57.56},{"time":1.1333,"angle":80.06},{"time":1.3333,"angle":29.67}]},"neck":{"rotate":[{"angle":24.91},{"time":0.2,"angle":16.32},{"time":0.6285,"angle":7.45},{"time":0.7968,"angle":-20.35},{"time":0.8809,"angle":-0.69,"curve":"stepped"},{"time":1.1333,"angle":-0.69},{"time":1.3333,"angle":24.91}]},"head":{"rotate":[{"angle":24.92},{"time":0.2,"angle":10.36},{"time":0.6285,"angle":28.65},{"time":0.7968,"angle":-2.66},{"time":0.8809,"angle":-28.94,"curve":"stepped"},{"time":1.1333,"angle":-28.94},{"time":1.3333,"angle":24.92}]},"hip":{"translate":[{"x":-34.52,"y":-78.63,"curve":0.233,"c2":1.01,"c3":0.75},{"time":0.2,"x":-34.52,"y":182.51,"curve":0.232,"c2":0.48,"c3":0.599,"c4":0.79},{"time":0.5333,"x":-35.47,"y":404.79,"curve":0.33,"c2":0.17,"c3":0.661,"c4":0.22},{"time":1.1333,"x":-34.52,"y":2.5},{"time":1.3333,"x":-34.52,"y":-78.63}]},"front-shin":{"rotate":[{"angle":-90.63,"curve":0.416,"c2":0.55,"c3":0.743},{"time":0.2,"angle":-10.52,"curve":0.644,"c2":0.01,"c3":0.75},{"time":0.6285,"angle":-127.72},{"time":0.7968,"angle":-19.92},{"time":0.9651,"angle":-35.06},{"time":1.1333,"angle":-5.17},{"time":1.3333,"angle":-90.63}]},"front-foot":{"rotate":[{"angle":-0.8},{"time":0.0333,"angle":16.28},{"time":0.0667,"angle":23.52},{"time":0.1,"angle":21.02},{"time":0.1333,"angle":10.93},{"time":0.2,"angle":-38.46},{"time":0.6285,"angle":6.62},{"time":0.7968,"angle":-11.52},{"time":1.0492,"angle":-22.92},{"time":1.3333,"angle":-0.8}]},"rear-foot":{"rotate":[{"angle":-12.78},{"time":0.2,"angle":17.06},{"time":0.6285,"angle":19.45},{"time":0.7968,"angle":2.67},{"time":1.0492,"angle":-28.5},{"time":1.3333,"angle":-12.78}]},"gun":{"rotate":[{"angle":6.18},{"time":0.2,"angle":30.81},{"time":0.6285,"angle":13.26},{"time":0.7968,"angle":14.98},{"time":0.8248,"angle":25.65},{"time":0.8529,"angle":20.62},{"time":1.0492,"angle":8.6},{"time":1.3333,"angle":6.18}]},"back-foot-tip":{"rotate":[{"angle":-134.56},{"time":0.0667,"angle":-53.37},{"time":0.1667,"angle":44.6},{"time":0.6285,"angle":20.16},{"time":0.7968,"angle":27.1},{"time":0.9931,"angle":22.88},{"time":1.2667,"angle":-35.32},{"time":1.3333,"angle":-134.56}]},"front-foot-tip":{"rotate":[{},{"time":0.1667,"angle":-52.5},{"time":0.6285,"angle":-15.64},{"time":0.7968,"angle":25.35},{"time":0.9931,"angle":-21.32},{"time":1.1333,"angle":-10.35},{"time":1.2,"angle":0.81}]},"hair3":{"rotate":[{"angle":22.53},{"time":0.0667,"angle":11.66},{"time":0.2,"angle":-6.59},{"time":0.7407,"angle":9.32},{"time":1.3333,"angle":22.53}]},"hair4":{"rotate":[{"angle":-6.07},{"time":0.0667,"angle":11.67},{"time":0.2,"angle":-6.57},{"time":0.3333,"angle":10.17},{"time":0.7407,"angle":14.76},{"time":0.909,"angle":-33.44},{"time":1.1667,"angle":-19.29},{"time":1.3333,"angle":-6.07}]},"hair2":{"rotate":[{"angle":2.7},{"time":0.0667,"angle":11.67},{"time":0.2,"angle":-6.57},{"time":0.3333,"angle":18.94},{"time":0.7407,"angle":23.53},{"time":0.909,"angle":-24.67},{"time":1.1667,"angle":-10.51},{"time":1.3333,"angle":2.7}]},"hair1":{"rotate":[{"angle":22.54},{"time":0.0667,"angle":11.67},{"time":0.2,"angle":-6.57},{"time":0.7407,"angle":9.33},{"time":1.3333,"angle":22.54}]}},"ik":{"front-ankle-ik":[{"mix":0,"bendPositive":false}],"front-foot-ik":[{"mix":0}],"rear-ankle-ik":[{"mix":0,"bendPositive":false}],"rear-foot-ik":[{"mix":0}]},"events":[{"time":1.1333,"name":"footstep"}]},"portal":{"slots":{"clipping":{"attachment":[{"name":"clipping"}]},"front-fist":{"attachment":[{"name":"spineboy/front-fist-open"}]},"portal-bg":{"attachment":[{"name":"spineboy/portal-bg"},{"time":3.1,"name":null}]},"portal-flare1":{"attachment":[{"time":1.1,"name":"spineboy/portal-flare1"},{"time":1.1333,"name":"spineboy/portal-flare2"},{"time":1.1667,"name":"spineboy/portal-flare3"},{"time":1.2,"name":"spineboy/portal-flare1"},{"time":1.2333,"name":"spineboy/portal-flare2"},{"time":1.2667,"name":"spineboy/portal-flare1"},{"time":1.3333,"name":null}]},"portal-flare2":{"attachment":[{"time":1.1,"name":"spineboy/portal-flare2"},{"time":1.1333,"name":"spineboy/portal-flare3"},{"time":1.1667,"name":"spineboy/portal-flare1"},{"time":1.2,"name":"spineboy/portal-flare2"},{"time":1.2333,"name":"spineboy/portal-flare3"},{"time":1.2667,"name":null}]},"portal-flare3":{"attachment":[{"time":1.2,"name":"spineboy/portal-flare3"},{"time":1.2333,"name":"spineboy/portal-flare2"},{"time":1.2667,"name":null}]},"portal-flare4":{"attachment":[{"time":1.2,"name":"spineboy/portal-flare2"},{"time":1.2333,"name":"spineboy/portal-flare1"},{"time":1.2667,"name":"spineboy/portal-flare2"},{"time":1.3333,"name":null}]},"portal-flare5":{"attachment":[{"time":1.2333,"name":"spineboy/portal-flare3"},{"time":1.2667,"name":"spineboy/portal-flare1"},{"time":1.3333,"name":null}]},"portal-flare6":{"attachment":[{"time":1.2667,"name":"spineboy/portal-flare3"},{"time":1.3333,"name":null}]},"portal-flare7":{"attachment":[{"time":1.1333,"name":"spineboy/portal-flare2"},{"time":1.1667,"name":null}]},"portal-flare8":{"attachment":[{"time":1.2,"name":"spineboy/portal-flare3"},{"time":1.2333,"name":"spineboy/portal-flare2"},{"time":1.2667,"name":null}]},"portal-flare9":{"attachment":[{"time":1.2,"name":"spineboy/portal-flare2"},{"time":1.2333,"name":"spineboy/portal-flare3"},{"time":1.2667,"name":"spineboy/portal-flare1"},{"time":1.3,"name":null}]},"portal-flare10":{"attachment":[{"time":1.2,"name":"spineboy/portal-flare2"},{"time":1.2333,"name":"spineboy/portal-flare1"},{"time":1.2667,"name":"spineboy/portal-flare3"},{"time":1.3,"name":null}]},"portal-shade":{"attachment":[{"name":"spineboy/portal-shade"},{"time":3.1,"name":null}]},"portal-streaks1":{"attachment":[{"name":"spineboy/portal-streaks1"},{"time":3.1,"name":null}]},"portsl-streaks2":{"attachment":[{"name":"spineboy/portsl-streaks2"},{"time":3.1,"name":null}]}},"bones":{"portal-root":{"translate":[{"x":-458.35,"y":105.19,"curve":0.934,"c2":0.07,"c3":0.671,"c4":0.99},{"time":1,"x":-448.03,"y":105.19},{"time":2.5,"x":-431.97,"y":105.19,"curve":0.426,"c3":0.747,"c4":0.41},{"time":3.1,"x":-457.42,"y":105.19}],"scale":[{"x":0.003,"y":0.006,"curve":0.823,"c2":0.24,"c3":0.867,"c4":0.66},{"time":0.4,"x":0.175,"y":0.387,"curve":0.727,"c2":1.8,"c3":0.671,"c4":0.99},{"time":1,"x":0.645,"y":1.426},{"time":1.2333,"x":0.685,"y":1.516},{"time":1.6,"x":0.634,"y":1.401},{"time":1.9667,"x":0.67,"y":1.481},{"time":2.2,"x":0.688,"y":1.522},{"time":2.5,"x":0.645,"y":1.426,"curve":0.98,"c2":-0.26,"c3":0.717},{"time":3.1,"x":0.007,"y":0.015}]},"portal-streaks1":{"rotate":[{},{"time":0.3333,"angle":120},{"time":0.6667,"angle":-120},{"time":1},{"time":1.3333,"angle":120},{"time":1.6667,"angle":-120},{"time":2},{"time":2.3333,"angle":120},{"time":2.6667,"angle":-120},{"time":3},{"time":3.3333,"angle":120}],"translate":[{"x":15.15,"curve":0.243,"c3":0.649,"c4":0.6},{"time":0.6667,"x":10.9,"y":-6.44,"curve":0.382,"c2":0.57,"c3":0.735},{"time":1,"x":9.21,"y":-8.66},{"time":1.3333,"x":21.53,"y":-3.19},{"time":2,"x":9.21,"y":6.26},{"time":2.5667,"x":9.21,"y":-0.8},{"time":2.9333,"x":9.21,"y":-8.91}],"scale":[{"curve":0.25,"c3":0.75},{"time":0.6667,"x":1.053,"y":1.053,"curve":0.25,"c3":0.75},{"time":1.3333,"x":0.986,"y":0.986,"curve":0.25,"c3":0.75},{"time":2,"x":1.053,"y":1.053}]},"portal-streaks2":{"rotate":[{},{"time":0.6667,"angle":120},{"time":1.3333,"angle":-120},{"time":2},{"time":2.6667,"angle":120},{"time":3.3333,"angle":-120}],"translate":[{"x":-2.11},{"time":1,"x":-2.11,"y":6.63},{"time":1.9333,"x":-2.11}],"scale":[{"x":1.014,"y":1.014}]},"portal-shade":{"translate":[{"x":-29.68}],"scale":[{"x":0.714,"y":0.714}]},"portal":{"rotate":[{},{"time":0.6667,"angle":120},{"time":1.3333,"angle":-120},{"time":2},{"time":2.6667,"angle":120},{"time":3.3333,"angle":-120}]},"clipping":{"translate":[{"x":-476.55,"y":2.27}],"scale":[{"x":0.983,"y":1.197}]},"hip":{"rotate":[{"time":1.0667,"angle":22.74}],"translate":[{"x":-899.41,"y":4.47,"curve":"stepped"},{"time":1.0667,"x":-694.16,"y":183.28},{"time":1.1333,"x":-509.15,"y":83.28},{"time":1.2333,"x":-316.97,"y":37.07},{"time":1.4,"x":-160.9,"y":-90.39},{"time":1.6,"x":-102.86,"y":-94.33,"curve":0.596,"c2":0.01,"c3":0.75},{"time":2.1333,"x":-7.2,"y":-31.12,"curve":0.205,"c3":0.75},{"time":2.6,"x":-5.34,"y":-36.81,"curve":0.591,"c3":0.642},{"time":3.6,"x":-7.16,"y":-24.48}]},"rear-foot-ik":{"rotate":[{"time":1.0667,"angle":41.6,"curve":"stepped"},{"time":1.2333,"angle":41.6},{"time":1.3333,"angle":20.8},{"time":1.4,"angle":19.02},{"time":1.4333,"angle":-0.28}],"translate":[{"x":-899.41,"y":4.47,"curve":"stepped"},{"time":1.0667,"x":-591.13,"y":438.46},{"time":1.1333,"x":-406.12,"y":338.47},{"time":1.2333,"x":-214.35,"y":255.24},{"time":1.4,"x":-8.88,"y":15.25},{"time":1.4333,"x":8.36,"y":0.2,"curve":0.216,"c2":0.54,"c3":0.75},{"time":1.9333,"x":48.87}]},"front-foot-ik":{"rotate":[{"time":1.0667,"angle":32.08,"curve":"stepped"},{"time":1.2333,"angle":32.08},{"time":1.3333,"angle":-0.28},{"time":1.6,"angle":-34.77},{"time":1.9333,"angle":-2.15}],"translate":[{"x":-899.41,"y":4.47,"curve":"stepped"},{"time":1.0667,"x":-533.93,"y":363.75},{"time":1.1333,"x":-348.92,"y":263.76},{"time":1.2333,"x":-201.23,"y":199.93},{"time":1.3333,"x":-109.57,"y":0.2,"curve":0.255,"c2":0.48,"c3":0.75},{"time":1.7333,"x":-69.06}]},"torso":{"rotate":[{"time":1.0667,"angle":9.73,"curve":"stepped"},{"time":1.2333,"angle":9.73},{"time":1.3333,"angle":2.88},{"time":1.4667,"angle":-73.99},{"time":1.6,"angle":-75.07,"curve":0.392,"c2":0.03,"c3":0.719,"c4":0.43},{"time":1.7333,"angle":-77.34,"curve":0.456,"c2":0.36,"c3":0.68,"c4":1.21},{"time":2.3333,"angle":-32.03},{"time":2.6,"angle":-36.79},{"time":3.6,"angle":-32.03}]},"neck":{"rotate":[{"time":1.0667,"angle":-3.57,"curve":"stepped"},{"time":1.1333,"angle":-3.57},{"time":1.2333,"angle":-13.5},{"time":1.3333,"angle":-1.7},{"time":1.4333,"angle":2.3},{"time":1.5667,"angle":11.42},{"time":1.9333,"angle":3.78,"curve":0.269,"c3":0.618,"c4":0.42},{"time":2.1333,"angle":7.93,"curve":0.345,"c2":0.37,"c3":0.757},{"time":2.6,"angle":5.45,"curve":0.25,"c3":0.75},{"time":3.6,"angle":3.78}]},"head":{"rotate":[{"time":1.0667,"angle":16.4,"curve":"stepped"},{"time":1.1333,"angle":16.4},{"time":1.2333,"angle":15.19},{"time":1.3333,"angle":-32.21},{"time":1.4333,"angle":15.95},{"time":1.5667,"angle":20.28},{"time":1.7333,"angle":15.24},{"time":1.9333,"angle":-18.95,"curve":0.269,"c3":0.618,"c4":0.42},{"time":2.1333,"angle":2.65,"curve":0.345,"c2":0.37,"c3":0.757},{"time":2.6,"angle":-4.12,"curve":0.25,"c3":0.75},{"time":3.6,"angle":-8.95}]},"rear-upper-arm":{"rotate":[{"time":1.0667,"angle":330.49,"curve":"stepped"},{"time":1.1333,"angle":330.49},{"time":1.2333,"angle":21.94},{"time":1.4,"angle":8.14},{"time":1.8,"angle":-3.47,"curve":0.673,"c2":0.01,"c3":0.747,"c4":0.98},{"time":2,"angle":39.2},{"time":2.8333,"angle":31.41,"curve":0.322,"c2":0.17,"c3":0.655,"c4":0.5},{"time":3.6,"angle":39.2}]},"back-foot-tip":{"rotate":[{"time":1.0667,"angle":56.07,"curve":"stepped"},{"time":1.1333,"angle":56.07},{"time":1.2333,"angle":24.68},{"time":1.3667,"angle":30.41},{"time":1.4333,"angle":19.18},{"time":1.5,"angle":-0.84}]},"front-upper-arm":{"rotate":[{"time":1.0667,"angle":-239.74,"curve":"stepped"},{"time":1.1333,"angle":-239.74},{"time":1.2333,"angle":-287.2},{"time":1.3333,"angle":-28.87},{"time":1.4667,"angle":-92.44},{"time":1.9333,"angle":-80.61},{"time":3.6,"angle":-70.59}]},"front-bracer":{"rotate":[{"time":1.0667,"angle":0.66,"curve":"stepped"},{"time":1.2333,"angle":0.66},{"time":1.3333,"angle":36.83},{"time":1.4333,"angle":12},{"time":1.5,"angle":-10.19},{"time":1.5667,"angle":-8},{"time":1.9333,"angle":42.09}]},"front-thigh":{"translate":[{"time":1.1,"x":-6.41,"y":18.23,"curve":"stepped"},{"time":1.1333,"x":-6.41,"y":18.23},{"time":1.2,"x":1.61,"y":3.66},{"time":1.2333,"x":4.5,"y":-3.15},{"time":1.3667,"x":-3.79,"y":2.94},{"time":1.4,"x":-8.37,"y":8.72},{"time":1.4333,"x":-11.26,"y":16.99},{"time":1.4667,"x":-9.89,"y":24.73,"curve":"stepped"},{"time":1.8667,"x":-9.89,"y":24.73},{"time":2.1,"x":-4.66,"y":10.25}]},"front-foot-tip":{"rotate":[{"time":1.0667,"angle":42.55,"curve":"stepped"},{"time":1.1333,"angle":42.55},{"time":1.2333,"angle":17.71},{"time":1.3667,"angle":3.63},{"time":1.4333,"angle":1.45}]},"rear-bracer":{"rotate":[{"time":1.0667,"angle":108.71,"curve":"stepped"},{"time":1.1333,"angle":108.71},{"time":1.2333,"angle":64.64},{"time":1.4,"angle":66.25},{"time":1.7,"angle":26.39},{"time":1.8,"angle":13.42},{"time":2},{"time":2.8333,"angle":11.32},{"time":3.6}]},"front-fist":{"rotate":[{"time":1.1,"angle":6.32},{"time":1.2},{"time":1.4667,"angle":24.51},{"time":1.5667,"angle":-6.03},{"time":1.7,"angle":-44.92},{"time":1.9333},{"time":2.7333,"angle":2.04},{"time":3.6}],"scale":[{"time":1.9333},{"time":2.7333,"x":0.844},{"time":3.6}]},"gun":{"rotate":[{"time":1.2667},{"time":1.7,"angle":17.34},{"time":1.8,"angle":21.99},{"time":2},{"time":2.8333,"angle":6.53},{"time":3.6}]},"hair2":{"rotate":[{"time":1.0667,"angle":26.19,"curve":"stepped"},{"time":1.4333,"angle":26.19},{"time":1.5667,"angle":-16.41,"curve":0.664,"c3":0.75},{"time":1.7,"angle":7.44},{"time":1.8,"angle":22.84},{"time":2,"angle":35.35},{"time":2.1,"angle":19.51},{"time":2.1667}]},"hair4":{"rotate":[{"time":1.0667,"angle":26.19,"curve":"stepped"},{"time":1.4333,"angle":26.19},{"time":1.5667,"angle":-16.41,"curve":0.664,"c3":0.75},{"time":1.7,"angle":7.44},{"time":1.8,"angle":22.84},{"time":2,"angle":35.35},{"time":2.1,"angle":19.51},{"time":2.1667}]},"hair3":{"rotate":[{"time":1.4333},{"time":1.5667,"angle":-8.68,"curve":0.664,"c3":0.75},{"time":1.7}]},"hair1":{"rotate":[{"time":1.4333},{"time":1.5667,"angle":-8.68,"curve":0.664,"c3":0.75},{"time":1.7}]},"flare1":{"rotate":[{"time":1.1,"angle":8.2}],"translate":[{"time":1.1,"x":-19.97,"y":149.68},{"time":1.2,"x":3.85,"y":152.43},{"time":1.2333,"x":-15.42,"y":152.29}],"scale":[{"time":1.1,"x":0.805,"y":0.805},{"time":1.1667,"x":1.279,"y":0.605},{"time":1.2,"x":2.151,"y":0.805},{"time":1.2333,"x":1.608,"y":0.805},{"time":1.3,"x":0.547,"y":0.416}],"shear":[{"time":1.1,"y":4.63},{"time":1.2333,"x":-5.74,"y":4.63}]},"flare2":{"rotate":[{"time":1.1,"angle":12.29}],"translate":[{"time":1.1,"x":-8.63,"y":132.96},{"time":1.2,"x":4.35,"y":132.93}],"scale":[{"time":1.1,"x":0.864,"y":0.864},{"time":1.1667,"x":0.945,"y":0.945},{"time":1.2,"x":1.511,"y":1.081}],"shear":[{"time":1.1,"y":24.03}]},"flare3":{"rotate":[{"time":1.1667,"angle":2.88}],"translate":[{"time":1.1667,"x":3.24,"y":114.81}],"scale":[{"time":1.1667,"x":0.668,"y":0.668}],"shear":[{"time":1.1667,"y":38.59}]},"flare4":{"rotate":[{"time":1.1667,"angle":-8.64}],"translate":[{"time":1.1667,"x":-3.82,"y":194.06},{"time":1.2667,"x":-1.82,"y":198.47,"curve":"stepped"},{"time":1.3,"x":-1.94,"y":187.81}],"scale":[{"time":1.1667,"x":0.545,"y":0.545},{"time":1.2667,"x":0.757,"y":0.757}],"shear":[{"time":1.1667,"x":7.42,"y":-22.04}]},"flare5":{"translate":[{"time":1.2,"x":-11.17,"y":176.42},{"time":1.2333,"x":-8.56,"y":179.04,"curve":"stepped"},{"time":1.3,"x":-14.57,"y":168.69}],"scale":[{"time":1.2333,"x":1.146},{"time":1.3,"x":0.703,"y":0.61}],"shear":[{"time":1.2,"x":6.9}]},"flare6":{"rotate":[{"time":1.2333,"angle":-5.36},{"time":1.2667,"angle":-0.54}],"translate":[{"time":1.2333,"x":14.52,"y":204.67},{"time":1.2667,"x":19.16,"y":212.9,"curve":"stepped"},{"time":1.3,"x":9.23,"y":202.85}],"scale":[{"time":1.2333,"x":0.777,"y":0.49},{"time":1.2667,"x":0.777,"y":0.657},{"time":1.3,"x":0.475,"y":0.401}]},"flare7":{"rotate":[{"time":1.1,"angle":5.98},{"time":1.1333,"angle":32.82}],"translate":[{"time":1.1,"x":-6.34,"y":112.98},{"time":1.1333,"x":2.66,"y":111.6}],"scale":[{"time":1.1,"x":0.588,"y":0.588}],"shear":[{"time":1.1333,"x":-19.93}]},"flare8":{"rotate":[{"time":1.2333,"angle":-6.85}],"translate":[{"time":1.1667,"x":66.67,"y":125.52,"curve":"stepped"},{"time":1.2,"x":58.24,"y":113.53,"curve":"stepped"},{"time":1.2333,"x":40.15,"y":114.69}],"scale":[{"time":1.1667,"x":1.313,"y":1.203},{"time":1.2333,"x":1.038,"y":0.95}],"shear":[{"time":1.2,"y":-13.01}]},"flare9":{"rotate":[{"time":1.1667,"angle":2.9}],"translate":[{"time":1.1667,"x":28.45,"y":151.35,"curve":"stepped"},{"time":1.2,"x":48.8,"y":191.09,"curve":"stepped"},{"time":1.2333,"x":52,"y":182.52,"curve":"stepped"},{"time":1.2667,"x":77.01,"y":195.96}],"scale":[{"time":1.1667,"x":0.871,"y":1.073},{"time":1.2,"x":0.927,"y":0.944},{"time":1.2333,"x":1.165,"y":1.336}],"shear":[{"time":1.1667,"x":7.95,"y":25.48}]},"flare10":{"rotate":[{"time":1.1667,"angle":2.18}],"translate":[{"time":1.1667,"x":55.64,"y":137.64,"curve":"stepped"},{"time":1.2,"x":90.49,"y":151.07,"curve":"stepped"},{"time":1.2333,"x":114.06,"y":153.05,"curve":"stepped"},{"time":1.2667,"x":90.44,"y":164.61}],"scale":[{"time":1.1667,"x":2.657,"y":0.891},{"time":1.2,"x":3.314,"y":1.425},{"time":1.2333,"x":2.871,"y":0.924},{"time":1.2667,"x":2.317,"y":0.775}],"shear":[{"time":1.1667,"x":-1.35}]}},"deform":{"default":{"torso":{"spineboy/torso":[{"time":1.3333},{"time":1.4667,"offset":34,"vertices":[-6.5248,6.64212,0,0,0,0,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,3.0E-5,-1.0E-5,0.65784,8.28917,0.65787,8.28917,1.41232,5.06705,1.41232,5.06703,1.41235,5.067,0,0,0,0,0.65784,8.28917,0.65784,8.28917,0.65784,8.28917,0.65787,8.28917,0.65784,8.28917,0.65784,8.28917,0.65787,8.28917,0.65784,8.28917,0.65784,8.28917,0.65787,8.28917,0.65784,8.28917,0.65784,8.28917,0.65784,8.28917,0.65787,8.28917,0,0,3.0E-5,-1.0E-5,0,0,0,0,0,0,0,0,-0.91644,9.00046,-0.91647,9.00049,-0.9164,9.00037,1.76991,9.34927,1.76997,9.34928,-1.01155,7.51457,-1.01145,7.51462,-1.0115,7.51452],"curve":"stepped"},{"time":1.8333,"offset":34,"vertices":[-6.5248,6.64212,0,0,0,0,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,3.0E-5,-1.0E-5,0.65784,8.28917,0.65787,8.28917,1.41232,5.06705,1.41232,5.06703,1.41235,5.067,0,0,0,0,0.65784,8.28917,0.65784,8.28917,0.65784,8.28917,0.65787,8.28917,0.65784,8.28917,0.65784,8.28917,0.65787,8.28917,0.65784,8.28917,0.65784,8.28917,0.65787,8.28917,0.65784,8.28917,0.65784,8.28917,0.65784,8.28917,0.65787,8.28917,0,0,3.0E-5,-1.0E-5,0,0,0,0,0,0,0,0,-0.91644,9.00046,-0.91647,9.00049,-0.9164,9.00037,1.76991,9.34927,1.76997,9.34928,-1.01155,7.51457,-1.01145,7.51462,-1.0115,7.51452]},{"time":2}]}}}},"run":{"slots":{"mouth":{"attachment":[{"name":"spineboy/mouth-grind"}]}},"bones":{"front-thigh":{"rotate":[{"angle":42.05,"curve":0.196,"c2":0.86,"c3":0.75},{"time":0.0667,"angle":46.08},{"time":0.1333,"angle":-20.29},{"time":0.2,"angle":-27.24},{"time":0.2667,"angle":-47.17},{"time":0.3333,"angle":-39.79},{"time":0.4,"angle":-25.86},{"time":0.4667,"angle":14.35},{"time":0.5333,"angle":55.63},{"time":0.6,"angle":69.65},{"time":0.6667,"angle":86.41},{"time":0.7333,"angle":65.88},{"time":0.8,"angle":42.05}],"translate":[{},{"time":0.0333,"x":-5.8,"y":11.16},{"time":0.0667,"x":-5.13,"y":11.55},{"time":0.1333,"x":-7.7,"y":8.99},{"time":0.5333,"x":-1.26,"y":3.83},{"time":0.8}]},"torso":{"rotate":[{"angle":-39.71},{"time":0.2,"angle":-57.29},{"time":0.4,"angle":-39.71},{"time":0.6,"angle":-57.29},{"time":0.8,"angle":-39.71}]},"rear-thigh":{"rotate":[{"angle":-56.59},{"time":0.0667,"angle":-21.57},{"time":0.1333,"angle":27.95},{"time":0.2,"angle":42.43},{"time":0.2667,"angle":62.37},{"time":0.3333,"angle":45.43},{"time":0.4,"angle":15.67},{"time":0.4667,"angle":28.22},{"time":0.5333,"angle":-38.62},{"time":0.6,"angle":-53.27},{"time":0.6667,"angle":-79.31},{"time":0.7333,"angle":-86.47},{"time":0.8,"angle":-56.59}],"translate":[{},{"time":0.4,"x":-6.76,"y":-3.86},{"time":0.4333,"x":-15.85,"y":7.28},{"time":0.4667,"x":-13.05,"y":4.05},{"time":0.5,"x":-10.25,"y":7.11},{"time":0.5333,"x":-9.02,"y":-5.15},{"time":0.6667,"x":-23.18,"y":-2.58},{"time":0.8}]},"rear-shin":{"rotate":[{"angle":-74},{"time":0.0667,"angle":-83.38},{"time":0.1333,"angle":-106.7},{"time":0.2,"angle":-66.01},{"time":0.2667,"angle":-55.22},{"time":0.3333,"angle":-24.8},{"time":0.4,"angle":18.44,"curve":0.25,"c3":0.75},{"time":0.4667,"angle":-56.65},{"time":0.5333,"angle":-11.95,"curve":0.25,"c3":0.75},{"time":0.6667,"angle":-41.27},{"time":0.7333,"angle":-43.61},{"time":0.8,"angle":-74}]},"front-upper-arm":{"rotate":[{"angle":-89.37},{"time":0.0667,"angle":-95.67},{"time":0.1333,"angle":-22.01},{"time":0.2,"angle":-316.04},{"time":0.2667,"angle":-274.94},{"time":0.3333,"angle":-273.74},{"time":0.4,"angle":-272.09},{"time":0.4667,"angle":-264.9},{"time":0.5333,"angle":-320.1},{"time":0.6,"angle":-50.84},{"time":0.6667,"angle":-81.73},{"time":0.7333,"angle":-83.92},{"time":0.8,"angle":-89.37}],"translate":[{"x":6.25,"y":10.05},{"time":0.2667,"x":4.96,"y":-13.13},{"time":0.6,"x":-2.43,"y":1.95},{"time":0.8,"x":6.25,"y":10.05}]},"front-bracer":{"rotate":[{"angle":33.44},{"time":0.0667,"angle":20.54},{"time":0.1333,"angle":15.26},{"time":0.2,"angle":19.29},{"time":0.2667,"angle":22.62},{"time":0.3333,"angle":37.29},{"time":0.4,"angle":41.53},{"time":0.4667,"angle":31.74},{"time":0.5333,"angle":67.45},{"time":0.6667,"angle":39.77},{"time":0.7333,"angle":30.95},{"time":0.8,"angle":33.44}]},"front-fist":{"rotate":[{"angle":-19.76},{"time":0.0667,"angle":-37.11},{"time":0.1333,"angle":-50.8},{"time":0.2667,"angle":-12.69},{"time":0.3333,"angle":3.01},{"time":0.4333,"angle":12.06},{"time":0.5333,"angle":13.26},{"time":0.8,"angle":-19.76}]},"rear-upper-arm":{"rotate":[{"angle":68.68},{"time":0.0667,"angle":73.89},{"time":0.1333,"angle":-9.64},{"time":0.2,"angle":284.28},{"time":0.2667,"angle":283.29},{"time":0.3333,"angle":278.29},{"time":0.4,"angle":271.03},{"time":0.4667,"angle":263.2},{"time":0.5333,"angle":314.26},{"time":0.6,"angle":16.83},{"time":0.6667,"angle":70.35},{"time":0.7333,"angle":73.54},{"time":0.8,"angle":68.68}],"translate":[{"x":-2.57,"y":-8.89},{"time":0.1333,"x":-4.68,"y":7.21},{"time":0.6,"x":4.33,"y":2.06},{"time":0.8,"x":-2.57,"y":-8.89}]},"rear-bracer":{"rotate":[{"angle":31.05},{"time":0.0667,"angle":28.28},{"time":0.1333,"angle":49.36},{"time":0.2,"angle":59.37},{"time":0.2667,"angle":8.56},{"time":0.3333,"angle":9.39},{"time":0.4,"angle":11.51},{"time":0.4667,"angle":7.22},{"time":0.5333,"angle":-18.44},{"time":0.6,"angle":11.45},{"time":0.6667,"angle":9.99},{"time":0.7333,"angle":8.29},{"time":0.8,"angle":31.05}]},"neck":{"rotate":[{"angle":11.03},{"time":0.2,"angle":13.59},{"time":0.4,"angle":11.03},{"time":0.6,"angle":13.59},{"time":0.8,"angle":11.03}]},"head":{"rotate":[{"angle":14.73},{"time":0.1,"angle":12.35},{"time":0.2,"angle":25.55},{"time":0.4,"angle":11.03},{"time":0.5,"angle":12.35},{"time":0.6,"angle":25.55},{"time":0.8,"angle":11.03}]},"front-shin":{"rotate":[{"curve":0.481,"c2":0.01,"c3":0.75},{"time":0.0667,"angle":-64.42},{"time":0.1333,"angle":-20.6,"curve":0.25,"c3":0.75},{"time":0.2667,"angle":-62.52},{"time":0.3333,"angle":-79.75},{"time":0.4,"angle":-78.28},{"time":0.4667,"angle":-118.96,"curve":0.93,"c2":0.01,"c3":0.953,"c4":0.95},{"time":0.6,"angle":-88.96},{"time":0.6667,"angle":-79.1},{"time":0.7333,"angle":-47.78},{"time":0.8}]},"front-foot":{"rotate":[{},{"time":0.0333,"angle":-21.13,"curve":0.121,"c2":0.24,"c3":0.75},{"time":0.0667,"angle":17.64},{"time":0.1,"angle":29.93},{"time":0.1333,"angle":16.45},{"time":0.2,"angle":-29.23},{"time":0.2667,"angle":-1.62},{"time":0.3333,"angle":-10.23},{"time":0.4667,"angle":-15.99},{"time":0.6,"angle":9.03},{"time":0.7333,"angle":17.33},{"time":0.8}]},"rear-foot":{"rotate":[{},{"time":0.0667,"angle":-12.04},{"time":0.1333,"angle":-0.87},{"time":0.2,"angle":25.81},{"time":0.2667,"angle":4.71},{"time":0.4,"angle":18.09,"curve":0.281,"c2":0.74,"c3":0.75},{"time":0.4333,"angle":-1.71},{"time":0.4667,"angle":27.13},{"time":0.5,"angle":38.84},{"time":0.5333,"angle":30.77},{"time":0.5667,"angle":-20.49},{"time":0.6,"angle":-30.81},{"time":0.6667,"angle":-1.32},{"time":0.8}]},"gun":{"rotate":[{},{"time":0.1333,"angle":24.73},{"time":0.5,"angle":-11.88},{"time":0.8}]},"hip":{"translate":[{"y":-24.88,"curve":0.301,"c2":0.8,"c3":0.663,"c4":0.91},{"time":0.0667,"y":-40.28,"curve":0.456,"c3":0.339,"c4":0.99},{"time":0.2667,"y":20.51,"curve":0.17,"c2":0.53,"c3":0.597,"c4":0.99},{"time":0.4,"y":-24.88},{"time":0.4333,"y":-26.36},{"time":0.4667,"y":-45.06,"curve":0.25,"c3":0.75},{"time":0.6667,"y":20.51},{"time":0.8,"y":-24.88}]},"front-foot-ik":{"rotate":[{},{"time":0.0333,"angle":-41.68},{"time":0.1333,"angle":-102.42},{"time":0.2,"angle":-121.44},{"time":0.2333,"angle":-133.6},{"time":0.2667,"angle":-139.86},{"time":0.3333,"angle":-152.4},{"time":0.3667,"angle":-146.32},{"time":0.5,"angle":-143.8},{"time":0.5333,"angle":-114.84},{"time":0.5667,"angle":-99.09},{"time":0.6,"angle":-63.03},{"time":0.6333,"angle":-47.35},{"time":0.6667,"angle":-31.04},{"time":0.7,"angle":-25.02},{"time":0.7667,"angle":-15.95},{"time":0.8}],"translate":[{"x":159.32,"y":38.68},{"time":0.0333,"x":115.32,"y":0.18},{"time":0.0667,"x":16.34,"y":0.18},{"time":0.1333,"x":-116.47,"y":0.18},{"time":0.2,"x":-210.62,"y":126.29},{"time":0.2333,"x":-226.12,"y":203.77},{"time":0.2667,"x":-223.74,"y":258.01},{"time":0.3333,"x":-208.24,"y":250.26},{"time":0.3667,"x":-207.64,"y":215.69},{"time":0.4,"x":-205.86,"y":185.3},{"time":0.4333,"x":-179.04,"y":176.95},{"time":0.4667,"x":-154,"y":157.28},{"time":0.5,"x":-128.97,"y":108.41},{"time":0.5333,"x":-76.68,"y":75.29},{"time":0.5667,"x":-41.24,"y":67.74},{"time":0.6,"x":28.48,"y":59.03},{"time":0.6333,"x":70.89,"y":78.2},{"time":0.6667,"x":110.42,"y":99},{"time":0.7,"x":122.21,"y":79.59},{"time":0.7667,"x":145.33,"y":44.62},{"time":0.8,"x":159.32,"y":38.68}]},"front-ankle-ik":{"translate":[{"x":-14.25,"y":-25.96},{"time":0.1333,"x":-13.64,"y":-34.72},{"time":0.1667,"x":-11.42,"y":-12.61},{"time":0.5,"x":-14.89,"y":-31.79},{"time":0.8,"x":-14.25,"y":-25.96}]},"rear-foot-ik":{"rotate":[{},{"time":0.0667,"angle":18.55},{"time":0.1333,"angle":52.76},{"time":0.1667,"angle":87.4},{"time":0.2333,"angle":133.95},{"time":0.3,"angle":150.92},{"time":0.3667,"angle":168.02},{"time":0.4,"angle":129.09},{"time":0.4333,"angle":125.95},{"time":0.5,"angle":114.27},{"time":0.5333,"angle":85.37},{"time":0.5667,"angle":49.18},{"time":0.6333,"angle":9.51},{"time":0.7,"angle":4.15},{"time":0.7667,"angle":-1.37},{"time":0.8}],"translate":[{"x":-248.9,"y":230.07},{"time":0.0667,"x":-228.7,"y":134.12},{"time":0.1333,"x":-145.38,"y":94.22},{"time":0.1667,"x":-82.76,"y":54.33},{"time":0.2333,"x":37.93,"y":74.39},{"time":0.2667,"x":80.38,"y":91.82},{"time":0.3,"x":93.21,"y":67.3},{"time":0.3667,"x":99.34,"y":35.47},{"time":0.4,"x":68.63,"y":0.35},{"time":0.4333,"x":21.58,"y":-2.64},{"time":0.5,"x":-92.91,"y":-2.64},{"time":0.5333,"x":-166.79,"y":-2.64},{"time":0.5667,"x":-252.52,"y":57.15},{"time":0.6333,"x":-304.32,"y":214.03},{"time":0.7,"x":-296.92,"y":281.37},{"time":0.7667,"x":-269.54,"y":257.69},{"time":0.8,"x":-248.9,"y":230.07}]},"rear-ankle-ik":{"translate":[{"x":85,"y":-33.59}]},"back-foot-tip":{"rotate":[{"angle":-151.52},{"time":0.1333,"angle":-93.33},{"time":0.1667,"angle":-70.78},{"time":0.2333,"angle":22.43},{"time":0.3,"angle":36.86},{"time":0.3667,"angle":34.85},{"time":0.4,"angle":0.77},{"time":0.4333,"angle":0.83,"curve":"stepped"},{"time":0.5333,"angle":0.83},{"time":0.5667,"angle":-61.7},{"time":0.6333,"angle":-139.59},{"time":0.7,"angle":-146.79},{"time":0.8,"angle":-151.52}]},"front-foot-tip":{"rotate":[{"angle":42.2},{"time":0.0333,"angle":-0.24},{"time":0.1333,"angle":-0.28},{"time":0.1667,"angle":-59.58},{"time":0.2,"angle":-112.55},{"time":0.2667,"angle":-130.08},{"time":0.3333,"angle":-146.2},{"time":0.5,"angle":-86.49},{"time":0.5333,"angle":-86.99},{"time":0.5667,"angle":-66.87},{"time":0.6,"angle":-22.9},{"time":0.6333,"angle":-12.07},{"time":0.7,"angle":35.4},{"time":0.8,"angle":42.2}]},"hair1":{"rotate":[{},{"time":0.1,"angle":-10.22},{"time":0.2667,"angle":7.16},{"time":0.3667,"angle":-0.15},{"time":0.4667,"angle":-10.22},{"time":0.6333,"angle":7.16},{"time":0.7333,"angle":-0.15},{"time":0.8}]},"hair2":{"rotate":[{},{"time":0.1,"angle":-10.22},{"time":0.1667,"angle":-30.13},{"time":0.2667,"angle":6.38},{"time":0.3667,"angle":-13.49},{"time":0.4667,"angle":-10.22},{"time":0.5333,"angle":-30.13},{"time":0.6333,"angle":6.38},{"time":0.7333,"angle":-13.49},{"time":0.8}]},"hair3":{"rotate":[{},{"time":0.1,"angle":-10.22},{"time":0.2667,"angle":7.16},{"time":0.3667,"angle":-0.15},{"time":0.4667,"angle":-10.22},{"time":0.6333,"angle":7.16},{"time":0.7333,"angle":-0.15},{"time":0.8}]},"hair4":{"rotate":[{},{"time":0.1,"angle":-10.22},{"time":0.1667,"angle":-30.13},{"time":0.2667,"angle":6.38},{"time":0.3667,"angle":-13.49},{"time":0.4667,"angle":-10.22},{"time":0.5333,"angle":-30.13},{"time":0.6333,"angle":6.38},{"time":0.7333,"angle":-13.49},{"time":0.8}]},"torso2":{"rotate":[{"angle":4.52}]},"torso3":{"rotate":[{"angle":4.52}]}},"deform":{"default":{"eye":{"spineboy/eye-indifferent":[{"vertices":[-0.15329,0.70867,-0.15329,0.70867,-0.15329,0.70867,-0.15329,0.70867],"curve":0.25,"c3":0.75},{"time":0.4,"vertices":[3.92969,-18.23849,3.92969,-18.23849,3.92969,-18.23849,3.92969,-18.23849],"curve":0.25,"c3":0.75},{"time":0.8,"vertices":[-0.15329,0.70867,-0.15329,0.70867,-0.15329,0.70867,-0.15329,0.70867]}]},"goggles":{"spineboy/goggles":[{"vertices":[-0.08838,0.23265,-0.04028,0.11366,-1.15417,5.38666,0,0,0,0,0,0,0,0,0,0,-1.08234,5.00095,-1.86743,8.62226,-0.82043,3.80259,-0.0957,0.27988,-0.11633,0.3275,-5.76245,7.7601,-3.05988,10.76797,-2.18188,10.12057,-4.92511,9.4566,0,0,0,0,0.65329,-3.03143,0.55997,-2.59837,-1.40085,6.49587,-0.16394,0.42825,-0.14651,0.37986,-0.13544,0.3509,-0.11295,0.31703,-0.12219,0.33459,-0.12271,0.32938,-0.10715,0.28685,-0.90088,4.0234,-0.04678,0.13842,-1.0719,4.96331,-1.06213,4.94196,-1.04929,4.90511,-0.04034,0.1196,-0.07523,0.20426,-0.10211,0.26987,-0.12775,0.33331,-0.13965,0.36775,-0.14172,0.37709,-0.13071,0.35703,-0.11951,0.33389,-0.14542,0.39532,-0.16638,0.43952,-1.40085,6.49587,-0.82043,3.80259,-0.82043,3.80259,-0.82043,3.80259,-1.82895,8.48514,-1.82895,8.48514,-1.82895,8.48514],"curve":0.25,"c3":0.75},{"time":0.4,"vertices":[1.7334,-8.03619,0.70187,-3.25497,0.39651,-1.84367,0,0,0,0,0,0,0,0,0,0,1.08755,-5.04639,3.97546,-18.45124,0.47232,-2.1937,1.59595,-7.39851,2.05963,-9.54877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.58685,-11.98995,2.93106,-13.58876,2.71149,-12.57045,2.01114,-9.32378,2.26413,-10.49626,2.34348,-10.8643,2.0517,-9.51168,1.96225,-9.10095,0.75806,-3.51469,0.08057,-0.37485,0.57971,-2.69226,0.35056,-1.63069,0.65036,-3.01589,1.40933,-6.5339,1.98853,-9.21902,4.07944,-18.92243,3.45761,-16.03436,3.45532,-16.02369,2.42819,-11.25721,2.14264,-9.93373,2.06396,-9.5659,2.59061,-12.00682,0,0,0.47232,-2.1937,0.47232,-2.1937,0.47232,-2.1937,0.47232,-2.1937,0.47232,-2.1937,0.47232,-2.1937],"curve":0.25,"c3":0.75},{"time":0.8,"vertices":[-0.08838,0.23265,-0.04028,0.11366,-1.15417,5.38666,0,0,0,0,0,0,0,0,0,0,-1.08234,5.00095,-1.86743,8.62226,-0.82043,3.80259,-0.0957,0.27988,-0.11633,0.3275,-5.76245,7.7601,-3.05988,10.76797,-2.18188,10.12057,-4.92511,9.4566,0,0,0,0,0.65329,-3.03143,0.55997,-2.59837,-1.40085,6.49587,-0.16394,0.42825,-0.14651,0.37986,-0.13544,0.3509,-0.11295,0.31703,-0.12219,0.33459,-0.12271,0.32938,-0.10715,0.28685,-0.90088,4.0234,-0.04678,0.13842,-1.0719,4.96331,-1.06213,4.94196,-1.04929,4.90511,-0.04034,0.1196,-0.07523,0.20426,-0.10211,0.26987,-0.12775,0.33331,-0.13965,0.36775,-0.14172,0.37709,-0.13071,0.35703,-0.11951,0.33389,-0.14542,0.39532,-0.16638,0.43952,-1.40085,6.49587,-0.82043,3.80259,-0.82043,3.80259,-0.82043,3.80259,-1.82895,8.48514,-1.82895,8.48514,-1.82895,8.48514]}]},"head":{"spineboy/head":[{"offset":32,"vertices":[2.81555,0.98518,1.01535,8.62647,-2.70273,4.09556,-4.48743,7.13697,-4.76981,3.34322,0,0,-2.25769,-4.31037,0,0,0,0,-0.45578,2.11445,-0.45578,2.11445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3.14777,14.58548,-2.86661,13.27987,-2.55057,11.81706,-2.17331,10.06675,-1.96667,9.10786,-2.01523,9.33308,-2.29977,10.65304,-2.63971,12.23277,-3.05856,14.172,0,0,0,0,0,0,0,0,-0.59756,2.77132,-1.96329,9.10585,-2.16217,10.02965],"curve":0.25,"c3":0.75},{"time":0.4,"offset":34,"vertices":[3.14838,-14.61261,3.14838,-14.61261,3.14838,-14.61261,0.83426,-3.87112,0,0,0,0,0,0,0,0,-0.45578,2.11445,-0.45578,2.11445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.17175,-0.81676,0.17175,-0.81676,0.17175,-0.81676,0.17175,-0.81676,0.17175,-0.81676,0.17175,-0.81676,0.17175,-0.81676,0.17175,-0.81676,0.17175,-0.81676,0,0,0,0,0,0,0,0,0.55618,-2.58074,0.41714,-1.93558,1.04282,-4.83889],"curve":0.25,"c3":0.75},{"time":0.8,"offset":32,"vertices":[2.81555,0.98518,1.01535,8.62647,-2.70273,4.09556,-4.48743,7.13697,-4.76981,3.34322,0,0,-2.25769,-4.31037,0,0,0,0,-0.45578,2.11445,-0.45578,2.11445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3.14777,14.58548,-2.86661,13.27987,-2.55057,11.81706,-2.17331,10.06675,-1.96667,9.10786,-2.01523,9.33308,-2.29977,10.65304,-2.63971,12.23277,-3.05856,14.172,0,0,0,0,0,0,0,0,-0.59756,2.77132,-1.96329,9.10585,-2.16217,10.02965]}]},"mouth":{"spineboy/mouth-grind":[{"vertices":[-10.19202,11.7786,-1.60019,14.33763,0.02328,8.88684,-8.56857,6.32779],"curve":0.25,"c3":0.75},{"time":0.4,"vertices":[-1.86761,-2.71146,0.01212,-11.43619,0.01212,-11.43619,-1.86761,-2.71146],"curve":0.25,"c3":0.75},{"time":0.8,"vertices":[-10.19202,11.7786,-1.60019,14.33763,0.02328,8.88684,-8.56857,6.32779]}]},"torso":{"spineboy/torso":[{"offset":14,"vertices":[6.35965,1.33517,6.35962,1.33517,6.35968,1.33517,6.35965,1.33517,6.35962,1.33517,0,0,0,0,0,0,0,0,0.82059,5.12242,0,0,0,0,0,0,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,3.0E-5,-1.0E-5,0.82059,5.12243,0.82062,5.12241,0.82059,5.12242,0.82059,5.12243,0.82062,5.12241,1.43295,3.92841,1.43304,3.92826,0.82059,5.12242,0.82059,5.12243,0.82059,5.12243,0.82062,5.12241,0.24156,4.36882,0.24155,4.36882,0.24158,4.36882,0.24156,4.36882,0.24155,4.36882,0.24158,4.36882,0.24156,4.36882,0.24155,4.36882,0,0,3.0E-5,-1.0E-5,0.82059,5.12243,0.82062,5.12241,-0.77553,4.89196,-0.77551,4.89193,0,0,0,0,-0.80443,5.76191,-0.80437,5.76189,-0.80463,5.76189,0.68706,7.31482,0.687,7.31474,-0.35934,5.4162,-0.35928,5.41616,-0.35965,5.41621]},{"time":0.4,"offset":4,"vertices":[1.46152,2.96601,1.46152,2.966,0.68634,3.23445,0.68634,3.23446,0.68634,3.23445,2.20619,0.10388,2.20618,0.10388,2.20624,0.10387,0,0,0,0,-0.31029,-2.89859,-0.31027,-2.8986,0,0,0,0,-0.1851,0.38208,0.33795,-3.61552,0,0,0,0,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0.23715,2.56816,0.23701,2.56804,0.23724,2.56822,0.39803,4.23793,0.39799,4.23787,0.39807,4.23792,-0.55164,4.21406,-0.55157,4.21406,0,0,3.0E-5,-1.0E-5,3.0E-5,-1.0E-5,-0.29404,-8.94628,-0.29398,-8.94629,-0.02417,-9.50224,-0.02417,-9.50224,-0.02417,-9.50224,0.23018,-9.9391,0.23019,-9.9391,-4.64136,-8.88914,-4.64133,-8.88915,-2.62137,-9.24012,-2.62134,-9.24013,-1.70074,-5.16261,-1.70071,-5.16261,-1.70071,-5.16262,-1.70074,-5.16261,-1.70071,-5.16261,-1.70071,-5.16262,-1.70074,-5.16261,-1.70071,-5.16261,0,0,3.0E-5,-1.0E-5,-7.37057,-10.47317,-7.37057,-10.47318,1.06334,-5.92199,1.06334,-5.92201,0,0,0,0,-0.49223,-2.6754,-0.49225,-2.67543,-0.49225,-2.67542,3.36295,-7.48149,3.36296,-7.48156,-2.08173,-6.76357,-2.08174,-6.76364,-2.08188,-6.76358]},{"time":0.8,"offset":14,"vertices":[6.35965,1.33517,6.35962,1.33517,6.35968,1.33517,6.35965,1.33517,6.35962,1.33517,0,0,0,0,0,0,0,0,0.82059,5.12242,0,0,0,0,0,0,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,0,0,3.0E-5,-1.0E-5,3.0E-5,-1.0E-5,0.82059,5.12243,0.82062,5.12241,0.82059,5.12242,0.82059,5.12243,0.82062,5.12241,1.43295,3.92841,1.43304,3.92826,0.82059,5.12242,0.82059,5.12243,0.82059,5.12243,0.82062,5.12241,0.24156,4.36882,0.24155,4.36882,0.24158,4.36882,0.24156,4.36882,0.24155,4.36882,0.24158,4.36882,0.24156,4.36882,0.24155,4.36882,0,0,3.0E-5,-1.0E-5,0.82059,5.12243,0.82062,5.12241,-0.77553,4.89196,-0.77551,4.89193,0,0,0,0,-0.80443,5.76191,-0.80437,5.76189,-0.80463,5.76189,0.68706,7.31482,0.687,7.31474,-0.35934,5.4162,-0.35928,5.41616,-0.35965,5.41621]}]}}},"events":[{"name":"footstep"},{"time":0.3667,"name":"footstep"}]},"shoot":{"slots":{"muzzle":{"color":[{"time":0.1333,"color":"ffffffff"},{"time":0.1667,"color":"ffffff62"}],"attachment":[{"time":0.0333,"name":"spineboy/muzzle01"},{"time":0.0667,"name":"spineboy/muzzle02"},{"time":0.1,"name":"spineboy/muzzle03"},{"time":0.1333,"name":"spineboy/muzzle04"},{"time":0.1667,"name":"spineboy/muzzle05"},{"time":0.2,"name":null}]},"muzzle-glow":{"color":[{"color":"ff0c0c00"},{"time":0.0333,"color":"ffc9adff","curve":0.831,"c2":0.04,"c3":0.899,"c4":0.73},{"time":0.3,"color":"ff400cff"},{"time":0.6333,"color":"ff0c0c00"}],"attachment":[{"name":"spineboy/muzzle-glow"}]},"muzzle-ring":{"color":[{"time":0.0333,"color":"d8baffff","curve":0.846,"c3":0.903,"c4":0.79},{"time":0.2333,"color":"d7baff00"}],"attachment":[{"time":0.0333,"name":"spineboy/muzzle-ring"},{"time":0.2333,"name":null}]},"muzzle-ring2":{"color":[{"time":0.0333,"color":"d8baffff","curve":0.846,"c3":0.903,"c4":0.79},{"time":0.2,"color":"d7baff00"}],"attachment":[{"time":0.0333,"name":"spineboy/muzzle-ring"},{"time":0.2,"name":null}]},"muzzle-ring3":{"color":[{"time":0.0333,"color":"d8baffff","curve":0.846,"c3":0.903,"c4":0.79},{"time":0.2,"color":"d7baff00"}],"attachment":[{"time":0.0333,"name":"spineboy/muzzle-ring"},{"time":0.2,"name":null}]},"muzzle-ring4":{"color":[{"time":0.0333,"color":"d8baffff","curve":0.846,"c3":0.903,"c4":0.79},{"time":0.2,"color":"d7baff00"}],"attachment":[{"time":0.0333,"name":"spineboy/muzzle-ring"},{"time":0.2,"name":null}]}},"bones":{"gun":{"rotate":[{"time":0.0667,"curve":0.419,"c2":0.64,"c3":0.778,"c4":0.95},{"time":0.1333,"angle":45.35,"curve":0.069,"c2":0.51,"c3":0.75},{"time":0.6333}]},"muzzle":{"translate":[{"x":-11.02,"y":25.16}]},"rear-upper-arm":{"translate":[{"time":0.0333},{"time":0.1,"x":4.74,"y":9.98},{"time":0.2333}]},"rear-bracer":{"translate":[{"time":0.0333},{"time":0.1,"x":-4.36,"y":-2.88},{"time":0.2333}]},"gun-tip":{"translate":[{},{"time":0.3,"x":3.15,"y":0.39}],"scale":[{"x":0.366,"y":0.366},{"time":0.0333,"x":1.453,"y":1.453},{"time":0.3,"x":0.366,"y":0.366}]},"muzzle-ring":{"translate":[{"time":0.0333},{"time":0.2333,"x":64.47}],"scale":[{"time":0.0333},{"time":0.2333,"x":5.951,"y":5.951}]},"muzzle-ring2":{"translate":[{"time":0.0333},{"time":0.2,"x":172.57}],"scale":[{"time":0.0333},{"time":0.2,"x":4,"y":4}]},"muzzle-ring3":{"translate":[{"time":0.0333},{"time":0.2,"x":277.17}],"scale":[{"time":0.0333},{"time":0.2,"x":2,"y":2}]},"muzzle-ring4":{"translate":[{"time":0.0333},{"time":0.2,"x":392.06}]}}},"walk":{"bones":{"rear-foot-ik":{"rotate":[{"angle":-32.82},{"time":0.1,"angle":-77.14},{"time":0.2,"angle":-73.32},{"time":0.4333,"angle":30.49},{"time":0.5,"angle":-0.28,"curve":"stepped"},{"time":0.6667,"angle":-0.28},{"time":0.7667,"angle":-33.78},{"time":0.8667,"angle":-32.82}],"translate":[{"x":-167.32,"y":0.12},{"time":0.1,"x":-205.81,"y":42.58},{"time":0.2,"x":-119.04,"y":61.48,"curve":0.296,"c2":0.33,"c3":0.634,"c4":0.67},{"time":0.4333,"x":92.52,"y":26.2},{"time":0.5,"x":47.15,"y":-0.96},{"time":0.5333,"x":27.23,"y":-0.86},{"time":0.6667,"x":-42.87,"y":-0.52},{"time":0.7667,"x":-110.82,"y":-0.18},{"time":0.8667,"x":-167.32,"y":0.12}]},"front-foot-ik":{"rotate":[{"angle":29.01},{"time":0.0667,"angle":-0.28,"curve":"stepped"},{"time":0.1,"angle":-0.28},{"time":0.2},{"time":0.3333,"angle":-28.33},{"time":0.4333,"angle":-43.6},{"time":0.5333,"angle":-78.46},{"time":0.6667,"angle":-80.78},{"time":0.7667,"angle":-36.75},{"time":0.8667,"angle":29.01}],"translate":[{"x":153.74,"y":27.82},{"time":0.0667,"x":109.33,"y":-0.52},{"time":0.1,"x":91.43,"y":-0.43},{"time":0.2,"x":36.13,"y":-0.15},{"time":0.3333,"x":-38.12,"y":0.22},{"time":0.4333,"x":-94.33,"y":0.5},{"time":0.5333,"x":-136.78,"y":57.05},{"time":0.6667,"x":-54.53,"y":69.29},{"time":0.8667,"x":153.74,"y":27.82}]},"hip":{"translate":[{"x":3.42,"y":-16.2},{"time":0.1,"x":13.57,"y":-20.63,"curve":0.548,"c3":0.75},{"time":0.3333,"x":6.91,"y":2.52,"curve":0.25,"c3":0.75},{"time":0.4333,"x":6.54,"y":-14.78},{"time":0.5333,"x":6.83,"y":-19.85,"curve":0.548,"c3":0.75},{"time":0.7667,"x":6.91,"y":2.52,"curve":0.25,"c3":0.75},{"time":0.8667,"x":3.42,"y":-16.2}]},"front-foot-tip":{"rotate":[{"angle":28.96},{"time":0.0667,"angle":0.82},{"time":0.1,"angle":1.68,"curve":"stepped"},{"time":0.4333,"angle":1.68},{"time":0.5333,"angle":-59.66},{"time":0.6667,"angle":-94.92},{"time":0.7667,"angle":-35.84},{"time":0.8667,"angle":28.96}]},"torso":{"rotate":[{"angle":-20.72},{"time":0.2,"angle":0.92,"curve":0.25,"c3":0.75},{"time":0.4333,"angle":-20.72,"curve":0.136,"c2":0.36,"c3":0.75},{"time":0.6667,"angle":0.92,"curve":0.25,"c3":0.75},{"time":0.8667,"angle":-20.72}]},"neck":{"rotate":[{"angle":18.06},{"time":0.2,"angle":12.81,"curve":0.25,"c3":0.75},{"time":0.3333,"angle":15.4},{"time":0.4333,"angle":18.06,"curve":0.168,"c2":0.27,"c3":0.75},{"time":0.6667,"angle":12.81,"curve":0.25,"c3":0.75},{"time":0.7667,"angle":15.95},{"time":0.8667,"angle":18.06}]},"head":{"rotate":[{"angle":8.66},{"time":0.2,"angle":3.4,"curve":0.25,"c3":0.75},{"time":0.3333,"angle":5.99},{"time":0.4333,"angle":8.66,"curve":0.168,"c2":0.27,"c3":0.75},{"time":0.6667,"angle":3.4,"curve":0.25,"c3":0.75},{"time":0.7667,"angle":6.55},{"time":0.8667,"angle":8.66}]},"back-foot-tip":{"rotate":[{},{"time":0.1,"angle":-59.01},{"time":0.2,"angle":-99.81},{"time":0.3333,"angle":-28.38},{"time":0.4333,"angle":48.63},{"time":0.5,"angle":0.85},{"time":0.8667}]},"front-thigh":{"rotate":[{"angle":41.32}],"translate":[{"x":15.47,"y":-0.08},{"time":0.1,"x":9.94,"y":-2.81},{"time":0.2,"x":4.34,"y":0.72},{"time":0.3333,"x":0.02,"y":-1.11},{"time":0.4333,"x":-4.26,"y":0.02},{"time":0.5333,"x":1.53,"y":-1.94},{"time":0.6667,"x":8.32,"y":-5.38},{"time":0.7667,"x":6.11,"y":-4.87},{"time":0.8667,"x":15.47,"y":-0.08}]},"rear-thigh":{"rotate":[{"angle":-32.3}],"translate":[{"x":-24.88,"y":0.12},{"time":0.2,"x":-10.72,"y":-1.15},{"time":0.4333,"x":-1.33,"y":0.01},{"time":0.6667,"x":-16.28,"y":0.08},{"time":0.7667,"x":-20.18,"y":0.1},{"time":0.8667,"x":-24.88,"y":0.12}]},"torso2":{"rotate":[{"angle":-5},{"time":0.2,"angle":-15.91,"curve":0.25,"c3":0.75},{"time":0.4333,"angle":-5,"curve":0.136,"c2":0.36,"c3":0.75},{"time":0.6667,"angle":-15.91,"curve":0.25,"c3":0.75},{"time":0.8667,"angle":-5}]},"torso3":{"rotate":[{"angle":-4.68},{"time":0.2,"angle":-19.5,"curve":0.25,"c3":0.75},{"time":0.4333,"angle":-4.68,"curve":0.136,"c2":0.36,"c3":0.75},{"time":0.6667,"angle":-19.5,"curve":0.25,"c3":0.75},{"time":0.8667,"angle":-4.68}]},"front-upper-arm":{"rotate":[{"angle":-9.51},{"time":0.1,"angle":-19.4,"curve":0.482,"c3":0.645,"c4":1.09},{"time":0.4667,"angle":-303.86,"curve":0.25,"c3":0.75},{"time":0.8667,"angle":-9.51}],"translate":[{"x":1.46,"y":3.5},{"time":0.2,"x":-5.92,"y":4.93},{"time":0.4333,"x":-5.24,"y":-4.38},{"time":0.6667,"x":-7.69,"y":-8.62},{"time":0.8667,"x":1.46,"y":3.5}]},"front-bracer":{"rotate":[{"angle":1.95},{"time":0.1,"angle":18.36,"curve":0.246,"c3":0.645,"c4":1.09},{"time":0.4667,"angle":24.83,"curve":0.25,"c3":0.75},{"time":0.8667,"angle":1.95}]},"front-fist":{"rotate":[{"angle":-28.48},{"time":0.1,"angle":-27,"curve":0.25,"c3":0.645,"c4":1.09},{"time":0.3333,"angle":-33.94,"curve":0.407,"c2":-0.01,"c3":0.75},{"time":0.5333,"angle":3.77,"curve":0.25,"c3":0.75},{"time":0.8667,"angle":-28.48}]},"rear-upper-arm":{"rotate":[{"angle":28.28,"curve":0.25,"c3":0.75},{"time":0.1333,"angle":22.94,"curve":0.25,"c3":0.75},{"time":0.4333,"angle":326.34},{"time":0.5667,"angle":312.87,"curve":0.407,"c2":-0.01,"c3":0.75},{"time":0.7,"angle":-6.78,"curve":0.407,"c2":-0.01,"c3":0.75},{"time":0.8667,"angle":28.28}],"translate":[{"x":-0.18,"y":1.45},{"time":0.2,"x":0.72,"y":2.17},{"time":0.4333,"x":16.77,"y":19.95},{"time":0.8667,"x":-0.18,"y":1.45}]},"hair2":{"rotate":[{"angle":18.54},{"time":0.1,"angle":1.97},{"time":0.2,"angle":-5.65},{"time":0.4333,"angle":24.96},{"time":0.6333,"angle":-6.26},{"time":0.8667,"angle":18.54}]},"hair4":{"rotate":[{"angle":1.97},{"time":0.1,"angle":-5.65},{"time":0.3333,"angle":24.96},{"time":0.5333,"angle":-6.26},{"time":0.7667,"angle":18.54},{"time":0.8667,"angle":1.97}]},"rear-bracer":{"rotate":[{"angle":10.06,"curve":0.25,"c3":0.75},{"time":0.1333,"angle":11.68,"curve":0.25,"c3":0.75},{"time":0.4333,"angle":-3.66},{"time":0.5667,"angle":-1.27,"curve":0.407,"c2":-0.01,"c3":0.75},{"time":0.7,"angle":-4.16,"curve":0.407,"c2":-0.01,"c3":0.75},{"time":0.8667,"angle":10.06}]},"gun":{"rotate":[{"angle":-14.67,"curve":0.25,"c3":0.75},{"time":0.2333,"angle":18.91,"curve":0.25,"c3":0.75},{"time":0.4333,"angle":25.77},{"time":0.5667,"angle":12.57,"curve":0.407,"c2":-0.01,"c3":0.75},{"time":0.7,"angle":-8.69,"curve":0.407,"c2":-0.01,"c3":0.75},{"time":0.8667,"angle":-14.67}]},"rear-shin":{"rotate":[{"angle":-5}]},"rear-foot":{"rotate":[{"angle":3.52}]},"aim-constraint-target":{"rotate":[{"angle":-3.19}]},"front-shin":{"rotate":[{"angle":-10.44}]},"front-foot":{"rotate":[{"angle":-0.79}]}},"deform":{"default":{"eye":{"spineboy/eye-indifferent":[{"vertices":[-0.15329,0.70867,-0.15329,0.70867,-0.15329,0.70867,-0.15329,0.70867],"curve":"stepped"},{"time":0.1333,"vertices":[-0.15329,0.70867,-0.15329,0.70867,-0.15329,0.70867,-0.15329,0.70867],"curve":0.25,"c3":0.75},{"time":0.4333,"vertices":[3.92969,-18.23849,3.92969,-18.23849,3.92969,-18.23849,3.92969,-18.23849],"curve":"stepped"},{"time":0.6,"vertices":[3.92969,-18.23849,3.92969,-18.23849,3.92969,-18.23849,3.92969,-18.23849],"curve":0.25,"c3":0.75},{"time":0.8667,"vertices":[-0.15329,0.70867,-0.15329,0.70867,-0.15329,0.70867,-0.15329,0.70867]}]},"goggles":{"spineboy/goggles":[{"vertices":[-0.08838,0.23265,-0.04028,0.11366,-1.15417,5.38666,0,0,0,0,0,0,0,0,0,0,-1.08234,5.00095,-1.86743,8.62226,-0.82043,3.80259,-0.0957,0.27988,-0.11633,0.3275,-5.76245,7.7601,-3.05988,10.76797,-2.18188,10.12057,-4.92511,9.4566,0,0,0,0,0.65329,-3.03143,0.55997,-2.59837,-1.40085,6.49587,-0.16394,0.42825,-0.14651,0.37986,-0.13544,0.3509,0.70346,4.33792,0.69421,4.35548,0.6937,4.35027,0.70926,4.30774,-0.90088,4.0234,-0.04678,0.13842,-1.0719,4.96331,-1.06213,4.94196,-1.04929,4.90511,-0.04034,0.1196,-0.07523,0.20426,-0.10211,0.26987,-0.12775,0.33331,-0.13965,0.36775,-0.14172,0.37709,-0.13071,0.35703,-0.11951,0.33389,-0.14542,0.39532,-0.16638,0.43952,-1.40085,6.49587,-0.82043,3.80259,-0.82043,3.80259,-0.82043,3.80259,-1.82895,8.48514,-1.82895,8.48514,-1.82895,8.48514],"curve":"stepped"},{"time":0.1333,"vertices":[-0.08838,0.23265,-0.04028,0.11366,-1.15417,5.38666,0,0,0,0,0,0,0,0,0,0,-1.08234,5.00095,-1.86743,8.62226,-0.82043,3.80259,-0.0957,0.27988,-0.11633,0.3275,-5.76245,7.7601,-3.05988,10.76797,-2.18188,10.12057,-4.92511,9.4566,0,0,0,0,0.65329,-3.03143,0.55997,-2.59837,-1.40085,6.49587,-0.16394,0.42825,-0.14651,0.37986,-0.13544,0.3509,0.70346,4.33792,0.69421,4.35548,0.6937,4.35027,0.70926,4.30774,-0.90088,4.0234,-0.04678,0.13842,-1.0719,4.96331,-1.06213,4.94196,-1.04929,4.90511,-0.04034,0.1196,-0.07523,0.20426,-0.10211,0.26987,-0.12775,0.33331,-0.13965,0.36775,-0.14172,0.37709,-0.13071,0.35703,-0.11951,0.33389,-0.14542,0.39532,-0.16638,0.43952,-1.40085,6.49587,-0.82043,3.80259,-0.82043,3.80259,-0.82043,3.80259,-1.82895,8.48514,-1.82895,8.48514,-1.82895,8.48514],"curve":0.25,"c3":0.75},{"time":0.4333,"vertices":[0.72116,-13.02245,-0.08078,-15.10208,0.5881,-9.07231,0,0,-0.95035,2.12869,-4.29099,4.74269,-0.37964,-1.86985,-0.50616,-2.49316,2.05878,-14.16591,3.97546,-18.45124,0.47232,-2.1937,1.59595,-7.39851,2.05963,-9.54877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.58685,-11.98995,2.93106,-13.58876,2.71149,-12.57045,1.12061,-13.71136,1.3736,-14.88384,1.45294,-15.25188,1.16116,-13.89926,0.95001,-14.08721,-0.25418,-8.50095,-0.4256,-2.86804,0.72946,-6.04102,2.13202,-10.56477,-0.57986,-18.66593,-1.0582,-18.68787,1.98853,-9.21902,2.82358,-21.9123,3.45761,-16.03436,3.45532,-16.02369,2.42819,-11.25721,2.14264,-9.93373,2.06396,-9.5659,2.59061,-12.00682,0,0,0.47232,-2.1937,0.47232,-2.1937,0.47232,-2.1937,0.47232,-2.1937,0.47232,-2.1937,-0.53992,-7.17996],"curve":"stepped"},{"time":0.6,"vertices":[0.72116,-13.02245,-0.08078,-15.10208,0.5881,-9.07231,0,0,-0.95035,2.12869,-4.29099,4.74269,-0.37964,-1.86985,-0.50616,-2.49316,2.05878,-14.16591,3.97546,-18.45124,0.47232,-2.1937,1.59595,-7.39851,2.05963,-9.54877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.58685,-11.98995,2.93106,-13.58876,2.71149,-12.57045,1.12061,-13.71136,1.3736,-14.88384,1.45294,-15.25188,1.16116,-13.89926,0.95001,-14.08721,-0.25418,-8.50095,-0.4256,-2.86804,0.72946,-6.04102,2.13202,-10.56477,-0.57986,-18.66593,-1.0582,-18.68787,1.98853,-9.21902,2.82358,-21.9123,3.45761,-16.03436,3.45532,-16.02369,2.42819,-11.25721,2.14264,-9.93373,2.06396,-9.5659,2.59061,-12.00682,0,0,0.47232,-2.1937,0.47232,-2.1937,0.47232,-2.1937,0.47232,-2.1937,0.47232,-2.1937,-0.53992,-7.17996],"curve":0.25,"c3":0.75},{"time":0.8667,"vertices":[-0.08838,0.23265,-0.04028,0.11366,-1.15417,5.38666,0,0,0,0,0,0,0,0,0,0,-1.08234,5.00095,-1.86743,8.62226,-0.82043,3.80259,-0.0957,0.27988,-0.11633,0.3275,-5.76245,7.7601,-3.05988,10.76797,-2.18188,10.12057,-4.92511,9.4566,0,0,0,0,0.65329,-3.03143,0.55997,-2.59837,-1.40085,6.49587,-0.16394,0.42825,-0.14651,0.37986,-0.13544,0.3509,0.70346,4.33792,0.69421,4.35548,0.6937,4.35027,0.70926,4.30774,-0.90088,4.0234,-0.04678,0.13842,-1.0719,4.96331,-1.06213,4.94196,-1.04929,4.90511,-0.04034,0.1196,-0.07523,0.20426,-0.10211,0.26987,-0.12775,0.33331,-0.13965,0.36775,-0.14172,0.37709,-0.13071,0.35703,-0.11951,0.33389,-0.14542,0.39532,-0.16638,0.43952,-1.40085,6.49587,-0.82043,3.80259,-0.82043,3.80259,-0.82043,3.80259,-1.82895,8.48514,-1.82895,8.48514,-1.82895,8.48514]}]},"head":{"spineboy/head":[{"offset":8,"vertices":[2.09991,9.25076,8.45337,4.30371,-3.35175,8.87419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.81555,0.98518,1.01535,8.62647,-2.70273,4.09556,-4.48743,7.13697,-4.76981,3.34322,0,0,-2.25769,-4.31037,0,0,0,0,-0.45578,2.11445,-0.45578,2.11445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-6.13202,7.95453,2.22333,9.79501,8.95061,4.55695,-3.54895,9.39622,-6.13202,7.95453,-3.54895,9.39622,-3.54895,9.39622,8.95061,4.55695,0,0,3.18365,15.68383,14.26176,7.26074,-5.65479,14.97183,3.18365,15.68383,0,0,0,0,1.99811,9.84312,-6.13202,7.95453,-3.54895,9.39622,0,0,0,0,2.3309,11.48366,0,0,0,0,0,0,2.66449,13.12421,0,0,-3.14777,14.58548,-2.86661,13.27987,-2.55057,11.81706,-2.17331,10.06675,-1.96667,9.10786,-2.01523,9.33308,-2.29977,10.65304,-2.63971,12.23277,-3.05856,14.172,0,0,0,0,0,0,0,0,-0.59756,2.77132,-1.96329,9.10585,-2.16217,10.02965],"curve":"stepped"},{"time":0.1333,"offset":8,"vertices":[2.09991,9.25076,8.45337,4.30371,-3.35175,8.87419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.81555,0.98518,1.01535,8.62647,-2.70273,4.09556,-4.48743,7.13697,-4.76981,3.34322,0,0,-2.25769,-4.31037,0,0,0,0,-0.45578,2.11445,-0.45578,2.11445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-6.13202,7.95453,2.22333,9.79501,8.95061,4.55695,-3.54895,9.39622,-6.13202,7.95453,-3.54895,9.39622,-3.54895,9.39622,8.95061,4.55695,0,0,3.18365,15.68383,14.26176,7.26074,-5.65479,14.97183,3.18365,15.68383,0,0,0,0,1.99811,9.84312,-6.13202,7.95453,-3.54895,9.39622,0,0,0,0,2.3309,11.48366,0,0,0,0,0,0,2.66449,13.12421,0,0,-3.14777,14.58548,-2.86661,13.27987,-2.55057,11.81706,-2.17331,10.06675,-1.96667,9.10786,-2.01523,9.33308,-2.29977,10.65304,-2.63971,12.23277,-3.05856,14.172,0,0,0,0,0,0,0,0,-0.59756,2.77132,-1.96329,9.10585,-2.16217,10.02965],"curve":0.25,"c3":0.75},{"time":0.4333,"offset":34,"vertices":[3.14838,-14.61261,3.14838,-14.61261,3.14838,-14.61261,0.83426,-3.87112,0,0,0,0,0,0,0,0,-0.45578,2.11445,-0.45578,2.11445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-1.59174,-7.84007,-0.89545,-4.41003,-0.89545,-4.41003,-1.59174,-7.84007,0.55618,-2.58074,0.41714,-1.93558,1.04282,-4.83889],"curve":"stepped"},{"time":0.6,"offset":34,"vertices":[3.14838,-14.61261,3.14838,-14.61261,3.14838,-14.61261,0.83426,-3.87112,0,0,0,0,0,0,0,0,-0.45578,2.11445,-0.45578,2.11445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-0.72369,-5.22679,-1.59174,-7.84007,-0.89545,-4.41003,-0.89545,-4.41003,-1.59174,-7.84007,0.55618,-2.58074,0.41714,-1.93558,1.04282,-4.83889]},{"time":0.8667,"offset":8,"vertices":[2.09991,9.25076,8.45337,4.30371,-3.35175,8.87419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.81555,0.98518,1.01535,8.62647,-2.70273,4.09556,-4.48743,7.13697,-4.76981,3.34322,0,0,-2.25769,-4.31037,0,0,0,0,-0.45578,2.11445,-0.45578,2.11445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-6.13202,7.95453,2.22333,9.79501,8.95061,4.55695,-3.54895,9.39622,-6.13202,7.95453,-3.54895,9.39622,-3.54895,9.39622,8.95061,4.55695,0,0,3.18365,15.68383,14.26176,7.26074,-5.65479,14.97183,3.18365,15.68383,0,0,0,0,1.99811,9.84312,-6.13202,7.95453,-3.54895,9.39622,0,0,0,0,2.3309,11.48366,0,0,0,0,0,0,2.66449,13.12421,0,0,-3.14777,14.58548,-2.86661,13.27987,-2.55057,11.81706,-2.17331,10.06675,-1.96667,9.10786,-2.01523,9.33308,-2.29977,10.65304,-2.63971,12.23277,-3.05856,14.172,0,0,0,0,0,0,0,0,-0.59756,2.77132,-1.96329,9.10585,-2.16217,10.02965]}]},"mouth":{"spineboy/mouth-grind":[{"vertices":[-10.19202,11.7786,-1.60019,14.33763,0.02328,8.88684,-8.56857,6.32779],"curve":"stepped"},{"time":0.1333,"vertices":[-10.19202,11.7786,-1.60019,14.33763,0.02328,8.88684,-8.56857,6.32779],"curve":0.25,"c3":0.75},{"time":0.4333,"vertices":[-1.87524,-8.97547,0.00449,-17.7002,0.00449,-17.7002,-1.87524,-8.97547],"curve":"stepped"},{"time":0.6,"vertices":[-1.87524,-8.97547,0.00449,-17.7002,0.00449,-17.7002,-1.87524,-8.97547],"curve":0.25,"c3":0.75},{"time":0.8667,"vertices":[-10.19202,11.7786,-1.60019,14.33763,0.02328,8.88684,-8.56857,6.32779]}],"spineboy/mouth-smile":[{"vertices":[-6.59216,5.02815,5.28665,-1.62104,2.43057,-7.10703,-6.07846,8.24725],"curve":"stepped"},{"time":0.1333,"vertices":[-6.59216,5.02815,5.28665,-1.62104,2.43057,-7.10703,-6.07846,8.24725],"curve":0.25,"c3":0.75},{"time":0.4333,"vertices":[1.95737,-8.63879,0.58041,-17.27288,1.98795,-27.30994,-8.04211,-23.88625],"curve":"stepped"},{"time":0.6,"vertices":[1.95737,-8.63879,0.58041,-17.27288,1.98795,-27.30994,-8.04211,-23.88625],"curve":0.25,"c3":0.75},{"time":0.8667,"vertices":[-6.59216,5.02815,5.28665,-1.62104,2.43057,-7.10703,-6.07846,8.24725]}]},"torso":{"spineboy/torso":[{"offset":32,"vertices":[0.99754,-8.62222,-4.36671,-11.12821,3.38991,-3.5328,3.68875,-3.22399,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.00336,4.8839,-1.39807,4.78593,0,0,0,0,0,0,0,0,0,0,0,0,0.99754,-8.62222,1.74744,-8.50252,0,0,0,0,0,0,0,0,0.41353,-3.58589,0.72717,-3.5363,-0.58401,5.03633,-1.02026,4.96621,0,0,0,0,0,0,-0.3511,3.02677,-0.61319,2.98462,0.39218,-3.38733,0.68637,-3.34027,0.95636,-3.27316,-1.63116,5.58357]},{"time":0.1,"vertices":[-2.2937,0.83079,-1.87766,0.23508,10.64218,3.4945,8.76065,8.13096,6.81654,-2.65173,7.4079,0.46964,6.52606,4.22304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.46204,-2.67851,-1.00093,-5.80334,0.25089,-5.88366,-0.61595,-3.57126,0.15442,-3.62069,1.01733,-3.47825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.95602,6.51617,-0.21823,8.17005,0.66148,0.04926,0.60684,0.26677,0.45453,0.48326,2.96719,0.85007,2.5141,1.78982,1.42711,0.95876,1.02582,1.37934,0.9938,8.43367,-2.3866,8.1498,4.34331,10.36832,1.32321,11.29527,-2.3905,11.22245,-0.27824,3.32372,-1.36951,3.04126,-2.45068,2.2625,-0.69302,-4.01772,0.17358,-4.07335,1.04111,8.28638,-1.54007,8.31738,3.14871,8.52884,-0.07013,9.53309,0.51686,2.99771,-0.12991,3.03919,0.51686,2.99771,-0.12991,3.03919,4.59116,11.52126,1.17288,12.46493,-2.98672,12.23994,3.95926,5.46152,1.91373,6.46839,-0.23099,-1.33925,0.05792,-1.35778,0.3815,-1.30437,-2.41547,12.32078]},{"time":0.2,"vertices":[-1.21463,-3.20385,0.13651,-3.42358,14.41745,0.02832,13.25629,5.67007,11.94255,-4.91476,12.89688,-0.65636,12.12503,4.44476,0,0,0,0,0,0,0,0,0,0,-0.12337,0.36149,-0.237,0.29979,-0.16426,3.2699,-1.24411,3.02848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9.74475,6.80592,6.30356,10.07764,0.66148,0.04926,0.60684,0.26677,0.45453,0.48326,2.96719,0.85007,2.5141,1.78982,1.42711,0.95876,1.02582,1.37934,0.9938,8.43367,-2.3866,8.1498,3.41957,5.0114,1.55508,5.86423,-0.86441,6.00507,-0.27824,3.32372,-1.36951,3.04126,-2.45068,2.2625,0,0,0,0,1.25369,3.30791,-0.14114,3.53476,5.09421,5.43802,2.55927,6.99835,-0.29503,1.56245,-0.79877,1.37497,0,0,0,0,3.66742,6.16434,1.40475,7.03388,-1.46063,7.02255,3.95926,5.46152,1.91373,6.46839,0,0,0,0,0,0,-1.77957,10.14687]},{"time":0.4333,"offset":4,"vertices":[-1.25909,6.12791,-1.75449,6.0049,-0.72083,6.21444,-1.25909,6.12791,-1.75449,6.0049,-0.72083,6.21444,-1.25909,6.12791,-1.75449,6.0049,-0.72083,6.21444,-1.25909,6.12791,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.74069,-3.60475,1.03217,-3.53232,0.42329,-3.65553,0.74069,-3.60475,1.03217,-3.53232,0.42329,-3.65553,0.74069,-3.60475]},{"time":0.5333,"offset":4,"vertices":[-0.19458,10.61421,-1.69006,10.61533,1.1946,10.40868,-0.19458,10.61421,-1.69006,10.61533,-0.72083,6.21444,-1.25909,6.12791,-1.75449,6.0049,-0.72083,6.21444,-1.25909,6.12791,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.14001,-9.69365,2.7449,-9.38902,-0.58665,-11.38687,1.25098,-11.38506,3.2207,-11.01592,0.42329,-3.65553,0.74069,-3.60475,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.28842,-4.39755,1.237,-4.22984]},{"time":0.6667,"offset":4,"vertices":[-1.25909,6.12791,-1.75449,6.0049,-0.72083,6.21444,-1.25909,6.12791,-1.75449,6.0049,-0.72083,6.21444,-1.25909,6.12791,-1.75449,6.0049,-0.72083,6.21444,-1.25909,6.12791,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.74069,-3.60475,1.03217,-3.53232,0.42329,-3.65553,0.74069,-3.60475,1.03217,-3.53232,0.42329,-3.65553,0.74069,-3.60475]},{"time":0.8667,"offset":32,"vertices":[0.99754,-8.62222,-4.36671,-11.12821,3.38991,-3.5328,3.68875,-3.22399,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.00336,4.8839,-1.39807,4.78593,0,0,0,0,0,0,0,0,0,0,0,0,0.99754,-8.62222,1.74744,-8.50252,0,0,0,0,0,0,0,0,0.41353,-3.58589,0.72717,-3.5363,-0.58401,5.03633,-1.02026,4.96621,0,0,0,0,0,0,-0.3511,3.02677,-0.61319,2.98462,0.39218,-3.38733,0.68637,-3.34027,0.95636,-3.27316,-1.63116,5.58357]}]}}},"events":[{"name":"footstep"},{"time":0.4333,"name":"footstep"}]}}},"stretchyman":{"skeleton":{"hash":"d6vpqYF39ba5zNqinZf1QEygZZU","spine":"3.8.14-beta","x":-140.42,"y":-8.13,"width":340.95,"height":572.1},"bones":[{"name":"root"},{"name":"back leg controller","parent":"root","rotation":14.64,"x":60.8,"y":1.64},{"name":"back leg middle","parent":"root","x":44.69,"y":135.97},{"name":"back leg knee","parent":"back leg middle","rotation":82.72,"x":7.73,"y":41.98},{"name":"hip controller","parent":"root","x":8.81,"y":237.34},{"name":"hip","parent":"hip controller","x":-6.71,"y":20.98},{"name":"back leg","parent":"hip","rotation":-68.28,"x":25.73,"y":-7.23},{"name":"back leg 1","parent":"back leg","length":41,"rotation":-73.16},{"name":"back leg 2","parent":"back leg 1","length":41,"rotation":-4.07,"x":34.57},{"name":"back leg 3","parent":"back leg 1","length":41,"rotation":-5.24,"x":81.79,"y":-2.29},{"name":"back leg 4","parent":"back leg 1","length":41,"rotation":-16.6,"x":121.21,"y":-11.27},{"name":"back leg 5","parent":"back leg 1","length":41,"rotation":-32.36,"x":160.16,"y":-24.86},{"name":"back leg 6","parent":"back leg 1","length":41,"rotation":-30.76,"x":197.04,"y":-39.98},{"name":"back leg 7","parent":"back leg 1","length":41,"rotation":-30.63,"x":233.19,"y":-57.32},{"name":"back leg 12","parent":"back leg 1","length":41,"rotation":-33.79,"x":267.29,"y":-77.39},{"name":"back foot 1","parent":"back leg controller","length":33.24,"rotation":-18.27,"x":0.33,"y":1.22},{"name":"back foot 2","parent":"back foot 1","length":32.29,"rotation":9.67,"x":33.24},{"name":"back foot 3","parent":"back foot 2","length":15.87,"rotation":3.15,"x":32.29},{"name":"head controller","parent":"hip controller","x":11.7,"y":333.26},{"name":"spine","parent":"head controller","length":37.53,"rotation":89.39,"x":-31.53,"y":-164.78},{"name":"front leg","parent":"hip","rotation":-95.55,"x":-19.31,"y":-14.28},{"name":"front leg 1","parent":"front leg","length":37.2,"rotation":-51.2},{"name":"front leg 2","parent":"front leg 1","length":37.2,"rotation":3.45,"x":33.75,"y":0.01},{"name":"front leg 3","parent":"front leg 1","length":37.2,"rotation":-6.12,"x":74.4,"y":-1.08},{"name":"front leg 4","parent":"front leg 1","length":37.2,"rotation":-10.02,"x":111.4,"y":-5.28},{"name":"front leg 5","parent":"front leg 1","length":37.2,"rotation":-28.4,"x":147.76,"y":-14.99},{"name":"front leg 6","parent":"front leg 1","length":37.2,"rotation":-24.33,"x":182.41,"y":-27.57},{"name":"front leg 7","parent":"front leg 1","length":37.2,"rotation":-23,"x":216.44,"y":-42.55},{"name":"front leg 12","parent":"front leg 1","length":37.2,"rotation":-31.81,"x":248.61,"y":-61.03},{"name":"front leg controller","parent":"root","rotation":7.86,"x":-120.95,"y":9.65},{"name":"front leg middle","parent":"root","x":-48.97,"y":149.67},{"name":"front leg knee","parent":"front leg middle","rotation":100.84,"x":-3.74,"y":21.86},{"name":"front foot 1","parent":"front leg controller","length":26.3,"rotation":-28.33,"x":0.99,"y":6.43},{"name":"front foot 2","parent":"front foot 1","length":29.12,"rotation":8.4,"x":26.3},{"name":"front foot 3","parent":"front foot 2","length":23.49,"rotation":6.07,"x":29.12},{"name":"front arm 1","parent":"spine","length":38.33,"rotation":118.58,"x":27.13,"y":4.9},{"name":"front arm 2","parent":"front arm 1","length":35.67,"rotation":-0.44,"x":38.33,"y":0.01},{"name":"front arm 3","parent":"front arm 1","length":32.65,"rotation":14.65,"x":74,"y":0.12},{"name":"front arm 12","parent":"front arm 1","length":29.18,"rotation":17.17,"x":106.58,"y":1.99},{"name":"front arm controller","parent":"root","rotation":81.71,"x":-120.71,"y":280.73},{"name":"front hand","parent":"front arm controller","length":46.32,"rotation":-165.4,"x":22,"y":5.23},{"name":"front arm middle","parent":"root","rotation":89.39,"x":-72.23,"y":371.96},{"name":"front arm elbow","parent":"front arm middle","rotation":-87.21,"x":-4.2,"y":-43.67},{"name":"head","parent":"spine","length":89.06,"rotation":-14.37,"x":62.91,"y":-10.66},{"name":"back arm 1","parent":"spine","length":18.9,"rotation":-88.81,"x":16,"y":-4.59},{"name":"back arm 2","parent":"back arm 1","length":18.9,"rotation":-0.38,"x":19.41},{"name":"back arm 3","parent":"back arm 1","length":18.9,"rotation":-0.88,"x":38.75,"y":-0.13},{"name":"back arm 12","parent":"back arm 1","length":18.9,"rotation":-1.09,"x":135.76,"y":-1.26},{"name":"back arm controller","parent":"root","rotation":-127.84,"x":170.18,"y":402.84},{"name":"back hand","parent":"back arm controller","length":37.41,"rotation":176.22,"x":20.94,"y":3.33},{"name":"back arm middle","parent":"root","rotation":89.39,"x":77.24,"y":409.27},{"name":"back arm elbow","parent":"back arm middle","rotation":-93.49,"x":0.32,"y":-49.63},{"name":"back arm 6","parent":"back arm 1","length":18.9,"rotation":-0.15,"x":97.05,"y":-1.14},{"name":"back arm 4","parent":"back arm 1","length":18.9,"rotation":-1.23,"x":58.19,"y":-0.43},{"name":"back arm 7","parent":"back arm 1","length":18.9,"rotation":-0.19,"x":116.41,"y":-1.19},{"name":"back arm 5","parent":"back arm 1","length":18.9,"rotation":-0.88,"x":77.6,"y":-0.84},{"name":"front arm 4","parent":"front arm 1","length":32.65,"rotation":14.65,"x":74,"y":0.12},{"name":"front arm 5","parent":"front arm 1","length":32.65,"rotation":14.65,"x":74,"y":0.12},{"name":"front arm 6","parent":"front arm 1","length":32.65,"rotation":14.65,"x":74,"y":0.12},{"name":"front arm 7","parent":"front arm 1","length":32.65,"rotation":14.65,"x":74,"y":0.12},{"name":"back arm 8","parent":"back arm 1","length":18.9,"rotation":-0.19,"x":116.41,"y":-1.19},{"name":"back arm 9","parent":"back arm 1","length":18.9,"rotation":-0.19,"x":116.41,"y":-1.19},{"name":"back arm 10","parent":"back arm 1","length":18.9,"rotation":-0.19,"x":116.41,"y":-1.19},{"name":"back arm 11","parent":"back arm 1","length":18.9,"rotation":-0.19,"x":116.41,"y":-1.19},{"name":"front arm 8","parent":"front arm 1","length":32.65,"rotation":14.65,"x":74,"y":0.12},{"name":"front arm 9","parent":"front arm 1","length":32.65,"rotation":14.65,"x":74,"y":0.12},{"name":"front arm 10","parent":"front arm 1","length":32.65,"rotation":14.65,"x":74,"y":0.12},{"name":"front arm 11","parent":"front arm 1","length":32.65,"rotation":14.65,"x":74,"y":0.12},{"name":"back leg 8","parent":"back leg 1","length":41,"rotation":-30.63,"x":233.19,"y":-57.32},{"name":"back leg 9","parent":"back leg 1","length":41,"rotation":-30.63,"x":233.19,"y":-57.32},{"name":"back leg 10","parent":"back leg 1","length":41,"rotation":-30.63,"x":233.19,"y":-57.32},{"name":"back leg 11","parent":"back leg 1","length":41,"rotation":-30.63,"x":233.19,"y":-57.32},{"name":"front leg 8","parent":"front leg 1","length":37.2,"rotation":-23,"x":216.44,"y":-42.55},{"name":"front leg 9","parent":"front leg 1","length":37.2,"rotation":-23,"x":216.44,"y":-42.55},{"name":"front leg 10","parent":"front leg 1","length":37.2,"rotation":-23,"x":216.44,"y":-42.55},{"name":"front leg 11","parent":"front leg 1","length":37.2,"rotation":-23,"x":216.44,"y":-42.55}],"slots":[{"name":"back arm","bone":"root","attachment":"stretchyman/back arm"},{"name":"back leg","bone":"root","attachment":"stretchyman/back leg"},{"name":"body","bone":"root","attachment":"stretchyman/body"},{"name":"front arm","bone":"root","attachment":"stretchyman/front arm"},{"name":"back leg path","bone":"hip","attachment":"back leg path"},{"name":"head","bone":"head","attachment":"stretchyman/head"},{"name":"front leg path","bone":"hip","attachment":"front leg path"},{"name":"front arm path","bone":"spine","attachment":"front arm path"},{"name":"back arm path","bone":"spine","attachment":"back arm path"}],"ik":[{"name":"back arm middle look at hand","order":2,"bones":["back arm middle"],"target":"back arm controller"},{"name":"back leg middle look at foot","bones":["back leg middle"],"target":"back leg controller"},{"name":"front arm middle look at hand","order":3,"bones":["front arm middle"],"target":"front arm controller"},{"name":"front leg middle look at foot","order":1,"bones":["front leg middle"],"target":"front leg controller"}],"transform":[{"name":"back foot to knee rotate","order":8,"bones":["back foot 1"],"target":"back leg knee","rotateMix":0.75,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"front foot to knee rotate","order":9,"bones":["front foot 1"],"target":"front leg knee","rotateMix":0.75,"translateMix":0,"scaleMix":0,"shearMix":0}],"path":[{"name":"back arm path","order":4,"bones":["back arm 1","back arm 2","back arm 3","back arm 4","back arm 5","back arm 6","back arm 7","back arm 8","back arm 9","back arm 10","back arm 11","back arm 12"],"target":"back arm path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.0833},{"name":"back leg path","order":5,"bones":["back leg 1","back leg 2","back leg 3","back leg 4","back leg 5","back leg 6","back leg 7","back leg 8","back leg 9","back leg 10","back leg 11","back leg 12"],"target":"back leg path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.083},{"name":"front arm path","order":7,"bones":["front arm 1","front arm 2","front arm 3","front arm 4","front arm 5","front arm 6","front arm 7","front arm 8","front arm 9","front arm 10","front arm 11","front arm 12"],"target":"front arm path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.0833},{"name":"front leg path","order":6,"bones":["front leg 1","front leg 2","front leg 3","front leg 4","front leg 5","front leg 6","front leg 7","front leg 8","front leg 9","front leg 10","front leg 11","front leg 12"],"target":"front leg path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.0833}],"skins":[{"name":"default","attachments":{"back arm":{"stretchyman/back arm":{"type":"mesh","uvs":[0.53017,0.73775,0.43887,0.70087,0.39442,0.66763,0.38731,0.60829,0.39554,0.55018,0.43301,0.49305,0.49497,0.43504,0.54946,0.37384,0.64009,0.3236,0.7557,0.26483,0.83884,0.21068,0.92658,0.15101,0.97607,0.09921,0.95355,0.01377,0.70016,0.00808,0.59106,0.07665,0.52029,0.14344,0.44176,0.19842,0.36305,0.26103,0.28288,0.3219,0.22422,0.39023,0.18999,0.45861,0.16162,0.53006,0.1474,0.60088,0.16432,0.67197,0.17414,0.72094,0.15687,0.76931,0.13186,0.83934,0,0.89316,0.16206,0.98357,0.458,1,0.70563,0.95343,0.72979,0.86087,0.62711,0.77691,0.76115,0.11693,0.57963,0.23016,0.42893,0.35052,0.31337,0.47538,0.28192,0.54005,0.27446,0.6699,0.30494,0.74847,0.84251,0.05802,0.66796,0.17398,0.49619,0.28955,0.36334,0.41199,0.26707,0.60451],"triangles":[40,1,0,26,25,40,27,26,40,33,27,40,33,40,0,31,33,32,30,29,27,28,27,29,33,30,27,30,33,31,41,14,13,41,13,12,34,14,41,15,14,34,11,41,12,34,41,11,25,24,39,1,25,39,1,39,2,40,25,1,39,45,3,39,3,2,24,23,45,24,45,39,45,22,38,23,22,45,3,38,4,45,38,3,38,21,37,22,21,38,4,37,5,38,37,4,37,20,44,21,20,37,5,44,6,37,44,5,44,19,36,20,19,44,6,36,7,44,36,6,36,18,43,19,18,36,7,43,8,36,43,7,43,17,35,18,17,43,8,35,9,43,35,8,35,16,42,17,16,35,9,42,10,35,42,9,42,15,34,16,15,42,10,34,11,42,34,10],"vertices":[2,47,20.43,17.54,0.34266,49,3.57,19.08,0.65734,3,63,28.31,11.58,0.11158,47,10.69,10.93,0.54511,49,-4.69,12.21,0.34331,4,62,36.23,9.54,0.12553,63,18.84,8.13,0.36105,47,1,8.11,0.43006,49,-11.93,10.19,0.08336,4,61,36.47,10.04,0.10217,62,19.13,8.52,0.39836,63,1.59,8.45,0.36105,47,-16.02,9.48,0.13842,4,60,37.44,9.82,0.10986,61,19.82,8.5,0.36731,62,2.35,8.36,0.39836,63,-15.16,9.6,0.12447,4,54,38.38,10.14,0.09886,60,20.52,9.21,0.386,61,2.91,9.06,0.36731,62,-14.34,10.31,0.14783,4,52,38.7,10.99,0.1064,54,20.57,10.35,0.36746,60,2.65,10.25,0.386,61,-14.72,11.32,0.14014,4,55,38.64,10.66,0.10637,52,20.41,9.88,0.37503,54,2.15,9.83,0.36746,60,-15.88,10.58,0.15114,4,53,39.61,13.02,0.1241,55,21.6,12.15,0.35727,52,3.62,12.03,0.37503,54,-14.56,12.51,0.1436,4,46,37.24,14.9,0.1221,53,18.93,14.55,0.377,55,1.24,14.52,0.35727,52,-16.41,15.18,0.14363,5,45,39.37,13.76,0.09747,46,19.38,14.5,0.32634,53,1.04,14.49,0.377,55,-16.49,15.19,0.1259,19,-1.75,-46.74,0.0733,5,44,40.57,12.25,0.034,45,19.86,13.8,0.18747,46,-0.09,13.82,0.29134,53,-18.47,14.17,0.1279,19,11.48,-37.62,0.3593,4,44,24.43,11.95,0.124,45,4.16,12.37,0.18747,46,-15.54,11.86,0.07924,19,21.04,-27.87,0.6093,2,44,2.67,3.9,0.128,19,23.58,-7.31,0.872,4,44,11.31,-13.51,0.152,45,-6.42,-13.87,0.19234,46,-24.44,-14.79,0.07353,19,7.06,-4.47,0.58213,5,44,33.19,-15.72,0.062,45,16.73,-14.56,0.19234,46,-1.06,-14.62,0.28864,53,-20.53,-14.24,0.12489,19,-4.31,-14.19,0.33213,5,45,37.26,-12.86,0.10234,46,19.3,-12.16,0.32364,53,-0.06,-12.16,0.39103,55,-19.8,-11.37,0.10886,19,-15.83,-24.15,0.07413,4,46,37.13,-11.39,0.12511,53,17.8,-11.72,0.39103,55,-2.06,-11.66,0.37136,52,-21.71,-10.84,0.11251,4,53,37.61,-10.56,0.14114,55,17.66,-11.3,0.37136,52,-2.11,-11.23,0.37726,54,-21.8,-10.55,0.11024,4,55,36.99,-11.18,0.13749,52,17.09,-11.86,0.37726,54,-2.58,-11.79,0.38221,60,-22.68,-10.77,0.10303,4,52,37.41,-10.49,0.13976,54,17.91,-11.07,0.38221,60,-2.04,-11,0.38095,61,-22.38,-9.5,0.09709,4,54,37.56,-8.68,0.14697,60,17.91,-9.53,0.38095,61,-2.33,-9.41,0.36617,62,-22.65,-7.6,0.10592,4,60,38.54,-7.49,0.15291,61,18.48,-8.8,0.36617,62,-1.9,-8.71,0.37049,63,-22.13,-7.03,0.11043,4,61,38.85,-7.22,0.14408,62,18.58,-8.81,0.37049,63,-1.73,-8.73,0.36393,47,-21.45,-7.43,0.1215,4,62,39.16,-6.74,0.13957,63,19.13,-8.26,0.36393,47,-0.8,-8.23,0.43553,49,-15.81,-5.9,0.06097,3,63,33.79,-6.73,0.1285,47,13.68,-7.56,0.53053,49,-5.13,-7.54,0.34098,2,47,26.6,-6.56,0.36738,49,5.75,-8.52,0.63262,2,47,44.05,-6.21,0.05335,49,20.59,-10.22,0.94665,1,49,30.87,-20.21,1,1,49,49.93,-9.89,1,1,49,54.77,11.12,1,1,49,46.67,29.58,1,1,49,28.15,32.66,1,2,47,29.51,23.24,0.05102,49,10.97,26.26,0.94898,3,45,18.98,0.06,0.38641,46,0.08,0.07,0.32369,19,3.34,-26.39,0.2899,2,53,18.95,0.07,0.52032,55,0.05,0.06,0.47968,2,52,18.95,0.06,0.49488,54,0.06,0.06,0.50512,2,60,19.03,-0.05,0.51703,61,0.13,-0.06,0.48297,2,61,19.07,0.08,0.49501,62,0.18,0.07,0.50499,2,63,18.84,-0.26,0.48677,47,-0.09,-0.26,0.51323,2,47,22.11,1.95,0.30584,49,2.77,1.6,0.69416,3,44,18.84,-0.22,0.248,45,-0.02,-0.23,0.12,19,14.48,-16.65,0.632,2,46,19.18,0.14,0.49629,53,0.29,0.13,0.50371,2,55,19.15,-0.16,0.49182,52,0.23,-0.17,0.50818,2,54,18.93,-0.15,0.49443,60,0.02,-0.15,0.50557,2,62,18.83,-0.17,0.52014,63,-0.09,-0.16,0.47986],"hull":34}},"back arm path":{"back arm path":{"type":"path","lengths":[108.28,200.59,407.9],"vertexCount":9,"vertices":[1,51,-41.28,-123.89,1,1,44,-0.85,4.67,1,1,44,27.52,2.26,1,1,51,-5.14,-34.78,1,1,51,0.08,-0.02,1,1,51,6.58,41.4,1,1,49,-22.38,6.17,1,1,49,-0.51,0.25,1,1,51,-36.52,158.33,1]}},"back leg":{"stretchyman/back leg":{"type":"mesh","uvs":[0.76701,0.06381,0.79431,0.15768,0.79249,0.2378,0.78521,0.31278,0.76872,0.39078,0.75145,0.46559,0.70946,0.54093,0.64771,0.61395,0.58596,0.68618,0.5104,0.75723,0.43383,0.83024,0.34491,0.89238,0.52028,0.91568,0.82656,0.94598,1,0.96776,0.79345,1,0.4699,0.99628,0,0.97632,0.04783,0.93473,0.12252,0.86976,0.223,0.80262,0.30575,0.73447,0.39046,0.66632,0.45745,0.5967,0.51852,0.52607,0.52443,0.45793,0.50079,0.38553,0.47124,0.3149,0.43775,0.24551,0.40228,0.1755,0.36879,0.0993,0.37864,0.02285,0.61777,0,0.55092,0.09546,0.58777,0.16803,0.62111,0.24072,0.6454,0.31339,0.65143,0.38667,0.63788,0.45973,0.60352,0.53251,0.55429,0.60465,0.49017,0.67484,0.41163,0.74387,0.32551,0.81181,0.24103,0.87992,0.16228,0.9496,0.489,0.96913,0.8126,0.97098],"triangles":[33,31,32,34,32,0,47,13,14,15,47,14,47,12,13,15,12,47,46,12,15,16,46,15,46,11,12,16,11,46,16,45,11,16,17,45,45,19,44,18,19,45,45,44,11,17,18,45,19,20,44,44,20,43,11,43,10,44,43,11,43,21,42,20,21,43,10,42,9,43,42,10,42,22,41,21,22,42,9,41,8,42,41,9,41,23,40,22,23,41,8,40,7,41,40,8,40,24,39,23,24,40,7,39,6,40,39,7,39,25,38,24,25,39,6,38,5,39,38,6,25,26,37,38,25,37,5,37,4,38,37,5,26,27,36,4,37,36,26,36,37,3,4,36,2,36,35,3,36,2,27,28,35,27,35,36,1,35,34,2,35,1,28,29,34,28,34,35,30,31,33,34,33,32,34,0,1,29,30,33,29,33,34],"vertices":[3,7,-11.44,22.9,0.33714,8,-53.17,22.52,0.15886,5,44.5,7.54,0.504,4,7,40.99,20.93,0.33714,8,-0.47,20.93,0.31609,9,-43,19.89,0.17611,5,53.52,-20.73,0.17067,4,7,85.06,16.76,0.17447,8,43.88,17.08,0.31609,9,1.58,17.13,0.34285,10,-41.5,15.46,0.16659,4,8,85.23,12.92,0.15723,9,43.19,13.99,0.34285,10,0.4,14.05,0.3135,11,-42.71,11.96,0.18642,4,9,86.32,9.84,0.16674,10,43.94,11.68,0.3135,11,1.12,11.79,0.33999,12,-41.23,9.78,0.17976,4,10,85.7,9.27,0.14691,11,43.18,11.47,0.33999,12,0.42,11.54,0.33195,13,-41.67,10.01,0.18115,4,11,85.79,8.7,0.15357,12,42.99,10.87,0.33195,13,0.75,10.92,0.34812,68,-42,9.3,0.16636,4,12,84.78,8.13,0.15219,13,42.63,9.74,0.34812,68,0.46,9.78,0.29187,69,-41.36,8.28,0.20782,4,13,84.08,8.5,0.16698,68,42.5,10.18,0.29187,69,0.34,10.22,0.33785,70,-41.35,9.39,0.20331,4,68,84.57,9.16,0.12551,69,42.22,10.73,0.33785,70,0.56,10.74,0.34113,71,-40.37,10.88,0.19551,5,69,85.2,11.35,0.13003,70,43.55,12.23,0.34113,71,2.68,12.22,0.334,14,-37.31,12.97,0.12137,15,19.61,42.34,0.07347,5,70,81.69,11.29,0.13782,71,40.84,11.15,0.334,14,0.51,11.15,0.12137,15,14.56,21.27,0.22101,16,-14.85,24.11,0.1858,5,71,41.72,30.19,0.1385,14,2.54,30.15,0.12137,15,33.17,17.26,0.22101,16,2.83,17.03,0.35109,17,-28.48,18.62,0.16804,3,15,65.05,13.51,0.14753,16,33.63,7.98,0.35109,17,1.78,7.89,0.50137,2,16,51.09,1.88,0.39537,17,18.88,0.85,0.60463,3,15,65,-3.99,0.19114,16,30.65,-9.26,0.37227,17,-2.15,-9.16,0.43659,4,14,45.93,33.8,0.19478,15,33.03,-7.77,0.32969,16,-1.51,-7.63,0.37227,17,-34.16,-5.76,0.10326,3,14,64.71,-12.5,0.46356,15,-14.35,-11.39,0.39425,16,-48.83,-3.23,0.14219,3,71,82.06,-11.59,0.12895,14,40.07,-12.39,0.66794,15,-12.12,2.5,0.20311,4,70,84.43,-12.03,0.14236,71,43.34,-12.18,0.31992,14,1.59,-12.21,0.47316,15,-8.64,24.19,0.06456,4,69,83.17,-11.46,0.14858,70,42.93,-10.61,0.32712,71,1.82,-10.61,0.31992,14,-39.54,-9.84,0.20438,4,68,82.26,-12.51,0.15983,69,42.38,-10.98,0.32209,70,2.06,-10.95,0.32712,71,-39.08,-10.82,0.19097,4,13,80.44,-11.93,0.18186,68,41.31,-10.35,0.3113,69,1.47,-10.32,0.32209,70,-38.93,-11.11,0.18475,4,12,80.12,-11.49,0.19417,13,40.22,-10.02,0.32103,68,0.43,-10.02,0.3113,69,-39.15,-11.48,0.1735,4,11,79.47,-10.64,0.17517,12,39.66,-8.71,0.35233,13,-0.34,-8.74,0.32103,68,-40.71,-10.35,0.15147,4,10,80.26,-13.35,0.17729,11,41.26,-11.33,0.33121,12,1.98,-11.28,0.35233,13,-37.54,-12.7,0.13917,4,9,78.62,-16.64,0.17757,10,39.64,-15.05,0.33305,11,0.99,-15.06,0.33121,12,-37.3,-16.97,0.15817,4,8,78.45,-18.24,0.16933,9,38.78,-17.31,0.34157,10,-0.01,-17.36,0.33305,11,-38.24,-19.34,0.15604,4,7,79.58,-18.66,0.14993,8,39.15,-18.38,0.35273,9,-0.45,-18.41,0.34157,10,-39,-20.07,0.15576,4,7,40.05,-18.68,0.3126,8,-0.54,-18.68,0.35273,9,-40.06,-19.68,0.164,5,17.76,-37.54,0.17067,3,7,-2.83,-18.19,0.3126,8,-43.61,-18.51,0.1834,5,8.2,-12.41,0.504,2,7,-44.65,-13.42,0.16267,5,3.48,12.36,0.83733,2,7,-50.67,11.34,0.16267,5,25.15,24.83,0.83733,1,7,0.06,-0.01,1,2,7,41.03,0.01,0.5,8,0.03,0.01,0.5,2,8,41.15,-0.02,0.5,9,0.15,-0.01,0.5,2,9,41.04,0.07,0.5,10,0.03,0.07,0.5,2,10,41.05,0,0.5,11,0.05,0,0.5,2,11,41.09,0.02,0.5,12,0.08,0.03,0.5,2,12,41.05,0,0.5,13,0.05,0,0.5,2,13,40.99,-0.02,0.5,68,-0.01,-0.02,0.5,2,68,41.04,-0.02,0.5,69,0.04,-0.02,0.5,2,69,41.05,-0.01,0.5,70,0.05,0,0.5,2,70,41.02,0,0.5,71,0.02,0,0.5,2,71,41.02,0.04,0.5,14,0.02,0.04,0.5,2,14,41.22,-0.02,0.5,15,0.01,-0.01,0.5,2,15,33.26,-0.02,0.5,16,0.02,-0.02,0.5,2,16,32.39,0,0.5,17,0.1,0,0.5],"hull":33}},"back leg path":{"back leg path":{"type":"path","lengths":[133.53,267.82,995.36],"vertexCount":9,"vertices":[1,3,-65.29,207.72,1,1,6,-0.02,0,1,1,6,50.52,-5.06,1,1,3,-0.98,46.4,1,1,3,0.21,-0.06,1,1,3,1.1,-35.35,1,1,15,6.84,53.14,1,1,15,-0.11,-1.05,1,1,3,-137.18,-707.64,1]}},"body":{"stretchyman/body":{"type":"mesh","uvs":[0.55635,0.02043,0.65961,0.05828,0.78353,0.10942,0.9268,0.18014,1,0.27921,0.94745,0.35262,0.79643,0.39087,0.65316,0.40577,0.64799,0.42912,0.6338,0.47704,0.60829,0.52782,0.594,0.57651,0.56651,0.62555,0.51999,0.67858,0.46832,0.72899,0.41453,0.77558,0.36177,0.82427,0.3101,0.87091,0.24084,0.92475,0.3123,0.93332,0.50467,0.95184,0.7674,0.97207,0.48818,1,0.25027,0.99241,0,0.98442,0.09942,0.89971,0.16783,0.85381,0.22591,0.80791,0.28012,0.76201,0.34079,0.7153,0.3808,0.66859,0.38855,0.62148,0.38209,0.57204,0.37693,0.5205,0.37564,0.47057,0.35886,0.42191,0.33046,0.3591,0.32917,0.30994,0.36402,0.27531,0.39371,0.22578,0.35241,0.16699,0.24011,0.07599,0.31497,0,0.48278,0,0.57283,0.31157,0.58881,0.21587,0.54359,0.14553,0.46038,0.07393,0.40659,0.01552,0.4722,0.02759,0.82602,0.34702,0.51372,0.37373,0.40906,0.3598,0.51212,0.42463,0.51114,0.47426,0.50788,0.52479,0.49778,0.57456,0.47561,0.62419,0.44427,0.67305,0.40245,0.72186,0.34978,0.76912,0.29024,0.81545,0.22733,0.86138,0.16635,0.9078,0.1112,0.95496,0.29197,0.96842,0.49773,0.97461],"triangles":[22,66,21,22,65,66,65,19,66,66,19,20,65,18,19,66,20,21,65,64,18,23,65,22,24,64,23,23,64,65,24,25,64,64,63,18,64,25,63,63,62,18,63,26,62,63,25,26,18,62,17,62,61,17,17,61,16,26,27,62,62,27,61,61,60,16,16,60,15,27,28,61,61,28,60,60,59,15,15,59,14,28,29,60,60,29,59,59,58,14,14,58,13,29,30,59,59,30,58,58,57,13,13,57,12,30,31,58,58,31,57,57,56,12,12,56,11,56,57,32,57,31,32,56,55,11,11,55,10,55,56,33,56,32,33,55,54,10,55,33,54,10,54,9,33,34,54,8,9,53,9,54,53,54,34,53,8,53,7,51,52,44,52,36,37,35,52,53,53,51,7,53,52,51,35,36,52,34,35,53,51,44,7,52,37,38,6,7,50,6,50,5,50,7,44,5,50,4,50,44,4,44,3,4,44,45,3,38,39,44,44,39,45,39,46,45,45,2,3,52,38,44,39,40,46,45,46,2,40,47,46,40,41,47,46,1,2,46,47,1,41,48,47,41,42,48,47,0,1,0,49,43,0,47,49,47,48,49,49,48,43,48,42,43],"vertices":[2,19,18.79,-20.15,0.92926,5,9.33,139.89,0.07074,2,19,-0.05,-29.91,0.82617,5,18.89,120.95,0.17383,2,19,-22.16,-42.49,0.60329,5,31.23,98.71,0.39671,2,19,-55.01,-60.01,0.34807,5,48.4,65.67,0.65193,3,19,-100.37,-65.79,0.12882,5,53.69,20.25,0.84044,21,-72.3,67.56,0.03074,4,19,-132.59,-54.87,0.03658,5,42.43,-11.85,0.85117,21,-17.79,60.82,0.07688,22,-53.73,61.35,0.03538,4,5,19.26,-26.53,0.69639,21,11.18,39.88,0.16943,22,-25.13,40.13,0.1196,23,-63.11,39.7,0.01459,5,5,-1.59,-30.86,0.42916,21,22.87,19.83,0.25279,22,-13.9,19.96,0.25016,23,-51.5,19.61,0.05501,24,-90.16,17.02,0.01287,6,5,-3.55,-41.26,0.15191,21,40.14,19.31,0.29827,22,3.47,19.28,0.35204,23,-34.11,19.05,0.13322,24,-72.74,16.97,0.05343,25,-111.54,12.37,0.01114,7,5,-8.07,-62.53,0.04251,21,75.6,17.76,0.17636,22,39.11,17.38,0.29786,23,1.59,17.39,0.23457,24,-36.94,16.34,0.16786,25,-75.77,13.23,0.065,26,-112.91,8.65,0.01583,7,21,113.23,14.64,0.06939,22,76.89,13.89,0.18489,23,39.46,14.16,0.25334,24,1.14,14.21,0.257,25,-37.55,12.68,0.15084,26,-75.13,9.64,0.06672,27,-114.18,4.76,0.01782,8,21,149.27,13.08,0.01437,22,113.11,11.97,0.07544,23,75.73,12.49,0.17757,24,37.52,13.59,0.26092,25,-1.21,13.58,0.22854,26,-39.37,12,0.15265,27,-78.45,8.66,0.0715,72,-116.44,4,0.019,8,22,149.6,8.2,0.01759,23,112.31,8.97,0.07906,24,74.34,11.13,0.18687,25,35.79,12.65,0.23527,26,-2.76,12.56,0.22613,27,-41.67,10.8,0.16104,72,-79.94,7.61,0.07616,73,-117.57,4.2,0.01789,8,23,151.93,2.79,0.01987,24,114.41,6.11,0.08485,25,76.31,9.3,0.17064,26,37.59,10.85,0.22951,27,-0.86,10.84,0.23296,72,-39.19,9.29,0.17147,73,-77.01,7.05,0.07189,74,-114.31,5.7,0.01881,8,24,152.61,0.28,0.02256,25,115.05,5.07,0.07808,26,76.28,8.19,0.16279,27,38.39,9.86,0.23317,72,0.12,9.89,0.24791,73,-37.81,8.8,0.16201,74,-75.2,7.9,0.07506,75,-112.52,8.72,0.01842,8,25,151.05,0.32,0.0212,26,112.31,4.9,0.07348,27,75.03,8.14,0.16238,72,36.9,9.64,0.2503,73,-1.06,9.62,0.23811,74,-38.52,9.16,0.1724,75,-75.72,9.71,0.06666,28,-111.64,12.31,0.01547,9,26,149.81,1.94,0.01921,27,113.12,6.8,0.07263,72,75.09,9.83,0.17415,73,37.06,10.93,0.23845,74,-0.49,10.92,0.24707,75,-37.57,11.2,0.14108,28,-73.62,12.91,0.04524,32,20.39,65.71,0.03194,33,3.76,65.87,0.03023,9,27,149.67,5.37,0.01874,72,111.74,9.87,0.07869,73,73.66,12.03,0.16656,74,36.03,12.46,0.24687,75,-0.92,12.47,0.18825,28,-37.12,13.34,0.0899,32,18.33,43.51,0.08784,33,-1.53,44.2,0.10455,34,-25.8,47.19,0.01859,8,72,154.79,8.64,0.01915,73,116.75,12.05,0.07256,74,79.07,12.99,0.16815,75,42.23,12.69,0.1776,28,5.78,12.56,0.10421,32,14.64,17.55,0.1517,33,-8.98,19.06,0.21382,34,-35.86,22.98,0.09282,7,73,116.48,22.85,0.01822,74,78.46,23.78,0.07467,75,41.82,23.48,0.10317,28,6.05,23.36,0.08976,32,25.34,16.18,0.16085,33,1.42,16.14,0.31021,34,-25.84,18.98,0.24312,6,74,73.68,52.02,0.01862,75,37.59,51.75,0.03759,28,3.6,51.71,0.0451,32,53.68,14.5,0.14626,33,29.2,10.34,0.34738,34,1.18,10.28,0.40506,4,28,-3.25,89.63,0.02875,32,91.84,14.43,0.1567,33,66.94,4.7,0.34271,34,38.11,0.68,0.47185,5,75,72.18,57.88,0.01681,28,38.37,57.03,0.06048,32,56.6,-7.2,0.23887,33,28.92,-11.55,0.29301,34,-1.41,-11.46,0.39082,6,74,124.42,26.18,0.01752,75,87.94,25.54,0.06996,28,52.02,24.36,0.14119,32,23.2,-11.84,0.3191,33,-4.79,-11.27,0.22583,34,-34.91,-7.62,0.2264,7,73,178.68,-9.39,0.01823,74,141.62,-7.71,0.07136,75,104.52,-8.47,0.15945,28,66.39,-10.01,0.21528,32,-11.93,-16.73,0.31738,33,-40.27,-10.97,0.13293,34,-70.15,-3.57,0.08539,8,72,147.99,-13.91,0.0175,73,111.72,-10.67,0.07422,74,74.78,-9.78,0.16153,75,37.48,-10.06,0.23482,28,-0.35,-10.06,0.22208,32,-7.42,23.79,0.21773,33,-29.89,28.46,0.056,34,-55.67,34.54,0.01612,8,27,146.18,-16.02,0.01862,72,110.57,-11.61,0.0709,73,74.18,-9.46,0.16798,74,37.24,-9.02,0.23549,75,-0.14,-9.02,0.23753,28,-37.67,-8.15,0.1616,32,-2.99,46.24,0.09619,33,-22.22,50.02,0.01169,8,26,144.15,-18.3,0.01916,27,109.76,-13.63,0.07375,72,73.94,-10.69,0.16022,73,37.53,-9.61,0.24483,74,0.64,-9.6,0.23678,75,-36.84,-9.33,0.16757,28,-74.18,-7.62,0.07409,32,0.03,68.34,0.02362,8,25,145.14,-19.27,0.01791,26,108.59,-14.89,0.0766,27,73.58,-11.76,0.16537,72,37.6,-10.28,0.23296,73,1.21,-10.26,0.24615,74,-35.62,-10.68,0.16542,75,-73.2,-10.15,0.07538,28,-110.37,-7.6,0.02022,8,24,144.32,-18.06,0.02019,25,108.85,-13.57,0.07057,26,72.17,-10.66,0.17233,27,36.43,-9.12,0.23764,72,0.21,-9.13,0.23388,73,-36.22,-10.2,0.17193,74,-73.01,-11.06,0.07395,75,-110.69,-10.26,0.01952,8,23,145.02,-16.9,0.02073,24,109.04,-13.77,0.07687,25,73.19,-10.75,0.15799,26,36.67,-9.28,0.24887,27,0.54,-9.28,0.23689,72,-35.61,-10.73,0.16297,73,-71.86,-12.84,0.07685,74,-108.52,-14.13,0.01881,8,22,146.77,-16.9,0.02051,23,109.94,-16.15,0.07872,24,73.94,-14.03,0.17005,25,38.22,-12.47,0.22644,26,2.35,-12.4,0.24885,27,-33.65,-13.88,0.16315,72,-69.25,-16.69,0.07274,73,-104.99,-19.77,0.01954,8,21,146.97,-16.84,0.02227,22,110.01,-17.91,0.07631,23,73.19,-17.41,0.17397,24,37.32,-16.35,0.23915,25,1.96,-16.31,0.22538,26,-33.02,-17.69,0.17224,27,-68.63,-20.68,0.07226,72,-103.46,-24.89,0.01841,7,21,108.93,-18.05,0.09539,22,71.7,-18.75,0.17531,23,34.86,-18.51,0.24273,24,-0.88,-18.56,0.23683,25,-35.89,-20.09,0.15531,26,-69.96,-22.99,0.07654,27,-105.2,-27.57,0.01788,7,5,-43.88,-55.37,0.03424,21,72.05,-18.69,0.23372,22,34.58,-19.03,0.26562,23,-2.27,-19.05,0.22234,24,-37.94,-20.17,0.156,25,-72.67,-23.24,0.06895,26,-105.91,-27.61,0.01913,7,19,-154.91,30.98,0.01226,5,-43.66,-33.25,0.12176,21,36.19,-21.51,0.37053,22,-1.59,-21.5,0.30756,23,-38.41,-21.76,0.12484,24,-73.83,-23.93,0.05004,25,-108.03,-28.48,0.01301,6,19,-126.26,31.94,0.05208,5,-44.31,-4.59,0.32578,21,-10.07,-26.1,0.3791,22,-48.26,-25.63,0.1807,23,-85.03,-26.22,0.04999,24,-120.07,-29.72,0.01235,5,19,-104.14,29.76,0.11345,5,-41.89,17.5,0.52751,21,-46.38,-26.74,0.27677,22,-84.81,-25.92,0.06988,23,-121.6,-26.75,0.01239,4,19,-89.1,23.21,0.19264,5,-35.18,32.47,0.68024,21,-72.13,-22.15,0.11605,22,-110.59,-21.07,0.01107,3,19,-67.29,16.67,0.39816,5,-28.41,54.21,0.57484,21,-108.85,-18.43,0.027,2,19,-40.25,19.63,0.64481,5,-31.08,81.29,0.35519,2,19,2.37,27.95,0.86374,5,-38.94,123.99,0.13626,2,19,35.4,13.8,0.96191,5,-24.44,156.87,0.03809,2,19,32.85,-9.82,0.98071,5,-0.85,154.06,0.01929,3,19,-108.53,-4.32,0.09208,5,-7.86,12.75,0.85702,21,-46.33,7.62,0.05091,2,19,-65.81,-11.11,0.36155,5,-0.62,55.4,0.63845,2,19,-33.47,-8.2,0.63047,5,-3.18,87.77,0.36953,2,19,-0.01,-3.03,0.88188,5,-7.99,121.28,0.11812,1,19,27.05,1.7,1,1,19,20.58,-6.91,1,3,19,-128.25,-38.12,0.03724,5,25.72,-7.34,0.91494,21,-21.35,43.65,0.04782,2,5,-19.42,-14.18,0.296,21,-0.14,-0.13,0.704,2,5,-33.34,-6.2,0.296,21,-9.93,-15.01,0.704,5,5,-22.34,-37,0.09481,21,37.46,0.12,0.38844,22,0.27,0.12,0.38653,23,-36.95,-0.14,0.105,24,-74.08,-2.28,0.02522,2,22,37.17,0.08,0.5,23,-0.03,0.08,0.5,2,23,37.58,-0.02,0.5,24,0.38,-0.01,0.5,2,24,37.49,0,0.5,25,0.29,0.01,0.5,2,25,37.56,-0.14,0.5,26,0.37,-0.12,0.5,2,26,37.02,-0.11,0.5,27,-0.17,-0.12,0.5,2,27,37.33,0.05,0.5,72,0.12,0.06,0.5,2,72,37.29,0.05,0.5,73,0.09,0.06,0.5,2,73,37.16,0.08,0.5,74,-0.04,0.08,0.5,2,74,37.02,0.04,0.5,75,-0.18,0.04,0.5,2,75,37.13,0.06,0.5,28,-0.06,0.06,0.5,4,28,37.08,0.11,0.17361,32,0.13,-0.06,0.38889,33,-25.9,3.75,0.32639,34,-54.31,9.55,0.11111,4,28,32.05,26.14,0.14352,32,26.33,0.09,0.35648,33,0.05,0.08,0.35648,34,-28.9,3.15,0.14352,4,28,19.97,54.33,0.11111,32,55.18,4.27,0.32639,33,29.19,0,0.38889,34,0.08,0,0.17361],"hull":44}},"front arm":{"stretchyman/front arm":{"type":"mesh","uvs":[0.03445,0.76037,0.04297,0.70138,0.06894,0.63543,0.09445,0.57765,0.13469,0.51895,0.18074,0.46645,0.23581,0.41905,0.29668,0.36706,0.35644,0.32779,0.41541,0.28546,0.47283,0.24333,0.52559,0.20373,0.55547,0.1745,0.58369,0.14465,0.61963,0.10668,0.66544,0.04594,0.72505,0.00474,0.79271,0.06115,0.78866,0.1191,0.81522,0.16438,0.87132,0.24607,1,0.37685,0.87297,0.39241,0.74717,0.35931,0.68521,0.30636,0.60013,0.34936,0.52749,0.38469,0.45124,0.42059,0.38601,0.45715,0.33443,0.49162,0.28675,0.52688,0.24328,0.56896,0.20356,0.614,0.16977,0.66053,0.15699,0.70793,0.16427,0.75108,0.34176,0.86549,0.25452,1,0.02907,0.98251,0,0.91628,0.09749,0.70387,0.11723,0.64863,0.14198,0.59398,0.17489,0.54144,0.21811,0.49203,0.27019,0.44701,0.33129,0.40637,0.39749,0.36932,0.4658,0.33426,0.53407,0.29914,0.60113,0.26302,0.66615,0.22517,0.68687,0.16737,0.70722,0.12321,0.71701,0.05182,0.73182,0.19898,0.76162,0.26627,0.82574,0.31367,0.69948,0.29524,0.68471,0.26602,0.07855,0.75978],"triangles":[18,54,17,14,15,53,54,15,16,54,16,17,53,54,18,53,15,54,25,50,24,11,12,50,21,22,20,55,18,19,55,53,18,50,59,58,23,57,22,22,57,20,24,58,23,23,56,57,23,58,56,57,56,20,24,50,58,58,59,56,59,55,56,56,19,20,56,55,19,51,52,55,52,53,55,52,14,53,59,51,55,52,13,14,51,13,52,35,37,38,38,60,35,37,35,36,60,38,39,50,51,59,50,12,51,12,13,51,25,49,50,10,11,49,49,11,50,26,48,49,48,10,49,48,9,10,26,49,25,27,47,48,47,9,48,47,8,9,27,48,26,28,46,47,46,8,47,28,47,27,46,7,8,45,7,46,45,46,29,29,46,28,45,6,7,44,45,30,44,6,45,30,45,29,44,5,6,43,5,44,43,44,31,31,44,30,43,4,5,42,43,32,42,4,43,32,43,31,3,4,42,41,3,42,41,42,33,33,42,32,2,3,41,40,41,34,34,41,33,40,2,41,40,34,35,60,1,40,60,39,0,60,40,35,0,1,60,1,2,40],"vertices":[3,38,32.88,-6.21,0.42436,67,69.76,-6.04,0.12834,40,-5.62,-5.18,0.44729,4,38,2.82,-7.85,0.42436,67,36.07,-7.83,0.27062,66,69.82,-7.07,0.19106,40,-17.5,0.33,0.11396,4,38,-31.98,-7.36,0.20499,67,-3.02,-7.52,0.27062,66,30.7,-7.57,0.31339,65,65.21,-6.34,0.211,4,67,-37.51,-6.86,0.14228,66,-3.87,-7.64,0.31339,65,30.81,-7.75,0.31767,64,65.81,-6.17,0.22666,4,66,-40.51,-5.71,0.12234,65,-6.18,-7.25,0.31767,64,28.95,-7.49,0.36224,59,63.83,-5.89,0.19776,4,65,-40.7,-5.46,0.10667,64,-5.9,-7.42,0.36224,59,29.5,-7.66,0.3351,58,64.56,-6.15,0.19599,4,64,-39.87,-5.65,0.13558,59,-4.58,-7.71,0.3351,58,30.63,-7.87,0.29944,57,64.88,-6.88,0.22988,4,59,-42.07,-7.7,0.13734,58,-6.71,-9.71,0.29944,57,28.03,-9.89,0.36649,56,61.57,-9.46,0.19672,4,58,-38.57,-9.68,0.10345,57,-3.75,-10.86,0.36649,56,30.01,-10.91,0.33463,37,62.89,-10.87,0.19542,5,57,-36.45,-12.43,0.13661,56,-2.4,-12.96,0.33463,37,30.36,-12.96,0.31586,36,67.92,-13.22,0.16663,35,109.5,-14.15,0.04626,4,56,-34.28,-15.12,0.13791,37,-1.64,-15.16,0.31586,36,32.94,-15.15,0.29384,35,71.8,-15.59,0.25239,4,37,-31.36,-17.34,0.12044,36,0.44,-17.07,0.36445,35,36.76,-17.06,0.29931,19,36.18,23.76,0.2158,4,36,-20.67,-19.32,0.19782,35,13.9,-19.02,0.3344,19,41.54,18.13,0.42379,43,-27.84,22.58,0.04399,4,36,-41.5,-21.83,0.07062,35,-8.71,-21.24,0.12827,19,47.09,12.7,0.62128,43,-21.11,18.7,0.17983,3,35,-37.48,-24.07,0.08136,19,54.15,5.79,0.40548,43,-12.56,13.76,0.51316,2,19,65.81,-3.61,0.19749,43,1.07,7.55,0.80251,2,19,72.82,-14.03,0.05601,43,10.44,-0.8,0.94399,2,19,58.52,-20.89,0.28296,43,-1.71,-11.01,0.71704,2,19,46.15,-17.54,0.6163,43,-14.53,-10.83,0.3837,3,5,8.49,156.66,0.04,19,35.54,-19.12,0.85362,43,-24.41,-14.99,0.10638,2,5,12.3,137.23,0.128,19,16.16,-23.14,0.872,2,5,23.88,104.83,0.256,19,-16.11,-35.08,0.744,2,5,5.16,105.68,0.256,19,-15.47,-16.35,0.744,4,36,-8.27,29.89,0.06461,35,33.03,29.98,0.04665,5,-10.93,116.96,0.128,19,-4.36,-0.13,0.76073,5,37,-42.4,14.79,0.14171,36,-9.59,15.14,0.25624,35,29.86,15.26,0.04665,5,-17.01,130.4,0.04,19,9.01,6.09,0.5154,5,56,-34.24,14.71,0.14311,37,-1.87,14.67,0.33193,36,34.54,14.68,0.25624,35,77.07,14.19,0.04665,19,2.42,20.2,0.22207,4,57,-31.57,14.8,0.16318,56,-0.28,14.32,0.31327,37,32.24,14.32,0.33193,36,71.67,14.05,0.19163,5,59,-53.11,17.28,0.03722,58,-25.95,14.53,0.17174,57,3.68,13.66,0.28755,56,34.95,13.71,0.31327,37,67.63,13.75,0.19022,4,59,-21.63,14.7,0.22193,58,6.27,13.52,0.32036,57,36.02,13.67,0.28755,56,67.16,14.19,0.17016,4,64,-21.94,14.71,0.18367,59,5.79,13.4,0.37159,58,34,13.58,0.32036,57,63.67,14.61,0.12437,4,65,-23.65,13.82,0.17874,64,4.58,12.54,0.33826,59,32.68,12.67,0.33437,58,61.02,14.17,0.14863,4,66,-24.52,12.52,0.18844,65,4.95,11.5,0.32364,64,33.73,11.65,0.33826,59,61.7,13.33,0.14966,4,67,-26.66,10.39,0.1746,66,4.54,9.81,0.34717,65,34.59,9.94,0.32364,64,63.66,11.56,0.15459,4,38,-26.85,8.12,0.14,67,2.26,7.98,0.36793,66,33.78,8.02,0.34717,65,64.18,9.29,0.1449,4,38,-2.26,8.6,0.30666,67,29.85,8.59,0.36793,66,61.28,9.2,0.15873,40,-10.62,15.43,0.16668,3,38,18.73,11.71,0.30666,67,53.32,11.81,0.19333,40,-1.28,13.25,0.50001,2,38,62.81,42.35,0.16666,40,31.13,29.09,0.83334,1,40,54.95,7.25,1,1,40,40.41,-22.28,1,2,38,113.19,-3.56,0.21938,40,25.2,-21.38,0.78062,2,38,0.07,-0.01,0.5,67,32.74,-0.01,0.5,2,67,0.17,-0.04,0.5,66,32.82,-0.03,0.5,2,66,0.06,-0.01,0.5,65,32.72,0,0.5,2,65,0.06,0.03,0.5,64,32.71,0.03,0.5,2,64,-0.06,0.09,0.5,59,32.56,0.08,0.5,2,59,0.24,0.01,0.5,58,32.89,0.02,0.5,2,58,0.11,-0.02,0.5,57,32.77,-0.02,0.5,2,57,-0.03,-0.02,0.5,56,32.63,-0.02,0.5,2,56,0.04,0.03,0.5,37,32.69,0.03,0.5,2,37,-0.05,0.02,0.5,36,35.62,0.02,0.5,3,36,-0.05,0.01,0.34692,35,38.27,0.01,0.31998,19,21.01,15.91,0.3331,1,35,-0.02,0,1,1,19,38.94,-0.81,1,2,19,47.83,-5.81,0.72816,43,-15.81,0.95,0.27184,1,43,0.01,0.03,1,1,19,30.71,-5.66,1,1,19,15.25,-6.65,1,2,5,2.46,124.18,0.12,19,3.01,-13.45,0.88,3,36,-18.54,14.55,0.34692,35,20.21,14.8,0.31998,19,10.96,3.54,0.3331,3,36,-25.44,8.2,0.12833,35,12.06,8.54,0.32704,19,17.73,4.23,0.54464,1,38,29.35,0,1],"hull":40}},"front arm path":{"front arm path":{"type":"path","lengths":[105.75,197.58,550.24],"vertexCount":9,"vertices":[1,42,-127.59,-218.46,1,1,35,-0.01,0,1,1,35,29.83,-11.11,1,1,42,-4.25,-39.48,1,1,42,-0.07,-0.13,1,1,42,3.11,32.19,1,1,40,-26.91,-0.12,1,1,40,-3.62,0.89,1,1,42,-93.58,192.14,1]}},"front leg path":{"front leg path":{"type":"path","lengths":[102.13,260.65,684.98],"vertexCount":9,"vertices":[1,32,-29.83,373.24,1,1,20,-0.01,0,1,1,20,49.21,-2.65,1,1,31,1.23,43.17,1,1,31,0.72,-0.06,1,1,31,0.27,-45.27,1,1,32,4.57,52.6,1,1,32,0,-0.23,1,1,32,-18.22,-194.7,1]}},"head":{"stretchyman/head":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[1,43,11.04,-65.9,1,1,43,-17.41,16.32,1,1,43,78.99,49.66,1,1,43,107.43,-32.55,1],"hull":4}}}}],"animations":{"idle":{"bones":{"back hand":{"translate":[{"x":1.79,"y":6.36,"curve":0.37,"c2":0.63,"c3":0.708},{"time":0.3333,"x":2.4,"y":7.88},{"time":2.0667,"x":1.78,"y":-0.7,"curve":0.25,"c3":0.75},{"time":4.4,"x":-1.21,"y":1.56,"curve":0.528,"c2":0.18,"c3":0.789,"c4":0.46},{"time":6.5667,"x":-4.49,"y":-9.15,"curve":0.243,"c3":0.692,"c4":0.76},{"time":8.3333,"x":1.79,"y":6.36}]},"front hand":{"translate":[{"x":4.5,"y":-1.41,"curve":0.37,"c2":0.63,"c3":0.709},{"time":0.3333,"x":7.07,"y":-1.88},{"time":3.1,"x":-5.89,"y":2.35,"curve":0.528,"c2":0.18,"c3":0.789,"c4":0.46},{"time":6.6,"x":-20.54,"y":3.15,"curve":0.243,"c3":0.691,"c4":0.76},{"time":8.3333,"x":4.5,"y":-1.41}]},"hip":{"rotate":[{"curve":0.381,"c2":0.54,"c3":0.518,"c4":0.71},{"time":2.2333,"angle":-18.59,"curve":0.429,"c2":0.26,"c3":0.686,"c4":0.51},{"time":8.3333}],"translate":[{"curve":0.381,"c2":0.54,"c3":0.518,"c4":0.71},{"time":3.3333,"x":13.86,"y":-26.54,"curve":0.429,"c2":0.26,"c3":0.686,"c4":0.51},{"time":8.3333}]},"spine":{"rotate":[{"angle":-0.58,"curve":0.337,"c2":0.27,"c3":0.655,"c4":0.59},{"time":0.5667,"curve":0.25,"c3":0.75},{"time":4,"angle":-9.12,"curve":0.381,"c2":0.54,"c3":0.518,"c4":0.71},{"time":7.0667,"angle":-1.04},{"time":8.3333,"angle":-0.58}],"translate":[{"x":0.63,"y":-0.36,"curve":0.265,"c2":0.34,"c3":0.567,"c4":0.64},{"time":0.5667,"curve":0.429,"c2":0.26,"c3":0.686,"c4":0.51},{"time":3.4667,"x":10.78,"y":-5.78,"curve":0.25,"c3":0.75},{"time":7.5667,"x":2.1,"y":-1.21},{"time":8.3333,"x":0.63,"y":-0.36}]},"head":{"rotate":[{"angle":1.52,"curve":0.381,"c2":0.54,"c3":0.518,"c4":0.71},{"time":4.7333,"angle":17.54,"curve":0.429,"c2":0.26,"c3":0.686,"c4":0.51},{"time":8.3333,"angle":1.52}],"translate":[{"curve":0.381,"c2":0.54,"c3":0.518,"c4":0.71},{"time":4.7333,"x":-3.32,"y":-0.53,"curve":0.429,"c2":0.26,"c3":0.686,"c4":0.51},{"time":8.3333}]}}}}},"tank":{"skeleton":{"hash":"FUGfFexOb7bUqxP/dw7Q5wifJkQ","spine":"3.8.14-beta","x":-5852.65,"y":-348.5,"width":7202.61,"height":1298.88},"bones":[{"name":"root"},{"name":"tankRoot","parent":"root","y":146.79},{"name":"tankTreads","parent":"tankRoot","y":48.35},{"name":"wheel-bigRoot1","parent":"tankTreads","x":-549.6,"y":14.4},{"name":"wheel-big1","parent":"wheel-bigRoot1","x":-0.02},{"name":"wheel-midCenter","parent":"tankRoot","y":-66.21},{"name":"wheel-midRoot1","parent":"wheel-midCenter","x":-410.57},{"name":"wheel-mid1","parent":"wheel-midRoot1"},{"name":"wheel-smallRoot1","parent":"tankTreads","x":-337.39,"y":109.43},{"name":"wheel-small1","parent":"wheel-smallRoot1"},{"name":"wheel-bigRoot2","parent":"tankTreads","x":547.34,"y":14.4},{"name":"wheel-big2","parent":"wheel-bigRoot2"},{"name":"wheel-midRoot2","parent":"wheel-midCenter","x":-246.95},{"name":"wheel-mid2","parent":"wheel-midRoot2"},{"name":"wheel-midRoot3","parent":"wheel-midCenter","x":-82.73},{"name":"wheel-mid3","parent":"wheel-midRoot3"},{"name":"wheel-midRoot4","parent":"wheel-midCenter","x":80.89},{"name":"wheel-mid4","parent":"wheel-midRoot4"},{"name":"wheel-midRoot5","parent":"wheel-midCenter","x":244.51},{"name":"wheel-mid5","parent":"wheel-midRoot5"},{"name":"wheel-midRoot6","parent":"wheel-midCenter","x":408.74},{"name":"wheel-mid6","parent":"wheel-midRoot6"},{"name":"wheel-smallRoot2","parent":"tankTreads","x":0.09,"y":109.43},{"name":"wheel-small2","parent":"wheel-smallRoot2"},{"name":"wheel-smallRoot3","parent":"tankTreads","x":334.69,"y":109.43},{"name":"wheel-small3","parent":"wheel-smallRoot3"},{"name":"tread","parent":"tankRoot","length":82,"rotation":180,"x":-22.9,"y":213.86,"scaleX":0.9933},{"name":"tread2","parent":"tread","length":82,"x":82},{"name":"tread3","parent":"tread","length":82,"rotation":-8.91,"x":163.01,"y":-12.61},{"name":"tread4","parent":"tread","length":82,"rotation":-29.27,"x":234.55,"y":-52.43},{"name":"tread5","parent":"tread","length":82,"rotation":-45.26,"x":292.26,"y":-110.28},{"name":"tread6","parent":"tread","length":82,"rotation":-15.29,"x":371.36,"y":-131.76},{"name":"tread7","parent":"tread","length":82,"rotation":-5.49,"x":452.98,"y":-139.55},{"name":"tread8","parent":"tread","length":82,"rotation":-24.99,"x":527.31,"y":-173.95},{"name":"tread9","parent":"tread","length":82,"rotation":-5.44,"x":608.94,"y":-181.68},{"name":"tread10","parent":"tread","length":82,"rotation":48.85,"x":662.9,"y":-120.35},{"name":"tread11","parent":"tread","length":82,"rotation":97.99,"x":651.5,"y":-39.69},{"name":"tread12","parent":"tread","length":82,"rotation":113.79,"x":618.43,"y":34.83},{"name":"tread13","parent":"tread","length":82,"rotation":122.96,"x":573.82,"y":103.18},{"name":"tread14","parent":"tread","length":82,"rotation":142.01,"x":509.19,"y":153.3},{"name":"tread15","parent":"tread","length":82,"rotation":157.84,"x":433.25,"y":184.02},{"name":"tread16","parent":"tread","length":82,"rotation":157.37,"x":357.56,"y":215.37},{"name":"tread17","parent":"tread","length":82,"rotation":157.29,"x":281.92,"y":246.8},{"name":"tread18","parent":"tread","length":82,"rotation":157.19,"x":206.33,"y":278.38},{"name":"tread19","parent":"tread","length":82,"rotation":157.14,"x":130.77,"y":310.02},{"name":"tread20","parent":"tread","length":82,"rotation":157.34,"x":55.1,"y":341.41},{"name":"tread21","parent":"tread","length":82,"rotation":158.11,"x":-20.99,"y":371.77},{"name":"tread22","parent":"tread","length":82,"rotation":157.99,"x":-97.02,"y":402.28},{"name":"tread23","parent":"tread","length":82,"rotation":157.59,"x":-172.83,"y":433.33},{"name":"tread24","parent":"tread","length":82,"rotation":156.86,"x":-248.23,"y":465.34},{"name":"tread25","parent":"tread","length":82,"rotation":177.94,"x":-330.17,"y":468.27},{"name":"tread26","parent":"tread","length":82,"rotation":-169.55,"x":-410.81,"y":453.5},{"name":"tread27","parent":"tread","length":82,"rotation":-163.86,"x":-489.58,"y":430.86},{"name":"tread28","parent":"tread","length":82,"rotation":-139.13,"x":-551.59,"y":377.57},{"name":"tread29","parent":"tread","length":82,"rotation":-89.04,"x":-550.21,"y":296.14},{"name":"tread30","parent":"tread","length":82,"rotation":-38.99,"x":-486.48,"y":244.89},{"name":"tread31","parent":"tread","length":82,"rotation":-20.04,"x":-409.45,"y":216.98},{"name":"tread32","parent":"tread","length":82,"rotation":-46.24,"x":-352.74,"y":158.15},{"name":"tread33","parent":"tread","length":82,"rotation":-27.95,"x":-280.3,"y":119.98},{"name":"tread34","parent":"tread","length":82,"rotation":10.46,"x":-199.66,"y":134.77},{"name":"tread35","parent":"tread","length":82,"rotation":-17.9,"x":-121.63,"y":109.73},{"name":"treadGravity1","parent":"tankRoot","rotation":180,"x":-175.35,"y":149.31},{"name":"treadGravity2","parent":"tankRoot","rotation":180,"x":177.89,"y":144.78},{"name":"rock","parent":"root","x":-1925.2,"y":33.17},{"name":"tankBody","parent":"tankTreads","y":10},{"name":"guntower","parent":"tankBody","x":-21.72,"y":245.48},{"name":"cannonConnector","parent":"guntower","x":-235.05,"y":96.07},{"name":"cannonTarget","parent":"tankRoot","x":-1486.66,"y":400.17},{"name":"cannon","parent":"cannonConnector","length":946.68,"rotation":180},{"name":"machinegun-mount","parent":"guntower","length":90.98,"rotation":90,"x":-123.73,"y":218.33},{"name":"machineGunTarget","parent":"tankRoot","x":-1474,"y":607.77},{"name":"machinegun","parent":"machinegun-mount","length":208.95,"rotation":90,"x":91.52,"y":-1.03},{"name":"antennaRoot","parent":"guntower","x":164.61,"y":202.53},{"name":"antenna1","parent":"antennaRoot","length":40,"rotation":90,"y":40},{"name":"antenna2","parent":"antenna1","length":42,"x":42},{"name":"antenna3","parent":"antenna2","length":42,"x":42},{"name":"antenna4","parent":"antenna3","length":42,"x":42},{"name":"antenna5","parent":"antenna4","length":42,"x":42},{"name":"antenna6","parent":"antenna5","length":42,"x":42},{"name":"treadCollider1","parent":"wheel-midCenter","x":-329.58,"y":-85.44},{"name":"treadCollider2","parent":"wheel-midCenter","x":-165.95,"y":-85.44},{"name":"treadCollider4","parent":"wheel-midCenter","x":163.56,"y":-85.44},{"name":"treadCollider5","parent":"wheel-midCenter","x":329.12,"y":-85.44},{"name":"treadCollider3","parent":"wheel-midCenter","y":-85.44},{"name":"tread36","parent":"tread","length":82,"rotation":-36.82,"x":-55.99,"y":60.92},{"name":"machinegun-tip","parent":"machinegun","x":210.43,"y":-12.21},{"name":"cannonTip","parent":"cannon","x":946.68}],"slots":[{"name":"rock","bone":"rock","attachment":"tank/rock"},{"name":"ground","bone":"root","attachment":"tank/ground"},{"name":"ground2","bone":"root","attachment":"tank/ground"},{"name":"ground3","bone":"root","attachment":"tank/ground"},{"name":"ground4","bone":"root","attachment":"tank/ground"},{"name":"ground5","bone":"root","attachment":"tank/ground"},{"name":"ground6","bone":"root","attachment":"tank/ground"},{"name":"ground7","bone":"root","attachment":"tank/ground"},{"name":"tankBody-shadow","bone":"tankBody","color":"ffffffb9","attachment":"tank/tankBottom-shadow"},{"name":"bottom","bone":"tankBody","attachment":"tank/tankBottom"},{"name":"tread-inside1","bone":"tread","attachment":"tank/tread-inside"},{"name":"tread-inside53","bone":"tread27","attachment":"tank/tread-inside"},{"name":"tread-inside27","bone":"tread14","attachment":"tank/tread-inside"},{"name":"tread-inside3","bone":"tread2","attachment":"tank/tread-inside"},{"name":"tread-inside55","bone":"tread28","attachment":"tank/tread-inside"},{"name":"tread-inside29","bone":"tread15","attachment":"tank/tread-inside"},{"name":"tread-inside5","bone":"tread3","attachment":"tank/tread-inside"},{"name":"tread-inside57","bone":"tread29","attachment":"tank/tread-inside"},{"name":"tread-inside31","bone":"tread16","attachment":"tank/tread-inside"},{"name":"tread-inside7","bone":"tread4","attachment":"tank/tread-inside"},{"name":"tread-inside59","bone":"tread30","attachment":"tank/tread-inside"},{"name":"tread-inside33","bone":"tread17","attachment":"tank/tread-inside"},{"name":"tread-inside9","bone":"tread5","attachment":"tank/tread-inside"},{"name":"tread-inside61","bone":"tread31","attachment":"tank/tread-inside"},{"name":"tread-inside35","bone":"tread18","attachment":"tank/tread-inside"},{"name":"tread-inside11","bone":"tread6","attachment":"tank/tread-inside"},{"name":"tread-inside63","bone":"tread32","attachment":"tank/tread-inside"},{"name":"tread-inside37","bone":"tread19","attachment":"tank/tread-inside"},{"name":"tread-inside13","bone":"tread7","attachment":"tank/tread-inside"},{"name":"tread-inside65","bone":"tread33","attachment":"tank/tread-inside"},{"name":"tread-inside39","bone":"tread20","attachment":"tank/tread-inside"},{"name":"tread-inside15","bone":"tread8","attachment":"tank/tread-inside"},{"name":"tread-inside67","bone":"tread34","attachment":"tank/tread-inside"},{"name":"tread-inside69","bone":"tread35","attachment":"tank/tread-inside"},{"name":"tread-inside71","bone":"tread36","attachment":"tank/tread-inside"},{"name":"tread-inside41","bone":"tread21","attachment":"tank/tread-inside"},{"name":"tread-inside17","bone":"tread9","attachment":"tank/tread-inside"},{"name":"tread-inside43","bone":"tread22","attachment":"tank/tread-inside"},{"name":"tread-inside19","bone":"tread10","attachment":"tank/tread-inside"},{"name":"tread-inside45","bone":"tread23","attachment":"tank/tread-inside"},{"name":"tread-inside21","bone":"tread11","attachment":"tank/tread-inside"},{"name":"tread-inside47","bone":"tread24","attachment":"tank/tread-inside"},{"name":"tread-inside23","bone":"tread12","attachment":"tank/tread-inside"},{"name":"tread-inside49","bone":"tread25","attachment":"tank/tread-inside"},{"name":"tread-inside25","bone":"tread13","attachment":"tank/tread-inside"},{"name":"tread-inside51","bone":"tread26","attachment":"tank/tread-inside"},{"name":"tread-inside2","bone":"tread","attachment":"tank/tread-inside"},{"name":"tread-inside54","bone":"tread27","attachment":"tank/tread-inside"},{"name":"tread-inside28","bone":"tread14","attachment":"tank/tread-inside"},{"name":"tread-inside4","bone":"tread2","attachment":"tank/tread-inside"},{"name":"tread-inside56","bone":"tread28","attachment":"tank/tread-inside"},{"name":"tread-inside30","bone":"tread15","attachment":"tank/tread-inside"},{"name":"tread-inside6","bone":"tread3","attachment":"tank/tread-inside"},{"name":"tread-inside58","bone":"tread29","attachment":"tank/tread-inside"},{"name":"tread-inside32","bone":"tread16","attachment":"tank/tread-inside"},{"name":"tread-inside8","bone":"tread4","attachment":"tank/tread-inside"},{"name":"tread-inside60","bone":"tread30","attachment":"tank/tread-inside"},{"name":"tread-inside34","bone":"tread17","attachment":"tank/tread-inside"},{"name":"tread-inside10","bone":"tread5","attachment":"tank/tread-inside"},{"name":"tread-inside62","bone":"tread31","attachment":"tank/tread-inside"},{"name":"tread-inside36","bone":"tread18","attachment":"tank/tread-inside"},{"name":"tread-inside12","bone":"tread6","attachment":"tank/tread-inside"},{"name":"tread-inside64","bone":"tread32","attachment":"tank/tread-inside"},{"name":"tread-inside38","bone":"tread19","attachment":"tank/tread-inside"},{"name":"tread-inside14","bone":"tread7","attachment":"tank/tread-inside"},{"name":"tread-inside66","bone":"tread33","attachment":"tank/tread-inside"},{"name":"tread-inside40","bone":"tread20","attachment":"tank/tread-inside"},{"name":"tread-inside16","bone":"tread8","attachment":"tank/tread-inside"},{"name":"tread-inside68","bone":"tread34","attachment":"tank/tread-inside"},{"name":"tread-inside70","bone":"tread35","attachment":"tank/tread-inside"},{"name":"tread-inside72","bone":"tread36","attachment":"tank/tread-inside"},{"name":"tread-inside42","bone":"tread21","attachment":"tank/tread-inside"},{"name":"tread-inside18","bone":"tread9","attachment":"tank/tread-inside"},{"name":"tread-inside44","bone":"tread22","attachment":"tank/tread-inside"},{"name":"tread-inside20","bone":"tread10","attachment":"tank/tread-inside"},{"name":"tread-inside46","bone":"tread23","attachment":"tank/tread-inside"},{"name":"tread-inside22","bone":"tread11","attachment":"tank/tread-inside"},{"name":"tread-inside48","bone":"tread24","attachment":"tank/tread-inside"},{"name":"tread-inside24","bone":"tread12","attachment":"tank/tread-inside"},{"name":"tread-inside50","bone":"tread25","attachment":"tank/tread-inside"},{"name":"tread-inside26","bone":"tread13","attachment":"tank/tread-inside"},{"name":"tread-inside52","bone":"tread26","attachment":"tank/tread-inside"},{"name":"wheel-big","bone":"wheel-big1","color":"dbdbdbff","attachment":"tank/wheel-big"},{"name":"wheel-big2","bone":"wheel-big2","color":"dbdbdbff","attachment":"tank/wheel-big"},{"name":"wheel-mid","bone":"wheel-mid1","attachment":"tank/wheel-mid"},{"name":"wheel-mid2","bone":"wheel-mid2","attachment":"tank/wheel-mid"},{"name":"wheel-mid3","bone":"wheel-mid3","attachment":"tank/wheel-mid"},{"name":"wheel-mid4","bone":"wheel-mid4","attachment":"tank/wheel-mid"},{"name":"wheel-mid5","bone":"wheel-mid5","attachment":"tank/wheel-mid"},{"name":"wheel-mid6","bone":"wheel-mid6","attachment":"tank/wheel-mid"},{"name":"wheel-small","bone":"wheel-small1","attachment":"tank/wheel-small"},{"name":"wheel-small2","bone":"wheel-small2","attachment":"tank/wheel-small"},{"name":"wheel-small3","bone":"wheel-small3","attachment":"tank/wheel-small"},{"name":"wheel-mid-overlay","bone":"wheel-midRoot1","color":"ffffffec","attachment":"tank/wheel-mid-overlay","blend":"multiply"},{"name":"wheel-mid-overlay2","bone":"wheel-midRoot2","color":"ffffffec","attachment":"tank/wheel-mid-overlay","blend":"multiply"},{"name":"wheel-mid-overlay3","bone":"wheel-midRoot3","color":"ffffffec","attachment":"tank/wheel-mid-overlay","blend":"multiply"},{"name":"wheel-mid-overlay4","bone":"wheel-midRoot4","color":"ffffffec","attachment":"tank/wheel-mid-overlay","blend":"multiply"},{"name":"wheel-mid-overlay5","bone":"wheel-midRoot5","color":"ffffffec","attachment":"tank/wheel-mid-overlay","blend":"multiply"},{"name":"wheel-mid-overlay6","bone":"wheel-midRoot6","color":"ffffffec","attachment":"tank/wheel-mid-overlay","blend":"multiply"},{"name":"wheel-big-overlay1","bone":"wheel-bigRoot1","color":"ffffffe9","attachment":"tank/wheel-big-overlay","blend":"multiply"},{"name":"wheel-big-overlay2","bone":"wheel-bigRoot2","color":"ffffffe9","attachment":"tank/wheel-big-overlay","blend":"multiply"},{"name":"treads","bone":"tankRoot","attachment":"treads"},{"name":"tread","bone":"tread","attachment":"tank/tread"},{"name":"tread27","bone":"tread27","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread14","bone":"tread14","attachment":"tank/tread"},{"name":"tread2","bone":"tread2","attachment":"tank/tread"},{"name":"tread28","bone":"tread28","attachment":"tank/tread"},{"name":"tread15","bone":"tread15","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread3","bone":"tread3","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread29","bone":"tread29","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread16","bone":"tread16","attachment":"tank/tread"},{"name":"tread4","bone":"tread4","attachment":"tank/tread"},{"name":"tread30","bone":"tread30","attachment":"tank/tread"},{"name":"tread17","bone":"tread17","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread5","bone":"tread5","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread31","bone":"tread31","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread18","bone":"tread18","attachment":"tank/tread"},{"name":"tread6","bone":"tread6","attachment":"tank/tread"},{"name":"tread32","bone":"tread32","attachment":"tank/tread"},{"name":"tread19","bone":"tread19","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread7","bone":"tread7","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread33","bone":"tread33","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread20","bone":"tread20","attachment":"tank/tread"},{"name":"tread8","bone":"tread8","attachment":"tank/tread"},{"name":"tread34","bone":"tread34","attachment":"tank/tread"},{"name":"tread35","bone":"tread35","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread36","bone":"tread36","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread21","bone":"tread21","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread9","bone":"tread9","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread22","bone":"tread22","attachment":"tank/tread"},{"name":"tread10","bone":"tread10","attachment":"tank/tread"},{"name":"tread23","bone":"tread23","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread11","bone":"tread11","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread24","bone":"tread24","attachment":"tank/tread"},{"name":"tread12","bone":"tread12","attachment":"tank/tread"},{"name":"tread25","bone":"tread25","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread13","bone":"tread13","color":"adc9b8ff","attachment":"tank/tread"},{"name":"tread26","bone":"tread26","attachment":"tank/tread"},{"name":"machinegun","bone":"machinegun","attachment":"tank/machinegun"},{"name":"machinegun-mount","bone":"machinegun-mount","attachment":"tank/machinegun-mount"},{"name":"tankTop","bone":"tankBody","attachment":"tank/tankTop"},{"name":"guntower","bone":"guntower","attachment":"tank/guntower"},{"name":"cannon","bone":"cannon","attachment":"tank/cannon"},{"name":"cannonConnector","bone":"cannonConnector","attachment":"tank/cannonConnector"},{"name":"antenna","bone":"antennaRoot","attachment":"tank/antenna"}],"ik":[{"name":"cannonTarget","bones":["cannon"],"target":"cannonTarget"},{"name":"machineGunTarget","order":1,"bones":["machinegun"],"target":"machineGunTarget","mix":0}],"transform":[{"name":"wheel-big","order":8,"bones":["wheel-big2"],"target":"wheel-big1","rotation":65.6,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"wheel-mid1","order":3,"bones":["wheel-mid2","wheel-mid4"],"target":"wheel-mid1","rotation":93,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"wheel-mid2","order":4,"bones":["wheel-mid3","wheel-mid5"],"target":"wheel-mid1","rotation":-89,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"wheel-mid3","order":5,"bones":["wheel-mid6"],"target":"wheel-mid1","rotation":-152.6,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"wheel-small1","order":6,"bones":["wheel-small2"],"target":"wheel-small1","rotation":87,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"wheel-small2","order":7,"bones":["wheel-small3"],"target":"wheel-small1","rotation":54.9,"translateMix":0,"scaleMix":0,"shearMix":0}],"path":[{"name":"treads","order":2,"bones":["tread","tread2","tread3","tread4","tread5","tread6","tread7","tread8","tread9","tread10","tread11","tread12","tread13","tread14","tread15","tread16","tread17","tread18","tread19","tread20","tread21","tread22","tread23","tread24","tread25","tread26","tread27","tread28","tread29","tread30","tread31","tread32","tread33","tread34","tread35","tread36"],"target":"treads","rotateMode":"chain"}],"skins":[{"name":"default","attachments":{"antenna":{"tank/antenna":{"type":"mesh","uvs":[0.64286,0.07876,0.65354,0.1535,0.66325,0.22138,0.67367,0.29433,0.68383,0.36543,0.6936,0.43374,0.70311,0.5003,0.71311,0.57031,0.72327,0.64139,0.73406,0.71689,0.74441,0.7893,0.75614,0.87141,0.76905,0.94311,1,0.94311,1,1,0,1,0,0.94311,0.20106,0.94311,0.20106,0.87094,0.21461,0.78847,0.22651,0.71607,0.23886,0.64099,0.25036,0.57105,0.26206,0.49983,0.27306,0.43291,0.2843,0.36454,0.29593,0.29382,0.308,0.22038,0.319,0.15345,0.33142,0.07796,0.34423,0,0.63161,0],"triangles":[30,31,0,29,30,0,29,0,1,28,29,1,28,1,2,27,28,2,27,2,3,26,3,4,25,26,4,25,4,5,26,27,3,24,5,6,23,24,6,7,23,6,24,25,5,22,7,8,21,22,8,21,8,9,7,22,23,20,9,10,19,20,10,20,21,9,19,10,11,18,19,11,17,18,11,17,11,12,15,16,17,12,13,14,15,17,12,14,15,12],"vertices":[2,77,65.38,-3.14,0.3125,78,23.38,-3.14,0.6875,2,77,42.73,-3.38,0.66667,78,0.73,-3.38,0.33333,2,76,64.17,-3.59,0.33333,77,22.17,-3.59,0.66667,2,76,42.06,-3.82,0.66667,77,0.06,-3.82,0.33333,2,75,62.52,-4.04,0.33333,76,20.52,-4.04,0.66667,2,75,41.82,-4.26,0.66667,76,-0.18,-4.26,0.33333,2,74,63.65,-4.47,0.33333,75,21.65,-4.47,0.66667,2,74,42.44,-4.69,0.66667,75,0.44,-4.69,0.33333,2,73,62.9,-4.91,0.33333,74,20.9,-4.91,0.66667,2,73,40.03,-5.15,0.66667,74,-1.97,-5.15,0.33333,2,72,5.38,58.09,0.4,73,18.09,-5.38,0.6,1,72,5.64,33.21,1,1,72,5.92,11.48,1,1,72,11,11.48,1,1,72,11,-5.76,1,1,72,-11,-5.76,1,1,72,-11,11.48,1,1,72,-6.58,11.48,1,1,72,-6.58,33.35,1,2,72,-6.28,58.34,0.4,73,18.34,6.28,0.6,2,73,40.27,6.02,0.66667,74,-1.73,6.02,0.33333,2,73,63.03,5.75,0.33333,74,21.03,5.75,0.66667,2,74,42.22,5.49,0.66667,75,0.22,5.49,0.33333,2,74,63.8,5.23,0.33333,75,21.8,5.23,0.66667,2,75,42.07,4.99,0.66667,76,0.07,4.99,0.33333,2,75,62.79,4.75,0.33333,76,20.79,4.75,0.66667,2,76,42.22,4.49,0.66667,77,0.22,4.49,0.33333,2,76,64.47,4.22,0.33333,77,22.47,4.22,0.66667,2,77,42.75,3.98,0.66667,78,0.75,3.98,0.33333,2,77,65.62,3.71,0.3125,78,23.62,3.71,0.6875,1,78,47.24,3.43,1,1,78,47.24,-2.9,1],"hull":32}},"bottom":{"tank/tankBottom":{"x":-16.67,"y":9.89,"width":1285,"height":276}},"cannon":{"tank/cannon":{"x":481.95,"y":-0.03,"rotation":180,"width":931,"height":58}},"cannonConnector":{"tank/cannonConnector":{"type":"mesh","uvs":[1,0.03237,1,0.10603,0.90988,0.32859,0.81975,0.55116,0.72963,0.77373,0.6395,0.9963,0.42157,0.9963,0.20364,0.9963,0,0.85434,0,0.69902,0.02268,0.52884,0,0.31444,0.21602,0.12998,0.43368,0,0.63547,0.0037,0.48408,0.77059,0.31496,0.52497,0.64133,0.19648,0.21516,0.76766,0.58346,0.56471,0.68444,0.40146,0.46758,0.36649,0.28935,0.34604],"triangles":[21,22,12,11,12,22,17,21,13,17,13,14,21,12,13,21,17,20,16,22,21,10,11,22,10,22,16,19,21,20,16,21,19,18,10,16,9,10,18,15,16,19,18,16,15,8,9,18,7,8,18,6,18,15,7,18,6,14,0,1,17,14,1,2,17,1,20,17,2,3,20,2,19,20,3,4,19,3,15,19,4,5,15,4,6,15,5],"vertices":[1,66,35.91,69.08,1,1,66,35.91,59.14,1,1,66,25.82,29.09,1,1,66,15.72,-0.95,1,1,66,5.63,-31,1,1,66,-4.46,-61.05,1,2,66,-28.87,-61.05,0.33333,68,28.87,61.03,0.66667,1,68,53.28,61.02,1,1,68,76.09,41.84,1,1,68,71.17,21.63,1,1,68,72.83,-1.62,1,1,68,70.38,-29.12,1,1,68,50.67,-56.14,1,2,66,-28.43,74.38,0.41,68,28.43,-74.4,0.59,2,66,-4.92,72.95,0.52,68,4.92,-72.95,0.48,2,66,-21.87,-30.58,0.49,68,21.87,30.57,0.51,1,68,40.81,-2.6,1,2,66,-4.26,46.93,0.49,68,4.26,-46.93,0.51,1,68,51.99,30.15,1,2,66,-10.74,-2.78,0.49,68,10.74,2.78,0.51,2,66,0.57,19.25,0.49,68,-0.57,-19.25,0.51,1,68,23.72,-23.99,1,1,68,43.68,-26.76,1],"hull":15}},"ground":{"tank/ground":{"x":837.96,"y":-172,"width":1024,"height":353}},"ground2":{"tank/ground":{"x":-179.89,"y":-172,"width":1024,"height":353}},"ground3":{"tank/ground":{"x":-1213.48,"y":-172,"scaleX":1.035,"width":1024,"height":353}},"ground4":{"tank/ground":{"x":-2268.51,"y":-172,"scaleX":1.04,"width":1024,"height":353}},"ground5":{"tank/ground":{"x":-3306.54,"y":-172,"width":1024,"height":353}},"ground6":{"tank/ground":{"x":-4322.71,"y":-172,"width":1024,"height":353}},"ground7":{"tank/ground":{"x":-5340.65,"y":-172,"width":1024,"height":353}},"guntower":{"tank/guntower":{"x":77.22,"y":122.59,"width":730,"height":289}},"machinegun":{"tank/machinegun":{"x":44.85,"y":-5.72,"rotation":-180,"width":331,"height":57}},"machinegun-mount":{"tank/machinegun-mount":{"x":47.42,"y":-1.54,"rotation":-90,"width":72,"height":96}},"rock":{"tank/rock":{"x":25.24,"y":27.35,"width":580,"height":127}},"tankBody-shadow":{"tank/tankBottom-shadow":{"x":-11.44,"y":-42.89,"width":1291,"height":341}},"tankTop":{"tank/tankTop":{"x":6.8,"y":168.71,"width":1407,"height":222}},"tread":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread-inside1":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside10":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside11":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside12":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside13":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside14":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside15":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside16":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside17":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside18":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside19":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside2":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside20":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside21":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside22":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside23":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside24":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside25":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside26":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside27":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside28":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside29":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside3":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside30":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside31":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside32":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside33":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside34":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside35":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside36":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside37":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside38":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside39":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside4":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside40":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside41":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside42":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside43":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside44":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside45":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside46":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside47":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside48":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside49":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside5":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside50":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside51":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside52":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside53":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside54":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside55":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside56":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside57":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside58":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside59":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside6":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside60":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside61":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside62":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside63":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside64":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside65":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside66":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside67":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside68":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside69":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside7":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside70":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside71":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside72":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside8":{"tank/tread-inside":{"x":20.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread-inside9":{"tank/tread-inside":{"x":60.1,"y":12.56,"rotation":-180,"width":25,"height":28}},"tread10":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread11":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread12":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread13":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread14":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread15":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread16":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread17":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread18":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread19":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread2":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread20":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread21":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread22":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread23":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread24":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread25":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread26":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread27":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread28":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread29":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread3":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread30":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread31":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread32":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread33":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread34":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread35":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread36":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread4":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread5":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread6":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread7":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread8":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"tread9":{"tank/tread":{"x":45.47,"y":-8.28,"rotation":-180,"width":96,"height":30}},"treads":{"treads":{"type":"path","closed":true,"lengths":[185.21,354.53,478.3,608.52,786,1058.49,1138.97,1223.96,1303.87,1388.23,1471.11,1551.64,1633.55,1713.27,1799.89,1882.28,2164.2,2326.85,2444.07,2584.91,2754.15,2931.25],"vertexCount":66,"vertices":[1,22,11.23,41.87,1,1,22,0.79,41.95,1,1,22,-34.72,42.24,1,1,61,-104.22,0.41,1,1,61,0.07,0.55,1,1,61,68.8,0.65,1,1,8,20.5,43.47,1,1,8,1.14,40.82,1,1,8,-27.38,36.85,1,1,3,147.07,105.01,1,1,3,96.21,96.63,1,1,3,43.87,87.72,1,1,3,16.18,103.35,1,1,3,-33.67,94.21,1,1,3,-99.36,81.25,1,1,3,-122.05,-1.7,1,1,3,-83.58,-47.93,1,1,3,-33.53,-109.37,1,1,6,-83.57,-66.1,1,1,6,-2.17,-67.9,1,2,6,56.68,-41.49,0.68,79,-24.31,-41.49,0.32,1,79,-26.59,16.7,1,1,79,-2.69,16.7,1,1,79,13.52,16.7,1,2,12,-52.42,-46.51,0.744,79,30.21,-46.52,0.256,1,12,-0.32,-68.92,1,2,12,52.09,-44.73,0.712,80,-28.91,-44.73,0.288,1,80,-22.81,16.24,1,1,80,-1.42,16.24,1,1,80,20.48,16.24,1,2,14,-47.21,-47.46,0.744,80,36.01,-47.46,0.256,1,14,-0.29,-69.66,1,2,14,45.24,-47.26,0.736,83,-37.49,-47.26,0.264,1,83,-23.76,15.28,1,1,83,-0.14,15.28,1,1,83,24.45,15.28,1,2,16,-47.37,-48.7,0.744,83,33.53,-48.7,0.256,1,16,-0.5,-70.4,1,2,16,49.09,-48.34,0.744,81,-33.58,-48.34,0.256,1,81,-20.89,15.84,1,1,81,-1.26,15.84,1,1,81,15.78,15.84,1,2,18,-52.5,-48.21,0.76,81,28.45,-48.22,0.24,1,18,-2.5,-68.92,1,2,18,55.72,-47.82,0.752,82,-28.88,-47.83,0.248,1,82,-21.64,16.7,1,1,82,-0.48,16.7,1,1,82,20.74,16.7,1,2,20,-53.65,-48.9,0.76,82,25.97,-48.9,0.24,1,20,2.28,-69.66,1,1,20,44.95,-69.74,1,1,10,76.03,-85.61,1,1,10,93.58,-42.24,1,1,10,118.67,19.75,1,1,10,78.59,76.62,1,1,10,37.27,95.07,1,1,10,31.45,97.67,1,1,10,-15.16,87.48,1,1,10,-79.8,92.52,1,1,10,-119.06,95.58,1,1,24,47.07,42.29,1,1,24,0.25,42.75,1,1,24,-29.64,43.29,1,1,62,-86.65,1.35,1,1,62,0.49,0.26,1,1,62,92.42,-0.9,1]}},"wheel-big":{"tank/wheel-big":{"width":191,"height":191}},"wheel-big-overlay1":{"tank/wheel-big-overlay":{"width":186,"height":186}},"wheel-big-overlay2":{"tank/wheel-big-overlay":{"width":186,"height":186}},"wheel-big2":{"tank/wheel-big":{"width":191,"height":191}},"wheel-mid":{"tank/wheel-mid":{"width":136,"height":136}},"wheel-mid-overlay":{"tank/wheel-mid-overlay":{"width":136,"height":136}},"wheel-mid-overlay2":{"tank/wheel-mid-overlay":{"width":136,"height":136}},"wheel-mid-overlay3":{"tank/wheel-mid-overlay":{"width":136,"height":136}},"wheel-mid-overlay4":{"tank/wheel-mid-overlay":{"width":136,"height":136}},"wheel-mid-overlay5":{"tank/wheel-mid-overlay":{"width":136,"height":136}},"wheel-mid-overlay6":{"tank/wheel-mid-overlay":{"width":136,"height":136}},"wheel-mid2":{"tank/wheel-mid":{"width":136,"height":136}},"wheel-mid3":{"tank/wheel-mid":{"width":136,"height":136}},"wheel-mid4":{"tank/wheel-mid":{"width":136,"height":136}},"wheel-mid5":{"tank/wheel-mid":{"width":136,"height":136}},"wheel-mid6":{"tank/wheel-mid":{"width":136,"height":136}},"wheel-small":{"tank/wheel-small":{"width":71,"height":71}},"wheel-small2":{"tank/wheel-small":{"width":71,"height":71}},"wheel-small3":{"tank/wheel-small":{"width":71,"height":71}}}}],"animations":{"drive":{"slots":{"tread18":{"color":[{"time":6.5,"color":"ffffffff"},{"time":7.1,"color":"adc9b8ff"}]},"tread19":{"color":[{"time":6.5,"color":"adc9b8ff"},{"time":7.1,"color":"ffffffff"}]}},"bones":{"tankRoot":{"rotate":[{"time":2.8},{"time":3.1667,"angle":-10.36},{"time":3.4667,"angle":-15.91},{"time":3.5667,"angle":-10.15},{"time":3.8667,"angle":14.09},{"time":4.0667,"angle":8.7},{"time":4.5,"angle":3.25},{"time":4.7333,"angle":-3.19},{"time":5.0333}],"translate":[{"time":0.6333,"curve":0.57,"c2":0.08,"c3":0.705,"c4":0.61},{"time":2.4667,"x":-1149.59,"y":-0.54},{"time":2.6,"x":-1226.23,"y":-0.57},{"time":2.8,"x":-1398.67,"y":-0.65},{"time":3,"x":-1501.67,"y":13.68},{"time":3.1667,"x":-1656.17,"y":35.18},{"time":3.4333,"x":-1861.87,"y":73.29},{"time":3.5,"x":-1907.58,"y":74.59},{"time":3.6333,"x":-1999,"y":75.41},{"time":3.7667,"x":-2117.81,"y":43.56},{"time":3.8333,"x":-2150.21,"y":34.88},{"time":4,"x":-2312.81,"y":34.73},{"time":4.0667,"x":-2352.57,"y":18.21,"curve":0.253,"c2":0.18,"c3":0.648,"c4":0.52},{"time":4.5333,"x":-2617.35,"y":-1.61,"curve":0.359,"c2":0.3,"c3":0.701,"c4":0.63},{"time":4.7333,"x":-2782.66,"y":-13.99},{"time":4.9333,"x":-2858,"y":-2.62},{"time":6.7667,"x":-4062.06,"curve":0.467,"c2":0.75,"c3":0.531},{"time":7.5,"x":-4143.54}]},"wheel-midRoot4":{"translate":[{"time":2.6},{"time":3.1333,"y":-7.01},{"time":3.2},{"time":3.2333,"y":-15.24},{"time":3.3667,"y":18.85},{"time":3.5333,"y":35.99},{"time":3.7,"y":48.57},{"time":3.8,"x":-1.35,"y":51.87},{"time":3.8667,"y":47.48},{"time":4},{"time":4.7333,"y":18.67},{"time":5.0333},{"time":7.3}]},"wheel-midRoot5":{"translate":[{},{"time":2.6,"y":-2.78},{"time":3.1333,"y":1.79},{"time":3.2,"y":0.46},{"time":3.2333,"y":-7.38},{"time":3.3667},{"time":3.5333,"y":7.26},{"time":3.6,"y":10.72},{"time":3.7,"y":27.18},{"time":3.8,"x":1.86,"y":22.01},{"time":3.8667,"y":21.42},{"time":3.9333,"y":41.5},{"time":4,"y":18.12},{"time":4.0667,"y":23.79},{"time":4.2,"y":-13.86},{"time":4.7333,"y":25.33},{"time":5.0333},{"time":7.3}]},"treadCollider4":{"translate":[{"time":2.6},{"time":3.1333,"y":-5.57},{"time":3.2,"y":4.81},{"time":3.2333},{"time":3.3667,"y":3.71},{"time":3.5333,"y":42.06},{"time":3.6,"y":38.49},{"time":3.7,"y":55.21},{"time":3.8,"x":-1.35,"y":46.96},{"time":3.8667,"y":46.59},{"time":3.9333,"y":20.77},{"time":4,"y":0.44},{"time":4.2},{"time":4.7333,"y":22},{"time":5.0333}]},"treadCollider3":{"translate":[{"time":3.1333},{"time":3.2,"y":2.28},{"time":3.2333,"y":4.73},{"time":3.3667,"y":31.54},{"time":3.5333,"y":46.61},{"time":3.7,"y":44.32},{"time":3.8,"x":-1.35,"y":21.94},{"time":3.8667,"y":8.69},{"time":4.4,"y":0.44},{"time":4.7333,"y":14.96},{"time":5.0333}]},"wheel-midRoot3":{"translate":[{"time":2.6},{"time":3.1333,"y":-4.32},{"time":3.2,"y":12.52},{"time":3.2333,"y":20.78},{"time":3.3667,"y":23.09},{"time":3.5333,"y":2.75},{"time":3.7},{"time":3.8,"x":-0.68},{"time":3.8667,"y":-1.32},{"time":4},{"time":4.4,"y":-1.07},{"time":4.7333,"y":7.91},{"time":5.0333},{"time":5.3333}]},"treadCollider5":{"translate":[{"time":2.6},{"time":2.8,"y":-0.59},{"time":3.1333,"y":27.54},{"time":3.2,"y":29.39},{"time":3.2333,"y":30.34},{"time":3.3667,"y":7.54},{"time":3.5333,"y":0.44},{"time":3.5667,"y":27.5},{"time":3.6,"y":19.7},{"time":3.7},{"time":3.8,"x":-1.35},{"time":3.8667,"y":13.87},{"time":4,"y":25.45},{"time":4.0667,"y":40.61},{"time":4.2,"x":7.01,"y":32.82},{"time":4.4,"x":5.77},{"time":4.7333,"x":4.74,"y":33.06},{"time":5.0333,"x":4.12},{"time":5.3333}]},"wheel-midRoot6":{"translate":[{},{"time":2.6,"y":-7.23},{"time":2.8,"y":-1.89},{"time":3.1333,"y":20.24},{"time":3.2,"y":35.64},{"time":3.2333,"y":33.63},{"time":3.3667,"y":33.79},{"time":3.5333,"y":8.67},{"time":3.5667,"y":38.25},{"time":3.7},{"time":3.8,"x":-1.35},{"time":4,"x":-1.2},{"time":4.0667,"x":-1.14,"y":31.76},{"time":4.2,"x":-1.04,"y":50.46},{"time":4.4,"x":-0.86,"y":31.6},{"time":4.7333,"x":-0.71,"y":31.87},{"time":5.0333,"x":-0.61},{"time":5.3333}]},"wheel-midRoot1":{"translate":[{"time":2.5333},{"time":2.8,"y":88.82},{"time":2.9333,"y":86.84},{"time":3.1333,"y":19.7},{"time":3.2,"curve":"stepped"},{"time":3.2333},{"time":3.5667,"x":-0.07,"y":12.71},{"time":3.7,"x":18.01},{"time":3.7667,"x":-0.68},{"time":3.8,"y":21.06},{"time":3.8667,"y":80.49},{"time":4,"y":24.11},{"time":4.0667,"y":40.34},{"time":4.2,"y":31.4},{"time":4.4,"y":15.24},{"time":4.7},{"time":4.7333,"y":8},{"time":5.0333},{"time":5.3333}]},"treadCollider1":{"translate":[{"time":2.5667},{"time":2.8,"y":40.19},{"time":2.9333,"y":70.21},{"time":3.1333,"y":38.39},{"time":3.2,"curve":"stepped"},{"time":3.5333},{"time":3.8,"x":-3.05},{"time":3.8667,"x":-2.59,"y":51.2},{"time":4,"x":-2.41,"y":14.46},{"time":4.0667,"x":-2.28,"y":30.63},{"time":4.2,"x":-2.1,"y":26.72},{"time":4.4,"x":-1.73,"y":24.1},{"time":4.7,"x":-1.48},{"time":5.3333}]},"wheel-midRoot2":{"translate":[{"time":2.6},{"time":2.8,"y":15.27},{"time":3.1333,"y":38.62},{"time":3.2,"x":3.05,"y":19.39},{"time":3.2333,"x":5.5,"y":14.2},{"time":3.3667,"x":2.75},{"time":3.5333},{"time":3.8,"x":-1.89},{"time":3.8667,"x":-1.32,"y":41.29},{"time":4,"x":-1.23},{"time":4.0667,"x":-1.16,"y":13.21},{"time":4.2,"x":-1.07,"y":13.75},{"time":4.4,"x":-0.88,"y":9.1},{"time":4.7,"x":-0.75},{"time":5.3333}]},"treadCollider2":{"translate":[{"time":2.6},{"time":3.1333,"y":26.24},{"time":3.2,"y":32.3},{"time":3.2333,"y":32.28},{"time":3.3667,"y":4.66},{"time":3.5333},{"time":3.8,"x":-0.68},{"time":3.8667,"y":10.91},{"time":4},{"time":4.4,"y":9.21},{"time":4.7},{"time":4.7333,"y":5.85},{"time":5.0333}]},"wheel-bigRoot2":{"translate":[{"time":2.1667},{"time":3.1333,"y":-7.28},{"time":3.2333,"y":-13.24},{"time":3.3667,"y":-13.74},{"time":3.5333,"x":2.06,"y":-40.87},{"time":3.5667,"y":-6.85},{"time":3.8,"x":-1.35,"y":21.06},{"time":4.0667,"x":-1.14,"y":6.41},{"time":4.7333,"x":-0.71,"y":-8.18},{"time":5.3333},{"time":7.3,"y":23.55},{"time":7.6}]},"wheel-bigRoot1":{"translate":[{"time":2.4333},{"time":2.8,"y":65.47},{"time":3.1333,"y":12.78},{"time":3.5667,"x":-0.69,"y":46.9},{"time":3.8,"x":-1.35,"y":28.74},{"time":3.8667,"y":30.28},{"time":4.1,"y":67.93},{"time":4.3667,"y":10.24},{"time":4.7333,"y":40.05},{"time":5.0333,"curve":"stepped"},{"time":5.3333},{"time":7,"y":-34.87},{"time":7.3,"y":-16.82},{"time":7.6}]},"tankBody":{"rotate":[{"time":0.6333,"curve":0.25,"c3":0.75},{"time":1.0667,"angle":-3.79,"curve":0.25,"c3":0.75},{"time":2.3333,"angle":-0.26},{"time":2.8,"angle":-3.13},{"time":3.5667,"angle":-7.55},{"time":3.7333,"angle":-2.84},{"time":3.8667,"angle":3.32},{"time":4.0667,"angle":-6.06},{"time":4.3667,"angle":2.43},{"time":4.7,"angle":-6.59},{"time":5.4333,"angle":0.6,"curve":"stepped"},{"time":6.4333,"angle":0.6},{"time":7,"angle":6.46,"curve":"stepped"},{"time":7.2333,"angle":6.46,"curve":0.561,"c2":0.15,"c3":0.696,"c4":0.35},{"time":7.5,"angle":-1.06,"curve":0.46,"c2":0.15,"c3":0.758,"c4":0.45},{"time":7.6,"angle":-2.29},{"time":8.2333}],"translate":[{"time":2.3333},{"time":2.8,"y":25.83},{"time":3.5667,"y":9.49},{"time":3.8667,"y":43.26},{"time":4.1,"x":1.97,"y":30.11},{"time":4.5,"y":25.64},{"time":5.4333},{"time":7.3,"y":21.87},{"time":7.5}]},"treadGravity2":{"translate":[{"y":6.44},{"time":2.1667},{"time":2.4333,"y":5.18},{"time":2.8,"y":4.18},{"time":2.9333,"y":-2.86},{"time":3.0667,"y":-17.16},{"time":3.1333,"y":-3.82},{"time":3.2333,"y":2.1},{"time":3.6,"y":2.23},{"time":3.7333,"y":32.22},{"time":3.8,"y":30.63},{"time":3.8667,"y":4.41},{"time":4,"y":32.39},{"time":4.2667,"y":-6.67},{"time":4.8667,"y":6.44}]},"treadGravity1":{"translate":[{"y":-5.85},{"time":2.1667},{"time":2.4333,"y":-1.7},{"time":2.8,"y":-3.54},{"time":2.9333,"y":-10.75},{"time":3.0667,"y":-4.71},{"time":3.1333,"y":-7.59},{"time":3.2333,"y":3.93},{"time":3.7333,"y":27.08},{"time":3.8,"y":7.55},{"time":3.8667,"y":-7.88},{"time":4,"y":0.03},{"time":4.2667,"y":-23.84},{"time":4.8667,"y":-5.85}]},"antenna1":{"rotate":[{"time":0.6333,"curve":0.148,"c2":0.32,"c3":0.75},{"time":0.9667,"angle":-3.01,"curve":0.162,"c2":0.22,"c3":0.75},{"time":1.4667,"angle":1.06},{"time":1.7,"angle":-0.53,"curve":"stepped"},{"time":2.4333,"angle":-0.35,"curve":0.165,"c2":0.23,"c3":0.75},{"time":2.7333,"angle":4.43,"curve":0.25,"c3":0.75},{"time":3,"angle":-3.93,"curve":0.25,"c3":0.75},{"time":3.1667,"angle":3.65},{"time":3.2333,"angle":-2.04},{"time":3.4,"angle":-6.88,"curve":0.116,"c2":0.26,"c3":0.75},{"time":3.6333,"angle":-3.09},{"time":3.6667,"angle":-3.74},{"time":3.8,"angle":-9.68},{"time":3.9333,"angle":9.94},{"time":4.1333,"angle":-4.75},{"time":4.4333,"angle":2.81,"curve":0.114,"c2":0.31,"c3":0.75},{"time":4.7667,"angle":-8.81,"curve":0.091,"c2":0.3,"c3":0.75},{"time":5.3333,"angle":2.35},{"time":5.6,"angle":-1.71},{"time":6.7,"angle":0.05},{"time":7.4667,"angle":9.57},{"time":7.6667,"angle":-9.47},{"time":7.8667,"angle":4.75},{"time":8.1,"angle":0.76},{"time":8.3,"angle":1.84},{"time":8.4667}]},"antenna2":{"rotate":[{"time":0.6333,"curve":0.148,"c2":0.32,"c3":0.75},{"time":0.9667,"angle":-3.01,"curve":0.162,"c2":0.22,"c3":0.75},{"time":1.4667,"angle":1.06},{"time":1.7,"angle":-0.53,"curve":"stepped"},{"time":2.4333,"angle":-0.35,"curve":0.165,"c2":0.23,"c3":0.75},{"time":2.7333,"angle":4.43,"curve":0.25,"c3":0.75},{"time":3,"angle":-3.93,"curve":0.25,"c3":0.75},{"time":3.1667,"angle":3.65},{"time":3.2333,"angle":-2.04},{"time":3.4,"angle":-6.88,"curve":0.116,"c2":0.26,"c3":0.75},{"time":3.6333,"angle":-3.09},{"time":3.6667,"angle":-3.74},{"time":3.8,"angle":-9.68},{"time":3.9333,"angle":9.94},{"time":4.1333,"angle":-4.75},{"time":4.4333,"angle":2.81,"curve":0.114,"c2":0.31,"c3":0.75},{"time":4.7667,"angle":-8.81,"curve":0.091,"c2":0.3,"c3":0.75},{"time":5.3333,"angle":2.35},{"time":5.6,"angle":-1.71},{"time":6.7,"angle":0.05},{"time":7.4667,"angle":9.57},{"time":7.6667,"angle":-9.47},{"time":7.8667,"angle":4.75},{"time":8.1,"angle":0.76}]},"antenna3":{"rotate":[{"time":0.6333,"curve":0.148,"c2":0.32,"c3":0.75},{"time":0.9667,"angle":-3.01,"curve":0.162,"c2":0.22,"c3":0.75},{"time":1.4667,"angle":1.06},{"time":1.7,"angle":-0.53,"curve":"stepped"},{"time":2.4333,"angle":-0.35,"curve":0.165,"c2":0.23,"c3":0.75},{"time":2.7333,"angle":4.43,"curve":0.25,"c3":0.75},{"time":3,"angle":-3.93,"curve":0.25,"c3":0.75},{"time":3.1667,"angle":3.65},{"time":3.2333,"angle":-2.04},{"time":3.4,"angle":-6.88,"curve":0.116,"c2":0.26,"c3":0.75},{"time":3.6333,"angle":-3.09},{"time":3.6667,"angle":-3.74},{"time":3.8,"angle":-9.68},{"time":3.9333,"angle":9.94},{"time":4.1333,"angle":-4.75},{"time":4.4333,"angle":2.81,"curve":0.114,"c2":0.31,"c3":0.75},{"time":4.7667,"angle":-8.81,"curve":0.091,"c2":0.3,"c3":0.75},{"time":5.3333,"angle":2.35},{"time":5.6,"angle":-1.71},{"time":6.7,"angle":0.05},{"time":7.4667,"angle":9.57},{"time":7.6667,"angle":-9.47},{"time":7.8667,"angle":4.75},{"time":8.1,"angle":0.76}]},"antenna4":{"rotate":[{"time":0.6333,"curve":0.148,"c2":0.32,"c3":0.75},{"time":0.9667,"angle":-3.01,"curve":0.162,"c2":0.22,"c3":0.75},{"time":1.4667,"angle":1.06},{"time":1.7,"angle":-0.53,"curve":"stepped"},{"time":2.4333,"angle":-0.35,"curve":0.165,"c2":0.23,"c3":0.75},{"time":2.7333,"angle":4.43,"curve":0.25,"c3":0.75},{"time":3,"angle":-3.93,"curve":0.25,"c3":0.75},{"time":3.1667,"angle":3.65},{"time":3.2333,"angle":-2.04},{"time":3.4,"angle":-6.88,"curve":0.116,"c2":0.26,"c3":0.75},{"time":3.6333,"angle":-3.09},{"time":3.6667,"angle":-3.74},{"time":3.8,"angle":-9.68},{"time":3.9333,"angle":9.94},{"time":4.1333,"angle":-4.75},{"time":4.4333,"angle":2.81,"curve":0.114,"c2":0.31,"c3":0.75},{"time":4.7667,"angle":-8.81,"curve":0.091,"c2":0.3,"c3":0.75},{"time":5.3333,"angle":2.35},{"time":5.6,"angle":-1.71},{"time":6.7,"angle":0.05},{"time":7.4667,"angle":9.57},{"time":7.6667,"angle":-9.47},{"time":7.8667,"angle":4.75},{"time":8.1,"angle":0.76}]},"antenna5":{"rotate":[{"time":0.6333,"curve":0.148,"c2":0.32,"c3":0.75},{"time":0.9667,"angle":-3.01,"curve":0.162,"c2":0.22,"c3":0.75},{"time":1.4667,"angle":1.06},{"time":1.7,"angle":-0.53,"curve":"stepped"},{"time":2.4333,"angle":-0.35,"curve":0.165,"c2":0.23,"c3":0.75},{"time":2.7333,"angle":4.43,"curve":0.25,"c3":0.75},{"time":3,"angle":-3.93,"curve":0.25,"c3":0.75},{"time":3.1667,"angle":3.65},{"time":3.2333,"angle":-2.04},{"time":3.4,"angle":-6.88,"curve":0.116,"c2":0.26,"c3":0.75},{"time":3.6333,"angle":-3.09},{"time":3.6667,"angle":-3.74},{"time":3.8,"angle":-9.68},{"time":3.9333,"angle":9.94},{"time":4.1333,"angle":-4.75},{"time":4.4333,"angle":2.81,"curve":0.114,"c2":0.31,"c3":0.75},{"time":4.7667,"angle":-8.81,"curve":0.091,"c2":0.3,"c3":0.75},{"time":5.3333,"angle":2.35},{"time":5.6,"angle":-1.71},{"time":6.7,"angle":0.05},{"time":7.4667,"angle":9.57},{"time":7.6667,"angle":-9.47},{"time":7.8667,"angle":4.75},{"time":8.1,"angle":0.76}]},"antenna6":{"rotate":[{"time":0.6333,"curve":0.148,"c2":0.32,"c3":0.75},{"time":0.9667,"angle":-3.01,"curve":0.162,"c2":0.22,"c3":0.75},{"time":1.4667,"angle":1.06},{"time":1.7,"angle":-0.53,"curve":"stepped"},{"time":2.4333,"angle":-0.35,"curve":0.165,"c2":0.23,"c3":0.75},{"time":2.7333,"angle":4.43,"curve":0.25,"c3":0.75},{"time":3,"angle":-3.93,"curve":0.25,"c3":0.75},{"time":3.1667,"angle":3.65},{"time":3.2333,"angle":-2.04},{"time":3.4,"angle":-6.88,"curve":0.116,"c2":0.26,"c3":0.75},{"time":3.6333,"angle":-3.09},{"time":3.6667,"angle":-3.74},{"time":3.8,"angle":-9.68},{"time":3.9333,"angle":9.94},{"time":4.1333,"angle":-4.75},{"time":4.4333,"angle":2.81,"curve":0.114,"c2":0.31,"c3":0.75},{"time":4.7667,"angle":-8.81,"curve":0.091,"c2":0.3,"c3":0.75},{"time":5.3333,"angle":2.35},{"time":5.6,"angle":-1.71},{"time":6.7,"angle":0.05},{"time":7.4667,"angle":9.57},{"time":7.6667,"angle":-9.47},{"time":7.8667,"angle":4.75},{"time":8.1,"angle":0.76}]},"machinegun":{"rotate":[{"time":0.6333,"curve":0.17,"c2":0.25,"c3":0.75},{"time":0.8667,"angle":-2.96},{"time":1.9333,"angle":-5.01,"curve":0.349,"c2":0.12,"c3":0.935,"c4":0.86},{"time":2.5333,"angle":-0.62},{"time":2.9667,"angle":2.77,"curve":0.426,"c2":0.34,"c3":0.734,"c4":0.7},{"time":3.2333,"angle":-5.86,"curve":0.25,"c3":0.78,"c4":0.52},{"time":3.8667,"angle":10.58},{"time":4.0667,"angle":-20.73},{"time":4.2333,"angle":20.49,"curve":0.309,"c2":0.08,"c3":0.77,"c4":0.66},{"time":4.5,"angle":-3.45},{"time":4.8,"angle":5.59},{"time":5.2667},{"time":7.1667,"angle":12.53},{"time":7.5667,"angle":-13.52},{"time":7.9333,"angle":2.46},{"time":8.1667}]},"cannonTarget":{"translate":[{"time":0.6333,"curve":0.628,"c3":0.75},{"time":1.5333,"x":0.36,"y":78.39},{"time":2.8667},{"time":3.1667,"x":98.09,"y":28.34},{"time":3.3667,"x":99.47,"y":137.36},{"time":3.8,"x":161.3,"y":188.8},{"time":3.9,"x":147.62,"y":234.46},{"time":4.0667,"x":112.09,"y":204.89},{"time":4.3,"x":77.48,"y":32.19},{"time":4.7333}]},"wheel-mid1":{"rotate":[{"time":0.6333,"curve":0.449,"c2":0.12,"c3":0.755,"c4":0.5},{"time":1.4,"angle":120,"curve":0.378,"c2":0.2,"c3":0.67,"c4":0.58},{"time":1.7,"angle":240,"curve":0.444,"c2":0.25,"c3":0.651,"c4":0.55},{"time":1.9333},{"time":2.1333,"angle":120},{"time":2.3667,"angle":240},{"time":2.6},{"time":2.8,"angle":120},{"time":3.0667,"angle":240},{"time":3.2333},{"time":3.4,"angle":120},{"time":3.6333,"angle":240},{"time":3.9},{"time":4.2333,"angle":120,"curve":0.409,"c2":0.28,"c3":0.689,"c4":0.65},{"time":4.5,"angle":240},{"time":4.7333},{"time":5.1,"angle":120},{"time":5.4,"angle":240},{"time":5.7333},{"time":6.1,"angle":120},{"time":6.4,"angle":240,"curve":0.211,"c2":0.68,"c3":0.503,"c4":0.83},{"time":6.7667}]},"wheel-big1":{"rotate":[{"time":0.6333,"curve":0.449,"c2":0.12,"c3":0.755,"c4":0.5},{"time":1.4,"angle":120,"curve":0.378,"c2":0.2,"c3":0.67,"c4":0.58},{"time":1.7,"angle":240,"curve":0.444,"c2":0.25,"c3":0.651,"c4":0.55},{"time":1.9333},{"time":2.1333,"angle":120},{"time":2.3667,"angle":240},{"time":2.6},{"time":2.8,"angle":120},{"time":3.0667,"angle":240},{"time":3.2333},{"time":3.4,"angle":120},{"time":3.6333,"angle":240},{"time":3.9},{"time":4.2333,"angle":120,"curve":0.409,"c2":0.28,"c3":0.689,"c4":0.65},{"time":4.5,"angle":240},{"time":4.7333},{"time":5.1,"angle":120},{"time":5.4,"angle":240},{"time":5.7333},{"time":6.1,"angle":120},{"time":6.4,"angle":240,"curve":0.211,"c2":0.68,"c3":0.503,"c4":0.83},{"time":6.7667}]},"wheel-small1":{"rotate":[{"time":0.6333,"curve":0.449,"c2":0.12,"c3":0.755,"c4":0.5},{"time":1.4,"angle":120,"curve":0.378,"c2":0.2,"c3":0.67,"c4":0.58},{"time":1.7,"angle":240,"curve":0.444,"c2":0.25,"c3":0.651,"c4":0.55},{"time":1.9333,"angle":360},{"time":2.1333,"angle":120},{"time":2.3667,"angle":240},{"time":2.6,"angle":360},{"time":2.8,"angle":120},{"time":3.0667,"angle":240},{"time":3.2333,"angle":360},{"time":3.4,"angle":120},{"time":3.6333,"angle":240},{"time":3.9,"angle":360},{"time":4.2333,"angle":120,"curve":0.409,"c2":0.28,"c3":0.689,"c4":0.65},{"time":4.5,"angle":240},{"time":4.7333,"angle":360},{"time":5.1,"angle":120},{"time":5.4,"angle":240},{"time":5.7333,"angle":360},{"time":6.1,"angle":120},{"time":6.4,"angle":240,"curve":0.211,"c2":0.68,"c3":0.503,"c4":0.83},{"time":6.7667,"angle":360}]}},"path":{"treads":{"position":[{"time":0.6333,"curve":0.57,"c2":0.08,"c3":0.705,"c4":0.61},{"time":2.4667,"position":0.3899,"curve":0.33,"c2":0.34,"c3":0.663,"c4":0.67},{"time":2.6,"position":0.423,"curve":0.321,"c2":0.36,"c3":0.654,"c4":0.69},{"time":3,"position":0.538,"curve":0.302,"c2":0.41,"c3":0.638,"c4":0.73},{"time":3.7667,"position":0.79,"curve":0.458,"c2":0.08,"c3":0.663,"c4":0.68},{"time":4,"position":0.885},{"time":4.1333,"position":0.894,"curve":0.364,"c2":0.2,"c3":0.864,"c4":0.86},{"time":4.3333,"position":0.934,"curve":0.229,"c3":0.634,"c4":0.49},{"time":4.5333,"position":0.986,"curve":0.447,"c2":0.41,"c3":0.851,"c4":0.85},{"time":4.7333,"position":1.058},{"time":6.6,"position":1.4716,"curve":0.467,"c2":0.75,"c3":0.531},{"time":7.0991,"position":1.5,"curve":"stepped"},{"time":7.1}]}}}}},"transforms":{"skeleton":{"hash":"gaRAvGA7p7Dj6CLqMOqhBZJSWuQ","spine":"3.8.14-beta","x":-384.51,"y":-95.5,"width":796.81,"height":191},"bones":[{"name":"root"},{"name":"wheel2overlay","parent":"root","x":-300},{"name":"wheel3overlay","parent":"root","x":320},{"name":"wheel1overlay","parent":"wheel2overlay"},{"name":"wheel1","parent":"wheel1overlay","length":93.7},{"name":"wheel3","parent":"wheel3overlay","length":67},{"name":"rotate-handle","parent":"wheel1","x":93.9,"y":0.05},{"name":"wheel2","parent":"wheel2overlay","length":67}],"slots":[{"name":"wheel-big","bone":"wheel1","attachment":"transforms/wheel-big"},{"name":"wheel-mid","bone":"wheel3","attachment":"transforms/wheel-mid"},{"name":"wheel-mid2","bone":"wheel2","attachment":"transforms/wheel-mid"},{"name":"wheel-big-overlay","bone":"wheel1overlay","attachment":"transforms/wheel-big-overlay","blend":"multiply"},{"name":"wheel-mid-overlay","bone":"wheel2overlay","attachment":"transforms/wheel-mid-overlay","blend":"multiply"},{"name":"wheel-mid-overlay2","bone":"wheel3overlay","attachment":"transforms/wheel-mid-overlay","blend":"multiply"}],"transform":[{"name":"wheel1","bones":["wheel1overlay"],"target":"wheel3overlay","rotateMix":0,"translateMix":0.5,"scaleMix":0,"shearMix":0},{"name":"wheel2","order":1,"bones":["wheel2"],"target":"wheel1","rotation":73.5,"x":354.42,"y":-128.68,"translateMix":0,"scaleMix":0,"shearMix":0},{"name":"wheel3","order":2,"bones":["wheel3"],"target":"wheel1","rotation":-28.7,"x":378.41,"y":91.78,"translateMix":0,"scaleMix":0,"shearMix":0}],"skins":[{"name":"default","attachments":{"wheel-big":{"transforms/wheel-big":{"width":191,"height":191}},"wheel-big-overlay":{"transforms/wheel-big-overlay":{"width":186,"height":186}},"wheel-mid":{"transforms/wheel-mid":{"width":136,"height":136}},"wheel-mid-overlay":{"transforms/wheel-mid-overlay":{"width":136,"height":136}},"wheel-mid-overlay2":{"transforms/wheel-mid-overlay":{"width":136,"height":136}},"wheel-mid2":{"transforms/wheel-mid":{"width":136,"height":136}}}}],"animations":{"animation":{"bones":{"wheel1overlay":{"rotate":[{"angle":-33.11}]},"wheel3overlay":{"translate":[{"x":78.92,"y":135.29}]},"wheel2overlay":{"translate":[{"x":-35.7,"y":140.92}]}}}}},"owl":{"skeleton":{"hash":"ahjKF3dl49q8xu76AOzOKQUkzL4","spine":"3.8.14-beta","x":-644,"y":-274,"width":1350.84,"height":909.41},"bones":[{"name":"root"},{"name":"branch-1","parent":"root","length":487.04,"rotation":27.67,"x":-579.3,"y":-239.11},{"name":"branch-2","parent":"branch-1","length":391.45,"rotation":-30.2,"x":487.04},{"name":"owl-base","parent":"branch-2","x":139.77,"y":56.43},{"name":"body-top-control","parent":"owl-base","rotation":92.53,"x":-3.85,"y":227.57},{"name":"branch-3","parent":"branch-2","length":231.51,"rotation":30.15,"x":391.45},{"name":"branch-4","parent":"branch-3","length":158.83,"rotation":38.9,"x":231.51},{"name":"branch-5","parent":"branch-4","length":82.96,"rotation":-26.21,"x":158.83},{"name":"branch-6","parent":"branch-5","length":105.49,"rotation":68.78,"x":-79.95,"y":-20.15},{"name":"head","parent":"body-top-control","rotation":-90,"x":51,"y":0.33},{"name":"control","parent":"head","y":126.66},{"name":"control-back","parent":"head","x":1.74,"y":75.81},{"name":"leaf-1","parent":"branch-1","length":170.88,"rotation":59.11,"x":81.78,"y":61.01},{"name":"leaf-2","parent":"branch-4","length":177.54,"rotation":-74.38,"x":116.86,"y":-14.04},{"name":"leaf-3","parent":"branch-3","length":206.74,"rotation":-60.2,"x":-15.26,"y":6.37},{"name":"leaf-4","parent":"branch-6","length":152.22,"rotation":76.69,"x":110.99,"y":4.18},{"name":"leaf-5","parent":"branch-5","length":186.26,"rotation":40.81,"x":82.96},{"name":"leaf-6","parent":"branch-6","length":201.94,"rotation":0.89,"x":105.49},{"name":"leaf-7","parent":"branch-1","length":155.86,"rotation":30.39,"x":214.62,"y":12.99},{"name":"tail-feathers","parent":"owl-base","length":155.04,"rotation":-87.98,"x":-0.46,"y":-20.62}],"slots":[{"name":"feather-3","bone":"tail-feathers","attachment":"owl/feather-3"},{"name":"feather-2","bone":"tail-feathers","attachment":"owl/feather-2"},{"name":"feather-1","bone":"tail-feathers","attachment":"owl/feather-1"},{"name":"body","bone":"owl-base","attachment":"owl/body"},{"name":"wood","bone":"branch-1","attachment":"owl/wood"},{"name":"R_wing","bone":"body-top-control","attachment":"owl/R_wing"},{"name":"L_wing","bone":"body-top-control","attachment":"owl/L_wing"},{"name":"R_foot","bone":"branch-2","attachment":"owl/R_foot"},{"name":"L_foot","bone":"branch-2","attachment":"owl/L_foot"},{"name":"head-base","bone":"head","attachment":"owl/head-base"},{"name":"R_eye-iris","bone":"control","attachment":"owl/R_eye-iris"},{"name":"R_eye-pupil","bone":"control","attachment":"owl/R_eye-pupil"},{"name":"R_eye-light","bone":"control","attachment":"owl/R_eye-light"},{"name":"L_eye-iris","bone":"control","attachment":"owl/L_eye-iris"},{"name":"L_eye-pupil","bone":"control","attachment":"owl/L_eye-pupil"},{"name":"L_eye-light","bone":"control","attachment":"owl/L_eye-light"},{"name":"R_eye-closed","bone":"control"},{"name":"L_eye-closed","bone":"control"},{"name":"beak-down","bone":"head","attachment":"owl/beak-down"},{"name":"beak","bone":"head","attachment":"owl/beak"},{"name":"leaf-7","bone":"leaf-7","attachment":"owl/leaf-7"},{"name":"leaf-6","bone":"leaf-6","attachment":"owl/leaf-6"},{"name":"leaf-5","bone":"leaf-5","attachment":"owl/leaf-5"},{"name":"leaf-4","bone":"leaf-4","attachment":"owl/leaf-4"},{"name":"leaf-3","bone":"leaf-3","attachment":"owl/leaf-3"},{"name":"leaf-2","bone":"leaf-2","attachment":"owl/leaf-2"},{"name":"leaf-1","bone":"leaf-1","attachment":"owl/leaf-1"}],"transform":[{"name":"control-back","bones":["control-back"],"target":"control","rotateMix":0,"translateMix":-1,"scaleMix":0,"shearMix":0}],"skins":[{"name":"default","attachments":{"L_eye-closed":{"owl/L_eye-closed":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[2,9,212,3.35,0.5,10,212,-123.31,0.5,2,9,33,3.35,0.5,10,33,-123.31,0.5,2,9,33,174.35,0.5,10,33,47.69,0.5,2,9,212,174.35,0.5,10,212,47.69,0.5],"hull":4}},"L_eye-iris":{"owl/L_eye-iris":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[2,9,212,3.35,0.5,10,212,-123.31,0.5,2,9,33,3.35,0.5,10,33,-123.31,0.5,2,9,33,174.35,0.5,10,33,47.69,0.5,2,9,212,174.35,0.5,10,212,47.69,0.5],"hull":4}},"L_eye-light":{"owl/L_eye-light":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[2,10,146,-27.31,0.75,9,146,99.35,0.25,2,10,104,-27.31,0.75,9,104,99.35,0.25,2,10,104,11.69,0.75,9,104,138.35,0.25,2,10,146,11.69,0.75,9,146,138.35,0.25],"hull":4}},"L_eye-pupil":{"owl/L_eye-pupil":{"x":122.5,"y":-38.81,"width":125,"height":119}},"L_foot":{"owl/L_foot":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[349.26,-29.25,221.66,-19.09,229.21,75.61,356.81,65.45],"hull":4}},"L_wing":{"owl/L_wing":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[2,4,-185.82,-259.67,0.29,3,263.76,53.37,0.71,2,4,-185.82,-97.67,0.29,3,101.92,46.23,0.71,2,4,34.18,-97.67,0.91,3,92.22,266.02,0.09,2,4,34.18,-259.67,0.91,3,254.06,273.16,0.09],"hull":4}},"R_eye-closed":{"owl/R_eye-closed":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[2,10,-34,-123.31,0.5,9,-34,3.35,0.5,2,10,-213,-123.31,0.5,9,-213,3.35,0.5,2,10,-213,47.69,0.5,9,-213,174.35,0.5,2,10,-34,47.69,0.5,9,-34,174.35,0.5],"hull":4}},"R_eye-iris":{"owl/R_eye-iris":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[2,10,-34,-123.31,0.5,9,-34,3.35,0.5,2,10,-213,-123.31,0.5,9,-213,3.35,0.5,2,10,-213,47.69,0.5,9,-213,174.35,0.5,2,10,-34,47.69,0.5,9,-34,174.35,0.5],"hull":4}},"R_eye-light":{"owl/R_eye-light":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[2,10,-105,-27.31,0.75,9,-105,99.35,0.25,2,10,-147,-27.31,0.75,9,-147,99.35,0.25,2,10,-147,11.69,0.75,9,-147,138.35,0.25,2,10,-105,11.69,0.75,9,-105,138.35,0.25],"hull":4}},"R_eye-pupil":{"owl/R_eye-pupil":{"x":-123.5,"y":-38.81,"width":125,"height":119}},"R_foot":{"owl/R_foot":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[70.9,-12.21,-52.13,-47.54,-78.35,43.77,44.68,79.1],"hull":4}},"R_wing":{"owl/R_wing":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,3,0,1,2,3],"vertices":[2,4,-185.82,106.33,0.3,3,-101.89,37.24,0.7,2,4,-185.82,268.33,0.3,3,-263.73,30.1,0.7,2,4,34.18,268.33,0.88,3,-273.42,249.89,0.12,2,4,34.18,106.33,0.88,3,-111.58,257.03,0.12],"hull":4}},"beak":{"owl/beak":{"type":"mesh","uvs":[0,0.48125,0.23847,0.67437,0.38855,1,0.52195,1,0.67759,1,0.76097,0.66393,1,0.44993,1,0.20983,0.73317,0,0.34964,0,0,0.20983,0.44969,0.27769,0.50528,0.66915],"triangles":[5,4,12,2,12,3,4,3,12,2,1,12,12,1,11,1,0,11,12,11,5,5,11,6,0,10,11,6,11,7,11,8,7,10,9,11,11,9,8],"vertices":[2,10,-41,-66.77,0.45,9,-41,59.89,0.55,2,10,-22.64,-82.61,0.65,9,-22.64,44.05,0.35,2,10,-11.08,-109.31,0.83,9,-11.08,17.35,0.17,1,10,-0.81,-109.31,1,2,10,11.17,-109.31,0.83,9,11.17,17.35,0.17,2,10,17.59,-81.75,0.78,9,17.59,44.91,0.22,2,10,36,-64.2,0.45,9,36,62.46,0.55,2,10,36,-44.51,0.45,9,36,82.15,0.55,2,10,15.45,-27.31,0.45,9,15.45,99.35,0.55,2,10,-14.08,-27.31,0.45,9,-14.08,99.35,0.55,2,10,-41,-44.51,0.45,9,-41,82.15,0.55,1,10,-6.37,-50.08,1,1,10,-2.09,-82.18,1],"hull":11}},"beak-down":{"owl/beak-down":{"type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[2,9,33,17.35,0.43,10,33,-109.31,0.57,2,9,-40,17.35,0.43,10,-40,-109.31,0.57,2,9,-40,96.35,0.43,10,-40,-30.31,0.57,2,9,33,96.35,0.43,10,33,-30.31,0.57],"hull":4}},"body":{"owl/body":{"type":"mesh","uvs":[0.32567,1,0.69603,1,0.86396,0.83947,1,0.63572,1,0.36212,0.92608,0.17292,0.70524,0,0.26586,0,0.09793,0.1671,0,0.3301,0,0.6561,0.12784,0.85111,0.4982,0.37085,0.489,0.78417,0.22215,0.75797,0.22905,0.38249,0.4959,0.12053,0.75355,0.76961,0.74434,0.37376,0.72134,0.14672,0.24516,0.14381],"triangles":[18,19,5,15,8,20,18,5,4,9,8,15,15,20,12,12,16,19,20,16,12,12,19,18,10,9,15,12,14,15,17,12,18,16,7,6,20,7,16,16,6,19,5,19,6,20,8,7,18,4,3,13,14,12,17,18,3,2,17,3,11,10,14,0,14,13,11,14,0,1,13,17,1,17,2,0,13,1,17,13,12,14,10,15],"vertices":[2,3,-77,-83.78,0.9818,4,-307.82,86.8,0.0182,2,3,106.53,-75.68,0.9604,4,-307.82,-96.91,0.0396,1,3,186.97,-9.15,1,2,3,250.85,73.62,0.58,4,-165.02,-247.67,0.42,2,3,246.13,180.77,0.244,4,-57.77,-247.67,0.756,1,4,16.4,-211.01,1,1,4,84.18,-101.47,1,1,4,84.18,116.46,1,1,4,18.68,199.75,1,2,3,-249.94,171.45,0.36505,4,-45.22,248.33,0.63495,2,3,-244.31,43.78,0.62057,4,-173.01,248.33,0.37943,1,3,-177.6,-29.8,1,2,3,-2.37,166.38,0.1,4,-61.19,1.22,0.9,2,3,0.21,4.31,0.75,4,-223.21,5.78,0.25,1,3,-132.47,8.74,1,2,3,-135.54,155.94,0.14,4,-65.76,134.72,0.86,1,4,36.93,2.36,1,1,3,131.04,15.8,1,2,3,119.65,170.62,0.21,4,-62.33,-120.87,0.79,1,4,26.67,-109.46,1,1,4,27.81,126.73,1],"hull":12}},"feather-1":{"owl/feather-1":{"x":66.77,"y":51.32,"rotation":90.51,"width":117,"height":119}},"feather-2":{"owl/feather-2":{"x":70.22,"y":-56.15,"rotation":90.51,"width":124,"height":130}},"feather-3":{"owl/feather-3":{"x":83.66,"y":7.47,"rotation":90.51,"width":111,"height":152}},"head-base":{"owl/head-base":{"type":"mesh","uvs":[0,0.62821,0.10827,0.80875,0.2669,0.96522,0.4026,1,0.60901,1,0.77147,0.96522,0.92054,0.84004,1,0.63303,1,0.52952,1,0.37787,0.97662,0.33564,0.88805,0.17566,0.78293,0.03123,0.73324,0,0.67782,0,0.64724,0.08901,0.57461,0.17085,0.50772,0.17807,0.42936,0.16604,0.34717,0.09141,0.3166,0,0.2669,0,0.24779,0.06975,0.12547,0.16122,0.0108,0.36824,0.23632,0.34657,0.79058,0.34657,0.79822,0.74135,0.23632,0.74616,0.50389,0.77986,0.50581,0.31528,0.50198,0.90263,0.39113,0.88097,0.6008,0.8906,0.42745,0.77264,0.57461,0.76542,0.50389,0.83282,0.46185,0.40435,0.56123,0.39953,0.5039,0.54396,0.65106,0.27917,0.38922,0.29362,0.3338,0.26232,0.7084,0.21418,0.72942,0.09623,0.29175,0.16363,0.40642,0.23825,0.50963,0.24066,0.6071,0.24547,0.67591,0.14678,0.34717,0.17085,0.88996,0.53433,0.86703,0.66673,0.85747,0.41397,0.12738,0.54637,0.14841,0.41638,0.16943,0.69321,0.34909,0.34176,0.65679,0.35139,0.60328,0.33213,0.42171,0.33213,0.29939,0.56803,0.71795,0.556,0.44847,0.68839,0.57461,0.69321,0.82689,0.27917,0.91099,0.39712,0.93965,0.53193,0.91863,0.71006,0.19045,0.26714,0.09298,0.39472,0.07387,0.56803,0.1465,0.73894,0.20574,0.83282,0.28028,0.86893,0.79822,0.85449,0.69119,0.87134,0.85747,0.78227],"triangles":[3,31,4,31,33,4,4,76,5,4,33,76,3,2,32,2,74,32,3,32,31,5,75,6,5,76,75,1,73,2,2,73,74,33,35,76,32,74,34,75,76,27,73,28,74,75,77,6,76,35,27,75,27,77,77,68,6,6,68,7,1,72,73,73,72,28,1,0,72,77,52,68,77,27,52,72,56,28,28,56,61,27,62,52,72,0,56,68,52,7,67,7,52,0,71,56,71,54,56,56,54,61,61,37,39,37,61,57,37,57,60,52,51,67,52,62,51,67,8,7,0,24,71,54,55,61,55,25,61,61,25,57,71,70,54,71,24,70,62,53,51,62,26,53,62,58,26,54,70,55,38,59,58,39,37,38,67,51,66,51,53,66,67,66,8,66,9,8,25,55,69,66,53,65,37,30,38,37,60,30,38,30,59,53,26,65,66,10,9,66,65,10,55,70,69,70,24,69,24,23,69,59,40,58,58,40,26,40,43,26,26,43,65,25,42,57,25,69,42,57,41,60,57,42,41,65,11,10,59,30,48,59,48,40,48,30,47,30,60,46,60,41,46,30,46,47,47,18,17,18,47,46,41,42,46,65,43,11,40,48,43,69,45,42,69,23,45,42,50,46,42,45,50,47,16,48,48,49,43,48,16,49,47,17,16,46,50,18,43,44,11,43,49,44,44,12,11,16,15,49,18,50,19,50,45,19,23,22,45,19,45,20,21,45,22,20,45,21,49,15,44,15,14,44,44,13,12,44,14,13,31,36,33,31,32,36,36,35,33,32,34,36,74,28,34,34,29,36,36,29,35,64,35,29,29,34,63,34,28,63,29,63,64,35,64,27,28,61,63,64,62,27,63,39,64,64,39,62,63,61,39,39,38,62,38,58,62],"vertices":[3,10,-304,-69.08,0.01459,11,-304,-69.08,0.26323,9,-302.26,46.41,0.72217,3,10,-239.36,-154.66,0.00559,11,-239.36,-154.66,0.05203,9,-237.62,-39.17,0.94238,3,10,-144.66,-228.82,0.145,11,-144.66,-228.82,0.04545,9,-142.92,-113.33,0.80955,3,10,-63.65,-245.31,0.2095,11,-63.65,-245.31,0.00316,9,-61.91,-129.82,0.78734,2,10,59.58,-245.31,0.17617,9,61.32,-129.82,0.82383,3,10,156.57,-228.82,0.08728,11,156.57,-228.82,0.05645,9,158.3,-113.33,0.85627,3,10,245.56,-169.49,0.06344,11,245.56,-169.49,0.11037,9,247.3,-54,0.82619,3,10,293,-71.36,0.00633,11,293,-71.36,0.10522,9,294.74,44.12,0.88845,3,10,293,-22.3,0.01595,11,293,-22.3,0.14723,9,294.74,93.19,0.83682,3,10,293,49.58,0.00982,11,293,49.58,0.29562,9,294.74,165.07,0.69456,3,10,279.04,69.6,0.01809,11,279.04,69.6,0.25265,9,280.78,185.09,0.72927,3,10,226.17,145.43,0.00461,11,226.17,145.43,0.21686,9,227.9,260.91,0.77853,2,11,163.41,213.89,0.19851,9,165.15,329.37,0.80149,2,11,133.75,228.69,0.27166,9,135.48,344.18,0.72834,2,11,100.66,228.69,0.27166,9,102.39,344.18,0.72834,2,11,82.4,186.5,0.27166,9,84.14,301.99,0.72834,2,11,39.04,147.71,0.09155,9,40.78,263.2,0.90845,2,11,-0.89,144.29,0.05807,9,0.85,259.77,0.94193,2,11,-47.67,149.99,0.07863,9,-45.94,265.48,0.92137,2,11,-96.74,185.36,0.26398,9,-95,300.85,0.73602,2,11,-114.99,228.69,0.27166,9,-113.25,344.18,0.72834,2,11,-144.66,228.69,0.27166,9,-142.92,344.18,0.72834,2,11,-156.07,195.63,0.27166,9,-154.33,311.12,0.72834,2,11,-229.09,152.27,0.15795,9,-227.35,267.76,0.84205,2,11,-297.55,54.15,0.23165,9,-295.81,169.63,0.76835,2,10,-162.91,64.42,0.23917,9,-161.18,179.9,0.76083,2,10,167.98,64.42,0.36537,9,169.71,179.9,0.63463,2,10,172.54,-122.71,0.43659,9,174.28,-7.22,0.56341,2,10,-162.91,-124.99,0.47535,9,-161.18,-9.5,0.52465,2,10,-3.17,-140.96,0.72626,9,-1.44,-25.48,0.27374,2,10,-2.03,79.25,0.25249,9,-0.3,194.74,0.74751,2,10,-4.32,-199.16,0.4798,9,-2.58,-83.67,0.5202,2,10,-70.49,-188.89,0.42536,9,-68.76,-73.4,0.57464,2,10,54.68,-193.45,0.42901,9,56.42,-77.96,0.57099,2,10,-48.81,-137.54,0.69524,9,-47.08,-22.05,0.30476,2,10,39.04,-134.12,0.68899,9,40.78,-18.63,0.31101,2,10,-3.17,-166.07,0.60466,9,-1.44,-50.58,0.39534,2,10,-28.28,37.03,0.40749,9,-26.54,152.52,0.59251,2,10,31.06,39.31,0.48302,9,32.79,154.8,0.51698,2,10,-3.17,-29.15,0.53404,9,-1.44,86.34,0.46596,2,10,84.68,96.36,0.19082,9,86.42,211.85,0.80918,2,10,-71.63,89.52,0.17688,9,-69.9,205.01,0.82312,2,10,-104.72,104.35,0.08016,9,-102.99,219.84,0.91984,3,10,118.91,127.17,0.03256,11,118.91,127.17,0.0011,9,120.65,242.66,0.96634,2,11,131.46,183.08,0.23984,9,133.2,298.57,0.76016,2,11,-129.83,151.13,0.08046,9,-128.09,266.62,0.91954,2,10,-61.37,115.76,0.04075,9,-59.63,231.25,0.95925,2,10,0.25,114.62,0.06407,9,1.99,230.11,0.93593,2,10,58.44,112.34,0.07435,9,60.18,227.83,0.92565,2,11,99.52,159.12,0.15345,9,101.25,274.61,0.84655,2,11,-96.74,147.71,0.06159,9,-95,263.2,0.93841,2,10,227.31,-24.58,0.25194,9,229.05,90.91,0.74806,2,10,213.62,-87.34,0.30876,9,215.35,28.15,0.69124,2,10,207.91,32.47,0.31184,9,209.65,147.96,0.68816,3,10,-227.95,-30.29,0.26918,11,-227.95,-30.29,0.05011,9,-226.21,85.2,0.6807,3,10,-215.4,31.33,0.24851,11,-215.4,31.33,0.02152,9,-213.66,146.81,0.72997,2,10,-202.85,-99.89,0.2927,9,-201.11,15.6,0.7073,2,10,-95.6,66.7,0.27831,9,-93.86,182.19,0.72169,2,10,88.11,62.13,0.4333,9,89.84,177.62,0.5667,2,10,56.16,71.26,0.36297,9,57.9,186.75,0.63703,2,10,-52.24,71.26,0.28083,9,-50.5,186.75,0.71917,2,10,-125.26,-40.56,0.46719,9,-123.52,74.93,0.53281,2,10,124.62,-34.85,0.68177,9,126.36,80.64,0.31823,2,10,-36.26,-97.61,0.80548,9,-34.53,17.88,0.19452,2,10,39.04,-99.89,0.77666,9,40.78,15.6,0.22334,3,10,189.65,96.36,0.11792,11,189.65,96.36,3.0E-5,9,191.39,211.85,0.88205,3,10,239.86,40.45,0.1113,11,239.86,40.45,0.02801,9,241.6,155.94,0.86068,3,10,256.97,-23.44,0.07223,11,256.97,-23.44,0.0013,9,258.71,92.05,0.92647,2,10,244.42,-107.88,0.12196,9,246.16,7.61,0.87804,2,10,-190.3,102.07,0.02441,9,-188.56,217.56,0.97559,3,10,-248.49,41.6,0.09967,11,-248.49,41.6,0.07803,9,-246.75,157.08,0.8223,3,10,-259.9,-40.56,0.14162,11,-259.9,-40.56,0.05098,9,-258.16,74.93,0.8074,2,10,-216.54,-121.57,0.14701,9,-214.8,-6.08,0.85299,2,10,-181.17,-166.07,0.19633,9,-179.43,-50.58,0.80367,2,10,-136.67,-183.18,0.35738,9,-134.93,-67.69,0.64262,3,10,172.54,-176.34,0.23906,11,172.54,-176.34,0.00239,9,174.28,-60.85,0.75855,2,10,108.64,-184.32,0.37393,9,110.38,-68.83,0.62607,2,10,207.91,-142.11,0.22094,9,209.65,-26.62,0.77906],"hull":25}},"leaf-1":{"owl/leaf-1":{"x":93.08,"y":-14.9,"rotation":-86.78,"width":152,"height":202}},"leaf-2":{"owl/leaf-2":{"x":84.31,"y":7.56,"rotation":65.1,"width":130,"height":189}},"leaf-3":{"owl/leaf-3":{"x":115.81,"y":28.41,"rotation":32.57,"width":263,"height":154}},"leaf-4":{"owl/leaf-4":{"x":70.16,"y":-4.79,"rotation":174.22,"width":178,"height":98}},"leaf-5":{"owl/leaf-5":{"x":89.18,"y":24.8,"rotation":-81.12,"width":106,"height":211}},"leaf-6":{"owl/leaf-6":{"x":107.78,"y":6.61,"rotation":-109.98,"width":176,"height":231}},"leaf-7":{"owl/leaf-7":{"x":83.07,"y":-8.64,"rotation":-58.07,"width":108,"height":172}},"wood":{"owl/wood":{"type":"mesh","uvs":[0.11021,1,0.15566,0.95336,0.21123,0.8928,0.22028,0.83577,0.28362,0.72988,0.35481,0.68032,0.39623,0.67196,0.46043,0.59021,0.69783,0.62777,0.7172,0.63585,0.73175,0.62498,0.7584,0.58795,0.83734,0.52487,0.88376,0.45904,0.89542,0.44525,0.902,0.42073,0.93407,0.35365,0.93428,0.24657,0.95942,0.18869,1,0.10133,1,0.04501,0.97874,0.0803,0.96743,0.09908,0.91739,0.18018,0.90399,0.28117,0.87848,0.08782,0.85736,0.10809,0.89108,0.29728,0.89525,0.3207,0.88552,0.37054,0.87781,0.40495,0.86852,0.42127,0.84031,0.43039,0.72738,0.5583,0.71396,0.5716,0.69722,0.56699,0.44709,0.50234,0.35592,0.55641,0.26039,0.63925,0.18238,0.78349,0.08762,0.77081,0,0.88984,0,1,0.40039,0.56993,0.71762,0.60099,0.88511,0.42365,0.89924,0.29751,0.93733,0.18329,0.98584,0.10003],"triangles":[24,26,25,27,26,24,19,48,21,22,21,48,19,21,20,47,23,22,18,47,22,48,18,22,19,18,48,46,27,24,28,27,46,17,23,47,17,47,18,24,23,17,16,24,17,46,24,16,28,46,16,29,28,16,15,29,16,45,30,29,29,15,45,14,45,15,45,31,30,13,31,45,13,45,14,32,31,13,12,32,13,12,33,32,11,33,12,33,11,44,33,44,34,10,44,11,10,9,44,7,36,35,43,36,7,44,8,35,44,35,34,9,8,44,7,35,8,6,43,7,43,37,36,43,5,37,5,38,37,43,6,5,4,38,5,4,39,38,3,39,4,2,39,3,2,1,40,2,40,39,41,40,1,0,42,41,1,0,41],"vertices":[1,1,46.94,-64.01,1,1,1,109.8,-64.9,1,1,1,187.66,-64.09,1,1,1,213.68,-38.52,1,1,1,312.85,-17.71,1,1,1,404.67,-31.78,1,2,1,452.3,-51.01,0.87274,2,-4.36,-61.57,0.12726,2,1,545.58,-43.72,1.0E-5,2,72.59,-8.34,0.99999,1,2,366.26,-18.28,1,2,2,390.36,-22.14,0.6578,5,-12.06,-18.6,0.3422,2,2,408.01,-14.74,0.23428,5,6.92,-21.06,0.76572,1,5,46.51,-16.33,1,1,5,150.63,-27.46,1,2,5,219.97,-18.5,0.91238,6,-20.61,-7.15,0.08762,2,5,236.6,-17.73,0.53313,6,-7.17,-17,0.46687,3,5,250.73,-8.27,0.14373,6,9.76,-18.5,0.85627,7,-125.56,-82.45,0,3,1,1130.1,-187.59,0,6,62.99,-38.53,0.99998,7,-68.96,-76.91,2.0E-5,3,1,1160.61,-129.96,0,6,122.91,-12.79,0.99739,7,-26.57,-27.34,0.00261,3,1,1204.46,-113.15,0,6,167.6,-27.21,0.08864,7,19.88,-20.53,0.91136,1,7,92.49,-12.37,1,2,1,1267.69,-76.61,0,7,89.58,1.28,1,2,6,237.64,-22.79,2.0E-5,7,80.77,14.37,0.99998,2,6,221.59,-14.54,1.8E-4,7,62.73,14.68,0.99982,2,6,151.7,22.42,0.82914,7,-16.3,16.96,0.17086,1,6,88.7,13.1,1,1,8,126.5,-18.92,1,1,8,123.36,9.75,1,2,1,1099.06,-132.55,0,8,0.87,8.12,1,1,6,62.32,13.4,1,3,1,1072.27,-168.88,0,6,29.7,12.32,0.99766,8,-39.05,29.19,0.00234,3,1,1054.11,-183.01,0,5,228.74,14.09,0.34735,6,6.69,12.71,0.65265,3,1,1039.34,-186.49,0,5,213.97,10.6,0.97536,6,-7,19.26,0.02464,2,1,1005.93,-175.25,0,5,180.55,21.82,1,3,1,846.33,-179.5,0,2,400.82,25.59,0.04218,5,20.96,17.42,0.95782,3,1,827.91,-178.99,0,2,384.64,16.77,0.61297,5,2.54,17.93,0.38703,3,1,810.92,-166.91,0,2,363.88,18.67,0.98073,5,-14.46,29.99,0.01927,1,2,53.78,44.39,1,2,1,440.93,34.41,1,7,-692.85,290.52,0,1,1,313.11,44.48,1,1,1,187.05,11.39,1,1,1,87.08,72.55,1,1,1,-42.34,58.57,1,1,1,-73.5,-0.85,1,2,1,485.71,1.63,0.55579,2,-1.97,0.73,0.44421,2,2,389.94,-0.91,0.56026,5,-1.76,-0.03,0.43974,2,5,231.44,-0.18,0.48669,6,-0.17,-0.09,0.51331,1,6,77.24,14.52,1,3,1,1181.84,-97.57,0,6,159.76,-0.89,0.45723,7,1.23,-0.39,0.54277,1,7,79.68,-0.46,1],"hull":43}}}}],"animations":{"blink":{"slots":{"L_eye-closed":{"attachment":[{"time":0.4667,"name":"owl/L_eye-closed"},{"time":0.5333,"name":null},{"time":1.8333,"name":"owl/L_eye-closed"},{"time":1.9333,"name":null}]},"R_eye-closed":{"attachment":[{"time":0.4667,"name":"owl/R_eye-closed"},{"time":0.5333,"name":null},{"time":1.8333,"name":"owl/R_eye-closed"},{"time":1.9,"name":null},{"time":5.2333,"name":null}]}}},"down":{"bones":{"control":{"rotate":[{"angle":-4.49}],"translate":[{"x":0.49,"y":-67.91}],"scale":[{"y":0.847}]},"tail-feathers":{"translate":[{"x":-1.43,"y":32.34}],"scale":[{"x":0.829}]},"body-top-control":{"translate":[{"x":-25.53,"y":-33.19}]},"head":{"rotate":[{"angle":16.75}],"translate":[{"x":-113.66}],"scale":[{"x":1.017,"y":1.017}]},"control-back":{"translate":[{"y":6.82}]},"branch-2":{"rotate":[{"angle":-13.73}],"shear":[{}]},"branch-1":{"rotate":[{"angle":-10.56}],"shear":[{}]},"branch-3":{"rotate":[{"angle":0.72}]},"branch-4":{"rotate":[{"angle":0.72}]},"branch-6":{"rotate":[{"angle":6.85}]},"leaf-2":{"rotate":[{"angle":-13.94}]},"leaf-3":{"rotate":[{"angle":-34.11}]},"leaf-5":{"rotate":[{"angle":-49.78}]}},"deform":{"default":{"L_foot":{"owl/L_foot":[{"vertices":[0.18475,-11.92622,1.50322,-1.16228,9.49197,-2.14086,8.17357,-12.90479]}]},"L_wing":{"owl/L_wing":[{"vertices":[-72.47807,0,3.19443,-72.4077,-72.47807,0,3.19443,-72.4077,-72.47807,0,3.19443,-72.4077,26.35396,-20.44797,19.26654,27.22954]}]},"R_foot":{"owl/R_foot":[{"vertices":[10.15533,0.83983,14.67896,-12.2128,4.99141,-15.57014,0.4679,-2.5175]}]},"R_wing":{"owl/R_wing":[{"vertices":[-72.47807,0,3.19443,-72.4077,-72.47807,0,3.19443,-72.4077,-6.02205,15.33593,-15.05563,-6.6922,-72.47807,0,3.19443,-72.4077]}]},"head-base":{"owl/head-base":[{"offset":7,"vertices":[14.94373,0,12.65295,0,12.65233,-1.0E-5,67.01102,-1.0E-5,56.73529,0,56.73491,-1.0E-5,67.71835,-1.0E-5,57.33374,0,57.33344,-1.0E-5,67.71835,0,57.33344,-1.0E-5,67.34274,-1.0E-5,57.01584,0,57.01547,0,20.78079,-1.0E-5,17.5946,0,17.59413,0,0,0,0,0,0,0,0,0,0,0,0,0,4.65256,0,3.94009,0,3.93906,0,8.86218,-1.0E-5,7.50494,0,7.50377,3.80679,7.12328,2.63647,5.78107,2.6363,5.77944,6.80575,-18.05002,6.80558,-18.05162,6.80575,-18.05002,6.80558,-18.05162,6.80575,-18.05002,6.80558,-18.05162,6.80575,-18.05002,6.80558,-18.05162,4.0068,-9.92122,4.00659,-9.92301,2.52487,-0.27368,2.5247,-0.27514,0.78302,16.37561,0.78287,16.3739,0,20.84903,0,20.84752,0,20.84903,0,20.84752,0,20.84903,0,20.84752,0,20.84903,0,20.84752,0,20.84903,0,20.84752,0,3.59885,0,3.59729,0,0.78192,0,0.66266,0,-0.8714,0,-0.73761,0,14.92346,0,12.63475,0,15.32294,0,12.97321,0,20.35486,0,17.2334,0.25634,7.79885,0.1778,6.58624,0,35.55524,0,30.10268,0,42.37582,0,35.87729,0,45.64838,0,38.64833,0,21.29605,0,18.03027,0,20.06952,0,16.99168,0,27.19852,0,23.02756,0,-2.28232,0,-1.93265,0,-4.93713,0,-4.18004,0,-4.41357,0,-3.73672,4.18564,-6.46916,2.8986,-5.75401,0,12.58502,0,10.65575,0,16.75674,0,14.18719,7.05116,-13.72548,4.88302,-12.08656,4.88288,-12.08753,6.80575,-18.05002,6.80558,-18.05162,0,20.84903,0,20.84752,0,18.38699,0,15.56738,2.47823,3.10307,1.71634,2.46333,5.14171,-9.52105,3.56069,-8.40152,6.80575,-18.05002,6.80558,-18.05162,0,20.84903,0,20.84752,0,-7.3945,0,-6.26045,0,-2.11862,0,-1.79346,0,-2.90344,0,-2.45781,0,-7.88242,0,-6.67371,0,-6.67361,0,-3.1828,0,-2.69247,0,-2.69414,0,0.65915,0,0.55807,0,1.86981,0,1.58313,0.06213,-3.64604,0.0432,-3.09045,0.91777,-1.83724,0.63572,-1.61568,0,6.82599,0,5.77931,0,-21.77914,0,-18.4391,0,-21.9791,0,-18.60844,0,5.51465,0,4.66925,0,6.16968,0,5.22366,2.15704,4.34937,1.49408,3.54054,1.49391,3.53944,0,6.90668,0,5.84891,0,5.84795,0,-1.7995,0,-1.5231,0,-1.52324,0,2.10727,0,1.78445,0,14.38007,0,12.17538,0,5.34238,0,4.52444,0,4.5231,0,-2.23868,0,-1.89496,0,-1.89513,0,7.08655,0,5.99965,0,31.15753,0,26.37973,0,42.88345,0,36.30704,0,39.49829,-1.0E-5,33.44131,0,33.44121,0,33.70972,0,28.54018,0,20.23813,0,17.13489]}]}}}},"idle":{"bones":{"body-top-control":{"rotate":[{}],"translate":[{"x":-2.24,"y":18.72},{"time":0.5667,"curve":"stepped"},{"time":0.8},{"time":1.4667,"x":-2.84,"y":17.73},{"time":1.9,"x":-3.43,"y":28.64},{"time":2.8,"curve":"stepped"},{"time":2.9667},{"time":3.6333,"x":-2.84,"y":17.73},{"time":4.1,"x":-3.43,"y":28.64},{"time":4.9667,"curve":"stepped"},{"time":5.2333},{"time":5.9,"x":-2.84,"y":17.73},{"time":6.3667,"x":-3.43,"y":28.64},{"time":6.6667,"x":-2.24,"y":18.72}]},"branch-2":{"rotate":[{"angle":0.09,"curve":"stepped"},{"time":2.0333,"angle":0.09},{"time":3.5,"angle":0.79},{"time":4.8333,"angle":0.09},{"time":5.9,"angle":-0.13},{"time":6.6667,"angle":0.09}],"shear":[{}]},"branch-4":{"rotate":[{"angle":-0.57},{"time":0.7667,"angle":-1.75},{"time":1.8667,"angle":-0.57}]},"branch-5":{"rotate":[{"angle":-0.75,"curve":"stepped"},{"time":1.1,"angle":-0.75},{"time":1.9,"angle":-0.83},{"time":2.6667,"angle":-0.75},{"time":5.6667,"angle":0.66},{"time":6.6667,"angle":-0.75}]},"tail-feathers":{"rotate":[{"curve":"stepped"},{"time":3.2333},{"time":3.3333,"angle":10.86},{"time":3.4,"angle":-13.26},{"time":3.4667,"angle":12.72},{"time":3.5333,"angle":-16.15},{"time":3.6333,"angle":-0.35},{"time":3.8}],"translate":[{},{"time":1.1,"x":-1.29,"y":21.82},{"time":2.2333},{"time":3.2667,"y":29.98},{"time":4.7333,"y":8.81},{"time":6.6667}],"scale":[{}]},"branch-3":{"rotate":[{},{"time":3.8333,"angle":-1.4},{"time":6.6667}]},"head":{"rotate":[{}],"translate":[{},{"time":1,"x":-19.41},{"time":4},{"time":4.6667,"x":-19.41},{"time":6.6667}],"scale":[{}],"shear":[{}]},"leaf-5":{"rotate":[{"angle":-2.05},{"time":0.3333},{"time":1,"angle":-4.1},{"time":1.6667},{"time":2.3333,"angle":-4.1},{"time":3},{"time":3.6667,"angle":-4.1},{"time":4.3333},{"time":5,"angle":-4.1},{"time":5.6667},{"time":6.3333,"angle":-4.1},{"time":6.6667,"angle":-2.05}]},"leaf-4":{"rotate":[{"angle":-2.05},{"time":0.3333},{"time":1,"angle":-4.1},{"time":1.6667},{"time":2.3333,"angle":-4.1},{"time":3},{"time":3.6667,"angle":-4.1},{"time":4.3333},{"time":5,"angle":-4.1},{"time":5.6667},{"time":6.3333,"angle":-4.1},{"time":6.6667,"angle":-2.05}]},"leaf-6":{"rotate":[{"angle":-4.1},{"time":0.3333,"angle":-2.05},{"time":0.6667},{"time":1.3333,"angle":-4.1},{"time":2},{"time":2.6667,"angle":-4.1},{"time":3.3333},{"time":4,"angle":-4.1},{"time":4.6667},{"time":5.3333,"angle":-4.1},{"time":6},{"time":6.6667,"angle":-4.1}]},"leaf-2":{"rotate":[{"angle":-2.05},{"time":0.3333},{"time":1,"angle":-4.1},{"time":1.6667},{"time":2.3333,"angle":-4.1},{"time":3},{"time":3.6667,"angle":-4.1},{"time":4.3333},{"time":5,"angle":-4.1},{"time":5.6667},{"time":6.3333,"angle":-4.1},{"time":6.6667,"angle":-2.05}]},"leaf-3":{"rotate":[{"angle":-4.1},{"time":0.3333,"angle":-2.05},{"time":0.6667},{"time":1.3333,"angle":-4.1},{"time":2},{"time":2.6667,"angle":-4.1},{"time":3.3333},{"time":4,"angle":-4.1},{"time":4.6667},{"time":5.3333,"angle":-4.1},{"time":6},{"time":6.6667,"angle":-4.1}]},"leaf-7":{"rotate":[{"angle":-2.05},{"time":0.3333},{"time":1,"angle":-4.1},{"time":1.6667},{"time":2.3333,"angle":-4.1},{"time":3},{"time":3.6667,"angle":-4.1},{"time":4.3333},{"time":5,"angle":-4.1},{"time":5.6667},{"time":6.3333,"angle":-4.1},{"time":6.6667,"angle":-2.05}]},"leaf-1":{"rotate":[{},{"time":0.6667,"angle":-4.1},{"time":1.3333},{"time":2,"angle":-4.1},{"time":2.6667},{"time":3.3333,"angle":-4.1},{"time":4},{"time":4.6667,"angle":-4.1},{"time":5.3333},{"time":6,"angle":-4.1},{"time":6.6667}]},"control":{"rotate":[{}],"translate":[{}],"scale":[{}]},"control-back":{"translate":[{}],"scale":[{}]},"branch-1":{"rotate":[{}],"shear":[{}]},"branch-6":{"rotate":[{}]},"owl-base":{"rotate":[{}],"translate":[{}],"scale":[{}]}},"deform":{"default":{"L_foot":{"owl/L_foot":[{}]},"L_wing":{"owl/L_wing":[{}]},"R_foot":{"owl/R_foot":[{}]},"R_wing":{"owl/R_wing":[{}]},"body":{"owl/body":[{}]},"head-base":{"owl/head-base":[{}]}}}},"left":{"bones":{"control":{"translate":[{"x":36.13,"y":-9.34}],"scale":[{"x":0.881}]},"body-top-control":{"rotate":[{}],"translate":[{"x":201.35,"y":7.73}]},"head":{"rotate":[{"angle":33.29}],"translate":[{"x":5.95,"y":-53.29}],"scale":[{"x":0.98}],"shear":[{"x":2.27,"y":-14.16}]},"control-back":{"translate":[{"x":-14.04,"y":-8.25}]},"tail-feathers":{"rotate":[{"angle":-21.71}],"translate":[{"x":-66.39,"y":-2.93}]},"branch-6":{"rotate":[{"angle":-12.55}]},"branch-1":{"rotate":[{"angle":-4.71}],"shear":[{"x":-0.6}]},"leaf-1":{"rotate":[{"angle":-7.07}]},"leaf-7":{"rotate":[{"angle":-1.77}]},"leaf-3":{"rotate":[{"angle":-45.61}]},"branch-2":{"rotate":[{"angle":-13.14}]},"branch-3":{"rotate":[{"angle":-3.9}]},"branch-4":{"rotate":[{"angle":-17.48}]},"leaf-2":{"rotate":[{"angle":-9.76}]},"leaf-5":{"rotate":[{"angle":-22}]},"leaf-4":{"rotate":[{"angle":-9.91}]},"leaf-6":{"rotate":[{"angle":-9.91}]}},"deform":{"default":{"L_foot":{"owl/L_foot":[{"vertices":[32.68079,-7.56046,32.68079,-7.56046,32.68079,-7.56046,32.68079,-7.56046]}]},"L_wing":{"owl/L_wing":[{"vertices":[-4.27489,26.67386,-26.45953,-5.4467,46.59749,18.47894,-20.51476,45.73743,13.95807,-43.26625,42.60894,15.85114,-36.91428,-35.07135,36.66417,-35.33297]}]},"R_foot":{"owl/R_foot":[{"vertices":[-20.46537,-32.39883,-25.30428,-2.89771,-3.40881,0.69367,1.43011,-28.8075]}]},"R_wing":{"owl/R_wing":[{"vertices":[18.48068,129.83382,-130.52315,12.7402,96.8046,109.6412,-113.80231,91.87796,38.92776,16.92949,-18.6298,38.14354,-39.39606,37.12224,-35.35072,-40.99409]}]},"head-base":{"owl/head-base":[{"offset":28,"vertices":[-3.41531,1.32523,-3.00798,1.32536,-3.00795,1.32538,-13.18137,2.46658,-11.60915,2.46693,-11.60909,2.46701,-24.95767,2.91684,-21.98106,2.91736,-21.98091,2.9175,-24.95767,2.91684,-21.98106,2.91736,-21.98091,2.9175,-24.95767,2.91684,-21.98106,2.91736,-21.98091,2.9175,-24.95767,2.91684,-21.98106,2.91736,-21.98091,2.9175,0,0,0,0,0,0,-13.94728,9.2356,-13.94693,9.23602,-34.88094,21.34346,-34.88048,21.34392,-34.03203,20.858,-34.03159,20.85857,-15.79938,10.16179,-15.79893,10.1624,-3.29639,2.12108,-3.29633,2.12112,0,0,0,0,0,0,0,0,-2.33473,-7.05453,-2.33449,-7.05409,-6.45872,-19.51779,-6.45844,-19.51738,-6.45872,-19.51779,-6.45844,-19.51738,-2.69571,-8.14571,-2.69562,-8.14552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.96945,0.53802,-0.85397,0.53859,0,0,0,0,0,0,0,0,-8.70248,4.69284,-7.66454,4.69325,-7.66441,4.69341,-27.66286,17.12148,-27.66251,17.12209,-1.01492,-3.06616,-1.01476,-3.06607,0,0,0,0,0,0,0,0,-2.82654,1.60172,-2.4894,1.60188,-15.98976,10.32721,-15.98938,10.3277,-0.64944,-1.96115,-0.64929,-1.96082,-8.67078,1.01303,-7.6366,1.01357,-2.97052,0.34692,-2.61644,0.3476,-10.75204,1.25653,-9.46964,1.25705,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-18.93701,2.21329,-16.67841,2.21358,-16.67833,2.21367,-16.15625,1.88818,-14.22923,1.8886,-14.22917,1.88867,-7.32959,0.85648,-6.4554,0.85704,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.45544,0.45947,-2.16273,0.45963,-2.16269,0.4597,-0.45786,0.17761,-0.40327,0.17772,-4.47153,0.83658,-3.93811,0.83688]}]}}}},"right":{"bones":{"control":{"rotate":[{"angle":-1.83}],"translate":[{"x":-27.71,"y":0.14}]},"head":{"rotate":[{"angle":0.36}],"translate":[{"x":-12.95,"y":32.1}],"scale":[{"x":0.949}],"shear":[{"y":12.9}]},"body-top-control":{"translate":[{"x":-198.07,"y":-21.06}]},"control-back":{"translate":[{"x":14.52,"y":22.15}],"scale":[{"x":0.824}]},"tail-feathers":{"rotate":[{"angle":12.67}],"translate":[{"x":85.12,"y":3.76}]},"branch-1":{"shear":[{"x":5.71}]},"leaf-1":{"rotate":[{"angle":-4.65}]},"leaf-7":{"rotate":[{"angle":-0.49}]},"branch-2":{"rotate":[{"angle":14.88}],"shear":[{"y":7.92}]},"branch-6":{"rotate":[{"angle":22.6}]},"leaf-4":{"rotate":[{"angle":33.05}]},"leaf-6":{"rotate":[{"angle":9.92}]},"leaf-3":{"rotate":[{"angle":-0.07}]},"branch-4":{"rotate":[{"angle":7.3}]},"leaf-5":{"rotate":[{"angle":14.96}]},"leaf-2":{"rotate":[{"angle":-12.1}]},"branch-3":{"rotate":[{"angle":5.4}]}},"deform":{"default":{"L_foot":{"owl/L_foot":[{"vertices":[39.31265,4.41002,41.72089,-32.44155,14.37022,-34.22886,11.96194,2.62272]}]},"L_wing":{"owl/L_wing":[{"vertices":[117.33383,-45.40262,40.18668,119.21864,56.25742,-57.3571,54.82147,58.72855,-3.51584,22.62314,-22.44652,-4.51169,57.56076,34.57768,-37.08134,55.97851]}]},"R_foot":{"owl/R_foot":[{"vertices":[-30.70229,-18.33,-30.70229,-18.33,-30.70229,-18.33,-30.70229,-18.33]}]},"R_wing":{"owl/R_wing":[{"vertices":[109.29965,-8.02332,3.1934,109.53658,-6.01328,-56.23985,56.44511,-3.53917,-150.89093,30.36821,-23.69317,-152.09174,-25.20395,129.73512,-128.50223,-30.90591]}]},"head-base":{"owl/head-base":[{"vertices":[11.1344,-1.06403,13.4433,-1.51923,11.08145,-1.51938,12.53537,-1.19803,15.13455,-1.71051,12.47559,-1.71072,0,0,0,0,0,0,0,0,0,0,0,0,0.56973,0.88794,0.60562,0.86386,7.85834,12.59955,10.15225,12.26709,8.36813,12.26724,3.38986,7.69897,4.49231,7.55347,3.70251,7.55368,-0.97604,5.23138,-0.92181,5.26715,-0.76071,5.26755,1.32083,22.53156,2.72308,22.45892,2.24338,22.45923,-3.96936,19.33832,-3.84851,19.48505,-3.17334,19.48557,-6.3392,31.11188,-6.13593,31.3457,-5.05893,31.34583,-24.94391,28.39221,-28.82199,29.39117,-23.75919,29.3912,-56.22678,14.04083,-46.34955,14.04099,-56.22678,14.04083,-46.34955,14.04099,-56.22678,14.04083,-46.34955,14.04099,-38.34558,15.25574,-31.60992,15.2561,-7.34616,3.76868,-6.05621,3.76898,0,0,0,0,2.16394,-6.08075,1.78259,-6.08026,6.83832,-19.22064,5.63589,-19.22021,6.83832,-19.22064,5.63589,-19.22021,6.83832,-19.22064,5.63589,-19.22021,3.1478,-8.84509,2.59338,-8.84448,38.20682,-13.54205,31.49402,-13.54196,22.70163,-2.56564,18.71329,-2.56577,0,0,0,0,-0.43359,3.77911,-0.27841,3.79391,0.11462,0.26648,0.12549,0.26163,1.81287,-0.17331,1.80423,-0.24731,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.63617,1.49402,-3.11993,1.60059,-2.57245,1.6011,-23.26324,6.68951,-19.1777,6.68982,1.72217,-4.84058,1.41837,-4.8396,0.2225,-0.6604,0.1955,-0.66821,0,0,0,0,0,0,0,0,-17.02399,8.7337,-14.03403,8.73428,3.4574,-9.71698,2.84891,-9.71613,1.56943,4.6452,1.7587,4.57733,-0.13034,0.7984,-0.0975,0.80319,-0.81927,3.48224,-0.67593,3.51291,11.55099,-1.10391,13.94623,-1.57617,11.49603,-1.57617,7.56793,-0.7233,9.13727,-1.03268,7.53198,-1.03275,1.63562,-0.15628,1.62781,-0.22321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-5.16141,15.28809,-5.4942,15.48712,-4.53036,15.48749,-3.8877,17.94763,-3.81842,18.09192,-3.14871,18.09222,3.01028,16.62122,4.4769,16.48401,3.68909,16.48447,0.54437,3.79083,0.69931,3.76553,9.14157,-3.81387,8.9776,-4.18481,12.65292,-1.20917,15.27689,-1.72641,12.59274,-1.72662,20.33411,-1.94312,24.55048,-2.77457,20.23727,-2.77475,5.69284,-0.54407,5.66556,-0.77692,5.24939,-0.50168,5.22458,-0.71631,0,0,0,0,4.19965,7.2785,5.45303,7.10022,4.49445,7.10037,1.8887,2.94391,2.00775,2.86407,1.66986,3.74084,1.82175,3.6698]}]}}}},"up":{"bones":{"control":{"translate":[{"x":0.3,"y":34.37}],"scale":[{"y":0.82}]},"control-back":{"translate":[{"y":-17.04}]},"owl-base":{"rotate":[{"angle":-4.43}],"translate":[{"x":18.2,"y":11.22}],"scale":[{"x":0.966}]},"tail-feathers":{"translate":[{"x":0.02,"y":-1.52}],"scale":[{"x":1.375}]},"body-top-control":{"translate":[{"x":-4.77,"y":214.56}]},"head":{"translate":[{"x":-7.82,"y":-13.16}]},"branch-1":{"rotate":[{"angle":4.94}],"shear":[{}]},"branch-2":{"rotate":[{"angle":0.52}]},"branch-3":{"rotate":[{"angle":1.64}]},"branch-4":{"rotate":[{"angle":-10.43}]},"branch-6":{"rotate":[{"angle":-5.42}]},"leaf-6":{"rotate":[{"angle":-5.42}]},"leaf-2":{"rotate":[{"angle":4.46}]}},"deform":{"default":{"L_foot":{"owl/L_foot":[{"vertices":[5.89397,0.69042,5.89397,0.69042,5.89397,0.69042,5.89397,0.69042]}]},"L_wing":{"owl/L_wing":[{"vertices":[-11.13373,20.07786,-19.56781,-12.00009,23.31055,16.37385,-17.38553,22.57391,17.65799,-39.82292,39.00579,19.4036,-16.78632,-36.11907,36.82366,-15.17023]}]},"R_foot":{"owl/R_foot":[{"vertices":[35.48705,-0.58566,32.90477,10.12547,40.85446,12.04202,43.43665,1.33094]}]},"R_wing":{"owl/R_wing":[{"vertices":[24.96088,-21.2647,20.14355,25.88189,6.7001,-22.29713,21.97984,7.68417,8.16104,-3.76462,3.40096,8.32676,26.42206,-2.73223,1.56473,26.52477]}]},"body":{"owl/body":[{"vertices":[9.78479,0.43167,-8.5E-4,-9.79428,-11.07703,-0.48866,-0.00134,11.08782,-20.53809,-0.9061,-28.18424,-1.2431,-4.9E-4,28.21165,-28.17087,-1.24221,-3.1E-4,28.19826,0,24.02027,-6.0E-5,11.5683,-1.2E-4,-13.20591,0,-22.67455,28.15435,1.2429,-5.5E-4,-28.18175,28.14419,1.24231,-0.0011,-28.17157,20.9281,0.92327,0.10129,0.00519,-1.2E-4,-0.10139,0.59372,0.02641,-7.3E-4,-0.59428,15.61523,0.6889,15.26075,0.674,-2.4E-4,-15.27561,0,-0.2351,-14.31816,-0.63171,-13.76835,-0.60672,-1.8E-4,13.78173,-1.2E-4,12.47625,0,-14.37328]}]},"head-base":{"owl/head-base":[{"vertices":[18.08182,3.28656,18.08179,2.69717,18.08178,2.69556,-2.08492,2.81512,-2.08508,2.31323,-2.08507,2.30927,-8.5588,0.05725,-8.55899,0.05139,-8.55895,0.04797,-3.56028,0.02087,-3.56047,0.02148,-3.56043,0.01813,4.05834,-0.03473,4.05819,-0.02759,10.06431,-0.07898,10.06412,-0.06018,10.06416,-0.06366,-1.18406,0.43097,-1.1842,0.3598,-1.1842,0.35504,-22.98684,1.70819,-22.98685,1.40356,-22.98685,1.40192,-22.18155,1.67535,-22.18157,1.3768,-22.18156,1.37482,-21.46276,1.13605,-21.46278,0.93509,-21.46278,0.93274,-11.08284,0.68683,-11.08286,0.56689,-11.08287,0.56433,0.1016,-3.78925,0.10144,-3.10156,0.10147,-3.10522,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,-1.74113,-4.18475,-1.7411,-4.18774,15.8009,1.18192,15.80089,1.1803,-1.88757,-4.98645,-1.8877,-4.08496,0.13537,-5.04669,0.13525,-4.13477,-4.33013,1.79584,-4.33031,1.47333,4.45505,5.67249,4.45488,4.65088,0,0,0,0,0.18132,-6.76221,0.18118,-5.54102,0.40078,-0.00842,0.40061,-0.00568,-10.01764,0.73737,-10.0178,0.60657,10.43705,-0.08221,10.43689,-0.06635,0.27294,0.21985,0.27294,0.18121,0,0,0,0,0.17916,-0.00677,0.179,-0.00452,0.11242,-4.19293,0.11229,-3.43506,0.13193,-4.92053,0.13181,-4.03156,0.01666,-0.62231,0.01653,-0.50916,0.204,-7.60742,0.20387,-6.23346,0.1807,-6.73987,0.18056,-5.52264,0.2084,-7.77295,0.20825,-6.36969,0.23492,-8.75995,0.23476,-7.17548,0.2348,-7.1781,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,0.22325,-8.32697,0.22312,-6.82336,0.23393,-8.72394,0.2338,-7.14856,0.22255,-8.30029,0.22242,-6.80145,0.26772,-8.18402,0.26778,-8.18665,0.26772,-8.18402,0.26778,-8.18665,-3.50412,1.55554,-3.50416,1.27625,-5.88762,2.62024,-5.88765,2.1488,-0.90049,-1.34583,-0.90065,-1.10168,10.97694,4.55176,10.97691,3.73422,10.97687,3.73248,-4.2139,0.11591,-4.21404,0.10239,-4.21406,0.09705,4.95192,7.71997,4.95192,6.32831,0.15553,-5.79968,0.1554,-4.75214,0.1638,-6.10944,0.16368,-5.00592,0.1761,-6.56738,0.17597,-5.38116,0.16425,-6.12555,0.16413,-5.01947,2.14045,2.33923,2.1404,1.91858,-1.85151,-0.18054,-1.85164,-0.14532,0,0,0,0,0,0,0,0,0.14525,-5.41821,0.14508,-4.43677,0.14511,-4.43958,-1.12234,0.20605,-1.12251,0.17688,-1.1225,0.17065,-10.04741,1.59747,-10.04749,1.31299,-10.0475,1.31073,-9.60033,1.93549,-9.60038,1.58783,-1.90081,-5.94379,-1.90096,-4.87024,-0.06005,1.354,-0.06008,1.11313,-0.0601,1.11108,24.57889,4.97925,24.57886,4.08423,24.57883,4.08252,1.27811,5.86395,1.27796,4.80841,1.27968,3.76697,1.27951,3.08911,1.03323,2.66321,1.03302,2.18518,-2.23629,0.79535,-2.23643,0.65601,-2.23644,0.65265,3.64207,0.25793,3.6419,0.2124,-3.56169,1.526,-3.56186,1.25299]}]}}}}}},"vine":{"skeleton":{"hash":"dIGd0XXjIHAiaardMYPVX6LZFV0","spine":"3.8.14-beta","x":-18.96,"y":-137.56,"width":967.8,"height":232.06},"bones":[{"name":"root","rotation":270},{"name":"vine-control3","parent":"root","length":10,"rotation":90,"x":90.36,"y":736},{"name":"vine-control4","parent":"root","rotation":93.48,"x":-61.85,"y":929.25},{"name":"vine-control2","parent":"root","length":10,"rotation":90,"x":-47.41,"y":491},{"name":"vine-control1","parent":"root","length":10,"rotation":90,"x":81.79,"y":245},{"name":"base","parent":"root"},{"name":"vine1","parent":"root","length":74,"rotation":90,"x":339.1,"y":-467.15},{"name":"vine2","parent":"vine1","length":74,"x":74},{"name":"vine3","parent":"vine1","length":74,"rotation":38.95,"x":137.97,"y":47.51},{"name":"vine4","parent":"vine1","length":74,"rotation":16.68,"x":214.29,"y":68.52},{"name":"vine5","parent":"vine1","length":74,"rotation":-21.74,"x":289.61,"y":40.93},{"name":"vine6","parent":"vine1","length":74,"rotation":-50.04,"x":341.13,"y":-15.58},{"name":"vine7","parent":"vine1","length":74,"rotation":-39.26,"x":402.7,"y":-61.82},{"name":"vine8","parent":"vine1","length":74,"rotation":-6.18,"x":483.27,"y":-69.84},{"name":"vine9","parent":"vine1","length":74,"rotation":27.11,"x":554.26,"y":-36.44},{"name":"vine10","parent":"vine1","length":74,"rotation":48,"x":608.63,"y":19.06},{"name":"vine11","parent":"vine1","length":74,"rotation":39.71,"x":670.66,"y":66.4},{"name":"vine12","parent":"vine1","length":74,"rotation":10.73,"x":750.1,"y":80.23},{"name":"vine13","parent":"vine1","length":74,"rotation":-18.44,"x":826.07,"y":56.95}],"slots":[{"name":"vine-path","bone":"root","attachment":"vine-path"},{"name":"vine","bone":"vine1","attachment":"vine/vine"}],"ik":[{"name":"IK1","order":3,"bones":["vine-control1"],"target":"vine-control2"},{"name":"IK2","order":2,"bones":["vine-control2"],"target":"vine-control3"},{"name":"IK3","order":1,"bones":["vine-control3"],"target":"vine-control4"},{"name":"IK4","bones":["vine-control4"],"target":"vine-control3"},{"name":"IK5","order":4,"bones":["base"],"target":"vine-control1"}],"path":[{"name":"vine-path","order":5,"bones":["vine1","vine2","vine3","vine4","vine5","vine6","vine7","vine8","vine9","vine10","vine11","vine12","vine13"],"target":"vine-path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.077}],"skins":[{"name":"default","attachments":{"vine":{"vine/vine":{"type":"mesh","uvs":[0,0,0.5,0,1,0,1,0.03846,1,0.07692,1,0.11538,1,0.15385,1,0.19231,1,0.23077,1,0.26923,1,0.30769,1,0.34615,1,0.38462,1,0.42308,1,0.46154,1,0.5,1,0.53846,1,0.57692,1,0.61538,1,0.65385,1,0.69231,1,0.73077,1,0.76923,1,0.80769,1,0.84615,1,0.88462,1,0.92308,1,0.96154,1,1,0.5,1,0,1,0,0.96154,0,0.92308,0,0.88462,0,0.84615,0,0.80769,0,0.76923,0,0.73077,0,0.69231,0,0.65385,0,0.61538,0,0.57692,0,0.53846,0,0.5,0,0.46154,0,0.42308,0,0.38462,0,0.34615,0,0.30769,0,0.26923,0,0.23077,0,0.19231,0,0.15385,0,0.11538,0,0.07692,0,0.03846,0.5,0.03846,0.5,0.07692,0.5,0.11538,0.5,0.15385,0.5,0.19231,0.5,0.23077,0.5,0.26923,0.5,0.30769,0.5,0.34615,0.5,0.38462,0.5,0.42308,0.5,0.46154,0.5,0.5,0.5,0.53846,0.5,0.57692,0.5,0.61538,0.5,0.65385,0.5,0.69231,0.5,0.73077,0.5,0.76923,0.5,0.80769,0.5,0.84615,0.5,0.88462,0.5,0.92308,0.5,0.96154],"triangles":[55,0,1,56,1,2,55,1,56,56,2,3,54,55,56,57,56,3,57,3,4,53,54,57,58,57,4,53,57,58,58,4,5,52,53,58,59,58,5,54,56,57,52,58,59,59,5,6,51,52,59,60,59,6,51,59,60,60,6,7,50,51,60,61,60,7,50,60,61,61,7,8,49,50,61,62,61,8,49,61,62,62,8,9,48,49,62,63,62,9,48,62,63,63,9,10,47,48,63,64,63,10,47,63,64,64,10,11,46,47,64,65,64,11,46,64,65,65,11,12,45,46,65,66,65,12,45,65,66,66,12,13,44,45,66,67,66,13,44,66,67,67,13,14,43,44,67,68,67,14,43,67,68,68,14,15,42,43,68,69,68,15,42,68,69,69,15,16,41,42,69,70,69,16,41,69,70,70,16,17,40,41,70,71,70,17,40,70,71,71,17,18,39,40,71,72,71,18,39,71,72,72,18,19,38,39,72,73,72,19,38,72,73,73,19,20,37,38,73,74,73,20,37,73,74,74,20,21,36,37,74,75,74,21,36,74,75,75,21,22,35,36,75,76,75,22,35,75,76,76,22,23,34,35,76,77,76,23,34,76,77,77,23,24,33,77,78,78,24,25,32,33,78,79,78,25,32,78,79,33,34,77,78,77,24,31,32,79,80,79,26,31,79,80,80,26,27,30,31,80,29,80,27,30,80,29,29,27,28,79,25,26],"vertices":[2,17,146,33.89,0.21894,18,72,33.89,0.78106,2,17,146,-0.11,0.16997,18,72,-0.11,0.83003,2,17,146,-34.11,0.21894,18,72,-34.11,0.78106,3,16,183,-34.11,0.04748,17,109,-34.11,0.33417,18,35,-34.11,0.61835,3,16,146,-34.11,0.14279,17,72,-34.11,0.49762,18,-2,-34.11,0.35958,4,15,183,-34.11,0.04672,16,109,-34.11,0.31228,17,35,-34.11,0.48857,18,-39,-34.11,0.15243,4,15,146,-34.11,0.14271,16,72,-34.11,0.49271,17,-2,-34.11,0.3155,18,-76,-34.11,0.04909,4,14,183,-34.11,0.04729,15,109,-34.11,0.31604,16,35,-34.11,0.49369,17,-39,-34.11,0.14299,4,14,146,-34.11,0.14299,15,72,-34.11,0.49369,16,-2,-34.11,0.31604,17,-76,-34.11,0.04729,4,13,183,-34.11,0.04729,14,109,-34.11,0.31604,15,35,-34.11,0.49369,16,-39,-34.11,0.14299,4,13,146,-34.11,0.14299,14,72,-34.11,0.49369,15,-2,-34.11,0.31604,16,-76,-34.11,0.04729,4,12,183,-34.11,0.04729,13,109,-34.11,0.31604,14,35,-34.11,0.49369,15,-39,-34.11,0.14299,4,12,146,-34.11,0.14299,13,72,-34.11,0.49369,14,-2,-34.11,0.31604,15,-76,-34.11,0.04729,4,11,183,-34.11,0.04729,12,109,-34.11,0.31604,13,35,-34.11,0.49369,14,-39,-34.11,0.14299,4,11,146,-34.11,0.14299,12,72,-34.11,0.49369,13,-2,-34.11,0.31604,14,-76,-34.11,0.04729,4,10,183,-34.11,0.04729,11,109,-34.11,0.31604,12,35,-34.11,0.49369,13,-39,-34.11,0.14299,4,10,146,-34.11,0.14299,11,72,-34.11,0.49369,12,-2,-34.11,0.31604,13,-76,-34.11,0.04729,4,9,183,-34.11,0.04729,10,109,-34.11,0.31604,11,35,-34.11,0.49369,12,-39,-34.11,0.14299,4,9,146,-34.11,0.14299,10,72,-34.11,0.49369,11,-2,-34.11,0.31604,12,-76,-34.11,0.04729,4,8,183,-34.11,0.04729,9,109,-34.11,0.31604,10,35,-34.11,0.49369,11,-39,-34.11,0.14299,4,8,146,-34.11,0.14299,9,72,-34.11,0.49369,10,-2,-34.11,0.31604,11,-76,-34.11,0.04729,4,7,183,-34.11,0.04752,8,109,-34.11,0.31596,9,35,-34.11,0.49356,10,-39,-34.11,0.14296,4,7,146,-34.11,0.14433,8,72,-34.11,0.49291,9,-2,-34.11,0.31554,10,-76,-34.11,0.04721,4,6,183,-34.11,0.04107,7,109,-34.11,0.32351,8,35,-34.11,0.49271,9,-39,-34.11,0.14271,4,6,146,-34.11,0.12766,7,72,-34.11,0.51334,8,-2,-34.11,0.31227,9,-76,-34.11,0.04672,3,6,109,-34.11,0.30479,7,35,-34.11,0.55251,8,-39,-34.11,0.14271,3,6,72,-34.11,0.55512,7,-2,-34.11,0.39816,8,-76,-34.11,0.04672,2,6,35,-34.11,0.78922,7,-39,-34.11,0.21078,2,6,-2,-34.11,0.89275,7,-76,-34.11,0.10725,2,6,-2,-0.11,0.92721,7,-76,-0.11,0.07279,2,6,-2,33.89,0.89275,7,-76,33.89,0.10725,2,6,35,33.89,0.78922,7,-39,33.89,0.21078,3,6,72,33.89,0.55512,7,-2,33.89,0.39816,8,-76,33.89,0.04672,3,6,109,33.89,0.30479,7,35,33.89,0.55251,8,-39,33.89,0.14271,4,6,146,33.89,0.12766,7,72,33.89,0.51334,8,-2,33.89,0.31227,9,-76,33.89,0.04672,4,6,183,33.89,0.04107,7,109,33.89,0.32351,8,35,33.89,0.49271,9,-39,33.89,0.14271,4,7,146,33.89,0.14433,8,72,33.89,0.49291,9,-2,33.89,0.31554,10,-76,33.89,0.04721,4,7,183,33.89,0.04752,8,109,33.89,0.31596,9,35,33.89,0.49356,10,-39,33.89,0.14296,4,8,146,33.89,0.14299,9,72,33.89,0.49369,10,-2,33.89,0.31604,11,-76,33.89,0.04729,4,8,183,33.89,0.04729,9,109,33.89,0.31604,10,35,33.89,0.49369,11,-39,33.89,0.14299,4,9,146,33.89,0.14299,10,72,33.89,0.49369,11,-2,33.89,0.31604,12,-76,33.89,0.04729,4,9,183,33.89,0.04729,10,109,33.89,0.31604,11,35,33.89,0.49369,12,-39,33.89,0.14299,4,10,146,33.89,0.14299,11,72,33.89,0.49369,12,-2,33.89,0.31604,13,-76,33.89,0.04729,4,10,183,33.89,0.04729,11,109,33.89,0.31604,12,35,33.89,0.49369,13,-39,33.89,0.14299,4,11,146,33.89,0.14299,12,72,33.89,0.49369,13,-2,33.89,0.31604,14,-76,33.89,0.04729,4,11,183,33.89,0.04729,12,109,33.89,0.31604,13,35,33.89,0.49369,14,-39,33.89,0.14299,4,12,146,33.89,0.14299,13,72,33.89,0.49369,14,-2,33.89,0.31604,15,-76,33.89,0.04729,4,12,183,33.89,0.04729,13,109,33.89,0.31604,14,35,33.89,0.49369,15,-39,33.89,0.14299,4,13,146,33.89,0.14299,14,72,33.89,0.49369,15,-2,33.89,0.31604,16,-76,33.89,0.04729,4,13,183,33.89,0.04729,14,109,33.89,0.31604,15,35,33.89,0.49369,16,-39,33.89,0.14299,4,14,146,33.89,0.14299,15,72,33.89,0.49369,16,-2,33.89,0.31604,17,-76,33.89,0.04729,4,14,183,33.89,0.04729,15,109,33.89,0.31604,16,35,33.89,0.49369,17,-39,33.89,0.14299,4,15,146,33.89,0.14271,16,72,33.89,0.49271,17,-2,33.89,0.3155,18,-76,33.89,0.04909,4,15,183,33.89,0.04672,16,109,33.89,0.31228,17,35,33.89,0.48857,18,-39,33.89,0.15243,3,16,146,33.89,0.14279,17,72,33.89,0.49762,18,-2,33.89,0.35958,3,16,183,33.89,0.04748,17,109,33.89,0.33417,18,35,33.89,0.61835,3,16,183,-0.11,0.03069,17,109,-0.11,0.31679,18,35,-0.11,0.65252,3,16,146,-0.11,0.11465,17,72,-0.11,0.5508,18,-2,-0.11,0.33455,4,15,183,-0.11,0.03047,16,109,-0.11,0.30393,17,35,-0.11,0.54628,18,-39,-0.11,0.11931,4,15,146,-0.11,0.11465,16,72,-0.11,0.54869,17,-2,-0.11,0.30539,18,-76,-0.11,0.03128,4,14,183,-0.11,0.03064,15,109,-0.11,0.30559,16,35,-0.11,0.54905,17,-39,-0.11,0.11473,4,14,146,-0.11,0.11473,15,72,-0.11,0.54905,16,-2,-0.11,0.30559,17,-76,-0.11,0.03064,4,13,183,-0.11,0.03064,14,109,-0.11,0.30559,15,35,-0.11,0.54905,16,-39,-0.11,0.11473,4,13,146,-0.11,0.11473,14,72,-0.11,0.54905,15,-2,-0.11,0.30559,16,-76,-0.11,0.03064,4,12,183,-0.11,0.03064,13,109,-0.11,0.30559,14,35,-0.11,0.54905,15,-39,-0.11,0.11473,4,12,146,-0.11,0.11473,13,72,-0.11,0.54905,14,-2,-0.11,0.30559,15,-76,-0.11,0.03064,4,11,183,-0.11,0.03064,12,109,-0.11,0.30559,13,35,-0.11,0.54905,14,-39,-0.11,0.11473,4,11,146,-0.11,0.11473,12,72,-0.11,0.54905,13,-2,-0.11,0.30559,14,-76,-0.11,0.03064,4,10,183,-0.11,0.03064,11,109,-0.11,0.30559,12,35,-0.11,0.54905,13,-39,-0.11,0.11473,4,10,146,-0.11,0.11473,11,72,-0.11,0.54905,12,-2,-0.11,0.30559,13,-76,-0.11,0.03064,4,9,183,-0.11,0.03064,10,109,-0.11,0.30559,11,35,-0.11,0.54905,12,-39,-0.11,0.11473,4,9,146,-0.11,0.11473,10,72,-0.11,0.54905,11,-2,-0.11,0.30559,12,-76,-0.11,0.03064,4,8,183,-0.11,0.03064,9,109,-0.11,0.30559,10,35,-0.11,0.54905,11,-39,-0.11,0.11473,4,8,146,-0.11,0.11473,9,72,-0.11,0.54905,10,-2,-0.11,0.30559,11,-76,-0.11,0.03064,4,7,183,-0.11,0.03064,8,109,-0.11,0.30559,9,35,-0.11,0.54905,10,-39,-0.11,0.11473,4,7,146,-0.11,0.11531,8,72,-0.11,0.54869,9,-2,-0.11,0.30539,10,-76,-0.11,0.03062,3,7,109,-0.11,0.31832,8,35,-0.11,0.56386,9,-39,-0.11,0.11782,4,6,146,-0.11,0.09912,7,72,-0.11,0.56648,8,-2,-0.11,0.30393,9,-76,-0.11,0.03047,3,6,109,-0.11,0.27809,7,35,-0.11,0.60726,8,-39,-0.11,0.11465,3,6,72,-0.11,0.55966,7,-2,-0.11,0.40987,8,-76,-0.11,0.03047,2,6,35,-0.11,0.82292,7,-39,-0.11,0.17708],"hull":56}},"vine-path":{"vine-path":{"type":"path","lengths":[269.5,565.44,867.92,1114.7,2397.92],"vertexCount":15,"vertices":[1,4,-577.51,81.19,1,1,5,0.15,-0.34,1,1,5,97.86,-4.65,1,1,4,-110.19,0.87,1,1,4,-0.88,1.33,1,1,4,88.25,3.74,1,1,3,-112.14,0.22,1,1,3,-0.31,0.32,1,1,3,117.4,-0.79,1,1,1,-109.9,0.44,1,1,1,-0.9,0.38,1,1,1,97.24,1.94,1,1,2,108.44,-1.44,1,1,2,0.12,0.17,1,1,4,929.99,-307.12,1]}}}}],"animations":{"animation":{"slots":{"vine":{"color":[{"color":"ffcb73ff","curve":0.25,"c3":0.75},{"time":10.3667,"color":"fefaffff"}]}},"bones":{"vine1":{"scale":[{"x":0.1,"y":0.1,"curve":0.107,"c2":0.51,"c3":0.398,"c4":1.16},{"time":5.1667,"curve":"stepped"},{"time":8.7,"curve":0.881,"c2":0.14,"c3":0.971,"c4":0.23},{"time":10.3667,"y":0.035}]}},"path":{"vine-path":{"spacing":[{"curve":0.25,"c3":0.75},{"time":5.1667,"spacing":0.083,"curve":0.181,"c2":0.5,"c3":0.711,"c4":0.54},{"time":7.0333,"spacing":0.08,"curve":0.503,"c2":0.05,"c3":0.824,"c4":0.56},{"time":10.3667}]}}}}}} \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/assets/heroes.atlas b/apps/module-ts/src/spine-ts/webgl/demos/assets/heroes.atlas new file mode 100755 index 0000000..e8edf59 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/assets/heroes.atlas @@ -0,0 +1,2917 @@ + +heroes.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +Assassin/Assassin_arm_lower_far + rotate: false + xy: 128, 133 + size: 40, 43 + orig: 85, 69 + offset: 22, 13 + index: -1 +Assassin/Assassin_arm_lower_near + rotate: true + xy: 231, 115 + size: 40, 43 + orig: 85, 69 + offset: 23, 15 + index: -1 +Assassin/Assassin_arm_upper_far + rotate: true + xy: 56, 148 + size: 31, 60 + orig: 99, 93 + offset: 33, 16 + index: -1 +Assassin/Assassin_arm_upper_near + rotate: true + xy: 539, 177 + size: 32, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +Assassin/Assassin_foot_far_1 + rotate: false + xy: 390, 138 + size: 63, 28 + orig: 107, 58 + offset: 24, 14 + index: -1 +Assassin/Assassin_foot_far_2_bent + rotate: false + xy: 603, 192 + size: 56, 36 + orig: 101, 64 + offset: 21, 13 + index: -1 +Assassin/Assassin_foot_near_1 + rotate: false + xy: 64, 118 + size: 62, 28 + orig: 107, 58 + offset: 25, 14 + index: -1 +Assassin/Assassin_foot_near_2_bent + rotate: false + xy: 2, 189 + size: 56, 36 + orig: 101, 64 + offset: 21, 14 + index: -1 +Assassin/Assassin_hand_far_1_fistBack + rotate: true + xy: 836, 57 + size: 36, 35 + orig: 67, 53 + offset: 15, 8 + index: -1 +Assassin/Assassin_hand_far_2_fistPalm + rotate: false + xy: 2, 44 + size: 36, 33 + orig: 67, 53 + offset: 16, 9 + index: -1 +Assassin/Assassin_hand_near_1_fistBack + rotate: false + xy: 983, 54 + size: 36, 35 + orig: 67, 53 + offset: 17, 7 + index: -1 +Assassin/Assassin_hand_near_2_fistPalm + rotate: false + xy: 639, 43 + size: 36, 33 + orig: 67, 53 + offset: 15, 11 + index: -1 +Assassin/Assassin_head_1 + rotate: false + xy: 2, 714 + size: 136, 108 + orig: 179, 179 + offset: 18, 13 + index: -1 +Assassin/Assassin_head_2_injured + rotate: false + xy: 140, 700 + size: 136, 108 + orig: 179, 179 + offset: 18, 11 + index: -1 +Assassin/Assassin_leg_lower_far + rotate: false + xy: 983, 827 + size: 37, 63 + orig: 64, 107 + offset: 17, 22 + index: -1 +Assassin/Assassin_leg_lower_near_1 + rotate: false + xy: 278, 745 + size: 37, 63 + orig: 64, 107 + offset: 17, 22 + index: -1 +Assassin/Assassin_leg_lower_near_2 + rotate: true + xy: 125, 329 + size: 38, 63 + orig: 64, 107 + offset: 16, 23 + index: -1 +Assassin/Assassin_leg_upper_far + rotate: true + xy: 210, 61 + size: 25, 49 + orig: 58, 89 + offset: 17, 17 + index: -1 +Assassin/Assassin_leg_upper_near + rotate: true + xy: 43, 62 + size: 26, 49 + orig: 58, 89 + offset: 16, 17 + index: -1 +Assassin/Assassin_neck + rotate: true + xy: 705, 13 + size: 22, 20 + orig: 43, 36 + offset: 11, 8 + index: -1 +Assassin/Assassin_torso + rotate: false + xy: 817, 410 + size: 73, 70 + orig: 169, 149 + offset: 50, 36 + index: -1 +Assassin/Assassin_waist + rotate: true + xy: 490, 311 + size: 46, 49 + orig: 93, 71 + offset: 25, 12 + index: -1 +BeardyBuck/BeardyBuck_arm_lower_near + rotate: true + xy: 261, 35 + size: 27, 42 + orig: 85, 69 + offset: 28, 14 + index: -1 +BeardyBuck/BeardyBuck_arm_upper_far + rotate: true + xy: 650, 230 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +Buck/BuckMatthews_arm_upper_far + rotate: true + xy: 650, 230 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +BeardyBuck/BeardyBuck_arm_upper_near + rotate: false + xy: 310, 225 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +BeardyBuck/BeardyBuck_foot_far_1 + rotate: false + xy: 170, 116 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +BeardyBuck/BeardyBuck_foot_near_1 + rotate: false + xy: 170, 116 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +Buck/BuckMatthews_foot_far_1 + rotate: false + xy: 170, 116 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +Buck/BuckMatthews_foot_near_1 + rotate: false + xy: 170, 116 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +Duck/DuckMatthews_foot_far_1 + rotate: false + xy: 170, 116 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +Duck/DuckMatthews_foot_near_1 + rotate: false + xy: 170, 116 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +Truck/TruckMatthews_foot_far_1 + rotate: false + xy: 170, 116 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +Truck/TruckMatthews_foot_near_1 + rotate: false + xy: 170, 116 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +YoungBuck/YoungBuck_foot_far_1 + rotate: false + xy: 170, 116 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +YoungBuck/YoungBuck_foot_near_1 + rotate: false + xy: 170, 116 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +BeardyBuck/BeardyBuck_foot_far_2_bent + rotate: false + xy: 2, 298 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +BeardyBuck/BeardyBuck_foot_near_2_bent + rotate: false + xy: 2, 298 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +Buck/BuckMatthews_foot_far_2_bent + rotate: false + xy: 2, 298 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +Buck/BuckMatthews_foot_near_2_bent + rotate: false + xy: 2, 298 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +Chuck/ChuckMatthews_foot_far_2_bent + rotate: false + xy: 2, 298 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +Chuck/ChuckMatthews_foot_near_2_bent + rotate: false + xy: 2, 298 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +Duck/DuckMatthews_foot_far_2_bent + rotate: false + xy: 2, 298 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +Duck/DuckMatthews_foot_near_2_bent + rotate: false + xy: 2, 298 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +YoungBuck/YoungBuck_foot_far_2_bent + rotate: false + xy: 2, 298 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +YoungBuck/YoungBuck_foot_near_2_bent + rotate: false + xy: 2, 298 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +BeardyBuck/BeardyBuck_hand_far_1_fistBack + rotate: false + xy: 448, 53 + size: 39, 31 + orig: 67, 53 + offset: 15, 13 + index: -1 +BeardyBuck/BeardyBuck_hand_far_2_fistPalm + rotate: false + xy: 224, 27 + size: 34, 32 + orig: 67, 53 + offset: 17, 12 + index: -1 +BeardyBuck/BeardyBuck_hand_near_1_fistBack + rotate: false + xy: 128, 95 + size: 39, 36 + orig: 67, 53 + offset: 15, 13 + index: -1 +BeardyBuck/BeardyBuck_hand_near_2_fistPalm + rotate: false + xy: 829, 23 + size: 34, 32 + orig: 67, 53 + offset: 17, 10 + index: -1 +BeardyBuck/BeardyBuck_head_1 + rotate: true + xy: 278, 639 + size: 100, 118 + orig: 179, 179 + offset: 39, 6 + index: -1 +BeardyBuck/BeardyBuck_head_2_injured + rotate: true + xy: 425, 661 + size: 100, 122 + orig: 179, 179 + offset: 38, 6 + index: -1 +BeardyBuck/BeardyBuck_leg_lower_far + rotate: true + xy: 737, 289 + size: 36, 60 + orig: 64, 107 + offset: 16, 26 + index: -1 +BeardyBuck/BeardyBuck_leg_lower_near_1 + rotate: true + xy: 295, 327 + size: 38, 63 + orig: 64, 107 + offset: 15, 22 + index: -1 +BeardyBuck/BeardyBuck_leg_lower_near_2 + rotate: true + xy: 547, 247 + size: 34, 62 + orig: 34, 62 + offset: 0, 0 + index: -1 +BeardyBuck/BeardyBuck_leg_upper_far + rotate: true + xy: 404, 168 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +BeardyBuck/BeardyBuck_leg_upper_near + rotate: true + xy: 601, 157 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +BeardyBuck/BeardyBuck_neck + rotate: true + xy: 1000, 92 + size: 24, 21 + orig: 43, 36 + offset: 10, 8 + index: -1 +GabrielCaine/GabrielCaine_neck + rotate: true + xy: 1000, 92 + size: 24, 21 + orig: 43, 36 + offset: 10, 8 + index: -1 +YoungBuck/YoungBuck_neck + rotate: true + xy: 1000, 92 + size: 24, 21 + orig: 43, 36 + offset: 10, 8 + index: -1 +BeardyBuck/BeardyBuck_torso + rotate: false + xy: 960, 408 + size: 56, 61 + orig: 169, 149 + offset: 56, 38 + index: -1 +BeardyBuck/BeardyBuck_waist + rotate: true + xy: 687, 310 + size: 46, 48 + orig: 93, 71 + offset: 24, 12 + index: -1 +Buck/BuckMatthews_arm_lower_near + rotate: true + xy: 914, 35 + size: 27, 42 + orig: 85, 69 + offset: 28, 14 + index: -1 +Buck/BuckMatthews_arm_upper_near + rotate: true + xy: 838, 217 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +Buck/BuckMatthews_hand_far_1_fistBack + rotate: false + xy: 305, 20 + size: 37, 29 + orig: 67, 53 + offset: 16, 14 + index: -1 +Buck/BuckMatthews_hand_near_1_fistBack + rotate: false + xy: 2, 79 + size: 39, 36 + orig: 67, 53 + offset: 15, 13 + index: -1 +Buck/BuckMatthews_hand_near_2_fistPalm + rotate: false + xy: 958, 20 + size: 34, 32 + orig: 67, 53 + offset: 17, 12 + index: -1 +YoungBuck/YoungBuck_hand_far_2_fistPalm + rotate: false + xy: 958, 20 + size: 34, 32 + orig: 67, 53 + offset: 17, 12 + index: -1 +Buck/BuckMatthews_head_1 + rotate: false + xy: 921, 661 + size: 97, 113 + orig: 179, 179 + offset: 40, 16 + index: -1 +Buck/BuckMatthews_head_2_injured + rotate: true + xy: 113, 604 + size: 94, 117 + orig: 179, 179 + offset: 42, 14 + index: -1 +Buck/BuckMatthews_leg_lower_far + rotate: true + xy: 229, 290 + size: 35, 62 + orig: 64, 107 + offset: 15, 25 + index: -1 +Buck/BuckMatthews_leg_lower_near_2 + rotate: true + xy: 229, 290 + size: 35, 62 + orig: 64, 107 + offset: 15, 25 + index: -1 +Duck/DuckMatthews_leg_lower_far + rotate: true + xy: 229, 290 + size: 35, 62 + orig: 64, 107 + offset: 15, 25 + index: -1 +Duck/DuckMatthews_leg_lower_near_2 + rotate: true + xy: 229, 290 + size: 35, 62 + orig: 64, 107 + offset: 15, 25 + index: -1 +Buck/BuckMatthews_leg_lower_near_1 + rotate: true + xy: 799, 271 + size: 36, 59 + orig: 64, 107 + offset: 14, 24 + index: -1 +Buck/BuckMatthews_leg_upper_far + rotate: false + xy: 243, 157 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +Duck/DuckMatthews_leg_upper_far + rotate: false + xy: 243, 157 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +Truck/TruckMatthews_leg_upper_far + rotate: false + xy: 243, 157 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +YoungBuck/YoungBuck_leg_upper_far + rotate: false + xy: 243, 157 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +Buck/BuckMatthews_leg_upper_near + rotate: true + xy: 711, 154 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +Duck/DuckMatthews_leg_upper_near + rotate: true + xy: 711, 154 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +Truck/TruckMatthews_leg_upper_near + rotate: true + xy: 711, 154 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +YoungBuck/YoungBuck_leg_upper_near + rotate: true + xy: 711, 154 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +Buck/BuckMatthews_neck + rotate: false + xy: 827, 2 + size: 22, 19 + orig: 22, 19 + offset: 0, 0 + index: -1 +Buck/BuckMatthews_torso + rotate: true + xy: 892, 409 + size: 60, 66 + orig: 169, 149 + offset: 55, 36 + index: -1 +Buck/BuckMatthews_waist + rotate: true + xy: 825, 309 + size: 46, 48 + orig: 93, 71 + offset: 24, 12 + index: -1 +Chuck/ChuckMatthews_waist + rotate: true + xy: 825, 309 + size: 46, 48 + orig: 93, 71 + offset: 24, 12 + index: -1 +Duck/DuckMatthews_waist + rotate: true + xy: 825, 309 + size: 46, 48 + orig: 93, 71 + offset: 24, 12 + index: -1 +Truck/TruckMatthews_waist + rotate: true + xy: 825, 309 + size: 46, 48 + orig: 93, 71 + offset: 24, 12 + index: -1 +YoungBuck/YoungBuck_waist + rotate: true + xy: 825, 309 + size: 46, 48 + orig: 93, 71 + offset: 24, 12 + index: -1 +Chuck/ChuckMatthews_arm_lower_near + rotate: true + xy: 94, 35 + size: 27, 42 + orig: 85, 69 + offset: 28, 14 + index: -1 +Truck/TruckMatthews_arm_lower_near + rotate: true + xy: 94, 35 + size: 27, 42 + orig: 85, 69 + offset: 28, 14 + index: -1 +Chuck/ChuckMatthews_arm_upper_far + rotate: true + xy: 101, 216 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +Chuck/ChuckMatthews_arm_upper_near + rotate: true + xy: 346, 216 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +Chuck/ChuckMatthews_foot_far_1 + rotate: false + xy: 525, 115 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +Chuck/ChuckMatthews_foot_near_1 + rotate: false + xy: 525, 115 + size: 56, 28 + orig: 107, 58 + offset: 24, 15 + index: -1 +Chuck/ChuckMatthews_hand_near_1_fistBack + rotate: false + xy: 640, 78 + size: 39, 36 + orig: 67, 53 + offset: 15, 13 + index: -1 +Truck/TruckMatthews_hand_near_1_fistBack + rotate: false + xy: 640, 78 + size: 39, 36 + orig: 67, 53 + offset: 15, 13 + index: -1 +Chuck/ChuckMatthews_hand_near_2_fistPalm + rotate: false + xy: 446, 19 + size: 34, 32 + orig: 67, 53 + offset: 17, 12 + index: -1 +Chuck/ChuckMatthews_head_1 + rotate: true + xy: 332, 483 + size: 82, 95 + orig: 179, 179 + offset: 52, 11 + index: -1 +Chuck/ChuckMatthews_head_2_injured + rotate: false + xy: 921, 560 + size: 86, 99 + orig: 179, 179 + offset: 52, 7 + index: -1 +Chuck/ChuckMatthews_leg_lower_far + rotate: true + xy: 360, 325 + size: 36, 63 + orig: 64, 107 + offset: 13, 24 + index: -1 +Chuck/ChuckMatthews_leg_lower_near_2 + rotate: true + xy: 360, 325 + size: 36, 63 + orig: 64, 107 + offset: 13, 24 + index: -1 +Chuck/ChuckMatthews_leg_lower_near_1 + rotate: true + xy: 936, 271 + size: 36, 59 + orig: 64, 107 + offset: 15, 25 + index: -1 +Chuck/ChuckMatthews_leg_upper_far + rotate: true + xy: 874, 154 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +Chuck/ChuckMatthews_leg_upper_near + rotate: true + xy: 874, 154 + size: 33, 57 + orig: 58, 89 + offset: 12, 16 + index: -1 +Chuck/ChuckMatthews_torso + rotate: true + xy: 509, 412 + size: 56, 62 + orig: 169, 149 + offset: 56, 38 + index: -1 +Commander/Commander-Firestrike_arm_lower_far + rotate: false + xy: 549, 725 + size: 16, 36 + orig: 84, 68 + offset: 32, 19 + index: -1 +Commander/Commander-Firestrike_arm_lower_near + rotate: false + xy: 1002, 518 + size: 18, 40 + orig: 18, 40 + offset: 0, 0 + index: -1 +Commander/Commander-Firestrike_arm_upper_far + rotate: true + xy: 489, 53 + size: 22, 53 + orig: 97, 92 + offset: 36, 19 + index: -1 +Commander/Commander-Firestrike_arm_upper_near + rotate: true + xy: 681, 62 + size: 23, 53 + orig: 97, 92 + offset: 35, 18 + index: -1 +Commander/Commander-Firestrike_foot_far_1 + rotate: false + xy: 587, 3 + size: 41, 22 + orig: 106, 57 + offset: 32, 17 + index: -1 +Commander/Commander-Firestrike_foot_near_1 + rotate: false + xy: 587, 3 + size: 41, 22 + orig: 106, 57 + offset: 32, 17 + index: -1 +Commander/Commander-Firestrike_foot_far_2_bent + rotate: false + xy: 156, 4 + size: 38, 25 + orig: 99, 63 + offset: 19, 19 + index: -1 +Commander/Commander-Firestrike_foot_near_2_bent + rotate: false + xy: 156, 4 + size: 38, 25 + orig: 99, 63 + offset: 19, 19 + index: -1 +Commander/Commander-Firestrike_hand_far_1_fistBack + rotate: false + xy: 804, 2 + size: 21, 25 + orig: 66, 51 + offset: 21, 15 + index: -1 +Commander/Commander-Firestrike_hand_near_1_fistBack + rotate: false + xy: 804, 2 + size: 21, 25 + orig: 66, 51 + offset: 21, 15 + index: -1 +Commander/Commander-Firestrike_hand_far_2_fistPalm + rotate: false + xy: 713, 290 + size: 20, 18 + orig: 66, 51 + offset: 21, 20 + index: -1 +Commander/Commander-Firestrike_hand_near_2_fistPalm + rotate: false + xy: 713, 290 + size: 20, 18 + orig: 66, 51 + offset: 21, 20 + index: -1 +Commander/Commander-Firestrike_head_1 + rotate: true + xy: 547, 283 + size: 39, 55 + orig: 178, 178 + offset: 66, 20 + index: -1 +Commander/Commander-Firestrike_head_2_injured + rotate: true + xy: 547, 283 + size: 39, 55 + orig: 178, 178 + offset: 66, 20 + index: -1 +Commander/Commander-Firestrike_leg_lower_far + rotate: false + xy: 398, 671 + size: 22, 68 + orig: 63, 106 + offset: 20, 16 + index: -1 +Commander/Commander-Firestrike_leg_lower_near_2 + rotate: false + xy: 398, 671 + size: 22, 68 + orig: 63, 106 + offset: 20, 16 + index: -1 +Commander/Commander-Firestrike_leg_lower_near_1 + rotate: true + xy: 942, 118 + size: 23, 65 + orig: 63, 106 + offset: 22, 19 + index: -1 +Commander/Commander-Firestrike_leg_upper_far + rotate: true + xy: 266, 64 + size: 24, 52 + orig: 57, 88 + offset: 17, 19 + index: -1 +Commander/Commander-Firestrike_leg_upper_near + rotate: true + xy: 677, 37 + size: 23, 49 + orig: 57, 88 + offset: 15, 18 + index: -1 +Commander/Commander-Firestrike_neck + rotate: true + xy: 661, 186 + size: 42, 48 + orig: 56, 75 + offset: 8, 26 + index: -1 +Commander/Commander-Firestrike_torso + rotate: false + xy: 764, 413 + size: 49, 66 + orig: 49, 66 + offset: 0, 0 + index: -1 +Commander/Commander-Firestrike_waist + rotate: false + xy: 241, 425 + size: 36, 36 + orig: 92, 70 + offset: 29, 15 + index: -1 +Duck/DuckMatthews_arm_lower_far + rotate: true + xy: 764, 2 + size: 25, 38 + orig: 85, 69 + offset: 28, 16 + index: -1 +Duck/DuckMatthews_arm_lower_near + rotate: false + xy: 608, 55 + size: 29, 42 + orig: 85, 69 + offset: 27, 14 + index: -1 +Duck/DuckMatthews_arm_upper_far + rotate: true + xy: 947, 175 + size: 32, 60 + orig: 99, 93 + offset: 34, 16 + index: -1 +Duck/DuckMatthews_arm_upper_near + rotate: true + xy: 470, 173 + size: 32, 60 + orig: 99, 93 + offset: 34, 16 + index: -1 +Duck/DuckMatthews_hand_far_1_fistBack + rotate: false + xy: 873, 53 + size: 39, 31 + orig: 67, 53 + offset: 15, 13 + index: -1 +Duck/DuckMatthews_hand_far_2_fistPalm + rotate: false + xy: 482, 19 + size: 34, 32 + orig: 67, 53 + offset: 17, 12 + index: -1 +Duck/DuckMatthews_hand_near_1_fistBack + rotate: false + xy: 169, 78 + size: 39, 36 + orig: 67, 53 + offset: 15, 13 + index: -1 +Duck/DuckMatthews_hand_near_2_fistPalm + rotate: false + xy: 865, 19 + size: 34, 32 + orig: 67, 53 + offset: 17, 12 + index: -1 +Duck/DuckMatthews_head_1 + rotate: false + xy: 568, 650 + size: 118, 112 + orig: 179, 179 + offset: 40, 17 + index: -1 +Duck/DuckMatthews_head_2_injured + rotate: false + xy: 801, 660 + size: 118, 114 + orig: 179, 179 + offset: 41, 17 + index: -1 +Duck/DuckMatthews_leg_lower_near_1 + rotate: true + xy: 61, 262 + size: 36, 59 + orig: 64, 107 + offset: 14, 24 + index: -1 +Duck/DuckMatthews_neck + rotate: true + xy: 699, 524 + size: 23, 20 + orig: 43, 36 + offset: 11, 9 + index: -1 +Duck/DuckMatthews_torso + rotate: true + xy: 373, 408 + size: 60, 66 + orig: 169, 149 + offset: 55, 36 + index: -1 +Dummy/Dummy_arm_lower_near + rotate: true + xy: 588, 27 + size: 26, 42 + orig: 26, 42 + offset: 0, 0 + index: -1 +Dummy/Dummy_arm_upper_far + rotate: true + xy: 813, 182 + size: 33, 59 + orig: 33, 59 + offset: 0, 0 + index: -1 +Dummy/Dummy_arm_upper_near + rotate: true + xy: 60, 181 + size: 33, 59 + orig: 33, 59 + offset: 0, 0 + index: -1 +Dummy/Dummy_foot_far_1 + rotate: false + xy: 455, 112 + size: 55, 27 + orig: 55, 27 + offset: 0, 0 + index: -1 +Dummy/Dummy_foot_far_2_bent + rotate: false + xy: 2, 151 + size: 52, 36 + orig: 52, 36 + offset: 0, 0 + index: -1 +Dummy/Dummy_foot_near_1 + rotate: false + xy: 583, 99 + size: 55, 26 + orig: 55, 26 + offset: 0, 0 + index: -1 +Dummy/Dummy_foot_near_2_bent + rotate: false + xy: 177, 146 + size: 52, 36 + orig: 52, 36 + offset: 0, 0 + index: -1 +Dummy/Dummy_hand_1_fistBack + rotate: false + xy: 947, 210 + size: 31, 24 + orig: 31, 24 + offset: 0, 0 + index: -1 +Dummy/Dummy_head_1 + rotate: false + xy: 913, 471 + size: 87, 87 + orig: 87, 87 + offset: 0, 0 + index: -1 +Dummy/Dummy_head_2_injured + rotate: false + xy: 429, 470 + size: 87, 87 + orig: 87, 87 + offset: 0, 0 + index: -1 +Dummy/Dummy_leg_lower_far + rotate: false + xy: 969, 347 + size: 43, 59 + orig: 43, 59 + offset: 0, 0 + index: -1 +Dummy/Dummy_leg_lower_near_1 + rotate: true + xy: 370, 363 + size: 43, 67 + orig: 43, 67 + offset: 0, 0 + index: -1 +Dummy/Dummy_leg_lower_near_2 + rotate: true + xy: 64, 339 + size: 43, 59 + orig: 43, 59 + offset: 0, 0 + index: -1 +Dummy/Dummy_leg_upper_far + rotate: true + xy: 210, 88 + size: 25, 54 + orig: 25, 54 + offset: 0, 0 + index: -1 +Dummy/Dummy_leg_upper_near + rotate: true + xy: 210, 88 + size: 25, 54 + orig: 25, 54 + offset: 0, 0 + index: -1 +Dummy/Dummy_neck + rotate: true + xy: 699, 499 + size: 23, 20 + orig: 23, 20 + offset: 0, 0 + index: -1 +Dummy/Dummy_torso + rotate: true + xy: 573, 410 + size: 56, 60 + orig: 56, 60 + offset: 0, 0 + index: -1 +Dummy/Dummy_waist + rotate: false + xy: 766, 189 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +Fletch/Fletch_arm_lower_far + rotate: true + xy: 196, 2 + size: 23, 38 + orig: 84, 67 + offset: 30, 16 + index: -1 +Fletch/Fletch_arm_upper_far + rotate: true + xy: 276, 118 + size: 28, 59 + orig: 97, 92 + offset: 34, 15 + index: -1 +Fletch/Fletch_arm_upper_near + rotate: true + xy: 659, 116 + size: 28, 59 + orig: 97, 92 + offset: 34, 15 + index: -1 +Fletch/Fletch_foot_far_1 + rotate: false + xy: 553, 72 + size: 53, 25 + orig: 106, 57 + offset: 27, 13 + index: -1 +Fletch/Fletch_foot_near_1 + rotate: false + xy: 553, 72 + size: 53, 25 + orig: 106, 57 + offset: 27, 13 + index: -1 +Fletch/Fletch_foot_far_2_bent + rotate: false + xy: 121, 64 + size: 44, 29 + orig: 99, 63 + offset: 27, 15 + index: -1 +Fletch/Fletch_foot_near_2_bent + rotate: false + xy: 121, 64 + size: 44, 29 + orig: 99, 63 + offset: 27, 15 + index: -1 +Fletch/Fletch_hand_far_1_fistBack + rotate: true + xy: 995, 146 + size: 27, 26 + orig: 66, 51 + offset: 20, 15 + index: -1 +Fletch/Fletch_hand_near_1_fistBack + rotate: true + xy: 995, 146 + size: 27, 26 + orig: 66, 51 + offset: 20, 15 + index: -1 +Fletch/Fletch_head_1 + rotate: false + xy: 607, 468 + size: 90, 79 + orig: 178, 178 + offset: 38, 20 + index: -1 +Fletch/Fletch_head_2_injured + rotate: false + xy: 2, 439 + size: 90, 78 + orig: 179, 179 + offset: 38, 21 + index: -1 +Fletch/Fletch_leg_lower_far + rotate: true + xy: 758, 364 + size: 44, 70 + orig: 63, 106 + offset: 14, 15 + index: -1 +Fletch/Fletch_leg_lower_near_2 + rotate: true + xy: 758, 364 + size: 44, 70 + orig: 63, 106 + offset: 14, 15 + index: -1 +Fletch/Fletch_leg_lower_near_1 + rotate: true + xy: 541, 324 + size: 33, 67 + orig: 63, 106 + offset: 17, 19 + index: -1 +Fletch/Fletch_leg_upper_far + rotate: true + xy: 712, 210 + size: 39, 52 + orig: 57, 88 + offset: 14, 18 + index: -1 +Fletch/Fletch_leg_upper_near + rotate: true + xy: 660, 266 + size: 42, 51 + orig: 57, 88 + offset: 1, 19 + index: -1 +Fletch/Fletch_neck + rotate: true + xy: 37, 268 + size: 28, 21 + orig: 42, 35 + offset: 7, 7 + index: -1 +Fletch/Fletch_torso + rotate: false + xy: 94, 440 + size: 82, 77 + orig: 168, 148 + offset: 32, 36 + index: -1 +Fletch/Fletch_waist + rotate: false + xy: 512, 559 + size: 113, 89 + orig: 192, 146 + offset: 5, 48 + index: -1 +GabrielCaine/GabrielCaine_arm_lower_near + rotate: true + xy: 138, 35 + size: 27, 42 + orig: 85, 69 + offset: 28, 14 + index: -1 +GabrielCaine/GabrielCaine_arm_upper_far + rotate: true + xy: 163, 216 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +GabrielCaine/GabrielCaine_arm_upper_near + rotate: true + xy: 225, 216 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +GabrielCaine/GabrielCaine_foot_far_1 + rotate: false + xy: 594, 127 + size: 63, 28 + orig: 107, 58 + offset: 24, 14 + index: -1 +GabrielCaine/GabrielCaine_foot_near_1 + rotate: false + xy: 594, 127 + size: 63, 28 + orig: 107, 58 + offset: 24, 14 + index: -1 +GabrielCaine/GabrielCaine_foot_far_2_bent + rotate: false + xy: 958, 309 + size: 61, 36 + orig: 101, 64 + offset: 19, 13 + index: -1 +GabrielCaine/GabrielCaine_foot_near_2_bent + rotate: false + xy: 958, 309 + size: 61, 36 + orig: 101, 64 + offset: 19, 13 + index: -1 +GabrielCaine/GabrielCaine_hand_far_1_fistBack + rotate: false + xy: 518, 10 + size: 35, 30 + orig: 67, 53 + offset: 17, 15 + index: -1 +GabrielCaine/GabrielCaine_hand_near_1_fistBack + rotate: false + xy: 795, 59 + size: 39, 34 + orig: 67, 53 + offset: 15, 13 + index: -1 +GabrielCaine/GabrielCaine_head_1 + rotate: true + xy: 97, 519 + size: 83, 94 + orig: 179, 179 + offset: 48, 15 + index: -1 +GabrielCaine/GabrielCaine_head_2_injured + rotate: true + xy: 2, 519 + size: 85, 93 + orig: 179, 179 + offset: 48, 16 + index: -1 +GabrielCaine/GabrielCaine_leg_lower_far + rotate: false + xy: 983, 959 + size: 38, 62 + orig: 64, 107 + offset: 10, 22 + index: -1 +GabrielCaine/GabrielCaine_leg_lower_near_2 + rotate: false + xy: 983, 959 + size: 38, 62 + orig: 64, 107 + offset: 10, 22 + index: -1 +GabrielCaine/GabrielCaine_leg_lower_near_1 + rotate: true + xy: 892, 330 + size: 38, 64 + orig: 64, 107 + offset: 13, 21 + index: -1 +GabrielCaine/GabrielCaine_leg_upper_far + rotate: true + xy: 282, 423 + size: 58, 89 + orig: 58, 89 + offset: 0, 0 + index: -1 +GabrielCaine/GabrielCaine_leg_upper_near + rotate: true + xy: 276, 90 + size: 26, 54 + orig: 58, 89 + offset: 16, 17 + index: -1 +GabrielCaine/GabrielCaine_torso + rotate: false + xy: 699, 414 + size: 63, 65 + orig: 169, 149 + offset: 54, 36 + index: -1 +GabrielCaine/GabrielCaine_waist + rotate: true + xy: 610, 301 + size: 46, 48 + orig: 93, 71 + offset: 24, 12 + index: -1 +MetalMan-Blue/MetalMan-Blue_arm_lower_near + rotate: true + xy: 402, 26 + size: 26, 42 + orig: 26, 42 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_arm_upper_far + rotate: true + xy: 287, 181 + size: 33, 59 + orig: 33, 59 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_arm_upper_near + rotate: true + xy: 287, 181 + size: 33, 59 + orig: 33, 59 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_foot_far_1 + rotate: false + xy: 817, 95 + size: 55, 26 + orig: 55, 26 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_foot_far_2_bent + rotate: false + xy: 770, 144 + size: 52, 36 + orig: 52, 36 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_foot_near_2_bent + rotate: false + xy: 770, 144 + size: 52, 36 + orig: 52, 36 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_foot_near_1 + rotate: false + xy: 64, 90 + size: 55, 26 + orig: 55, 26 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_hand_1_fistBack + rotate: true + xy: 660, 316 + size: 31, 24 + orig: 31, 24 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_head_1 + rotate: false + xy: 518, 470 + size: 87, 87 + orig: 87, 87 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_head_2_injured + rotate: false + xy: 193, 463 + size: 87, 87 + orig: 87, 87 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_leg_lower_far + rotate: true + xy: 2, 338 + size: 43, 59 + orig: 43, 59 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_leg_lower_near_1 + rotate: true + xy: 439, 363 + size: 43, 67 + orig: 43, 67 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_leg_lower_near_2 + rotate: true + xy: 234, 327 + size: 43, 59 + orig: 43, 59 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_leg_upper_far + rotate: true + xy: 681, 87 + size: 25, 54 + orig: 25, 54 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_leg_upper_near + rotate: true + xy: 681, 87 + size: 25, 54 + orig: 25, 54 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_neck + rotate: true + xy: 287, 227 + size: 23, 20 + orig: 23, 20 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_torso + rotate: true + xy: 635, 410 + size: 56, 60 + orig: 56, 60 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_waist + rotate: false + xy: 900, 189 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +PamelaFrost-02/PamelaFrost-02_arm_lower_far + rotate: true + xy: 383, 3 + size: 21, 38 + orig: 85, 69 + offset: 31, 16 + index: -1 +PamelaFrost-05/PamelaFrost-05_arm_lower_far + rotate: true + xy: 383, 3 + size: 21, 38 + orig: 85, 69 + offset: 31, 16 + index: -1 +PamelaFrost-02/PamelaFrost-02_arm_lower_near + rotate: false + xy: 994, 9 + size: 24, 43 + orig: 85, 69 + offset: 30, 13 + index: -1 +PamelaFrost-05/PamelaFrost-05_arm_lower_near + rotate: false + xy: 994, 9 + size: 24, 43 + orig: 85, 69 + offset: 30, 13 + index: -1 +PamelaFrost-02/PamelaFrost-02_arm_upper_far + rotate: true + xy: 453, 86 + size: 24, 56 + orig: 99, 93 + offset: 37, 17 + index: -1 +PamelaFrost-02/PamelaFrost-02_arm_upper_near + rotate: true + xy: 332, 84 + size: 24, 56 + orig: 99, 93 + offset: 37, 17 + index: -1 +PamelaFrost-02/PamelaFrost-02_foot_far_1 + rotate: false + xy: 720, 114 + size: 54, 28 + orig: 107, 58 + offset: 26, 15 + index: -1 +PamelaFrost-02/PamelaFrost-02_foot_near_1 + rotate: false + xy: 720, 114 + size: 54, 28 + orig: 107, 58 + offset: 26, 15 + index: -1 +PamelaFrost-03/PamelaFrost-03_foot_far_1 + rotate: false + xy: 720, 114 + size: 54, 28 + orig: 107, 58 + offset: 26, 15 + index: -1 +PamelaFrost-03/PamelaFrost-03_foot_near_1 + rotate: false + xy: 720, 114 + size: 54, 28 + orig: 107, 58 + offset: 26, 15 + index: -1 +PamelaFrost-04/PamelaFrost-04_foot_far_1 + rotate: false + xy: 720, 114 + size: 54, 28 + orig: 107, 58 + offset: 26, 15 + index: -1 +PamelaFrost-04/PamelaFrost-04_foot_near_1 + rotate: false + xy: 720, 114 + size: 54, 28 + orig: 107, 58 + offset: 26, 15 + index: -1 +PamelaFrost-05/PamelaFrost-05_foot_far_1 + rotate: false + xy: 720, 114 + size: 54, 28 + orig: 107, 58 + offset: 26, 15 + index: -1 +PamelaFrost-05/PamelaFrost-05_foot_near_1 + rotate: false + xy: 720, 114 + size: 54, 28 + orig: 107, 58 + offset: 26, 15 + index: -1 +PamelaFrost/PamelaFrost_foot_far_1 + rotate: false + xy: 720, 114 + size: 54, 28 + orig: 107, 58 + offset: 26, 15 + index: -1 +PamelaFrost-02/PamelaFrost-02_foot_far_2_bent + rotate: false + xy: 348, 178 + size: 54, 36 + orig: 101, 64 + offset: 20, 12 + index: -1 +PamelaFrost-02/PamelaFrost-02_foot_near_2_bent + rotate: false + xy: 348, 178 + size: 54, 36 + orig: 101, 64 + offset: 20, 12 + index: -1 +PamelaFrost-03/PamelaFrost-03_foot_far_2_bent + rotate: false + xy: 348, 178 + size: 54, 36 + orig: 101, 64 + offset: 20, 12 + index: -1 +PamelaFrost-03/PamelaFrost-03_foot_near_2_bent + rotate: false + xy: 348, 178 + size: 54, 36 + orig: 101, 64 + offset: 20, 12 + index: -1 +PamelaFrost-04/PamelaFrost-04_foot_far_2_bent + rotate: false + xy: 348, 178 + size: 54, 36 + orig: 101, 64 + offset: 20, 12 + index: -1 +PamelaFrost-04/PamelaFrost-04_foot_near_2_bent + rotate: false + xy: 348, 178 + size: 54, 36 + orig: 101, 64 + offset: 20, 12 + index: -1 +PamelaFrost/PamelaFrost_foot_far_2_bent + rotate: false + xy: 348, 178 + size: 54, 36 + orig: 101, 64 + offset: 20, 12 + index: -1 +PamelaFrost/PamelaFrost_foot_near_2_bent + rotate: false + xy: 348, 178 + size: 54, 36 + orig: 101, 64 + offset: 20, 12 + index: -1 +PamelaFrost-02/PamelaFrost-02_hand_far_1_fistBack + rotate: false + xy: 668, 5 + size: 35, 30 + orig: 67, 53 + offset: 17, 15 + index: -1 +PamelaFrost-02/PamelaFrost-02_hand_near_1_fistBack + rotate: true + xy: 555, 5 + size: 35, 30 + orig: 67, 53 + offset: 17, 15 + index: -1 +PamelaFrost-02/PamelaFrost-02_head_1 + rotate: true + xy: 695, 746 + size: 142, 104 + orig: 179, 179 + offset: 22, 14 + index: -1 +PamelaFrost-02/PamelaFrost-02_head_2_injured + rotate: true + xy: 319, 741 + size: 142, 104 + orig: 179, 179 + offset: 23, 14 + index: -1 +PamelaFrost-02/PamelaFrost-02_leg_lower_far + rotate: true + xy: 352, 252 + size: 33, 64 + orig: 64, 107 + offset: 17, 21 + index: -1 +PamelaFrost-02/PamelaFrost-02_leg_lower_near_1 + rotate: true + xy: 177, 184 + size: 30, 64 + orig: 64, 107 + offset: 17, 22 + index: -1 +PamelaFrost-02/PamelaFrost-02_leg_lower_near_2 + rotate: true + xy: 244, 252 + size: 33, 64 + orig: 64, 107 + offset: 17, 21 + index: -1 +PamelaFrost-02/PamelaFrost-02_leg_upper_far + rotate: false + xy: 190, 308 + size: 37, 59 + orig: 58, 89 + offset: 8, 18 + index: -1 +PamelaFrost-02/PamelaFrost-02_leg_upper_near + rotate: true + xy: 860, 253 + size: 36, 59 + orig: 58, 89 + offset: 9, 18 + index: -1 +PamelaFrost-02/PamelaFrost-02_neck + rotate: false + xy: 94, 65 + size: 22, 23 + orig: 43, 36 + offset: 11, 8 + index: -1 +PamelaFrost-02/PamelaFrost-02_torso + rotate: true + xy: 178, 407 + size: 54, 61 + orig: 169, 149 + offset: 61, 39 + index: -1 +PamelaFrost-02/PamelaFrost-02_waist + rotate: false + xy: 660, 146 + size: 48, 38 + orig: 93, 71 + offset: 21, 17 + index: -1 +PamelaFrost-03/PamelaFrost-03_arm_lower_near + rotate: true + xy: 824, 156 + size: 24, 43 + orig: 85, 69 + offset: 30, 13 + index: -1 +PamelaFrost-04/PamelaFrost-04_arm_lower_near + rotate: true + xy: 824, 156 + size: 24, 43 + orig: 85, 69 + offset: 30, 13 + index: -1 +PamelaFrost-03/PamelaFrost-03_arm_upper_far + rotate: true + xy: 337, 110 + size: 26, 56 + orig: 99, 93 + offset: 35, 17 + index: -1 +PamelaFrost-04/PamelaFrost-04_arm_upper_far + rotate: true + xy: 337, 110 + size: 26, 56 + orig: 99, 93 + offset: 35, 17 + index: -1 +PamelaFrost-03/PamelaFrost-03_arm_upper_near + rotate: true + xy: 395, 110 + size: 26, 56 + orig: 99, 93 + offset: 35, 17 + index: -1 +PamelaFrost-04/PamelaFrost-04_arm_upper_near + rotate: true + xy: 395, 110 + size: 26, 56 + orig: 99, 93 + offset: 35, 17 + index: -1 +PamelaFrost/PamelaFrost_arm_upper_near + rotate: true + xy: 395, 110 + size: 26, 56 + orig: 99, 93 + offset: 35, 17 + index: -1 +PamelaFrost-03/PamelaFrost-03_hand_far_1_fistBack + rotate: false + xy: 84, 3 + size: 34, 30 + orig: 67, 53 + offset: 17, 15 + index: -1 +PamelaFrost-04/PamelaFrost-04_hand_far_1_fistBack + rotate: false + xy: 84, 3 + size: 34, 30 + orig: 67, 53 + offset: 17, 15 + index: -1 +PamelaFrost-03/PamelaFrost-03_hand_near_1_fistBack + rotate: false + xy: 260, 3 + size: 35, 30 + orig: 67, 53 + offset: 17, 15 + index: -1 +PamelaFrost-04/PamelaFrost-04_hand_near_1_fistBack + rotate: false + xy: 260, 3 + size: 35, 30 + orig: 67, 53 + offset: 17, 15 + index: -1 +PamelaFrost/PamelaFrost_hand_near_1_fistBack + rotate: false + xy: 260, 3 + size: 35, 30 + orig: 67, 53 + offset: 17, 15 + index: -1 +PamelaFrost-03/PamelaFrost-03_head_1 + rotate: false + xy: 440, 763 + size: 126, 125 + orig: 179, 179 + offset: 31, 15 + index: -1 +PamelaFrost-03/PamelaFrost-03_head_2_injured + rotate: false + xy: 817, 893 + size: 125, 128 + orig: 179, 179 + offset: 32, 13 + index: -1 +PamelaFrost-03/PamelaFrost-03_leg_lower_far + rotate: true + xy: 477, 243 + size: 33, 62 + orig: 64, 107 + offset: 16, 23 + index: -1 +PamelaFrost-03/PamelaFrost-03_leg_lower_near_2 + rotate: true + xy: 477, 243 + size: 33, 62 + orig: 64, 107 + offset: 16, 23 + index: -1 +PamelaFrost-03/PamelaFrost-03_leg_lower_near_1 + rotate: true + xy: 532, 145 + size: 30, 60 + orig: 64, 107 + offset: 17, 24 + index: -1 +PamelaFrost-03/PamelaFrost-03_leg_upper_far + rotate: true + xy: 63, 300 + size: 37, 59 + orig: 58, 89 + offset: 8, 18 + index: -1 +PamelaFrost-04/PamelaFrost-04_leg_upper_far + rotate: true + xy: 63, 300 + size: 37, 59 + orig: 58, 89 + offset: 8, 18 + index: -1 +PamelaFrost-03/PamelaFrost-03_leg_upper_near + rotate: true + xy: 122, 252 + size: 36, 59 + orig: 58, 89 + offset: 9, 18 + index: -1 +PamelaFrost-04/PamelaFrost-04_leg_upper_near + rotate: true + xy: 122, 252 + size: 36, 59 + orig: 58, 89 + offset: 9, 18 + index: -1 +PamelaFrost-03/PamelaFrost-03_neck + rotate: false + xy: 874, 191 + size: 22, 24 + orig: 43, 36 + offset: 11, 8 + index: -1 +PamelaFrost-04/PamelaFrost-04_neck + rotate: false + xy: 874, 191 + size: 22, 24 + orig: 43, 36 + offset: 11, 8 + index: -1 +PamelaFrost-03/PamelaFrost-03_torso + rotate: true + xy: 2, 383 + size: 54, 60 + orig: 169, 149 + offset: 61, 39 + index: -1 +PamelaFrost-03/PamelaFrost-03_waist + rotate: false + xy: 340, 138 + size: 48, 38 + orig: 93, 71 + offset: 21, 17 + index: -1 +PamelaFrost-04/PamelaFrost-04_waist + rotate: false + xy: 340, 138 + size: 48, 38 + orig: 93, 71 + offset: 21, 17 + index: -1 +PamelaFrost-05/PamelaFrost-05_waist + rotate: false + xy: 340, 138 + size: 48, 38 + orig: 93, 71 + offset: 21, 17 + index: -1 +PamelaFrost/PamelaFrost_waist + rotate: false + xy: 340, 138 + size: 48, 38 + orig: 93, 71 + offset: 21, 17 + index: -1 +PamelaFrost-04/PamelaFrost-04_head_1 + rotate: false + xy: 568, 764 + size: 125, 124 + orig: 179, 179 + offset: 32, 15 + index: -1 +PamelaFrost-04/PamelaFrost-04_head_2_injured + rotate: false + xy: 440, 892 + size: 125, 129 + orig: 179, 179 + offset: 32, 12 + index: -1 +PamelaFrost-04/PamelaFrost-04_leg_lower_far + rotate: true + xy: 774, 236 + size: 33, 62 + orig: 64, 107 + offset: 16, 23 + index: -1 +PamelaFrost-04/PamelaFrost-04_leg_lower_near_2 + rotate: true + xy: 774, 236 + size: 33, 62 + orig: 64, 107 + offset: 16, 23 + index: -1 +PamelaFrost-04/PamelaFrost-04_leg_lower_near_1 + rotate: true + xy: 933, 143 + size: 30, 60 + orig: 64, 107 + offset: 17, 24 + index: -1 +PamelaFrost-04/PamelaFrost-04_torso + rotate: true + xy: 94, 384 + size: 54, 61 + orig: 169, 149 + offset: 61, 39 + index: -1 +PamelaFrost-05/PamelaFrost-05_arm_upper_far + rotate: true + xy: 390, 84 + size: 24, 56 + orig: 99, 93 + offset: 37, 17 + index: -1 +PamelaFrost-05/PamelaFrost-05_arm_upper_near + rotate: true + xy: 737, 78 + size: 24, 56 + orig: 99, 93 + offset: 37, 17 + index: -1 +PamelaFrost-05/PamelaFrost-05_foot_far_2_bent + rotate: false + xy: 121, 178 + size: 54, 36 + orig: 101, 64 + offset: 20, 12 + index: -1 +PamelaFrost-05/PamelaFrost-05_foot_near_2_bent + rotate: false + xy: 121, 178 + size: 54, 36 + orig: 101, 64 + offset: 20, 12 + index: -1 +PamelaFrost-05/PamelaFrost-05_hand_near_1_fistBack + rotate: false + xy: 901, 3 + size: 35, 30 + orig: 67, 53 + offset: 17, 15 + index: -1 +PamelaFrost-05/PamelaFrost-05_head_1 + rotate: true + xy: 688, 638 + size: 106, 109 + orig: 179, 179 + offset: 39, 9 + index: -1 +PamelaFrost-05/PamelaFrost-05_head_2_injured + rotate: true + xy: 2, 606 + size: 106, 109 + orig: 179, 179 + offset: 39, 9 + index: -1 +PamelaFrost-05/PamelaFrost-05_leg_lower_far + rotate: true + xy: 921, 236 + size: 33, 62 + orig: 64, 107 + offset: 16, 25 + index: -1 +PamelaFrost-05/PamelaFrost-05_leg_lower_near_2 + rotate: true + xy: 921, 236 + size: 33, 62 + orig: 64, 107 + offset: 16, 25 + index: -1 +PamelaFrost-05/PamelaFrost-05_leg_lower_near_1 + rotate: true + xy: 278, 148 + size: 31, 60 + orig: 64, 107 + offset: 17, 25 + index: -1 +PamelaFrost-05/PamelaFrost-05_leg_upper_far + rotate: true + xy: 875, 291 + size: 37, 59 + orig: 58, 89 + offset: 8, 18 + index: -1 +PamelaFrost-05/PamelaFrost-05_leg_upper_near + rotate: true + xy: 352, 287 + size: 36, 60 + orig: 58, 89 + offset: 9, 16 + index: -1 +PamelaFrost-05/PamelaFrost-05_torso + rotate: true + xy: 309, 367 + size: 54, 59 + orig: 169, 149 + offset: 61, 41 + index: -1 +PamelaFrost/PamelaFrost_arm_lower_near + rotate: true + xy: 38, 7 + size: 24, 42 + orig: 85, 69 + offset: 29, 14 + index: -1 +PamelaFrost/PamelaFrost_arm_upper_far + rotate: true + xy: 942, 91 + size: 25, 56 + orig: 99, 93 + offset: 35, 17 + index: -1 +PamelaFrost/PamelaFrost_foot_near_1 + rotate: false + xy: 886, 113 + size: 54, 28 + orig: 107, 58 + offset: 25, 15 + index: -1 +PamelaFrost/PamelaFrost_hand_far_1_fistBack + rotate: false + xy: 120, 3 + size: 34, 30 + orig: 67, 53 + offset: 17, 15 + index: -1 +PamelaFrost/PamelaFrost_head_1 + rotate: false + xy: 817, 776 + size: 137, 115 + orig: 179, 179 + offset: 25, 10 + index: -1 +PamelaFrost/PamelaFrost_head_2_injured + rotate: true + xy: 319, 885 + size: 136, 119 + orig: 179, 179 + offset: 25, 6 + index: -1 +PamelaFrost/PamelaFrost_leg_lower_far + rotate: false + xy: 2, 234 + size: 33, 62 + orig: 64, 107 + offset: 17, 24 + index: -1 +PamelaFrost/PamelaFrost_leg_lower_near_1 + rotate: true + xy: 463, 141 + size: 30, 60 + orig: 64, 107 + offset: 17, 25 + index: -1 +PamelaFrost/PamelaFrost_leg_lower_near_2 + rotate: true + xy: 37, 227 + size: 33, 62 + orig: 64, 107 + offset: 16, 23 + index: -1 +PamelaFrost/PamelaFrost_leg_upper_far + rotate: true + xy: 124, 290 + size: 37, 59 + orig: 58, 89 + offset: 8, 18 + index: -1 +PamelaFrost/PamelaFrost_leg_upper_near + rotate: true + xy: 183, 252 + size: 36, 59 + orig: 58, 89 + offset: 9, 18 + index: -1 +PamelaFrost/PamelaFrost_torso + rotate: true + xy: 697, 358 + size: 54, 59 + orig: 169, 149 + offset: 61, 40 + index: -1 +StumpyPete/StumpyPete_arm_lower_far + rotate: true + xy: 402, 54 + size: 28, 43 + orig: 85, 69 + offset: 27, 12 + index: -1 +StumpyPete/StumpyPete_arm_lower_near + rotate: true + xy: 544, 42 + size: 28, 42 + orig: 85, 69 + offset: 27, 13 + index: -1 +StumpyPete/StumpyPete_arm_upper_far + rotate: false + xy: 611, 242 + size: 37, 57 + orig: 99, 93 + offset: 28, 20 + index: -1 +StumpyPete/StumpyPete_arm_upper_near + rotate: true + xy: 418, 239 + size: 37, 57 + orig: 99, 93 + offset: 28, 20 + index: -1 +StumpyPete/StumpyPete_foot_far_1 + rotate: false + xy: 736, 52 + size: 49, 24 + orig: 107, 58 + offset: 27, 14 + index: -1 +StumpyPete/StumpyPete_foot_far_2_bent + rotate: true + xy: 193, 554 + size: 48, 31 + orig: 101, 64 + offset: 27, 14 + index: -1 +StumpyPete/StumpyPete_foot_near_1 + rotate: false + xy: 944, 1020 + size: 1, 1 + orig: 1, 1 + offset: 0, 0 + index: -1 +StumpyPete/StumpyPete_foot_near_2_bent + rotate: false + xy: 944, 1020 + size: 1, 1 + orig: 1, 1 + offset: 0, 0 + index: -1 +StumpyPete/StumpyPete_hand_far_1_fistBack + rotate: false + xy: 2, 11 + size: 34, 31 + orig: 67, 53 + offset: 17, 15 + index: -1 +StumpyPete/StumpyPete_hand_near_1_fistBack + rotate: false + xy: 632, 10 + size: 34, 31 + orig: 67, 53 + offset: 17, 15 + index: -1 +StumpyPete/StumpyPete_head_1 + rotate: false + xy: 799, 566 + size: 110, 92 + orig: 179, 179 + offset: 33, 8 + index: -1 +StumpyPete/StumpyPete_head_2_injured + rotate: false + xy: 398, 567 + size: 112, 92 + orig: 179, 179 + offset: 33, 8 + index: -1 +StumpyPete/StumpyPete_leg_lower_far + rotate: false + xy: 232, 642 + size: 43, 56 + orig: 64, 107 + offset: 14, 26 + index: -1 +StumpyPete/StumpyPete_leg_lower_near_1 + rotate: true + xy: 892, 370 + size: 36, 75 + orig: 64, 107 + offset: 14, 9 + index: -1 +StumpyPete/StumpyPete_leg_lower_near_2 + rotate: true + xy: 157, 369 + size: 36, 75 + orig: 64, 107 + offset: 14, 9 + index: -1 +StumpyPete/StumpyPete_leg_upper_far + rotate: false + xy: 64, 386 + size: 25, 51 + orig: 58, 89 + offset: 16, 17 + index: -1 +StumpyPete/StumpyPete_leg_upper_near + rotate: true + xy: 930, 64 + size: 25, 51 + orig: 58, 89 + offset: 16, 17 + index: -1 +StumpyPete/StumpyPete_torso + rotate: false + xy: 722, 571 + size: 74, 65 + orig: 169, 149 + offset: 51, 34 + index: -1 +StumpyPete/StumpyPete_waist + rotate: false + xy: 476, 278 + size: 69, 31 + orig: 93, 71 + offset: 18, 15 + index: -1 +Truck/TruckMatthews_arm_upper_far + rotate: true + xy: 541, 211 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +Truck/TruckMatthews_arm_upper_near + rotate: false + xy: 985, 209 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +Truck/TruckMatthews_foot_far_2_bent + rotate: false + xy: 293, 287 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +Truck/TruckMatthews_foot_near_2_bent + rotate: false + xy: 293, 287 + size: 57, 38 + orig: 101, 64 + offset: 17, 12 + index: -1 +Truck/TruckMatthews_hand_far_1_fistBack + rotate: false + xy: 320, 51 + size: 39, 31 + orig: 67, 53 + offset: 15, 13 + index: -1 +Truck/TruckMatthews_head_1 + rotate: true + xy: 817, 482 + size: 82, 94 + orig: 179, 179 + offset: 48, 11 + index: -1 +Truck/TruckMatthews_head_2_injured + rotate: true + xy: 232, 552 + size: 85, 98 + orig: 179, 179 + offset: 47, 7 + index: -1 +Truck/TruckMatthews_leg_lower_far + rotate: false + xy: 983, 892 + size: 36, 65 + orig: 64, 107 + offset: 12, 23 + index: -1 +Truck/TruckMatthews_leg_lower_near_2 + rotate: false + xy: 983, 892 + size: 36, 65 + orig: 64, 107 + offset: 12, 23 + index: -1 +Truck/TruckMatthews_leg_lower_near_1 + rotate: true + xy: 425, 325 + size: 36, 63 + orig: 64, 107 + offset: 14, 23 + index: -1 +Truck/TruckMatthews_torso + rotate: true + xy: 441, 408 + size: 60, 66 + orig: 169, 149 + offset: 55, 36 + index: -1 +TurboTed/TurboTed_arm_lower_far + rotate: true + xy: 182, 31 + size: 28, 40 + orig: 28, 40 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_arm_lower_near + rotate: true + xy: 787, 29 + size: 28, 40 + orig: 28, 40 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_arm_upper_far + rotate: false + xy: 641, 349 + size: 44, 59 + orig: 44, 59 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_arm_upper_near + rotate: false + xy: 282, 490 + size: 44, 60 + orig: 44, 60 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_foot_far_1 + rotate: false + xy: 824, 123 + size: 60, 29 + orig: 60, 29 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_foot_far_2_bent + rotate: false + xy: 713, 251 + size: 59, 36 + orig: 59, 36 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_foot_near_2_bent + rotate: false + xy: 713, 251 + size: 59, 36 + orig: 59, 36 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_foot_near_1 + rotate: false + xy: 2, 117 + size: 60, 29 + orig: 60, 29 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_hand_1_fistBack + rotate: false + xy: 344, 20 + size: 37, 29 + orig: 37, 29 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_head_1 + rotate: false + xy: 722, 481 + size: 93, 83 + orig: 93, 83 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_head_2_injured + rotate: false + xy: 627, 549 + size: 93, 87 + orig: 93, 87 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_leg_lower_far + rotate: true + xy: 509, 359 + size: 49, 64 + orig: 49, 64 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_leg_lower_near_1 + rotate: true + xy: 241, 372 + size: 49, 66 + orig: 49, 66 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_leg_lower_near_2 + rotate: true + xy: 575, 359 + size: 49, 64 + orig: 49, 64 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_leg_upper_far + rotate: true + xy: 874, 86 + size: 25, 54 + orig: 25, 54 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_leg_upper_near + rotate: true + xy: 874, 86 + size: 25, 54 + orig: 25, 54 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_neck + rotate: true + xy: 997, 279 + size: 28, 22 + orig: 28, 22 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_torso + rotate: true + xy: 830, 357 + size: 50, 60 + orig: 50, 60 + offset: 0, 0 + index: -1 +TurboTed/TurboTed_waist + rotate: true + xy: 776, 104 + size: 38, 39 + orig: 38, 39 + offset: 0, 0 + index: -1 +YoungBuck/YoungBuck_arm_lower_near + rotate: true + xy: 40, 33 + size: 27, 42 + orig: 85, 69 + offset: 28, 14 + index: -1 +YoungBuck/YoungBuck_arm_upper_far + rotate: true + xy: 477, 207 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +YoungBuck/YoungBuck_arm_upper_near + rotate: true + xy: 408, 203 + size: 34, 60 + orig: 99, 93 + offset: 32, 16 + index: -1 +YoungBuck/YoungBuck_hand_far_1_fistBack + rotate: false + xy: 361, 51 + size: 39, 31 + orig: 67, 53 + offset: 15, 13 + index: -1 +YoungBuck/YoungBuck_hand_near_1_fistBack + rotate: false + xy: 512, 77 + size: 39, 36 + orig: 67, 53 + offset: 15, 13 + index: -1 +YoungBuck/YoungBuck_hand_near_2_fistPalm + rotate: false + xy: 728, 18 + size: 34, 32 + orig: 67, 53 + offset: 17, 12 + index: -1 +YoungBuck/YoungBuck_head_1 + rotate: true + xy: 567, 890 + size: 131, 123 + orig: 179, 179 + offset: 30, 10 + index: -1 +YoungBuck/YoungBuck_head_2_injured + rotate: true + xy: 692, 890 + size: 131, 123 + orig: 179, 179 + offset: 30, 10 + index: -1 +YoungBuck/YoungBuck_leg_lower_far + rotate: true + xy: 956, 777 + size: 35, 65 + orig: 64, 107 + offset: 14, 23 + index: -1 +YoungBuck/YoungBuck_leg_lower_near_1 + rotate: true + xy: 414, 287 + size: 36, 60 + orig: 64, 107 + offset: 14, 24 + index: -1 +YoungBuck/YoungBuck_leg_lower_near_2 + rotate: true + xy: 758, 327 + size: 35, 65 + orig: 64, 107 + offset: 14, 23 + index: -1 +YoungBuck/YoungBuck_torso + rotate: false + xy: 332, 571 + size: 63, 66 + orig: 169, 149 + offset: 54, 34 + index: -1 +sword_1 + rotate: false + xy: 956, 814 + size: 25, 207 + orig: 168, 289 + offset: 72, 34 + index: -1 +sword_2_swing + rotate: false + xy: 207, 810 + size: 110, 211 + orig: 253, 288 + offset: 72, 33 + index: -1 +sword_3_bigSwing + rotate: false + xy: 2, 824 + size: 203, 197 + orig: 333, 289 + offset: 57, 34 + index: -1 + +heroes2.png +size: 1024,64 +format: RGBA8888 +filter: Linear,Linear +repeat: none +BeardyBuck/BeardyBuck_arm_lower_far + rotate: true + xy: 424, 29 + size: 24, 38 + orig: 85, 69 + offset: 29, 16 + index: -1 +YoungBuck/YoungBuck_arm_lower_far + rotate: true + xy: 424, 29 + size: 24, 38 + orig: 85, 69 + offset: 29, 16 + index: -1 +Buck/BuckMatthews_arm_lower_far + rotate: true + xy: 464, 29 + size: 24, 38 + orig: 85, 69 + offset: 29, 16 + index: -1 +Buck/BuckMatthews_hand_far_2_fistPalm + rotate: false + xy: 211, 23 + size: 32, 30 + orig: 67, 53 + offset: 18, 13 + index: -1 +Chuck/ChuckMatthews_arm_lower_far + rotate: true + xy: 504, 29 + size: 24, 38 + orig: 85, 69 + offset: 29, 16 + index: -1 +Truck/TruckMatthews_arm_lower_far + rotate: true + xy: 504, 29 + size: 24, 38 + orig: 85, 69 + offset: 29, 16 + index: -1 +Chuck/ChuckMatthews_hand_far_1_fistBack + rotate: false + xy: 279, 25 + size: 34, 28 + orig: 67, 53 + offset: 17, 15 + index: -1 +Chuck/ChuckMatthews_hand_far_2_fistPalm + rotate: false + xy: 356, 24 + size: 32, 29 + orig: 67, 53 + offset: 18, 14 + index: -1 +Chuck/ChuckMatthews_neck + rotate: false + xy: 472, 6 + size: 24, 21 + orig: 43, 36 + offset: 10, 8 + index: -1 +Dummy/Dummy_arm_lower_far + rotate: true + xy: 544, 29 + size: 24, 38 + orig: 24, 38 + offset: 0, 0 + index: -1 +Dummy/Dummy_hand_2_fistPalm + rotate: false + xy: 939, 5 + size: 27, 25 + orig: 27, 25 + offset: 0, 0 + index: -1 +Fletch/Fletch_arm_lower_near + rotate: true + xy: 315, 29 + size: 24, 39 + orig: 84, 67 + offset: 29, 15 + index: -1 +Fletch/Fletch_hand_far_2_fistPalm + rotate: false + xy: 390, 24 + size: 32, 29 + orig: 66, 51 + offset: 17, 12 + index: -1 +Fletch/Fletch_hand_near_2_fistPalm + rotate: false + xy: 390, 24 + size: 32, 29 + orig: 66, 51 + offset: 17, 12 + index: -1 +GabrielCaine/GabrielCaine_arm_lower_far + rotate: true + xy: 584, 29 + size: 24, 38 + orig: 85, 69 + offset: 29, 16 + index: -1 +GabrielCaine/GabrielCaine_hand_far_2_fistPalm + rotate: false + xy: 2, 22 + size: 32, 31 + orig: 67, 53 + offset: 18, 14 + index: -1 +GabrielCaine/GabrielCaine_hand_near_2_fistPalm + rotate: false + xy: 36, 22 + size: 32, 31 + orig: 67, 53 + offset: 18, 14 + index: -1 +MetalMan-Blue/MetalMan-Blue_arm_lower_far + rotate: true + xy: 624, 29 + size: 24, 38 + orig: 24, 38 + offset: 0, 0 + index: -1 +MetalMan-Blue/MetalMan-Blue_hand_2_fistPalm + rotate: false + xy: 315, 2 + size: 27, 25 + orig: 27, 25 + offset: 0, 0 + index: -1 +PamelaFrost-02/PamelaFrost-02_hand_far_2_fistPalm + rotate: true + xy: 664, 22 + size: 31, 29 + orig: 67, 53 + offset: 18, 14 + index: -1 +PamelaFrost-02/PamelaFrost-02_hand_near_2_fistPalm + rotate: true + xy: 664, 22 + size: 31, 29 + orig: 67, 53 + offset: 18, 14 + index: -1 +PamelaFrost-03/PamelaFrost-03_arm_lower_far + rotate: true + xy: 939, 32 + size: 21, 38 + orig: 85, 69 + offset: 31, 16 + index: -1 +PamelaFrost-04/PamelaFrost-04_arm_lower_far + rotate: true + xy: 939, 32 + size: 21, 38 + orig: 85, 69 + offset: 31, 16 + index: -1 +PamelaFrost/PamelaFrost_arm_lower_far + rotate: true + xy: 939, 32 + size: 21, 38 + orig: 85, 69 + offset: 31, 16 + index: -1 +PamelaFrost-03/PamelaFrost-03_hand_far_2_fistPalm + rotate: true + xy: 849, 23 + size: 30, 28 + orig: 67, 53 + offset: 19, 14 + index: -1 +PamelaFrost-03/PamelaFrost-03_hand_near_2_fistPalm + rotate: true + xy: 695, 22 + size: 31, 29 + orig: 67, 53 + offset: 18, 14 + index: -1 +PamelaFrost-04/PamelaFrost-04_hand_far_2_fistPalm + rotate: true + xy: 819, 22 + size: 31, 28 + orig: 67, 53 + offset: 18, 14 + index: -1 +PamelaFrost-04/PamelaFrost-04_hand_near_2_fistPalm + rotate: true + xy: 726, 22 + size: 31, 29 + orig: 67, 53 + offset: 18, 14 + index: -1 +PamelaFrost-05/PamelaFrost-05_hand_far_1_fistBack + rotate: false + xy: 139, 24 + size: 34, 29 + orig: 67, 53 + offset: 17, 15 + index: -1 +PamelaFrost-05/PamelaFrost-05_hand_far_2_fistPalm + rotate: true + xy: 879, 23 + size: 30, 28 + orig: 67, 53 + offset: 19, 14 + index: -1 +PamelaFrost-05/PamelaFrost-05_hand_near_2_fistPalm + rotate: true + xy: 757, 22 + size: 31, 29 + orig: 67, 53 + offset: 18, 14 + index: -1 +PamelaFrost-05/PamelaFrost-05_neck + rotate: false + xy: 424, 4 + size: 22, 23 + orig: 43, 36 + offset: 11, 9 + index: -1 +PamelaFrost/PamelaFrost_hand_far_2_fistPalm + rotate: true + xy: 909, 23 + size: 30, 28 + orig: 67, 53 + offset: 19, 14 + index: -1 +PamelaFrost/PamelaFrost_hand_near_2_fistPalm + rotate: true + xy: 788, 22 + size: 31, 29 + orig: 67, 53 + offset: 18, 14 + index: -1 +PamelaFrost/PamelaFrost_neck + rotate: false + xy: 448, 4 + size: 22, 23 + orig: 43, 36 + offset: 11, 9 + index: -1 +StumpyPete/StumpyPete_hand_far_2_fistPalm + rotate: false + xy: 175, 24 + size: 34, 29 + orig: 67, 53 + offset: 18, 15 + index: -1 +StumpyPete/StumpyPete_hand_near_2_fistPalm + rotate: false + xy: 175, 24 + size: 34, 29 + orig: 67, 53 + offset: 18, 15 + index: -1 +StumpyPete/StumpyPete_neck + rotate: false + xy: 979, 26 + size: 26, 27 + orig: 43, 36 + offset: 9, 6 + index: -1 +Truck/TruckMatthews_hand_far_2_fistPalm + rotate: false + xy: 245, 23 + size: 32, 30 + orig: 67, 53 + offset: 18, 13 + index: -1 +Truck/TruckMatthews_hand_near_2_fistPalm + rotate: false + xy: 70, 22 + size: 32, 31 + orig: 67, 53 + offset: 18, 13 + index: -1 +Truck/TruckMatthews_neck + rotate: false + xy: 498, 6 + size: 24, 21 + orig: 43, 36 + offset: 10, 8 + index: -1 +TurboTed/TurboTed_hand_2_fistPalm + rotate: false + xy: 104, 23 + size: 33, 30 + orig: 33, 30 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/demos/assets/heroes.png b/apps/module-ts/src/spine-ts/webgl/demos/assets/heroes.png new file mode 100755 index 0000000..4c2b47c Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/demos/assets/heroes.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/demos/assets/heroes2.png b/apps/module-ts/src/spine-ts/webgl/demos/assets/heroes2.png new file mode 100755 index 0000000..c2f4d44 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/demos/assets/heroes2.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/demos/clipping.html b/apps/module-ts/src/spine-ts/webgl/demos/clipping.html new file mode 100755 index 0000000..49b9652 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/clipping.html @@ -0,0 +1,24 @@ + + +Clipping - Spine Demo + + + + + + + +
                    +
                    +
                    +
                    + Draw triangles +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/clipping.js b/apps/module-ts/src/spine-ts/webgl/demos/clipping.js new file mode 100755 index 0000000..89cd02f --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/clipping.js @@ -0,0 +1,120 @@ +var clippingDemo = function(canvas, bgColor) { + var gl, renderer, assetManager; + var skeleton, state, bounds; + var timeKeeper; + var playButton, timeline, isPlaying = true, playTime = 0; + + var DEMO_NAME = "ClippingDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function init () { + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + renderer = new spine.webgl.SceneRenderer(canvas, gl); + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas1.png"); + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas12.png"); + assetManager.loadText(DEMO_NAME, "atlas1.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + timeKeeper = new spine.TimeKeeper(); + } + + function loadingComplete () { + var atlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "atlas1.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(atlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json")["spineboy"]); + skeleton = new spine.Skeleton(skeletonData); + state = new spine.AnimationState(new spine.AnimationStateData(skeleton.data)); + state.setAnimation(0, "portal", true); + state.apply(skeleton); + skeleton.updateWorldTransform(); + var offset = new spine.Vector2(); + bounds = new spine.Vector2(); + skeleton.getBounds(offset, bounds, []); + + renderer.camera.position.x = offset.x + bounds.x + 200; + renderer.camera.position.y = offset.y + bounds.y / 2 + 100; + + renderer.skeletonDebugRenderer.drawMeshHull = false; + renderer.skeletonDebugRenderer.drawMeshTriangles = false; + + setupUI(); + } + + function setupUI() { + playButton = $("#clipping-playbutton"); + var playButtonUpdate = function () { + isPlaying = !isPlaying; + if (isPlaying) + playButton.addClass("pause").removeClass("play"); + else + playButton.addClass("play").removeClass("pause"); + } + playButton.click(playButtonUpdate); + playButton.addClass("pause"); + + timeline = $("#clipping-timeline").data("slider"); + timeline.changed = function (percent) { + if (isPlaying) playButton.click(); + if (!isPlaying) { + var animationDuration = state.getCurrent(0).animation.duration; + var time = animationDuration * percent; + state.update(time - playTime); + state.apply(skeleton); + skeleton.updateWorldTransform(); + playTime = time; + } + }; + + renderer.skeletonDebugRenderer.drawRegionAttachments = false; + renderer.skeletonDebugRenderer.drawClipping = false; + renderer.skeletonDebugRenderer.drawBones = false; + renderer.skeletonDebugRenderer.drawMeshHull = false; + renderer.skeletonDebugRenderer.drawMeshTriangles = false; + $("#clipping-drawtriangles").click(function() { + renderer.skeletonDebugRenderer.drawMeshHull = this.checked; + renderer.skeletonDebugRenderer.drawMeshTriangles = this.checked; + renderer.skeletonDebugRenderer.drawClipping = this.checked; + renderer.skeletonDebugRenderer.drawRegionAttachments = this.checked; + }) + } + + function render () { + timeKeeper.update(); + var delta = timeKeeper.delta; + + if (isPlaying) { + var animationDuration = state.getCurrent(0).animation.duration; + playTime += delta; + while (playTime >= animationDuration) + playTime -= animationDuration; + timeline.set(playTime / animationDuration); + + state.update(delta); + state.apply(skeleton); + skeleton.updateWorldTransform(); + } + + renderer.camera.viewportWidth = bounds.x * 1.6; + renderer.camera.viewportHeight = bounds.y * 1.6; + renderer.resize(spine.webgl.ResizeMode.Fit); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + renderer.begin(); + renderer.drawSkeleton(skeleton, true); + renderer.drawSkeletonDebug(skeleton, false, ["root"]); + renderer.end(); + } + + clippingDemo.loadingComplete = loadingComplete; + clippingDemo.render = render; + clippingDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/demos.css b/apps/module-ts/src/spine-ts/webgl/demos/demos.css new file mode 100755 index 0000000..5b6be77 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/demos.css @@ -0,0 +1,127 @@ +body, html { + margin: 0; + font-family: Tahoma; + font-size: 11pt; +} +body { + padding: 15px; +} +br { + display: block; + content: ""; + margin-top: 15px; +} +h2 { + padding-top: 1em; +} +canvas { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + width: 100%; + height: 100%; +} + +.aspect { + position: relative; + width: 100%; +} + +.standalone { + width: 640px; + height: 480px; +} + +.demo { + clear: both; +} +.demo-container { + float: left; + width: 58%; +} +.demo-text { + float: left; + width: 38%; + margin-left: 2%; + margin-right: 2%; +} + +.timeline, .timeline td:nth-child(2) { + width: 100%; +} + +.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; +} +.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; +} + +.checkbox { + display: inline; +} + +.slider { + width: 100%; + max-width: 800px; + border-radius: 3px; + text-align: left; + transform: translateZ(0); + background: #222; + display: inline-block; +} +.slider, .slider.filled span { + height: 15px; + border: 1px solid #c5c5c5; +} +.slider div { + position: absolute; + top: -2px; + width: 10px; + height: 17px; + background: white; + border: #000 1px solid; + border-radius: 2px; + z-index: 10; +} +.slider.filled { + border: 0; +} +.slider.filled div { + top: -1px; + margin-left: 1px; +} +.slider.filled span { + display: block; + position: absolute; + background: #3ea9f5; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + z-index: 5; +} +.slider.filled span:last-child { + background: #222; + 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; +} diff --git a/apps/module-ts/src/spine-ts/webgl/demos/demos.html b/apps/module-ts/src/spine-ts/webgl/demos/demos.html new file mode 100755 index 0000000..c24b2f7 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/demos.html @@ -0,0 +1,353 @@ + + +Spine: Demos + + + + + + + + + + + + + + + + + + + + + + + +
                    +
                    +
                    +
                    +

                    Spine versus sprite sheets

                    +
                    +
                    +
                    +
                    +
                    Spine
                    All animations, all frame rates
                    0.18 MB
                    +
                    Sprite sheet
                    1 second of animation @ 30FPS
                    3.39 MB = 18x larger!
                    +
                    +
                    +
                    +
                    +
                    +
                    Animation speed
                    +
                     
                    +
                    +
                    +
                    +
                    + + +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +

                    Spine with frame-based animation

                    +
                    +
                    + + + +
                    +
                    +
                    +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +

                    Transitions and layering

                    +
                    +
                    +
                    +
                    Smooth
                    +
                    Abrupt
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    Animation speed
                    +
                     
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +

                    Mesh deformation

                    +
                    +
                    + + + +
                    +
                    +
                    +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    + + +
                    + Show bones +
                    +
                    +
                    + + +
                    + Show triangles +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +

                    Skins

                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    + + +
                    +
                    +
                    +
                    + + +
                    + Random skins +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +

                    Inverse kinematics

                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + +
                    +
                    +
                    +
                    + + +
                    + Aim +
                    +
                    +
                    + + +
                    + Show bones +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +

                    Path constraints

                    +
                    +
                    + + + +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + +
                    + Show bones & paths +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + +
                    + Show bones & paths +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +

                    Clipping

                    +
                    +
                    + + + +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + +
                    + Show triangles +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +

                    Transform constraints

                    +
                    +
                    + + + +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + +
                    + Show bones & paths +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    Rotation offset
                    +
                     
                    +
                    +
                    +
                    +
                    Translation mix
                    +
                     
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +

                    Additive Blending

                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/demos.js b/apps/module-ts/src/spine-ts/webgl/demos/demos.js new file mode 100755 index 0000000..e121f2f --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/demos.js @@ -0,0 +1,85 @@ + +$(function () { + window.onerror = function(message, url, lineNo) { + alert("Error: " + message + "\n" + "URL:" + url + "\nLine: " + lineNo); + } + + spineDemos.init(); + spineDemos.assetManager = new spine.SharedAssetManager("assets/"); + + var demos = [ + spritesheetsDemo, + imageChangesDemo, + transitionsDemo, + meshesDemo, + skinsDemo, + hoverboardDemo, + vineDemo, + clippingDemo, + stretchymanDemo, + tankDemo, + transformsDemo, + additiveBlendingDemo + ]; + + var placeholders = document.getElementsByClassName("aspect"); + + for (var i = 0; i < demos.length; i++) + spineDemos.addDemo(demos[i], placeholders[i]); + + 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"); + }); +}); diff --git a/apps/module-ts/src/spine-ts/webgl/demos/hoverboard.html b/apps/module-ts/src/spine-ts/webgl/demos/hoverboard.html new file mode 100755 index 0000000..c176a8b --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/hoverboard.html @@ -0,0 +1,25 @@ + + +IK Constraints - Spine Demo + + + + + + + +
                    +
                    + Display Bones
                    + Aim
                    + + +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/hoverboard.js b/apps/module-ts/src/spine-ts/webgl/demos/hoverboard.js new file mode 100755 index 0000000..0bf7bc2 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/hoverboard.js @@ -0,0 +1,181 @@ +var hoverboardDemo = function(canvas, bgColor) { + var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5); + var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8); + var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5); + var COLOR_OUTER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.8); + + var gl, renderer, input, assetManager; + var skeleton, state, bounds; + var timeKeeper, loadingScreen; + var target = null; + var hoverTargets = []; + var controlBones = ["hoverboard controller", "hip controller", "board target", "crosshair"]; + var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2(), temp3 = new spine.webgl.Vector3(); + var isPlaying = true; + + var DEMO_NAME = "HoverboardDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function init () { + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + + renderer = new spine.webgl.SceneRenderer(canvas, gl); + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas1.png"); + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas12.png"); + assetManager.loadText(DEMO_NAME, "atlas1.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + input = new spine.webgl.Input(canvas); + timeKeeper = new spine.TimeKeeper(); + } + + function loadingComplete () { + var atlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "atlas1.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(atlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json")["spineboy"]); + skeleton = new spine.Skeleton(skeletonData); + state = new spine.AnimationState(new spine.AnimationStateData(skeleton.data)); + state.setAnimation(0, "hoverboard", true); + state.apply(skeleton); + skeleton.updateWorldTransform(); + var offset = new spine.Vector2(); + bounds = new spine.Vector2(); + skeleton.getBounds(offset, bounds, []); + for (var i = 0; i < controlBones.length; i++) + hoverTargets.push(null); + + renderer.camera.position.x = offset.x + bounds.x / 2; + renderer.camera.position.y = offset.y + bounds.y / 2; + + renderer.skeletonDebugRenderer.drawMeshHull = false; + renderer.skeletonDebugRenderer.drawMeshTriangles = false; + + setupUI(); + setupInput(); + } + + function setupUI () { + var checkbox = $("#hoverboard-drawbones"); + renderer.skeletonDebugRenderer.drawRegionAttachments = false; + renderer.skeletonDebugRenderer.drawPaths = false; + renderer.skeletonDebugRenderer.drawBones = false; + checkbox.change(function() { + renderer.skeletonDebugRenderer.drawPaths = this.checked; + renderer.skeletonDebugRenderer.drawBones = this.checked; + }); + + var aimTrack = 1; + var shootAimTrack = 2; + var shootTrack = 3; + + $("#hoverboard-aim").change(function () { + if (!this.checked) + state.setEmptyAnimation(aimTrack, 0.2); + else { + state.setEmptyAnimation(aimTrack, 0); + state.addAnimation(aimTrack, "aim", true, 0).mixDuration = 0.2; + } + }); + + $("#hoverboard-shoot").click(function () { + state.setAnimation(shootAimTrack, "aim", true); + state.setAnimation(shootTrack, "shoot", false).listener = { + complete: function (trackIndex) { + state.setEmptyAnimation(shootAimTrack, 0.2); + state.clearTrack(shootTrack); + } + }; + }); + + $("#hoverboard-jump").click(function () { + state.setAnimation(aimTrack, "jump", false); + state.addEmptyAnimation(aimTrack, 0.5, 0); + if ($("#hoverboard-aim").prop("checked")) + state.addAnimation(aimTrack, "aim", true, 0.4).mixDuration = 0.2; + }); + } + + function setupInput () { + input.addListener({ + down: function(x, y) { + isPlaying = false; + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(bone.worldX, bone.worldY, 0).distance(coords) < 30) { + target = bone; + } + } + }, + up: function(x, y) { + if (target && target.data.name == "crosshair") $("#hoverboard-shoot").click(); + target = null; + }, + dragged: function(x, y) { + if (target != null && x > 0 && x < canvas.width && y > 0 && y < canvas.height) { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (target.parent !== null) { + target.parent.worldToLocal(temp2.set(coords.x, coords.y)); + target.x = temp2.x; + target.y = temp2.y; + } else { + target.x = coords.x; + target.y = coords.y; + } + } + }, + moved: function (x, y) { + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(bone.worldX, bone.worldY, 0).distance(coords) < 30) { + hoverTargets[i] = bone; + } else { + hoverTargets[i] = null; + } + } + } + }); + } + + function render () { + timeKeeper.update(); + var delta = timeKeeper.delta; + + state.update(delta); + state.apply(skeleton); + skeleton.updateWorldTransform(); + + renderer.camera.viewportWidth = bounds.x * 1.2; + renderer.camera.viewportHeight = bounds.y * 1.2; + renderer.resize(spine.webgl.ResizeMode.Fit); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + renderer.begin(); + renderer.drawSkeleton(skeleton, true); + renderer.drawSkeletonDebug(skeleton, false, ["root"]); + gl.lineWidth(2); + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + var colorInner = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_INNER : spineDemos.NON_HOVER_COLOR_INNER; + var colorOuter = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_OUTER : spineDemos.NON_HOVER_COLOR_OUTER; + renderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner); + renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter); + } + renderer.end(); + gl.lineWidth(1); + } + + hoverboardDemo.loadingComplete = loadingComplete; + hoverboardDemo.render = render; + hoverboardDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/imagechanges.html b/apps/module-ts/src/spine-ts/webgl/demos/imagechanges.html new file mode 100755 index 0000000..6b9b3d5 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/imagechanges.html @@ -0,0 +1,24 @@ + + +Frame-by-frame - Spine Demo + + + + + + + +
                    +
                    +
                    +
                    + +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/imagechanges.js b/apps/module-ts/src/spine-ts/webgl/demos/imagechanges.js new file mode 100755 index 0000000..631aeb7 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/imagechanges.js @@ -0,0 +1,198 @@ +var imageChangesDemo = function(canvas, bgColor) { + var OUTLINE_COLOR = new spine.Color(0, 0.8, 0, 1); + + var canvas, gl, renderer, input, assetManager; + var skeleton, bounds; + var timeKeeper, loadingScreen; + var skeletons = {}; + var activeSkeleton = "Alien"; + var playButton, timeLine, isPlaying = true; + + var DEMO_NAME = "ImageChangesDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function init () { + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + + renderer = new spine.webgl.SceneRenderer(canvas, gl); + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas1.png"); + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas12.png"); + assetManager.loadText(DEMO_NAME, "atlas1.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + timeKeeper = new spine.TimeKeeper(); + } + + function loadingComplete () { + skeletons["Alien"] = loadSkeleton("alien", "death", ["head", "splat-fg", "splat-bg"]); + skeletons["Dragon"] = loadSkeleton("dragon", "flying", ["R_wing"]) + setupUI(); + } + + function setupUI() { + playButton = $("#imagechanges-playbutton"); + var playButtonUpdate = function () { + isPlaying = !isPlaying; + if (isPlaying) + playButton.addClass("pause").removeClass("play"); + else + playButton.addClass("play").removeClass("pause"); + } + playButton.click(playButtonUpdate); + playButton.addClass("pause"); + + timeLine = $("#imagechanges-timeline").data("slider"); + timeLine.changed = function (percent) { + if (isPlaying) playButton.click(); + if (!isPlaying) { + var active = skeletons[activeSkeleton]; + var animationDuration = active.state.getCurrent(0).animation.duration; + var time = animationDuration * percent; + active.state.update(time - active.playTime); + active.state.apply(active.skeleton); + active.skeleton.updateWorldTransform(); + active.playTime = time; + } + }; + + var list = $("#imagechanges-skeleton"); + for (var skeletonName in skeletons) { + var option = $(""); + option.attr("value", skeletonName).text(skeletonName); + if (skeletonName === activeSkeleton) option.attr("selected", "selected"); + list.append(option); + } + list.change(function() { + activeSkeleton = $("#imagechanges-skeleton option:selected").text(); + var active = skeletons[activeSkeleton]; + var animationDuration = active.state.getCurrent(0).animation.duration; + timeLine.set(active.playTime / animationDuration); + }) + } + + function loadSkeleton(name, animation, sequenceSlots) { + var atlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "atlas1.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(atlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json")[name]); + var skeleton = new spine.Skeleton(skeletonData); + skeleton.setSkinByName("default"); + + var state = new spine.AnimationState(new spine.AnimationStateData(skeletonData)); + var anim = skeletonData.findAnimation(animation); + state.setAnimation(0, animation, true); + state.apply(skeleton); + skeleton.updateWorldTransform(); + var offset = new spine.Vector2(); + var size = new spine.Vector2(); + skeleton.getBounds(offset, size, []); + + var regions = []; + for(var i = 0; i < sequenceSlots.length; i++) { + var slot = skeleton.findSlot(sequenceSlots[i]); + sequenceSlots[i] = slot; + var index = slot.data.index; + for (var name in skeleton.skin.attachments[index]) + regions.push(skeleton.skin.attachments[index][name]); + } + + return { + atlas: atlas, + skeleton: skeleton, + state: state, + playTime: 0, + bounds: { + offset: offset, + size: size + }, + slots: sequenceSlots, + regions: regions + }; + } + + function render () { + timeKeeper.update(); + var delta = timeKeeper.delta; + + var active = skeletons[activeSkeleton]; + var skeleton = active.skeleton; + var state = active.state; + var offset = active.bounds.offset; + var size = active.bounds.size; + + var x = offset.x + size.x + 100, offsetY = offset.y, zoom = 1; + if (activeSkeleton === "Alien") { + renderer.camera.position.x = offset.x + size.x + 400; + renderer.camera.position.y = offset.y + size.y / 2 + 450; + x += 400; + zoom = 0.31; + } else { + renderer.camera.position.x = offset.x + size.x; + renderer.camera.position.y = offset.y + size.y / 2; + x += 100; + } + renderer.camera.viewportWidth = size.x * 2.4 / zoom; + renderer.camera.viewportHeight = size.y * 1.4 / zoom; + renderer.resize(spine.webgl.ResizeMode.Fit); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + if (isPlaying) { + var animationDuration = state.getCurrent(0).animation.duration; + active.playTime += delta; + while (active.playTime >= animationDuration) { + active.playTime -= animationDuration; + } + timeLine.set(active.playTime / animationDuration); + + state.update(delta); + state.apply(skeleton); + skeleton.updateWorldTransform(); + } + + renderer.begin(); + renderer.drawSkeleton(skeleton, true); + + var y = offsetY; + var slotsWidth = 0, slotsHeight = 0; + var slotSize = size.y / 3; + var maxSlotWidth = 0; + var j = 0; + for (var i = 0, n = active.regions.length; i < n; i++) { + var region = active.regions[i].region; + var scale = Math.min(slotSize / region.height, slotSize / region.width) / zoom; + renderer.drawRegion(region, x, y, region.width * scale, region.height * scale); + + for (var ii = 0; ii < active.slots.length; ii++) { + var slot = active.slots[ii]; + if (slot.attachment && slot.attachment.name === region.name) { + renderer.rect(false, x, y, region.width * scale, region.height * scale, OUTLINE_COLOR); + break; + } + } + + maxSlotWidth = Math.max(maxSlotWidth, region.width * scale); + y += slotSize / zoom + 2; + j++; + if (j == 3) { + x += maxSlotWidth + 10; + maxSlotWidth = 0; + y = offsetY; + j = 0; + } + } + + renderer.end(); + } + + imageChangesDemo.loadingComplete = loadingComplete; + imageChangesDemo.render = render; + imageChangesDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/meshes.html b/apps/module-ts/src/spine-ts/webgl/demos/meshes.html new file mode 100755 index 0000000..7a86ca1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/meshes.html @@ -0,0 +1,26 @@ + + +Meshes - Spine Demo + + + + + + + +
                    +
                    +
                    +
                    +
                    + Draw bones
                    + Draw triangles
                    +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/meshes.js b/apps/module-ts/src/spine-ts/webgl/demos/meshes.js new file mode 100755 index 0000000..eaecb5c --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/meshes.js @@ -0,0 +1,158 @@ +var meshesDemo = function(canvas, bgColor) { + var canvas, gl, renderer, input, assetManager; + var skeleton, bounds; + var timeKeeper, loadingScreen; + var skeletons = {}; + var activeSkeleton = "Orange Girl"; + var playButton, timeline, isPlaying = true; + + var DEMO_NAME = "MeshesDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function init () { + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + renderer = new spine.webgl.SceneRenderer(canvas, gl); + renderer.skeletonDebugRenderer.drawRegionAttachments = false; + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas2.png"); + assetManager.loadText(DEMO_NAME, "atlas2.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + timeKeeper = new spine.TimeKeeper(); + } + + function loadingComplete () { + timeKeeper.update(); + skeletons["Orange Girl"] = loadSkeleton("orangegirl", "animation"); + skeletons["Green Girl"] = loadSkeleton("greengirl", "animation"); + skeletons["Armor Girl"] = loadSkeleton("armorgirl", "animation"); + setupUI(); + } + + function setupUI() { + playButton = $("#meshes-playbutton"); + var playButtonUpdate = function () { + isPlaying = !isPlaying; + if (isPlaying) + playButton.addClass("pause").removeClass("play"); + else + playButton.addClass("play").removeClass("pause"); + } + playButton.click(playButtonUpdate); + playButton.addClass("pause"); + + timeline = $("#meshes-timeline").data("slider"); + timeline.changed = function (percent) { + if (isPlaying) playButton.click(); + if (!isPlaying) { + var active = skeletons[activeSkeleton]; + var animationDuration = active.state.getCurrent(0).animation.duration; + var time = animationDuration * percent; + active.state.update(time - active.playTime); + active.state.apply(active.skeleton); + active.skeleton.updateWorldTransform(); + active.playTime = time; + } + }; + + var list = $("#meshes-skeleton"); + for (var skeletonName in skeletons) { + var option = $(""); + option.attr("value", skeletonName).text(skeletonName); + if (skeletonName === activeSkeleton) option.attr("selected", "selected"); + list.append(option); + } + list.change(function() { + activeSkeleton = $("#meshes-skeleton option:selected").text(); + var active = skeletons[activeSkeleton]; + var animationDuration = active.state.getCurrent(0).animation.duration; + timeline.set(active.playTime / animationDuration); + }) + + renderer.skeletonDebugRenderer.drawBones = false; + $("#meshes-drawbonescheckbox").click(function() { + renderer.skeletonDebugRenderer.drawBones = this.checked; + }) + + renderer.skeletonDebugRenderer.drawMeshHull = false; + renderer.skeletonDebugRenderer.drawMeshTriangles = false; + $("#meshes-drawmeshtrianglescheckbox").click(function() { + renderer.skeletonDebugRenderer.drawMeshHull = this.checked; + renderer.skeletonDebugRenderer.drawMeshTriangles = this.checked; + }) + } + + function loadSkeleton(name, animation, sequenceSlots) { + var atlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "atlas2.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(atlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json")[name]); + var skeleton = new spine.Skeleton(skeletonData); + skeleton.setSkinByName("default"); + + var state = new spine.AnimationState(new spine.AnimationStateData(skeletonData)); + state.setAnimation(0, animation, true); + state.apply(skeleton); + skeleton.updateWorldTransform(); + var offset = new spine.Vector2(); + var size = new spine.Vector2(); + skeleton.getBounds(offset, size, []); + + return { + atlas: atlas, + skeleton: skeleton, + state: state, + playTime: 0, + bounds: { + offset: offset, + size: size + } + }; + } + + function render () { + timeKeeper.update(); + var delta = timeKeeper.delta; + + var active = skeletons[activeSkeleton]; + var skeleton = active.skeleton; + var state = active.state; + var offset = active.bounds.offset; + var size = active.bounds.size; + + renderer.camera.position.x = offset.x + size.x / 2; + renderer.camera.position.y = offset.y + size.y / 2 + 20; + renderer.camera.viewportWidth = size.x * 1.1; + renderer.camera.viewportHeight = size.y * 1.1; + renderer.resize(spine.webgl.ResizeMode.Fit); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + if (isPlaying) { + var animationDuration = state.getCurrent(0).animation.duration; + active.playTime += delta; + while (active.playTime >= animationDuration) + active.playTime -= animationDuration; + timeline.set(active.playTime / animationDuration); + + state.update(delta); + state.apply(skeleton); + skeleton.updateWorldTransform(); + } + + renderer.begin(); + renderer.drawSkeleton(skeleton, true); + renderer.drawSkeletonDebug(skeleton); + renderer.end(); + } + + meshesDemo.loadingComplete = loadingComplete; + meshesDemo.render = render; + meshesDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/skins.html b/apps/module-ts/src/spine-ts/webgl/demos/skins.html new file mode 100755 index 0000000..8b87d84 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/skins.html @@ -0,0 +1,25 @@ + + +Skins - Spine Demo + + + + + + + +
                    +
                    +
                    + +
                    + Randomize skin +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/skins.js b/apps/module-ts/src/spine-ts/webgl/demos/skins.js new file mode 100755 index 0000000..3b937b6 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/skins.js @@ -0,0 +1,214 @@ +var skinsDemo = function(canvas, bgColor) { + var canvas, gl, renderer, input, assetManager; + var skeleton, state, offset, bounds; + var timeKeeper, loadingScreen; + var playButton, timeLine, isPlaying = true, playTime = 0; + var randomizeSkins, lastSkinChange = Date.now() / 1000, clickAnim = 0; + + var DEMO_NAME = "SkinsDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function init () { + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + + renderer = new spine.webgl.SceneRenderer(canvas, gl); + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + assetManager.loadTexture(DEMO_NAME, textureLoader, "heroes.png"); + assetManager.loadTexture(DEMO_NAME, textureLoader, "heroes2.png"); + assetManager.loadText(DEMO_NAME, "heroes.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + input = new spine.webgl.Input(canvas); + timeKeeper = new spine.TimeKeeper(); + } + + function loadingComplete () { + var atlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "heroes.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(atlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json").heroes); + skeleton = new spine.Skeleton(skeletonData); + skeleton.setSkinByName("Assassin"); + var stateData = new spine.AnimationStateData(skeleton.data); + stateData.defaultMix = 0.2; + stateData.setMix("roll", "run", 0); + stateData.setMix("jump", "run2", 0); + state = new spine.AnimationState(stateData); + setupAnimations(state); + state.apply(skeleton); + skeleton.updateWorldTransform(); + offset = new spine.Vector2(); + bounds = new spine.Vector2(); + skeleton.getBounds(offset, bounds, []); + setupUI(); + setupInput(); + } + + function setupInput (){ + input.addListener({ + down: function(x, y) { + swingSword(); + }, + up: function(x, y) { }, + dragged: function(x, y) { }, + moved: function (x, y) { } + }); + } + + function setupAnimations(state) { + state.addAnimation(0, "idle", true, 1); + state.addAnimation(0, "walk", true, 2); + state.addAnimation(0, "run", true, 4); + state.addAnimation(0, "roll", false, 3); + state.addAnimation(0, "run", true, 0); + state.addAnimation(0, "run2", true, 1.5); + state.addAnimation(0, "jump", false, 3); + state.addAnimation(0, "run2", true, 0); + state.addAnimation(0, "run", true, 1); + state.addAnimation(0, "idle", true, 3); + state.addAnimation(0, "idleTired", true, 0.5); + state.addAnimation(0, "idle", true, 2); + state.addAnimation(0, "walk2", true, 1); + state.addAnimation(0, "block", true, 3); + state.addAnimation(0, "punch1", false, 1.5); + state.addAnimation(0, "block", true, 0); + state.addAnimation(0, "punch1", false, 1.5); + state.addAnimation(0, "punch2", false, 0); + state.addAnimation(0, "block", true, 0); + state.addAnimation(0, "hitBig", false, 1.5); + state.addAnimation(0, "floorIdle", true, 0); + state.addAnimation(0, "floorGetUp", false, 1.5); + state.addAnimation(0, "idle", true, 0); + state.addAnimation(0, "meleeSwing1-fullBody", false, 1.5); + state.addAnimation(0, "idle", true, 0); + state.addAnimation(0, "meleeSwing2-fullBody", false, 1.5); + state.addAnimation(0, "idle", true, 0); + state.addAnimation(0, "idleTired", true, 0.5); + state.addAnimation(0, "crouchIdle", true, 1.5); + state.addAnimation(0, "crouchWalk", true, 2); + state.addAnimation(0, "crouchIdle", true, 2.5).listener = { + start: function (trackIndex) { + setupAnimations(state); + } + }; + + state.setAnimation(1, "empty", false, 0); + state.setAnimation(1, "hideSword", false, 2); + } + + function setupUI() { + var list = $("#skins-skin"); + for (var skin in skeleton.data.skins) { + skin = skeleton.data.skins[skin]; + if (skin.name == "default") continue; + var option = $(""); + option.attr("value", skin.name).text(skin.name); + if (skin.name === "Assassin") { + option.attr("selected", "selected"); + skeleton.setSkinByName("Assassin"); + } + list.append(option); + } + list.change(function() { + activeSkin = $("#skins-skin option:selected").text(); + skeleton.setSkinByName(activeSkin); + skeleton.setSlotsToSetupPose(); + randomizeSkins.checked = false; + }); + + $("#skins-randomizeattachments").click(randomizeAttachments); + $("#skins-swingsword").click(swingSword); + randomizeSkins = document.getElementById("skins-randomizeskins"); + } + + function setSkin (skin) { + var slot = skeleton.findSlot("item_near"); + var weapon = slot.getAttachment(); + skeleton.setSkin(skin); + skeleton.setSlotsToSetupPose(); + slot.setAttachment(weapon); + } + + function swingSword () { + state.setAnimation(5, (clickAnim++ % 2 == 0) ? "meleeSwing2" : "meleeSwing1", false, 0); + } + + function randomizeSkin () { + var result; + var count = 0; + for (var skin in skeleton.data.skins) { + if (skeleton.data.skins[skin].name === "default") continue; + if (Math.random() < 1/++count) { + result = skeleton.data.skins[skin]; + } + } + setSkin(result); + $("#skins-skin option").filter(function() { + return ($(this).text() == result.name); + }).prop("selected", true); + } + + function randomizeAttachments () { + var skins = []; + for (var skin in skeleton.data.skins) { + skin = skeleton.data.skins[skin]; + if (skin.name === "default") continue; + skins.push(skin); + } + + var newSkin = new spine.Skin("random-skin"); + for (var slot = 0; slot < skeleton.slots.length; slot++) { + var skin = skins[(Math.random() * skins.length - 1) | 0]; + var attachments = skin.attachments[slot]; + for (var attachmentName in attachments) { + newSkin.setAttachment(slot, attachmentName, attachments[attachmentName]); + } + } + setSkin(newSkin); + randomizeSkins.checked = false; + } + + function render () { + timeKeeper.update(); + var delta = timeKeeper.delta; + + if (randomizeSkins.checked) { + var now = Date.now() / 1000; + if (now - lastSkinChange > 2) { + randomizeSkin(); + lastSkinChange = now; + } + } + + renderer.camera.position.x = offset.x + bounds.x * 1.5 - 125; + renderer.camera.position.y = offset.y + bounds.y / 2; + renderer.camera.viewportWidth = bounds.x * 3; + renderer.camera.viewportHeight = bounds.y * 1.2; + renderer.resize(spine.webgl.ResizeMode.Fit); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + state.update(delta); + state.apply(skeleton); + skeleton.updateWorldTransform(); + + renderer.begin(); + renderer.drawSkeleton(skeleton, true); + var texture = assetManager.get(DEMO_NAME, "heroes.png"); + var width = bounds.x * 1.25; + var scale = width / texture.getImage().width; + var height = scale * texture.getImage().height; + renderer.drawTexture(texture, offset.x + bounds.x + 190, offset.y + bounds.y / 2 - height / 2 - 5, width, height); + renderer.end(); + } + + skinsDemo.loadingComplete = loadingComplete; + skinsDemo.render = render; + skinsDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/spritesheets.html b/apps/module-ts/src/spine-ts/webgl/demos/spritesheets.html new file mode 100755 index 0000000..3809804 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/spritesheets.html @@ -0,0 +1,25 @@ + + +Spine vs Sprite Sheets - Spine Demo + + + + + + + +
                    +
                    + +
                    +Time multiplier +
                    +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/spritesheets.js b/apps/module-ts/src/spine-ts/webgl/demos/spritesheets.js new file mode 100755 index 0000000..389ce3d --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/spritesheets.js @@ -0,0 +1,151 @@ +var spritesheetsDemo = function(canvas, bgColor) { + var SKELETON_ATLAS_COLOR = new spine.Color(0, 0.8, 0, 0.8); + var FRAME_ATLAS_COLOR = new spine.Color(0.8, 0, 0, 0.8); + + var canvas, gl, renderer, input, assetManager; + var skeleton, animationState, offset, bounds; + var skeletonSeq, walkAnim, walkLastTime = 0, walkLastTimePrecise = 0; + var skeletonAtlas; + var viewportWidth, viewportHeight; + var frames = [], currFrame = 0, frameTime = 0, frameScale = 0, FPS = 30; + var timeKeeper, loadingScreen, input; + var playTime = 0, framePlaytime = 0, clickAnim = 0; + + var DEMO_NAME = "SpritesheetsDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function init () { + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + + renderer = new spine.webgl.SceneRenderer(canvas, gl); + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas1.png"); + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas12.png"); + assetManager.loadText(DEMO_NAME, "atlas1.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + timeKeeper = new spine.TimeKeeper(); + input = new spine.webgl.Input(canvas); + } + + function loadingComplete () { + skeletonAtlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "atlas1.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(skeletonAtlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json").raptor); + skeleton = new spine.Skeleton(skeletonData); + var stateData = new spine.AnimationStateData(skeleton.data); + stateData.defaultMix = 0.5; + stateData.setMix("jump", "walk", 0.3); + animationState = new spine.AnimationState(stateData); + animationState.setAnimation(0, "walk", true); + animationState.apply(skeleton); + skeleton.updateWorldTransform(); + offset = new spine.Vector2(); + bounds = new spine.Vector2(); + skeleton.getBounds(offset, bounds, []); + skeleton.x -= 60; + + skeletonSeq = new spine.Skeleton(skeletonData); + walkAnim = skeletonSeq.data.findAnimation("walk"); + walkAnim.apply(skeletonSeq, 0, 0, true, null, 1, true, false); + skeletonSeq.x += bounds.x + 150; + + viewportWidth = ((700 + bounds.x) - offset.x); + viewportHeight = ((0 + bounds.y) - offset.y); + resize(); + setupUI(); + setupInput(); + + $("#spritesheets-overlay").removeClass("overlay-hide"); + $("#spritesheets-overlay").addClass("overlay"); + } + + function setupUI () { + timeSlider = $("#spritesheets-timeslider").data("slider"); + timeSlider.set(0.5); + timeSliderLabel = $("#spritesheets-timeslider-label")[0]; + } + + function setupInput () { + input.addListener({ + down: function(x, y) { + setAnimation((clickAnim++ % 2 == 0) ? "roar" : "jump"); + }, + up: function(x, y) { }, + moved: function(x, y) { }, + dragged: function(x, y) { } + }); + $("#spritesheets-roar").click(function () { + setAnimation("roar"); + }); + $("#spritesheets-jump").click(function () { + setAnimation("jump"); + }); + } + + function setAnimation (name) { + animationState.setAnimation(0, name, false); + animationState.addAnimation(0, "walk", true, 0); + } + + function resize () { + renderer.camera.position.x = offset.x + viewportWidth / 2 - 25; + renderer.camera.position.y = offset.y + viewportHeight / 2 - 100; + renderer.camera.viewportWidth = viewportWidth * 1.2; + renderer.camera.viewportHeight = viewportHeight * 1.2; + renderer.resize(spine.webgl.ResizeMode.Fit); + } + + function render () { + timeKeeper.update(); + var delta = timeKeeper.delta; + + resize(); + + delta *= timeSlider.get(); + if (timeSliderLabel) { + var oldValue = timeSliderLabel.textContent; + var newValue = Math.round(timeSlider.get() * 100) + "%"; + if (oldValue !== newValue) timeSliderLabel.textContent = newValue; + } + + var animationDuration = animationState.getCurrent(0).animation.duration; + playTime += delta; + while (playTime >= animationDuration) { + playTime -= animationDuration; + } + + walkLastTimePrecise += delta; + while (walkLastTimePrecise - walkLastTime > 1 / FPS) { + var newWalkTime = walkLastTime + 1 / FPS; + walkAnim.apply(skeletonSeq, walkLastTime, newWalkTime, true, null, 1, spine.MixBlend.setup, spine.MixDirection.mixIn); + walkLastTime = newWalkTime; + } + skeletonSeq.updateWorldTransform(); + + animationState.update(delta); + var current = animationState.getCurrent(0); + if (current.animation.name == "walk") current.trackTime = walkLastTimePrecise; + animationState.apply(skeleton); + skeleton.updateWorldTransform(); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + renderer.begin(); + var frame = frames[currFrame]; + renderer.drawSkeleton(skeleton, true); + renderer.drawSkeleton(skeletonSeq, true); + renderer.end(); + } + + spritesheetsDemo.loadingComplete = loadingComplete; + spritesheetsDemo.render = render; + spritesheetsDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/stretchyman.html b/apps/module-ts/src/spine-ts/webgl/demos/stretchyman.html new file mode 100755 index 0000000..19f6a47 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/stretchyman.html @@ -0,0 +1,22 @@ + + +Strechyman - Spine Demo + + + + + + + +
                    +
                    + Display bones +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/stretchyman.js b/apps/module-ts/src/spine-ts/webgl/demos/stretchyman.js new file mode 100755 index 0000000..1fbb14c --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/stretchyman.js @@ -0,0 +1,188 @@ +var stretchymanDemo = function(canvas, bgColor) { + var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5); + var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8); + var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5); + var COLOR_OUTER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.8); + + var canvas, gl, renderer, input, assetManager; + var skeleton, bounds, state; + var timeKeeper, loadingScreen; + var target = null; + var hoverTargets = []; + var controlBones = [ + "back leg controller", + "front leg controller", + "back arm controller", + "front arm controller", + "head controller", + "hip controller" + ]; + var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2(), temp3 = new spine.webgl.Vector3(); + var kneePos = new spine.Vector2(); + var playButton, timeLine, spacing, isPlaying = true, playTime = 0; + + var DEMO_NAME = "StretchymanDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function init () { + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + + renderer = new spine.webgl.SceneRenderer(canvas, gl); + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + input = new spine.webgl.Input(canvas); + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas2.png"); + assetManager.loadText(DEMO_NAME, "atlas2.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + timeKeeper = new spine.TimeKeeper(); + } + + function loadingComplete () { + var atlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "atlas2.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(atlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json").stretchyman); + skeleton = new spine.Skeleton(skeletonData); + skeleton.setToSetupPose(); + skeleton.updateWorldTransform(); + var offset = new spine.Vector2(); + bounds = new spine.Vector2(); + skeleton.getBounds(offset, bounds, []); + for (var i = 0; i < controlBones.length; i++) hoverTargets.push(null); + state = new spine.AnimationState(new spine.AnimationStateData(skeleton.data)); + state.setAnimation(0, "idle", true); + + renderer.camera.position.x = offset.x + bounds.x / 2; + renderer.camera.position.y = offset.y + bounds.y / 2; + + renderer.skeletonDebugRenderer.drawMeshHull = false; + renderer.skeletonDebugRenderer.drawMeshTriangles = false; + + setupUI(); + setupInput(); + } + + function setupUI() { + var checkbox = $("#stretchyman-drawbones"); + renderer.skeletonDebugRenderer.drawPaths = false; + renderer.skeletonDebugRenderer.drawBones = false; + checkbox.change(function() { + renderer.skeletonDebugRenderer.drawPaths = this.checked; + renderer.skeletonDebugRenderer.drawBones = this.checked; + }); + } + + function setupInput (){ + input.addListener({ + down: function(x, y) { + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + target = bone; + } + } + }, + up: function(x, y) { + target = null; + }, + dragged: function(x, y) { + if (target != null && x > 0 && x < canvas.width && y > 0 && y < canvas.height) { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (target.parent !== null) + target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y)); + else + temp2.set(coords.x - skeleton.x, coords.y - skeleton.y); + target.x = temp2.x; + target.y = temp2.y; + if (target.data.name === "head controller") { + var hipControl = skeleton.findBone("hip controller"); + target.x = spine.MathUtils.clamp(target.x, -65, 65); + target.y = Math.max(260, target.y); + } + } + }, + moved: function (x, y) { + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + hoverTargets[i] = bone; + } else { + hoverTargets[i] = null; + } + } + } + }); + } + + function center (middleBone, hipBone, footBone, amount, dir) { + temp.set(footBone.worldX + skeleton.x, footBone.worldY + skeleton.y, 0) + .sub(temp3.set(hipBone.worldX + skeleton.x, hipBone.worldY + skeleton.y, 0)); + var dist = Math.sqrt(temp.x * temp.x + temp.y * temp.y); + temp3.set(hipBone.worldX + skeleton.x, hipBone.worldY + skeleton.y, 0); + temp.scale(0.5).add(temp3); + middleBone.parent.worldToLocal(kneePos.set(temp.x, temp.y)); + middleBone.x = kneePos.x; + middleBone.y = kneePos.y; + middleBone.children[0].y = (22 + Math.max(0, amount - dist * 0.3)) * dir; + } + + function rotate (handBone, elbowBone) { + // can do all this in world space cause handBone is essentially in world space + var v = coords.set(handBone.worldX, handBone.worldY, 0).sub(new spine.webgl.Vector3(elbowBone.worldX, elbowBone.worldY, 0)).normalize(); + var angle = Math.acos(v.x) * spine.MathUtils.radiansToDegrees + 180; + if (v.y < 0) angle = 360 - angle; + handBone.rotation = angle; + } + + function render () { + timeKeeper.update(); + var delta = timeKeeper.delta; + + state.update(delta); + state.apply(skeleton); + center(skeleton.findBone("back leg middle"), skeleton.findBone("back leg 1"), skeleton.findBone("back leg controller"), 65, 1); + center(skeleton.findBone("front leg middle"), skeleton.findBone("front leg 1"), skeleton.findBone("front leg controller"), 65, 1); + center(skeleton.findBone("front arm middle"), skeleton.findBone("front arm 1"), skeleton.findBone("front arm controller"), 90, -1); + center(skeleton.findBone("back arm middle"), skeleton.findBone("back arm 1"), skeleton.findBone("back arm controller"), 90, -1); + rotate(skeleton.findBone("front arm controller"), skeleton.findBone("front arm elbow")); + rotate(skeleton.findBone("back arm controller"), skeleton.findBone("back arm elbow")); + var headControl = skeleton.findBone("head controller"), hipControl = skeleton.findBone("hip controller") + var head = skeleton.findBone("head"); + var angle = Math.atan2(headControl.worldY - hipControl.worldY, headControl.worldX - hipControl.worldX) * spine.MathUtils.radDeg; + angle = (angle - 90) * 2.5; + head.rotation = head.data.rotation + Math.min(90, Math.abs(angle)) * Math.sign(angle); + skeleton.updateWorldTransform(); + + renderer.camera.viewportWidth = bounds.x * 1.2; + renderer.camera.viewportHeight = bounds.y * 1.5; + renderer.resize(spine.webgl.ResizeMode.Fit); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + renderer.begin(); + renderer.drawSkeleton(skeleton, true); + renderer.drawSkeletonDebug(skeleton, false, ["root"]); + gl.lineWidth(2); + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + var colorInner = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_INNER : spineDemos.NON_HOVER_COLOR_INNER; + var colorOuter = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_OUTER : spineDemos.NON_HOVER_COLOR_OUTER; + renderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner); + renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter); + } + renderer.end(); + gl.lineWidth(1); + } + + stretchymanDemo.loadingComplete = loadingComplete; + stretchymanDemo.render = render; + stretchymanDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/tank.html b/apps/module-ts/src/spine-ts/webgl/demos/tank.html new file mode 100755 index 0000000..2a2ef2f --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/tank.html @@ -0,0 +1,24 @@ + + +Tank - Spine Demo + + + + + + + +
                    +
                    +
                    +
                    + Display bones +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/tank.js b/apps/module-ts/src/spine-ts/webgl/demos/tank.js new file mode 100755 index 0000000..86918d4 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/tank.js @@ -0,0 +1,121 @@ +var tankDemo = function(canvas, bgColor) { + var canvas, gl, renderer, input, assetManager; + var skeleton, state, offset, bounds; + var timeKeeper; + var playButton, timeLine, isPlaying = true, playTime = 0; + + var DEMO_NAME = "TankDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function init () { + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + + renderer = new spine.webgl.SceneRenderer(canvas, gl); + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas2.png"); + assetManager.loadText(DEMO_NAME, "atlas2.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + timeKeeper = new spine.TimeKeeper(); + } + + function loadingComplete () { + var atlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "atlas2.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(atlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json").tank); + skeleton = new spine.Skeleton(skeletonData); + state = new spine.AnimationState(new spine.AnimationStateData(skeleton.data)); + state.setAnimation(0, "drive", true); + state.apply(skeleton); + skeleton.updateWorldTransform(); + offset = new spine.Vector2(); + bounds = new spine.Vector2(); + offset.x = -1204.22; + bounds.x = 1914.52; + bounds.y = 965.78; + // skeleton.getBounds(offset, bounds); + + renderer.skeletonDebugRenderer.drawRegionAttachments = false; + renderer.skeletonDebugRenderer.drawMeshHull = false; + renderer.skeletonDebugRenderer.drawMeshTriangles = false; + + setupUI(); + } + + function setupUI() { + playButton = $("#tank-playbutton"); + var playButtonUpdate = function () { + isPlaying = !isPlaying; + if (isPlaying) + playButton.addClass("pause").removeClass("play"); + else + playButton.addClass("play").removeClass("pause"); + } + playButton.click(playButtonUpdate); + playButton.addClass("pause"); + + timeLine = $("#tank-timeline").data("slider"); + timeLine.changed = function (percent) { + if (isPlaying) playButton.click(); + if (!isPlaying) { + var animationDuration = state.getCurrent(0).animation.duration; + var time = animationDuration * percent; + state.update(time - playTime); + state.apply(skeleton); + skeleton.updateWorldTransform(); + playTime = time; + } + }; + + renderer.skeletonDebugRenderer.drawPaths = false; + renderer.skeletonDebugRenderer.drawBones = false; + $("#tank-drawbones").change(function() { + renderer.skeletonDebugRenderer.drawPaths = this.checked; + renderer.skeletonDebugRenderer.drawBones = this.checked; + }); + } + + function render () { + timeKeeper.update(); + var delta = timeKeeper.delta; + + if (isPlaying) { + var animationDuration = state.getCurrent(0).animation.duration; + playTime += delta; + while (playTime >= animationDuration) + playTime -= animationDuration; + timeLine.set(playTime / animationDuration); + + state.update(delta); + state.apply(skeleton); + skeleton.updateWorldTransform(); + } + + offset.x = skeleton.findBone("tankRoot").worldX; + offset.y = skeleton.findBone("tankRoot").worldY; + + renderer.camera.position.x = offset.x - 300; + renderer.camera.position.y = bounds.y - 505; + renderer.camera.viewportWidth = bounds.x * 1.2; + renderer.camera.viewportHeight = bounds.y * 1.2; + renderer.resize(spine.webgl.ResizeMode.Fit); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + renderer.begin(); + renderer.drawSkeleton(skeleton, true); + renderer.drawSkeletonDebug(skeleton, true); + renderer.end(); + } + + tankDemo.loadingComplete = loadingComplete; + tankDemo.render = render; + tankDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/transforms.html b/apps/module-ts/src/spine-ts/webgl/demos/transforms.html new file mode 100755 index 0000000..442ff4c --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/transforms.html @@ -0,0 +1,25 @@ + + +Transform Constraints - Spine Demo + + + + + + + +
                    +
                    +Rotation offset +

                    +Translation mix +
                    +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/transforms.js b/apps/module-ts/src/spine-ts/webgl/demos/transforms.js new file mode 100755 index 0000000..eede3d1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/transforms.js @@ -0,0 +1,177 @@ +var transformsDemo = function(canvas, bgColor) { + var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5); + var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8); + var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5); + var COLOR_OUTER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.8); + + var canvas, gl, renderer, input, assetManager; + var skeleton, state, bounds; + var timeKeeper; + var rotateHandle; + var target = null; + var hoverTargets = [null, null, null]; + var controlBones = ["wheel2overlay", "wheel3overlay", "rotate-handle"]; + var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2(); + var lastRotation = 0; + var mix, lastOffset = 0, lastMix = 0.5; + + var DEMO_NAME = "TransformsDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function init () { + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + + renderer = new spine.webgl.SceneRenderer(canvas, gl); + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas2.png"); + assetManager.loadText(DEMO_NAME, "atlas2.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + input = new spine.webgl.Input(canvas); + timeKeeper = new spine.TimeKeeper(); + } + + function loadingComplete () { + var atlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "atlas2.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(atlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json").transforms); + skeleton = new spine.Skeleton(skeletonData); + skeleton.setToSetupPose(); + skeleton.updateWorldTransform(); + var offset = new spine.Vector2(); + bounds = new spine.Vector2(); + skeleton.getBounds(offset, bounds, []); + state = new spine.AnimationState(new spine.AnimationStateData(skeleton.data)); + skeleton.setToSetupPose(); + skeleton.updateWorldTransform(); + rotateHandle = skeleton.findBone("rotate-handle"); + + renderer.camera.position.x = offset.x + bounds.x / 2; + renderer.camera.position.y = offset.y + bounds.y / 2; + + renderer.skeletonDebugRenderer.drawRegionAttachments = false; + renderer.skeletonDebugRenderer.drawMeshHull = false; + renderer.skeletonDebugRenderer.drawMeshTriangles = false; + + setupUI(); + setupInput(); + } + + function setupUI() { + var rotationOffset = $("#transforms-rotationoffset").data("slider"); + rotationOffset.changed = function (percent) { + var val = percent * 360 - 180; + var delta = val - lastOffset; + lastOffset = val; + skeleton.findTransformConstraint("wheel2").data.offsetRotation += delta; + skeleton.findTransformConstraint("wheel3").data.offsetRotation += delta; + $("#transforms-rotationoffset-label").text(Math.round(val) + "°"); + }; + $("#transforms-rotationoffset-label").text("0°"); + + var translationMix = $("#transforms-translationmix").data("slider"); + translationMix.set(0.5); + translationMix.changed = function (percent) { + var val = percent; + var delta = val - lastMix; + lastMix = val; + skeleton.findTransformConstraint("wheel1").translateMix += delta; + $("#transforms-translationmix-label").text(Math.round(val * 100) + "%"); + }; + $("#transforms-translationmix-label").text("50%"); + } + + function setupInput() { + var getRotation = function(x, y) { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + var wheel1 = skeleton.findBone("wheel1overlay"); + var v = coords.sub(new spine.webgl.Vector3(wheel1.worldX, wheel1.worldY, 0)).normalize(); + var angle = Math.acos(v.x) * spine.MathUtils.radiansToDegrees; + if (v.y < 0) angle = 360 - angle; + return angle; + } + input.addListener({ + down: function(x, y) { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + target = bone; + if (target === rotateHandle) lastRotation = getRotation(x, y); + } + } + }, + up: function(x, y) { + target = null; + }, + dragged: function(x, y) { + if (target != null && x > 0 && x < canvas.width && y > 0 && y < canvas.height) { + if (target === rotateHandle) { + var rotation = getRotation(x, y); + var delta = rotation - lastRotation; + skeleton.findBone("wheel1").rotation += delta; + lastRotation = rotation; + } else { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (target.parent !== null) { + target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y)); + target.x = temp2.x; + target.y = temp2.y; + } else { + target.x = coords.x - skeleton.x; + target.y = coords.y - skeleton.y; + } + } + } + }, + moved: function (x, y) { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + hoverTargets[i] = bone; + } else { + hoverTargets[i] = null; + } + } + } + }) + } + + function render () { + timeKeeper.update(); + var delta = timeKeeper.delta; + skeleton.updateWorldTransform(); + + renderer.camera.viewportWidth = bounds.x * 1.6; + renderer.camera.viewportHeight = bounds.y * 1.2; + renderer.resize(spine.webgl.ResizeMode.Fit); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + renderer.begin(); + renderer.drawSkeleton(skeleton, true); + renderer.drawSkeletonDebug(skeleton, false, ["root", "rotate-handle"]); + gl.lineWidth(2); + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + var colorInner = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_INNER : spineDemos.NON_HOVER_COLOR_INNER; + var colorOuter = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_OUTER : spineDemos.NON_HOVER_COLOR_OUTER; + renderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner); + renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter); + } + gl.lineWidth(1); + renderer.end(); + } + + transformsDemo.loadingComplete = loadingComplete; + transformsDemo.render = render; + transformsDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/transitions.html b/apps/module-ts/src/spine-ts/webgl/demos/transitions.html new file mode 100755 index 0000000..2053690 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/transitions.html @@ -0,0 +1,24 @@ + + +Transitions - Spine Demo + + + + + + + +
                    +
                    +Time multiplier +

                    + +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/transitions.js b/apps/module-ts/src/spine-ts/webgl/demos/transitions.js new file mode 100755 index 0000000..cce282b --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/transitions.js @@ -0,0 +1,141 @@ +var transitionsDemo = function(canvas, loadingComplete, bgColor) { + var OUTLINE_COLOR = new spine.Color(0, 0.8, 0, 1); + + var canvas, gl, renderer, input, assetManager; + var skeleton, skeletonNoMix, state, stateNoMix, bounds; + var timeSlider, timeSliderLabel; + var timeKeeper; + + var DEMO_NAME = "TransitionsDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function init () { + timeSlider = $("#transitions-timeslider").data("slider"); + timeSlider.set(0.5); + timeSliderLabel = $("#transitions-timeslider-label")[0]; + + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + + renderer = new spine.webgl.SceneRenderer(canvas, gl); + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas1.png"); + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas12.png"); + assetManager.loadText(DEMO_NAME, "atlas1.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + + input = new spine.webgl.Input(canvas); + timeKeeper = new spine.TimeKeeper(); + } + + function loadingComplete () { + skeleton = loadSkeleton("spineboy"); + skeletonNoMix = new spine.Skeleton(skeleton.data); + state = createState(0.25); + state.multipleMixing = true; + setAnimations(state, 0, 0); + stateNoMix = createState(0); + setAnimations(stateNoMix, -0.25, 0); + + state.apply(skeleton); + skeleton.updateWorldTransform(); + bounds = { offset: new spine.Vector2(), size: new spine.Vector2() }; + skeleton.getBounds(bounds.offset, bounds.size, []); + setupInput(); + $("#transitions-overlay").removeClass("overlay-hide"); + $("#transitions-overlay").addClass("overlay"); + } + + function setupInput() { + $("#transitions-die").click(function () { + var entry = state.setAnimation(0, "death", false); + setAnimations(state, 0, true, 0); + entry.next.mixDuration = 0.1; + + var entry = stateNoMix.setAnimation(0, "death", false); + setAnimations(stateNoMix, -0.25, -0.25 + -0.1); + }); + } + + function createState (mix) { + var stateData = new spine.AnimationStateData(skeleton.data); + stateData.defaultMix = mix; + var state = new spine.AnimationState(stateData); + return state; + } + + function setAnimations (state, delay, first) { + state.addAnimation(0, "idle", true, first); + state.addAnimation(0, "walk", true, 0.6); + state.addAnimation(0, "jump", false, 1); + state.addAnimation(0, "run", true, delay); + state.addAnimation(0, "walk", true, 1.2); + state.addAnimation(0, "run", true, 0.5); + state.addAnimation(0, "jump", false, 1); + state.addAnimation(0, "run", true, delay); + state.addAnimation(0, "jump", true, 0.5); + state.addAnimation(0, "walk", true, delay).listener = { + start: function (trackIndex) { + setAnimations(state, delay, 0.6); + } + }; + } + + function loadSkeleton(name) { + var atlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "atlas1.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(atlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json")[name]); + var skeleton = new spine.Skeleton(skeletonData); + skeleton.setSkinByName("default"); + return skeleton; + } + + function render () { + timeKeeper.update(); + var delta = timeKeeper.delta * timeSlider.get(); + if (timeSliderLabel) { + var oldValue = timeSliderLabel.textContent; + var newValue = Math.round(timeSlider.get() * 100) + "%"; + if (oldValue !== newValue) timeSliderLabel.textContent = newValue; + } + + var offset = bounds.offset; + var size = bounds.size; + + renderer.camera.position.x = offset.x + size.x - 50; + renderer.camera.position.y = offset.y + size.y / 2 - 40; + renderer.camera.viewportWidth = size.x * 2; + renderer.camera.viewportHeight = size.y * 2; + renderer.resize(spine.webgl.ResizeMode.Fit); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + renderer.begin(); + state.update(delta); + state.apply(skeleton); + skeleton.updateWorldTransform(); + skeleton.x = -200; + skeleton.y = -100; + renderer.drawSkeleton(skeleton, true); + + stateNoMix.update(delta); + stateNoMix.apply(skeletonNoMix); + skeletonNoMix.updateWorldTransform(); + skeletonNoMix.x = size.x + 45; + skeletonNoMix.y = -100; + renderer.drawSkeleton(skeletonNoMix, true); + renderer.end(); + } + + transitionsDemo.loadingComplete = loadingComplete; + transitionsDemo.render = render; + transitionsDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/utils.js b/apps/module-ts/src/spine-ts/webgl/demos/utils.js new file mode 100755 index 0000000..c85c69e --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/utils.js @@ -0,0 +1,177 @@ +var spineDemos = { + HOVER_COLOR_INNER: new spine.Color(0.478, 0, 0, 0.25), + HOVER_COLOR_OUTER: new spine.Color(1, 1, 1, 1), + NON_HOVER_COLOR_INNER: new spine.Color(0.478, 0, 0, 0.5), + NON_HOVER_COLOR_OUTER: new spine.Color(1, 0, 0, 0.8), + assetManager: new spine.SharedAssetManager("assets/"), + demos: [], + loopRunning: false, + canvases: [] +}; + +window.onerror = function (msg, url, lineNo, columnNo, error) { + var string = msg.toLowerCase(); + var substring = "script error"; + if (string.indexOf(substring) > -1){ + alert('Script Error: See Browser Console for Detail'); + } else { + var message = [ + 'Message: ' + msg, + 'URL: ' + url, + 'Line: ' + lineNo, + 'Column: ' + columnNo, + 'Error object: ' + JSON.stringify(error) + ].join(' - '); + + alert(message); + } + + return false; +}; + +(function () { + var timeKeeper = new spine.TimeKeeper(); + function loop () { + timeKeeper.update(); + if (spineDemos.log) console.log(timeKeeper.delta + ", " + timeKeeper.framesPerSecond); + requestAnimationFrame(loop); + var demos = spineDemos.demos; + for (var i = 0; i < demos.length; i++) { + var demo = demos[i]; + + checkElementVisible(demo); + renderDemo(demo); + } + } + + function renderDemo(demo) { + var canvas = demo.canvas; + if (!spineDemos.assetManager.isLoadingComplete(demo.DEMO_NAME)) { + if (demo.visible) { + if (canvas.parentElement != demo.placeholder) { + $(canvas).detach(); + demo.placeholder.appendChild(canvas); + } + demo.loadingScreen.draw(); + } + } else { + if (!demo.loaded) { + demo.loadingComplete(); + demo.loaded = true; + } + + if (demo.visible) { + if (canvas.parentElement != demo.placeholder) { + $(canvas).detach(); + demo.placeholder.appendChild(canvas); + } + if (spineDemos.log) console.log("Rendering " + canvas.id); + demo.render(); + demo.loadingScreen.draw(true); + } + } + } + + function checkElementVisible(demo) { + const rect = demo.placeholder.getBoundingClientRect(); + const windowHeight = (window.innerHeight || document.documentElement.clientHeight); + const windowWidth = (window.innerWidth || document.documentElement.clientWidth); + const vertInView = (rect.top <= windowHeight * 1.1) && ((rect.top + rect.height) >= windowHeight * -0.1); + const horInView = (rect.left <= windowWidth * 1.1) && ((rect.left + rect.width) >= windowWidth * -0.1); + + demo.visible = (vertInView && horInView); + } + + function createCanvases (numCanvases) { + for (var i = 0; i < numCanvases; i++) { + var canvas = document.createElement("canvas"); + canvas.width = 1; canvas.height = 1; + canvas.ctx = new spine.webgl.ManagedWebGLRenderingContext(canvas, { alpha: false }); + canvas.id = "canvas-" + i; + spineDemos.canvases.push(canvas); + } + } + + spineDemos.init = function () { + var numCanvases = 5; + var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; + var isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1; + if (isFirefox && isAndroid) numCanvases = 2; + createCanvases(numCanvases); + loadSliders(); + requestAnimationFrame(loop); + } + + spineDemos.addDemo = function (demo, placeholder) { + var canvas = spineDemos.canvases[spineDemos.demos.length % spineDemos.canvases.length]; + demo(canvas); + demo.placeholder = placeholder; + demo.canvas = canvas; + demo.visible = false; + var renderer = new spine.webgl.SceneRenderer(canvas, canvas.ctx.gl); + demo.loadingScreen = new spine.webgl.LoadingScreen(renderer); + $(window).on('DOMContentLoaded load resize scroll', function() { + checkElementVisible(demo); + renderDemo(demo); + }); + checkElementVisible(demo); + spineDemos.demos.push(demo); + } + + loadSliders = function () { + $(window).resize(function() { + $(".slider").each(function () { + $(this).data("slider").resized(); + }); + }); + $(".slider").each(function () { + var div = $(this), handle = $("
                    ").appendTo(div); + var bg1, bg2; + if (div.hasClass("filled")) { + bg1 = $("").appendTo(div)[0].style; + bg2 = $("").appendTo(div)[0].style; + } + var hw = handle.width(), value = 0, object, lastX; + handle = handle[0].style; + positionHandle(0); + function positionHandle (percent) { + var w = div.width(); + var x = Math.round((w - hw - 3) * percent + 1); + if (x != lastX) { + lastX = x; + handle.transform = "translateX(" + x + "px)"; + if (bg1) { + var w1 = x + hw / 2; + bg1.width = w1 + "px"; + bg2.width = (w - w1) + "px"; + bg2.left = w1 + "px"; + } + } + value = percent; + } + function mouseEvent (e) { + var x = e.pageX; + if (!x && e.originalEvent.touches) x = e.originalEvent.touches[0].pageX; + var percent = Math.max(0, Math.min(1, (x - div.offset().left - hw / 2) / (div.width() - hw - 2))); + positionHandle(percent); + if (object.changed) object.changed(percent); + } + function clearEvents () { + $(document).off("mouseup.slider mousemove.slider touchmove.slider touchend.slider"); + } + div.on("mousedown touchstart", function (e) { + mouseEvent(e); + e.preventDefault(); // Disable text selection. + $(document).on("mousemove.slider touchmove.slider", mouseEvent).on("mouseup.slider touchend.slider", clearEvents); + }); + div.data("slider", object = { + set: positionHandle, + get: function () { return value; }, + resized: function () { + lastX = null; + positionHandle(value); + } + }); + }); + } +})(); \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/vine.html b/apps/module-ts/src/spine-ts/webgl/demos/vine.html new file mode 100755 index 0000000..94c55c3 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/vine.html @@ -0,0 +1,24 @@ + + +Path Constraints - Spine Demo + + + + + + + +
                    +
                    +
                    +
                    + Display bones & path +
                    + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/demos/vine.js b/apps/module-ts/src/spine-ts/webgl/demos/vine.js new file mode 100755 index 0000000..6b736aa --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/demos/vine.js @@ -0,0 +1,181 @@ +var vineDemo = function(canvas, bgColor) { + var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5); + var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8); + var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5); + var COLOR_OUTER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.8); + + var canvas, gl, renderer, input, assetManager; + var skeleton, state, bounds; + var timeKeeper; + var target = null; + var hoverTargets = [null, null, null, null, null, null]; + var controlBones = ["base", "vine-control1", "vine-control2", "vine-control3", "vine-control4"]; + var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2(); + var playButton, timeLine, isPlaying = true, playTime = 0; + + var DEMO_NAME = "VineDemo"; + + if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1); + + function init () { + canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; + gl = canvas.ctx.gl; + + renderer = new spine.webgl.SceneRenderer(canvas, gl); + input = new spine.webgl.Input(canvas); + assetManager = spineDemos.assetManager; + var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); }; + assetManager.loadTexture(DEMO_NAME, textureLoader, "atlas2.png"); + assetManager.loadText(DEMO_NAME, "atlas2.atlas"); + assetManager.loadJson(DEMO_NAME, "demos.json"); + timeKeeper = new spine.TimeKeeper(); + } + + function loadingComplete () { + var atlas = new spine.TextureAtlas(assetManager.get(DEMO_NAME, "atlas2.atlas"), function(path) { + return assetManager.get(DEMO_NAME, path); + }); + var atlasLoader = new spine.AtlasAttachmentLoader(atlas); + var skeletonJson = new spine.SkeletonJson(atlasLoader); + var skeletonData = skeletonJson.readSkeletonData(assetManager.get(DEMO_NAME, "demos.json").vine); + skeleton = new spine.Skeleton(skeletonData); + skeleton.setToSetupPose(); + skeleton.updateWorldTransform(); + var offset = new spine.Vector2(); + bounds = new spine.Vector2(); + skeleton.getBounds(offset, bounds, []); + state = new spine.AnimationState(new spine.AnimationStateData(skeleton.data)); + state.setAnimation(0, "animation", true); + state.apply(skeleton); + skeleton.updateWorldTransform(); + + renderer.camera.position.x = offset.x + bounds.x / 2; + renderer.camera.position.y = offset.y + bounds.y / 2; + + renderer.skeletonDebugRenderer.drawMeshHull = false; + renderer.skeletonDebugRenderer.drawMeshTriangles = false; + + setupUI(); + setupInput(); + } + + function setupUI() { + playButton = $("#vine-playbutton"); + var playButtonUpdate = function () { + isPlaying = !isPlaying; + if (isPlaying) + playButton.addClass("pause").removeClass("play"); + else + playButton.addClass("play").removeClass("pause"); + } + playButton.click(playButtonUpdate); + playButton.addClass("pause"); + + timeLine = $("#vine-timeline").data("slider"); + timeLine.changed = function (percent) { + if (isPlaying) playButton.click(); + if (!isPlaying) { + var animationDuration = state.getCurrent(0).animation.duration; + time = animationDuration * percent; + state.update(time - playTime); + state.apply(skeleton); + skeleton.updateWorldTransform(); + playTime = time; + } + }; + + renderer.skeletonDebugRenderer.drawPaths = false; + renderer.skeletonDebugRenderer.drawBones = false; + var checkbox = $("#vine-drawbones"); + checkbox.change(function() { + renderer.skeletonDebugRenderer.drawPaths = this.checked; + renderer.skeletonDebugRenderer.drawBones = this.checked; + }); + } + + function setupInput() { + input.addListener({ + down: function(x, y) { + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + target = bone; + } + } + }, + up: function(x, y) { + target = null; + }, + dragged: function(x, y) { + if (target != null && x > 0 && x < canvas.width && y > 0 && y < canvas.height) { + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (target.parent !== null) { + target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y)); + target.x = temp2.x; + target.y = temp2.y; + } else { + target.x = coords.x - skeleton.x; + target.y = coords.y - skeleton.y; + } + } + }, + moved: function (x, y) { + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); + if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 30) { + hoverTargets[i] = bone; + } else { + hoverTargets[i] = null; + } + } + } + }); + } + + function render () { + timeKeeper.update(); + var delta = timeKeeper.delta; + + if (isPlaying) { + var animationDuration = state.getCurrent(0).animation.duration; + playTime += delta; + while (playTime >= animationDuration) { + playTime -= animationDuration; + } + timeLine.set(playTime / animationDuration); + + state.update(delta); + state.apply(skeleton); + } + + skeleton.updateWorldTransform(); + + renderer.camera.viewportWidth = bounds.x * 1.2; + renderer.camera.viewportHeight = bounds.y * 1.2; + renderer.resize(spine.webgl.ResizeMode.Fit); + + gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + + renderer.begin(); + renderer.drawSkeleton(skeleton, true); + renderer.drawSkeletonDebug(skeleton); + gl.lineWidth(2); + for (var i = 0; i < controlBones.length; i++) { + var bone = skeleton.findBone(controlBones[i]); + var colorInner = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_INNER : spineDemos.NON_HOVER_COLOR_INNER; + var colorOuter = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_OUTER : spineDemos.NON_HOVER_COLOR_OUTER; + renderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner); + renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter); + } + gl.lineWidth(1); + renderer.end(); + } + + vineDemo.loadingComplete = loadingComplete; + vineDemo.render = render; + vineDemo.DEMO_NAME = DEMO_NAME; + init(); +}; \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/coin-pma.atlas b/apps/module-ts/src/spine-ts/webgl/example/assets/coin-pma.atlas new file mode 100755 index 0000000..b4723eb --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/example/assets/coin-pma.atlas @@ -0,0 +1,55 @@ + +coin-pma.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +coin-front-logo + rotate: false + xy: 2, 570 + size: 305, 302 + orig: 305, 302 + offset: 0, 0 + index: -1 +coin-front-shine-logo + rotate: false + xy: 2, 286 + size: 282, 282 + orig: 282, 282 + offset: 0, 0 + index: -1 +coin-front-shine-spineboy + rotate: false + xy: 305, 283 + size: 282, 282 + orig: 282, 282 + offset: 0, 0 + index: -1 +coin-front-spineboy + rotate: true + xy: 309, 567 + size: 305, 302 + orig: 305, 302 + offset: 0, 0 + index: -1 +coin-side-round + rotate: false + xy: 2, 2 + size: 144, 282 + orig: 144, 282 + offset: 0, 0 + index: -1 +coin-side-straight + rotate: false + xy: 286, 286 + size: 17, 282 + orig: 17, 282 + offset: 0, 0 + index: -1 +shine + rotate: false + xy: 148, 39 + size: 72, 245 + orig: 72, 245 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/coin-pma.png b/apps/module-ts/src/spine-ts/webgl/example/assets/coin-pma.png new file mode 100755 index 0000000..a23cf36 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/coin-pma.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/coin-pro.skel b/apps/module-ts/src/spine-ts/webgl/example/assets/coin-pro.skel new file mode 100755 index 0000000..576b3c0 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/coin-pro.skel differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/goblins-pma.atlas b/apps/module-ts/src/spine-ts/webgl/example/assets/goblins-pma.atlas new file mode 100755 index 0000000..d415826 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/example/assets/goblins-pma.atlas @@ -0,0 +1,293 @@ + +goblins-pma.png +size: 1024,128 +format: RGBA8888 +filter: Linear,Linear +repeat: none +dagger + rotate: false + xy: 2, 18 + size: 26, 108 + orig: 26, 108 + offset: 0, 0 + index: -1 +goblin/eyes-closed + rotate: false + xy: 2, 4 + size: 34, 12 + orig: 34, 12 + offset: 0, 0 + index: -1 +goblin/head + rotate: true + xy: 113, 23 + size: 103, 66 + orig: 103, 66 + offset: 0, 0 + index: -1 +goblin/left-arm + rotate: true + xy: 937, 89 + size: 37, 35 + orig: 37, 35 + offset: 0, 0 + index: -1 +goblin/left-foot + rotate: true + xy: 609, 61 + size: 65, 31 + orig: 65, 31 + offset: 0, 0 + index: -1 +goblin/left-hand + rotate: false + xy: 840, 21 + size: 36, 41 + orig: 36, 41 + offset: 0, 0 + index: -1 +goblin/left-lower-leg + rotate: false + xy: 504, 56 + size: 33, 70 + orig: 33, 70 + offset: 0, 0 + index: -1 +goblin/left-shoulder + rotate: false + xy: 745, 17 + size: 29, 44 + orig: 29, 44 + offset: 0, 0 + index: -1 +goblin/left-upper-leg + rotate: false + xy: 397, 53 + size: 33, 73 + orig: 33, 73 + offset: 0, 0 + index: -1 +goblin/neck + rotate: false + xy: 862, 85 + size: 36, 41 + orig: 36, 41 + offset: 0, 0 + index: -1 +goblin/pelvis + rotate: false + xy: 776, 18 + size: 62, 43 + orig: 62, 43 + offset: 0, 0 + index: -1 +goblin/right-arm + rotate: true + xy: 181, 5 + size: 23, 50 + orig: 23, 50 + offset: 0, 0 + index: -1 +goblin/right-foot + rotate: true + xy: 747, 63 + size: 63, 33 + orig: 63, 33 + offset: 0, 0 + index: -1 +goblin/right-hand + rotate: false + xy: 878, 3 + size: 36, 37 + orig: 36, 37 + offset: 0, 0 + index: -1 +goblin/right-lower-leg + rotate: false + xy: 321, 50 + size: 36, 76 + orig: 36, 76 + offset: 0, 0 + index: -1 +goblin/right-shoulder + rotate: false + xy: 663, 14 + size: 39, 45 + orig: 39, 45 + offset: 0, 0 + index: -1 +goblin/right-upper-leg + rotate: false + xy: 675, 63 + size: 34, 63 + orig: 34, 63 + offset: 0, 0 + index: -1 +goblin/torso + rotate: false + xy: 181, 30 + size: 68, 96 + orig: 68, 96 + offset: 0, 0 + index: -1 +goblin/undie-straps + rotate: false + xy: 38, 2 + size: 55, 19 + orig: 55, 19 + offset: 0, 0 + index: -1 +goblin/undies + rotate: false + xy: 974, 97 + size: 36, 29 + orig: 36, 29 + offset: 0, 0 + index: -1 +goblingirl/eyes-closed + rotate: false + xy: 397, 30 + size: 37, 21 + orig: 37, 21 + offset: 0, 0 + index: -1 +goblingirl/head + rotate: true + xy: 30, 23 + size: 103, 81 + orig: 103, 81 + offset: 0, 0 + index: -1 +goblingirl/left-arm + rotate: true + xy: 916, 8 + size: 37, 35 + orig: 37, 35 + offset: 0, 0 + index: -1 +goblingirl/left-foot + rotate: true + xy: 642, 61 + size: 65, 31 + orig: 65, 31 + offset: 0, 0 + index: -1 +goblingirl/left-hand + rotate: false + xy: 900, 86 + size: 35, 40 + orig: 35, 40 + offset: 0, 0 + index: -1 +goblingirl/left-lower-leg + rotate: false + xy: 539, 56 + size: 33, 70 + orig: 33, 70 + offset: 0, 0 + index: -1 +goblingirl/left-shoulder + rotate: false + xy: 633, 13 + size: 28, 46 + orig: 28, 46 + offset: 0, 0 + index: -1 +goblingirl/left-upper-leg + rotate: false + xy: 574, 56 + size: 33, 70 + orig: 33, 70 + offset: 0, 0 + index: -1 +goblingirl/neck + rotate: false + xy: 878, 42 + size: 35, 41 + orig: 35, 41 + offset: 0, 0 + index: -1 +goblingirl/pelvis + rotate: true + xy: 817, 64 + size: 62, 43 + orig: 62, 43 + offset: 0, 0 + index: -1 +goblingirl/right-arm + rotate: false + xy: 603, 4 + size: 28, 50 + orig: 28, 50 + offset: 0, 0 + index: -1 +goblingirl/right-foot + rotate: true + xy: 782, 63 + size: 63, 33 + orig: 63, 33 + offset: 0, 0 + index: -1 +goblingirl/right-hand + rotate: false + xy: 915, 47 + size: 36, 37 + orig: 36, 37 + offset: 0, 0 + index: -1 +goblingirl/right-lower-leg + rotate: false + xy: 359, 50 + size: 36, 76 + orig: 36, 76 + offset: 0, 0 + index: -1 +goblingirl/right-shoulder + rotate: false + xy: 704, 16 + size: 39, 45 + orig: 39, 45 + offset: 0, 0 + index: -1 +goblingirl/right-upper-leg + rotate: false + xy: 711, 63 + size: 34, 63 + orig: 34, 63 + offset: 0, 0 + index: -1 +goblingirl/torso + rotate: false + xy: 251, 30 + size: 68, 96 + orig: 68, 96 + offset: 0, 0 + index: -1 +goblingirl/undie-straps + rotate: false + xy: 95, 2 + size: 55, 19 + orig: 55, 19 + offset: 0, 0 + index: -1 +goblingirl/undies + rotate: false + xy: 974, 66 + size: 36, 29 + orig: 36, 29 + offset: 0, 0 + index: -1 +shield + rotate: false + xy: 432, 54 + size: 70, 72 + orig: 70, 72 + offset: 0, 0 + index: -1 +spear + rotate: true + xy: 233, 6 + size: 22, 368 + orig: 22, 368 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/goblins-pma.png b/apps/module-ts/src/spine-ts/webgl/example/assets/goblins-pma.png new file mode 100755 index 0000000..adb98dd Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/goblins-pma.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/goblins-pro.skel b/apps/module-ts/src/spine-ts/webgl/example/assets/goblins-pro.skel new file mode 100755 index 0000000..84e45a5 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/goblins-pro.skel differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/mix-and-match-pma.atlas b/apps/module-ts/src/spine-ts/webgl/example/assets/mix-and-match-pma.atlas new file mode 100755 index 0000000..bb0d037 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/example/assets/mix-and-match-pma.atlas @@ -0,0 +1,1042 @@ + +mix-and-match-pma.png +size: 1024,512 +format: RGBA8888 +filter: Linear,Linear +repeat: none +base-head + rotate: false + xy: 587, 2 + size: 95, 73 + orig: 95, 73 + offset: 0, 0 + index: -1 +boy/arm-front + rotate: false + xy: 558, 271 + size: 36, 115 + orig: 36, 115 + offset: 0, 0 + index: -1 +boy/backpack + rotate: false + xy: 235, 109 + size: 119, 153 + orig: 119, 153 + offset: 0, 0 + index: -1 +boy/backpack-pocket + rotate: true + xy: 328, 73 + size: 34, 62 + orig: 34, 62 + offset: 0, 0 + index: -1 +boy/backpack-strap-front + rotate: false + xy: 665, 79 + size: 38, 88 + orig: 38, 88 + offset: 0, 0 + index: -1 +boy/backpack-up + rotate: true + xy: 395, 364 + size: 21, 70 + orig: 21, 70 + offset: 0, 0 + index: -1 +boy/body + rotate: true + xy: 251, 264 + size: 97, 132 + orig: 97, 132 + offset: 0, 0 + index: -1 +boy/boot-ribbon-front + rotate: false + xy: 648, 131 + size: 9, 11 + orig: 9, 11 + offset: 0, 0 + index: -1 +boy/collar + rotate: true + xy: 744, 4 + size: 73, 29 + orig: 73, 29 + offset: 0, 0 + index: -1 +boy/ear + rotate: true + xy: 383, 109 + size: 19, 23 + orig: 19, 23 + offset: 0, 0 + index: -1 +boy/eye-back-low-eyelid + rotate: true + xy: 739, 284 + size: 17, 6 + orig: 17, 6 + offset: 0, 0 + index: -1 +boy/eye-back-pupil + rotate: true + xy: 832, 443 + size: 8, 9 + orig: 8, 9 + offset: 0, 0 + index: -1 +boy/eye-back-up-eyelid + rotate: false + xy: 558, 264 + size: 23, 5 + orig: 23, 5 + offset: 0, 0 + index: -1 +boy/eye-back-up-eyelid-back + rotate: true + xy: 802, 491 + size: 19, 10 + orig: 19, 10 + offset: 0, 0 + index: -1 +boy/eye-front-low-eyelid + rotate: true + xy: 386, 363 + size: 22, 7 + orig: 22, 7 + offset: 0, 0 + index: -1 +boy/eye-front-pupil + rotate: false + xy: 816, 389 + size: 9, 9 + orig: 9, 9 + offset: 0, 0 + index: -1 +boy/eye-front-up-eyelid + rotate: true + xy: 160, 71 + size: 31, 6 + orig: 31, 6 + offset: 0, 0 + index: -1 +boy/eye-front-up-eyelid-back + rotate: true + xy: 801, 434 + size: 26, 9 + orig: 26, 9 + offset: 0, 0 + index: -1 +boy/eye-iris-back + rotate: false + xy: 618, 264 + size: 17, 17 + orig: 17, 17 + offset: 0, 0 + index: -1 +boy/eye-iris-front + rotate: false + xy: 727, 264 + size: 18, 18 + orig: 18, 18 + offset: 0, 0 + index: -1 +boy/eye-white-back + rotate: false + xy: 580, 131 + size: 20, 12 + orig: 20, 12 + offset: 0, 0 + index: -1 +boy/eye-white-front + rotate: false + xy: 510, 130 + size: 27, 13 + orig: 27, 13 + offset: 0, 0 + index: -1 +boy/eyebrow-back + rotate: true + xy: 751, 88 + size: 20, 11 + orig: 20, 11 + offset: 0, 0 + index: -1 +boy/eyebrow-front + rotate: false + xy: 483, 130 + size: 25, 11 + orig: 25, 11 + offset: 0, 0 + index: -1 +boy/hair-back + rotate: true + xy: 494, 388 + size: 122, 81 + orig: 122, 81 + offset: 0, 0 + index: -1 +boy/hair-bangs + rotate: false + xy: 667, 284 + size: 70, 37 + orig: 70, 37 + offset: 0, 0 + index: -1 +boy/hair-side + rotate: false + xy: 789, 374 + size: 25, 43 + orig: 25, 43 + offset: 0, 0 + index: -1 +boy/hand-backfingers + rotate: false + xy: 467, 364 + size: 19, 21 + orig: 19, 21 + offset: 0, 0 + index: -1 +boy/hand-front-fingers + rotate: false + xy: 488, 364 + size: 19, 21 + orig: 19, 21 + offset: 0, 0 + index: -1 +boy/hat + rotate: true + xy: 615, 417 + size: 93, 56 + orig: 93, 56 + offset: 0, 0 + index: -1 +boy/leg-front + rotate: false + xy: 138, 104 + size: 31, 158 + orig: 31, 158 + offset: 0, 0 + index: -1 +boy/mouth-close + rotate: true + xy: 551, 365 + size: 21, 5 + orig: 21, 5 + offset: 0, 0 + index: -1 +girl-blue-cape/mouth-close + rotate: true + xy: 551, 365 + size: 21, 5 + orig: 21, 5 + offset: 0, 0 + index: -1 +girl-spring-dress/mouth-close + rotate: true + xy: 551, 365 + size: 21, 5 + orig: 21, 5 + offset: 0, 0 + index: -1 +girl/mouth-close + rotate: true + xy: 551, 365 + size: 21, 5 + orig: 21, 5 + offset: 0, 0 + index: -1 +boy/mouth-smile + rotate: false + xy: 705, 79 + size: 29, 7 + orig: 29, 7 + offset: 0, 0 + index: -1 +boy/nose + rotate: true + xy: 836, 473 + size: 17, 10 + orig: 17, 10 + offset: 0, 0 + index: -1 +boy/pompom + rotate: true + xy: 747, 273 + size: 48, 43 + orig: 48, 43 + offset: 0, 0 + index: -1 +boy/zip + rotate: false + xy: 648, 144 + size: 14, 23 + orig: 14, 23 + offset: 0, 0 + index: -1 +girl-blue-cape/back-eyebrow + rotate: false + xy: 602, 131 + size: 18, 12 + orig: 18, 12 + offset: 0, 0 + index: -1 +girl-blue-cape/body-dress + rotate: false + xy: 2, 264 + size: 109, 246 + orig: 109, 246 + offset: 0, 0 + index: -1 +girl-blue-cape/body-ribbon + rotate: false + xy: 615, 283 + size: 50, 38 + orig: 50, 38 + offset: 0, 0 + index: -1 +girl-blue-cape/cape-back + rotate: false + xy: 2, 69 + size: 134, 193 + orig: 134, 193 + offset: 0, 0 + index: -1 +girl-blue-cape/cape-back-up + rotate: true + xy: 386, 387 + size: 123, 106 + orig: 123, 106 + offset: 0, 0 + index: -1 +girl-blue-cape/cape-ribbon + rotate: false + xy: 675, 264 + size: 50, 18 + orig: 50, 18 + offset: 0, 0 + index: -1 +girl-blue-cape/cape-shoulder-back + rotate: false + xy: 751, 110 + size: 49, 59 + orig: 49, 59 + offset: 0, 0 + index: -1 +girl-blue-cape/cape-shoulder-front + rotate: true + xy: 113, 264 + size: 62, 76 + orig: 62, 76 + offset: 0, 0 + index: -1 +girl-blue-cape/cape-up-front + rotate: true + xy: 399, 264 + size: 98, 117 + orig: 98, 117 + offset: 0, 0 + index: -1 +girl-blue-cape/ear + rotate: false + xy: 775, 2 + size: 19, 23 + orig: 19, 23 + offset: 0, 0 + index: -1 +girl-spring-dress/ear + rotate: false + xy: 775, 2 + size: 19, 23 + orig: 19, 23 + offset: 0, 0 + index: -1 +girl/ear + rotate: false + xy: 775, 2 + size: 19, 23 + orig: 19, 23 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-back-low-eyelid + rotate: false + xy: 802, 463 + size: 17, 6 + orig: 17, 6 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-back-low-eyelid + rotate: false + xy: 802, 463 + size: 17, 6 + orig: 17, 6 + offset: 0, 0 + index: -1 +girl/eye-back-low-eyelid + rotate: false + xy: 802, 463 + size: 17, 6 + orig: 17, 6 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-back-pupil + rotate: false + xy: 816, 367 + size: 8, 9 + orig: 8, 9 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-back-pupil + rotate: false + xy: 816, 367 + size: 8, 9 + orig: 8, 9 + offset: 0, 0 + index: -1 +girl/eye-back-pupil + rotate: false + xy: 816, 367 + size: 8, 9 + orig: 8, 9 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-back-up-eyelid + rotate: false + xy: 554, 131 + size: 24, 12 + orig: 24, 12 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-back-up-eyelid + rotate: false + xy: 554, 131 + size: 24, 12 + orig: 24, 12 + offset: 0, 0 + index: -1 +girl/eye-back-up-eyelid + rotate: false + xy: 554, 131 + size: 24, 12 + orig: 24, 12 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-back-up-eyelid-back + rotate: true + xy: 832, 453 + size: 17, 11 + orig: 17, 11 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-back-up-eyelid-back + rotate: true + xy: 832, 453 + size: 17, 11 + orig: 17, 11 + offset: 0, 0 + index: -1 +girl/eye-back-up-eyelid-back + rotate: true + xy: 832, 453 + size: 17, 11 + orig: 17, 11 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-front-low-eyelid + rotate: true + xy: 739, 303 + size: 18, 6 + orig: 18, 6 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-front-low-eyelid + rotate: true + xy: 739, 303 + size: 18, 6 + orig: 18, 6 + offset: 0, 0 + index: -1 +girl/eye-front-low-eyelid + rotate: true + xy: 739, 303 + size: 18, 6 + orig: 18, 6 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-front-pupil + rotate: false + xy: 816, 378 + size: 9, 9 + orig: 9, 9 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-front-pupil + rotate: false + xy: 816, 378 + size: 9, 9 + orig: 9, 9 + offset: 0, 0 + index: -1 +girl/eye-front-pupil + rotate: false + xy: 816, 378 + size: 9, 9 + orig: 9, 9 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-front-up-eyelid + rotate: true + xy: 392, 77 + size: 30, 14 + orig: 30, 14 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-front-up-eyelid + rotate: true + xy: 392, 77 + size: 30, 14 + orig: 30, 14 + offset: 0, 0 + index: -1 +girl/eye-front-up-eyelid + rotate: true + xy: 392, 77 + size: 30, 14 + orig: 30, 14 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-front-up-eyelid-back + rotate: false + xy: 455, 130 + size: 26, 11 + orig: 26, 11 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-front-up-eyelid-back + rotate: false + xy: 455, 130 + size: 26, 11 + orig: 26, 11 + offset: 0, 0 + index: -1 +girl/eye-front-up-eyelid-back + rotate: false + xy: 455, 130 + size: 26, 11 + orig: 26, 11 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-iris-back + rotate: false + xy: 637, 264 + size: 17, 17 + orig: 17, 17 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-iris-front + rotate: false + xy: 802, 471 + size: 18, 18 + orig: 18, 18 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-white-back + rotate: false + xy: 596, 264 + size: 20, 16 + orig: 20, 16 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-white-back + rotate: false + xy: 596, 264 + size: 20, 16 + orig: 20, 16 + offset: 0, 0 + index: -1 +girl-blue-cape/eye-white-front + rotate: true + xy: 814, 5 + size: 20, 16 + orig: 20, 16 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-white-front + rotate: true + xy: 814, 5 + size: 20, 16 + orig: 20, 16 + offset: 0, 0 + index: -1 +girl/eye-white-front + rotate: true + xy: 814, 5 + size: 20, 16 + orig: 20, 16 + offset: 0, 0 + index: -1 +girl-blue-cape/front-eyebrow + rotate: true + xy: 822, 472 + size: 18, 12 + orig: 18, 12 + offset: 0, 0 + index: -1 +girl-blue-cape/hair-back + rotate: true + xy: 508, 145 + size: 117, 98 + orig: 117, 98 + offset: 0, 0 + index: -1 +girl-blue-cape/hair-bangs + rotate: true + xy: 673, 419 + size: 91, 40 + orig: 91, 40 + offset: 0, 0 + index: -1 +girl-blue-cape/hair-head-side-back + rotate: true + xy: 196, 331 + size: 30, 52 + orig: 30, 52 + offset: 0, 0 + index: -1 +girl-blue-cape/hair-head-side-front + rotate: false + xy: 738, 323 + size: 41, 42 + orig: 41, 42 + offset: 0, 0 + index: -1 +girl-blue-cape/hair-side + rotate: false + xy: 473, 3 + size: 36, 71 + orig: 36, 71 + offset: 0, 0 + index: -1 +girl-blue-cape/hand-front-fingers + rotate: false + xy: 509, 365 + size: 19, 21 + orig: 19, 21 + offset: 0, 0 + index: -1 +girl-spring-dress/hand-front-fingers + rotate: false + xy: 509, 365 + size: 19, 21 + orig: 19, 21 + offset: 0, 0 + index: -1 +girl-blue-cape/leg-front + rotate: true + xy: 168, 72 + size: 30, 158 + orig: 30, 158 + offset: 0, 0 + index: -1 +girl-blue-cape/mouth-smile + rotate: false + xy: 736, 79 + size: 29, 7 + orig: 29, 7 + offset: 0, 0 + index: -1 +girl-spring-dress/mouth-smile + rotate: false + xy: 736, 79 + size: 29, 7 + orig: 29, 7 + offset: 0, 0 + index: -1 +girl/mouth-smile + rotate: false + xy: 736, 79 + size: 29, 7 + orig: 29, 7 + offset: 0, 0 + index: -1 +girl-blue-cape/nose + rotate: false + xy: 747, 264 + size: 11, 7 + orig: 11, 7 + offset: 0, 0 + index: -1 +girl-spring-dress/nose + rotate: false + xy: 747, 264 + size: 11, 7 + orig: 11, 7 + offset: 0, 0 + index: -1 +girl/nose + rotate: false + xy: 747, 264 + size: 11, 7 + orig: 11, 7 + offset: 0, 0 + index: -1 +girl-blue-cape/sleeve-back + rotate: false + xy: 767, 79 + size: 42, 29 + orig: 42, 29 + offset: 0, 0 + index: -1 +girl-blue-cape/sleeve-front + rotate: true + xy: 408, 76 + size: 52, 119 + orig: 52, 119 + offset: 0, 0 + index: -1 +girl-spring-dress/arm-front + rotate: false + xy: 596, 282 + size: 17, 111 + orig: 17, 111 + offset: 0, 0 + index: -1 +girl-spring-dress/back-eyebrow + rotate: true + xy: 608, 149 + size: 18, 12 + orig: 18, 12 + offset: 0, 0 + index: -1 +girl-spring-dress/body-up + rotate: false + xy: 179, 4 + size: 64, 66 + orig: 64, 66 + offset: 0, 0 + index: -1 +girl-spring-dress/cloak-down + rotate: false + xy: 775, 27 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 +girl-spring-dress/cloak-up + rotate: true + xy: 360, 7 + size: 64, 58 + orig: 64, 58 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-iris-back + rotate: false + xy: 656, 264 + size: 17, 17 + orig: 17, 17 + offset: 0, 0 + index: -1 +girl-spring-dress/eye-iris-front + rotate: false + xy: 814, 492 + size: 18, 18 + orig: 18, 18 + offset: 0, 0 + index: -1 +girl-spring-dress/front-eyebrow + rotate: true + xy: 834, 492 + size: 18, 12 + orig: 18, 12 + offset: 0, 0 + index: -1 +girl-spring-dress/hair-back + rotate: true + xy: 196, 363 + size: 147, 93 + orig: 147, 93 + offset: 0, 0 + index: -1 +girl-spring-dress/hair-bangs + rotate: true + xy: 696, 326 + size: 91, 40 + orig: 91, 40 + offset: 0, 0 + index: -1 +girl-spring-dress/hair-head-side-back + rotate: false + xy: 529, 76 + size: 30, 52 + orig: 30, 52 + offset: 0, 0 + index: -1 +girl-spring-dress/hair-head-side-front + rotate: false + xy: 781, 323 + size: 41, 42 + orig: 41, 42 + offset: 0, 0 + index: -1 +girl-spring-dress/hair-side + rotate: false + xy: 511, 3 + size: 36, 71 + orig: 36, 71 + offset: 0, 0 + index: -1 +girl-spring-dress/leg-front + rotate: false + xy: 171, 104 + size: 30, 158 + orig: 30, 158 + offset: 0, 0 + index: -1 +girl-spring-dress/neck + rotate: false + xy: 138, 70 + size: 20, 32 + orig: 20, 32 + offset: 0, 0 + index: -1 +girl-spring-dress/shoulder-ribbon + rotate: true + xy: 622, 131 + size: 36, 24 + orig: 36, 24 + offset: 0, 0 + index: -1 +girl-spring-dress/skirt + rotate: true + xy: 113, 328 + size: 182, 81 + orig: 182, 81 + offset: 0, 0 + index: -1 +girl-spring-dress/underskirt + rotate: false + xy: 2, 2 + size: 175, 65 + orig: 175, 65 + offset: 0, 0 + index: -1 +girl/arm-front + rotate: false + xy: 577, 395 + size: 36, 115 + orig: 36, 115 + offset: 0, 0 + index: -1 +girl/back-eyebrow + rotate: false + xy: 801, 420 + size: 18, 12 + orig: 18, 12 + offset: 0, 0 + index: -1 +girl/bag-base + rotate: true + xy: 191, 264 + size: 62, 58 + orig: 62, 58 + offset: 0, 0 + index: -1 +girl/bag-strap-front + rotate: false + xy: 385, 265 + size: 12, 96 + orig: 12, 96 + offset: 0, 0 + index: -1 +girl/bag-top + rotate: false + xy: 738, 367 + size: 49, 50 + orig: 49, 50 + offset: 0, 0 + index: -1 +girl/body + rotate: false + xy: 356, 130 + size: 97, 132 + orig: 97, 132 + offset: 0, 0 + index: -1 +girl/boot-ribbon-front + rotate: false + xy: 539, 130 + size: 13, 13 + orig: 13, 13 + offset: 0, 0 + index: -1 +girl/eye-iris-back + rotate: false + xy: 821, 424 + size: 17, 17 + orig: 17, 17 + offset: 0, 0 + index: -1 +girl/eye-iris-front + rotate: false + xy: 812, 443 + size: 18, 18 + orig: 18, 18 + offset: 0, 0 + index: -1 +girl/eye-white-back + rotate: true + xy: 796, 5 + size: 20, 16 + orig: 20, 16 + offset: 0, 0 + index: -1 +girl/front-eyebrow + rotate: true + xy: 816, 400 + size: 18, 12 + orig: 18, 12 + offset: 0, 0 + index: -1 +girl/hair-back + rotate: true + xy: 291, 363 + size: 147, 93 + orig: 147, 93 + offset: 0, 0 + index: -1 +girl/hair-bangs + rotate: true + xy: 715, 419 + size: 91, 40 + orig: 91, 40 + offset: 0, 0 + index: -1 +girl/hair-flap-down-front + rotate: false + xy: 288, 5 + size: 70, 65 + orig: 70, 65 + offset: 0, 0 + index: -1 +girl/hair-head-side-back + rotate: false + xy: 561, 77 + size: 30, 52 + orig: 30, 52 + offset: 0, 0 + index: -1 +girl/hair-head-side-front + rotate: true + xy: 757, 419 + size: 41, 42 + orig: 41, 42 + offset: 0, 0 + index: -1 +girl/hair-patch + rotate: true + xy: 245, 4 + size: 66, 41 + orig: 66, 41 + offset: 0, 0 + index: -1 +girl/hair-side + rotate: false + xy: 549, 3 + size: 36, 71 + orig: 36, 71 + offset: 0, 0 + index: -1 +girl/hair-strand-back-1 + rotate: false + xy: 684, 3 + size: 58, 74 + orig: 58, 74 + offset: 0, 0 + index: -1 +girl/hair-strand-back-2 + rotate: true + xy: 692, 171 + size: 91, 58 + orig: 91, 58 + offset: 0, 0 + index: -1 +girl/hair-strand-back-3 + rotate: true + xy: 615, 323 + size: 92, 79 + orig: 92, 79 + offset: 0, 0 + index: -1 +girl/hair-strand-front-1 + rotate: false + xy: 518, 269 + size: 38, 94 + orig: 38, 94 + offset: 0, 0 + index: -1 +girl/hair-strand-front-2 + rotate: false + xy: 593, 79 + size: 70, 50 + orig: 70, 50 + offset: 0, 0 + index: -1 +girl/hair-strand-front-3 + rotate: false + xy: 705, 88 + size: 44, 81 + orig: 44, 81 + offset: 0, 0 + index: -1 +girl/hand-front-fingers + rotate: false + xy: 530, 365 + size: 19, 21 + orig: 19, 21 + offset: 0, 0 + index: -1 +girl/hat + rotate: true + xy: 608, 169 + size: 93, 82 + orig: 93, 82 + offset: 0, 0 + index: -1 +girl/leg-front + rotate: false + xy: 203, 104 + size: 30, 158 + orig: 30, 158 + offset: 0, 0 + index: -1 +girl/pompom + rotate: true + xy: 757, 462 + size: 48, 43 + orig: 48, 43 + offset: 0, 0 + index: -1 +girl/scarf + rotate: true + xy: 455, 143 + size: 119, 51 + orig: 119, 51 + offset: 0, 0 + index: -1 +girl/scarf-back + rotate: true + xy: 420, 2 + size: 72, 51 + orig: 72, 51 + offset: 0, 0 + index: -1 +girl/zip + rotate: true + xy: 356, 109 + size: 19, 25 + orig: 19, 25 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/mix-and-match-pma.png b/apps/module-ts/src/spine-ts/webgl/example/assets/mix-and-match-pma.png new file mode 100755 index 0000000..b101093 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/mix-and-match-pma.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/mix-and-match-pro.skel b/apps/module-ts/src/spine-ts/webgl/example/assets/mix-and-match-pro.skel new file mode 100755 index 0000000..f5d7e03 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/mix-and-match-pro.skel differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/owl-pma.atlas b/apps/module-ts/src/spine-ts/webgl/example/assets/owl-pma.atlas new file mode 100755 index 0000000..5b29183 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/example/assets/owl-pma.atlas @@ -0,0 +1,195 @@ + +owl-pma.png +size: 1024,512 +format: RGBA8888 +filter: Linear,Linear +repeat: none +L_eye-closed + rotate: true + xy: 512, 5 + size: 90, 86 + orig: 90, 86 + offset: 0, 0 + index: -1 +L_eye-iris + rotate: true + xy: 600, 10 + size: 90, 86 + orig: 90, 86 + offset: 0, 0 + index: -1 +L_eye-light + rotate: true + xy: 688, 4 + size: 21, 20 + orig: 21, 20 + offset: 0, 0 + index: -1 +L_eye-pupil + rotate: true + xy: 856, 13 + size: 63, 60 + orig: 63, 60 + offset: 0, 0 + index: -1 +L_foot + rotate: true + xy: 834, 78 + size: 64, 48 + orig: 64, 48 + offset: 0, 0 + index: -1 +L_wing + rotate: true + xy: 349, 4 + size: 81, 110 + orig: 81, 110 + offset: 0, 0 + index: -1 +R_eye-closed + rotate: true + xy: 637, 119 + size: 90, 86 + orig: 90, 86 + offset: 0, 0 + index: -1 +R_eye-iris + rotate: true + xy: 688, 27 + size: 90, 86 + orig: 90, 86 + offset: 0, 0 + index: -1 +R_eye-light + rotate: true + xy: 710, 4 + size: 21, 20 + orig: 21, 20 + offset: 0, 0 + index: -1 +R_eye-pupil + rotate: true + xy: 884, 80 + size: 63, 60 + orig: 63, 60 + offset: 0, 0 + index: -1 +R_foot + rotate: true + xy: 845, 145 + size: 64, 48 + orig: 64, 48 + offset: 0, 0 + index: -1 +R_wing + rotate: false + xy: 421, 93 + size: 81, 110 + orig: 81, 110 + offset: 0, 0 + index: -1 +beak + rotate: false + xy: 776, 2 + size: 39, 41 + orig: 39, 41 + offset: 0, 0 + index: -1 +beak-down + rotate: false + xy: 817, 3 + size: 37, 40 + orig: 37, 40 + offset: 0, 0 + index: -1 +body + rotate: false + xy: 2, 7 + size: 248, 196 + orig: 248, 196 + offset: 0, 0 + index: -1 +feather-1 + rotate: false + xy: 918, 18 + size: 59, 60 + orig: 59, 60 + offset: 0, 0 + index: -1 +feather-2 + rotate: false + xy: 781, 144 + size: 62, 65 + orig: 62, 65 + offset: 0, 0 + index: -1 +feather-3 + rotate: false + xy: 776, 45 + size: 56, 76 + orig: 56, 76 + offset: 0, 0 + index: -1 +head-base + rotate: true + xy: 621, 211 + size: 299, 237 + orig: 299, 237 + offset: 0, 0 + index: -1 +leaf-1 + rotate: false + xy: 559, 102 + size: 76, 101 + orig: 76, 101 + offset: 0, 0 + index: -1 +leaf-2 + rotate: true + xy: 252, 4 + size: 65, 95 + orig: 65, 95 + offset: 0, 0 + index: -1 +leaf-3 + rotate: true + xy: 252, 71 + size: 132, 77 + orig: 132, 77 + offset: 0, 0 + index: -1 +leaf-4 + rotate: true + xy: 461, 2 + size: 89, 49 + orig: 89, 49 + offset: 0, 0 + index: -1 +leaf-5 + rotate: false + xy: 504, 97 + size: 53, 106 + orig: 53, 106 + offset: 0, 0 + index: -1 +leaf-6 + rotate: false + xy: 331, 87 + size: 88, 116 + orig: 88, 116 + offset: 0, 0 + index: -1 +leaf-7 + rotate: false + xy: 725, 123 + size: 54, 86 + orig: 54, 86 + offset: 0, 0 + index: -1 +wood + rotate: false + xy: 2, 205 + size: 617, 305 + orig: 617, 305 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/owl-pma.png b/apps/module-ts/src/spine-ts/webgl/example/assets/owl-pma.png new file mode 100755 index 0000000..c523076 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/owl-pma.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/owl-pro.skel b/apps/module-ts/src/spine-ts/webgl/example/assets/owl-pro.skel new file mode 100755 index 0000000..2d9d8a9 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/owl-pro.skel differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/raptor-pma.atlas b/apps/module-ts/src/spine-ts/webgl/example/assets/raptor-pma.atlas new file mode 100755 index 0000000..228f825 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/example/assets/raptor-pma.atlas @@ -0,0 +1,272 @@ + +raptor-pma.png +size: 1024,512 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back-arm + rotate: true + xy: 829, 88 + size: 46, 25 + orig: 46, 25 + offset: 0, 0 + index: -1 +back-bracer + rotate: true + xy: 195, 238 + size: 39, 28 + orig: 39, 28 + offset: 0, 0 + index: -1 +back-hand + rotate: true + xy: 724, 140 + size: 36, 34 + orig: 36, 34 + offset: 0, 0 + index: -1 +back-knee + rotate: true + xy: 760, 131 + size: 49, 67 + orig: 49, 67 + offset: 0, 0 + index: -1 +back-thigh + rotate: true + xy: 225, 238 + size: 39, 24 + orig: 39, 24 + offset: 0, 0 + index: -1 +eyes-open + rotate: false + xy: 975, 204 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +front-arm + rotate: false + xy: 969, 112 + size: 48, 26 + orig: 48, 26 + offset: 0, 0 + index: -1 +front-bracer + rotate: true + xy: 724, 97 + size: 41, 29 + orig: 41, 29 + offset: 0, 0 + index: -1 +front-hand + rotate: false + xy: 251, 239 + size: 41, 38 + orig: 41, 38 + offset: 0, 0 + index: -1 +front-open-hand + rotate: true + xy: 856, 76 + size: 43, 44 + orig: 43, 44 + offset: 0, 0 + index: -1 +front-thigh + rotate: true + xy: 729, 178 + size: 57, 29 + orig: 57, 29 + offset: 0, 0 + index: -1 +gun + rotate: false + xy: 894, 251 + size: 107, 103 + orig: 107, 103 + offset: 0, 0 + index: -1 +gun-nohand + rotate: false + xy: 764, 241 + size: 105, 102 + orig: 105, 102 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 756, 345 + size: 136, 149 + orig: 136, 149 + offset: 0, 0 + index: -1 +lower-leg + rotate: true + xy: 475, 237 + size: 73, 98 + orig: 73, 98 + offset: 0, 0 + index: -1 +mouth-grind + rotate: false + xy: 975, 172 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth-smile + rotate: false + xy: 975, 140 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 366, 282 + size: 18, 21 + orig: 18, 21 + offset: 0, 0 + index: -1 +raptor-back-arm + rotate: true + xy: 636, 97 + size: 82, 86 + orig: 82, 86 + offset: 0, 0 + index: -1 +raptor-body + rotate: false + xy: 2, 2 + size: 632, 233 + orig: 632, 233 + offset: 0, 0 + index: -1 +raptor-front-arm + rotate: true + xy: 871, 168 + size: 81, 102 + orig: 81, 102 + offset: 0, 0 + index: -1 +raptor-front-leg + rotate: false + xy: 2, 237 + size: 191, 257 + orig: 191, 257 + offset: 0, 0 + index: -1 +raptor-hindleg-back + rotate: false + xy: 195, 279 + size: 169, 215 + orig: 169, 215 + offset: 0, 0 + index: -1 +raptor-horn + rotate: true + xy: 431, 312 + size: 182, 80 + orig: 182, 80 + offset: 0, 0 + index: -1 +raptor-horn-back + rotate: true + xy: 513, 318 + size: 176, 77 + orig: 176, 77 + offset: 0, 0 + index: -1 +raptor-jaw + rotate: false + xy: 894, 356 + size: 126, 138 + orig: 126, 138 + offset: 0, 0 + index: -1 +raptor-jaw-tooth + rotate: true + xy: 294, 240 + size: 37, 48 + orig: 37, 48 + offset: 0, 0 + index: -1 +raptor-mouth-inside + rotate: true + xy: 344, 241 + size: 36, 41 + orig: 36, 41 + offset: 0, 0 + index: -1 +raptor-saddle-strap-back + rotate: false + xy: 575, 242 + size: 54, 74 + orig: 54, 74 + offset: 0, 0 + index: -1 +raptor-saddle-strap-front + rotate: true + xy: 764, 182 + size: 57, 95 + orig: 57, 95 + offset: 0, 0 + index: -1 +raptor-saddle-w-shadow + rotate: false + xy: 592, 323 + size: 162, 171 + orig: 162, 171 + offset: 0, 0 + index: -1 +raptor-tail-shadow + rotate: true + xy: 366, 305 + size: 189, 63 + orig: 189, 63 + offset: 0, 0 + index: -1 +raptor-tongue + rotate: false + xy: 387, 239 + size: 86, 64 + orig: 86, 64 + offset: 0, 0 + index: -1 +stirrup-back + rotate: true + xy: 829, 136 + size: 44, 35 + orig: 44, 35 + offset: 0, 0 + index: -1 +stirrup-front + rotate: true + xy: 866, 121 + size: 45, 50 + orig: 45, 50 + offset: 0, 0 + index: -1 +stirrup-strap + rotate: false + xy: 918, 120 + size: 49, 46 + orig: 49, 46 + offset: 0, 0 + index: -1 +torso + rotate: true + xy: 636, 181 + size: 54, 91 + orig: 54, 91 + offset: 0, 0 + index: -1 +visor + rotate: false + xy: 631, 237 + size: 131, 84 + orig: 131, 84 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/raptor-pma.png b/apps/module-ts/src/spine-ts/webgl/example/assets/raptor-pma.png new file mode 100755 index 0000000..6492e18 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/raptor-pma.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/raptor-pro.skel b/apps/module-ts/src/spine-ts/webgl/example/assets/raptor-pro.skel new file mode 100755 index 0000000..7275599 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/raptor-pro.skel differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy-pma.atlas b/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy-pma.atlas new file mode 100755 index 0000000..d249a56 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy-pma.atlas @@ -0,0 +1,286 @@ + +spineboy-pma.png +size: 1024,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +crosshair + rotate: false + xy: 813, 160 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +eye-indifferent + rotate: false + xy: 569, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +eye-surprised + rotate: true + xy: 643, 7 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +front-bracer + rotate: false + xy: 811, 51 + size: 29, 40 + orig: 29, 40 + offset: 0, 0 + index: -1 +front-fist-closed + rotate: false + xy: 807, 93 + size: 38, 41 + orig: 38, 41 + offset: 0, 0 + index: -1 +front-fist-open + rotate: false + xy: 815, 210 + size: 43, 44 + orig: 43, 44 + offset: 0, 0 + index: -1 +front-foot + rotate: true + xy: 706, 64 + size: 63, 35 + orig: 63, 35 + offset: 0, 0 + index: -1 +front-shin + rotate: false + xy: 80, 11 + size: 41, 92 + orig: 41, 92 + offset: 0, 0 + index: -1 +front-thigh + rotate: false + xy: 754, 12 + size: 23, 56 + orig: 23, 56 + offset: 0, 0 + index: -1 +front-upper-arm + rotate: false + xy: 618, 5 + size: 23, 49 + orig: 23, 49 + offset: 0, 0 + index: -1 +goggles + rotate: false + xy: 214, 20 + size: 131, 83 + orig: 131, 83 + offset: 0, 0 + index: -1 +gun + rotate: true + xy: 347, 14 + size: 105, 102 + orig: 105, 102 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 80, 105 + size: 136, 149 + orig: 136, 149 + offset: 0, 0 + index: -1 +hoverboard-board + rotate: true + xy: 2, 8 + size: 246, 76 + orig: 246, 76 + offset: 0, 0 + index: -1 +hoverboard-thruster + rotate: false + xy: 478, 2 + size: 30, 32 + orig: 30, 32 + offset: 0, 0 + index: -1 +hoverglow-small + rotate: true + xy: 218, 117 + size: 137, 38 + orig: 137, 38 + offset: 0, 0 + index: -1 +mouth-grind + rotate: true + xy: 775, 80 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth-oooo + rotate: true + xy: 779, 31 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth-smile + rotate: true + xy: 783, 207 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +muzzle-glow + rotate: false + xy: 779, 4 + size: 25, 25 + orig: 25, 25 + offset: 0, 0 + index: -1 +muzzle-ring + rotate: false + xy: 451, 14 + size: 25, 105 + orig: 25, 105 + offset: 0, 0 + index: -1 +muzzle01 + rotate: true + xy: 664, 60 + size: 67, 40 + orig: 67, 40 + offset: 0, 0 + index: -1 +muzzle02 + rotate: true + xy: 580, 56 + size: 68, 42 + orig: 68, 42 + offset: 0, 0 + index: -1 +muzzle03 + rotate: true + xy: 478, 36 + size: 83, 53 + orig: 83, 53 + offset: 0, 0 + index: -1 +muzzle04 + rotate: true + xy: 533, 49 + size: 75, 45 + orig: 75, 45 + offset: 0, 0 + index: -1 +muzzle05 + rotate: true + xy: 624, 56 + size: 68, 38 + orig: 68, 38 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 806, 8 + size: 18, 21 + orig: 18, 21 + offset: 0, 0 + index: -1 +portal-bg + rotate: false + xy: 258, 121 + size: 133, 133 + orig: 133, 133 + offset: 0, 0 + index: -1 +portal-flare1 + rotate: true + xy: 690, 2 + size: 56, 30 + orig: 56, 30 + offset: 0, 0 + index: -1 +portal-flare2 + rotate: false + xy: 510, 3 + size: 57, 31 + orig: 57, 31 + offset: 0, 0 + index: -1 +portal-flare3 + rotate: true + xy: 722, 4 + size: 58, 30 + orig: 58, 30 + offset: 0, 0 + index: -1 +portal-shade + rotate: false + xy: 393, 121 + size: 133, 133 + orig: 133, 133 + offset: 0, 0 + index: -1 +portal-streaks1 + rotate: false + xy: 528, 126 + size: 126, 128 + orig: 126, 128 + offset: 0, 0 + index: -1 +portal-streaks2 + rotate: false + xy: 656, 129 + size: 125, 125 + orig: 125, 125 + offset: 0, 0 + index: -1 +rear-bracer + rotate: false + xy: 826, 13 + size: 28, 36 + orig: 28, 36 + offset: 0, 0 + index: -1 +rear-foot + rotate: true + xy: 743, 70 + size: 57, 30 + orig: 57, 30 + offset: 0, 0 + index: -1 +rear-shin + rotate: false + xy: 174, 14 + size: 38, 89 + orig: 38, 89 + offset: 0, 0 + index: -1 +rear-thigh + rotate: false + xy: 783, 158 + size: 28, 47 + orig: 28, 47 + offset: 0, 0 + index: -1 +rear-upper-arm + rotate: true + xy: 783, 136 + size: 20, 44 + orig: 20, 44 + offset: 0, 0 + index: -1 +torso + rotate: false + xy: 123, 13 + size: 49, 90 + orig: 49, 90 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy-pma.png b/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy-pma.png new file mode 100755 index 0000000..872a63a Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy-pma.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy-pro.skel b/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy-pro.skel new file mode 100755 index 0000000..63db99c Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy-pro.skel differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy.png b/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy.png new file mode 100755 index 0000000..4dbbfb9 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/spineboy.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/stretchyman-pma.atlas b/apps/module-ts/src/spine-ts/webgl/example/assets/stretchyman-pma.atlas new file mode 100755 index 0000000..8dfc410 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/example/assets/stretchyman-pma.atlas @@ -0,0 +1,41 @@ + +stretchyman-pma.png +size: 1024,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back-arm + rotate: false + xy: 149, 45 + size: 72, 202 + orig: 72, 202 + offset: 0, 0 + index: -1 +back-leg + rotate: true + xy: 312, 4 + size: 100, 318 + orig: 100, 318 + offset: 0, 0 + index: -1 +body + rotate: true + xy: 223, 106 + size: 141, 452 + orig: 141, 452 + offset: 0, 0 + index: -1 +front-arm + rotate: false + xy: 2, 26 + size: 145, 221 + orig: 145, 221 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 223, 2 + size: 87, 102 + orig: 87, 102 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/stretchyman-pma.png b/apps/module-ts/src/spine-ts/webgl/example/assets/stretchyman-pma.png new file mode 100755 index 0000000..a501e0b Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/stretchyman-pma.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/stretchyman-pro.skel b/apps/module-ts/src/spine-ts/webgl/example/assets/stretchyman-pro.skel new file mode 100755 index 0000000..7370481 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/stretchyman-pro.skel differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/tank-pma.atlas b/apps/module-ts/src/spine-ts/webgl/example/assets/tank-pma.atlas new file mode 100755 index 0000000..200fe67 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/example/assets/tank-pma.atlas @@ -0,0 +1,174 @@ + +tank-pma.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +antenna + rotate: true + xy: 2, 712 + size: 11, 152 + orig: 11, 152 + offset: 0, 0 + index: -1 +cannon + rotate: false + xy: 222, 694 + size: 466, 29 + orig: 466, 29 + offset: 0, 0 + index: -1 +cannon-connector + rotate: true + xy: 82, 654 + size: 56, 68 + orig: 56, 68 + offset: 0, 0 + index: -1 +ground + rotate: false + xy: 2, 175 + size: 512, 177 + orig: 512, 177 + offset: 0, 0 + index: -1 +guntower + rotate: false + xy: 647, 347 + size: 365, 145 + orig: 365, 145 + offset: 0, 0 + index: -1 +machinegun + rotate: false + xy: 690, 694 + size: 166, 29 + orig: 166, 29 + offset: 0, 0 + index: -1 +machinegun-mount + rotate: true + xy: 858, 687 + size: 36, 48 + orig: 36, 48 + offset: 0, 0 + index: -1 +rock + rotate: false + xy: 664, 607 + size: 290, 64 + orig: 290, 64 + offset: 0, 0 + index: -1 +smoke-glow + rotate: false + xy: 946, 673 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 +smoke-puff01-bg + rotate: false + xy: 312, 630 + size: 92, 62 + orig: 92, 62 + offset: 0, 0 + index: -1 +smoke-puff01-fg + rotate: false + xy: 222, 633 + size: 88, 59 + orig: 88, 59 + offset: 0, 0 + index: -1 +smoke-puff02-fg + rotate: false + xy: 406, 630 + size: 92, 62 + orig: 92, 62 + offset: 0, 0 + index: -1 +smoke-puff03-fg + rotate: false + xy: 500, 630 + size: 92, 62 + orig: 92, 62 + offset: 0, 0 + index: -1 +smoke-puff04-fg + rotate: false + xy: 2, 662 + size: 78, 48 + orig: 78, 48 + offset: 0, 0 + index: -1 +tank-bottom + rotate: false + xy: 2, 354 + size: 643, 138 + orig: 643, 138 + offset: 0, 0 + index: -1 +tank-bottom-shadow + rotate: false + xy: 2, 2 + size: 646, 171 + orig: 646, 171 + offset: 0, 0 + index: -1 +tank-top + rotate: false + xy: 195, 494 + size: 704, 111 + orig: 704, 111 + offset: 0, 0 + index: -1 +tread + rotate: false + xy: 172, 708 + size: 48, 15 + orig: 48, 15 + offset: 0, 0 + index: -1 +tread-inside + rotate: true + xy: 156, 710 + size: 13, 14 + orig: 13, 14 + offset: 0, 0 + index: -1 +wheel-big + rotate: false + xy: 97, 540 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +wheel-big-overlay + rotate: false + xy: 2, 559 + size: 93, 93 + orig: 93, 93 + offset: 0, 0 + index: -1 +wheel-mid + rotate: false + xy: 152, 638 + size: 68, 68 + orig: 68, 68 + offset: 0, 0 + index: -1 +wheel-mid-overlay + rotate: false + xy: 594, 624 + size: 68, 68 + orig: 68, 68 + offset: 0, 0 + index: -1 +wheel-small + rotate: false + xy: 908, 687 + size: 36, 36 + orig: 36, 36 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/tank-pma.png b/apps/module-ts/src/spine-ts/webgl/example/assets/tank-pma.png new file mode 100755 index 0000000..2392f65 Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/tank-pma.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/tank-pro.skel b/apps/module-ts/src/spine-ts/webgl/example/assets/tank-pro.skel new file mode 100755 index 0000000..5b5320f Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/tank-pro.skel differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/vine-pma.atlas b/apps/module-ts/src/spine-ts/webgl/example/assets/vine-pma.atlas new file mode 100755 index 0000000..1e50a2d --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/example/assets/vine-pma.atlas @@ -0,0 +1,13 @@ + +vine-pma.png +size: 128,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +vine + rotate: false + xy: 2, 2 + size: 68, 962 + orig: 68, 962 + offset: 0, 0 + index: -1 diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/vine-pma.png b/apps/module-ts/src/spine-ts/webgl/example/assets/vine-pma.png new file mode 100755 index 0000000..3e2752b Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/vine-pma.png differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/assets/vine-pro.skel b/apps/module-ts/src/spine-ts/webgl/example/assets/vine-pro.skel new file mode 100755 index 0000000..81d071f Binary files /dev/null and b/apps/module-ts/src/spine-ts/webgl/example/assets/vine-pro.skel differ diff --git a/apps/module-ts/src/spine-ts/webgl/example/barebones.html b/apps/module-ts/src/spine-ts/webgl/example/barebones.html new file mode 100755 index 0000000..47a4501 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/example/barebones.html @@ -0,0 +1,157 @@ + + + + + + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/example/index.html b/apps/module-ts/src/spine-ts/webgl/example/index.html new file mode 100755 index 0000000..a6d1abd --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/example/index.html @@ -0,0 +1,333 @@ + + + + + + +
                    +
                    +Skeleton: +Animation: +Skin: +Vertex Effect: +Debug: +
                    +
                    + + + \ No newline at end of file diff --git a/apps/module-ts/src/spine-ts/webgl/src/AssetManager.ts b/apps/module-ts/src/spine-ts/webgl/src/AssetManager.ts new file mode 100755 index 0000000..802e401 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/AssetManager.ts @@ -0,0 +1,38 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class AssetManager extends spine.AssetManager { + constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, pathPrefix: string = "") { + super((image: HTMLImageElement | ImageBitmap) => { + return new spine.webgl.GLTexture(context, image); + }, pathPrefix); + } + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/Camera.ts b/apps/module-ts/src/spine-ts/webgl/src/Camera.ts new file mode 100755 index 0000000..59897b0 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/Camera.ts @@ -0,0 +1,84 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class OrthoCamera { + position = new Vector3(0, 0, 0); + direction = new Vector3(0, 0, -1); + up = new Vector3(0, 1, 0); + near = 0; + far = 100; + zoom = 1; + viewportWidth = 0; + viewportHeight = 0; + projectionView = new Matrix4(); + inverseProjectionView = new Matrix4(); + projection = new Matrix4(); + view = new Matrix4(); + + private tmp = new Vector3(); + + constructor (viewportWidth: number, viewportHeight: number) { + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + this.update(); + } + + update () { + let projection = this.projection; + let view = this.view; + let projectionView = this.projectionView; + let inverseProjectionView = this.inverseProjectionView; + let zoom = this.zoom, viewportWidth = this.viewportWidth, viewportHeight = this.viewportHeight; + projection.ortho(zoom * (-viewportWidth / 2), zoom * (viewportWidth / 2), + zoom * (-viewportHeight / 2), zoom * (viewportHeight / 2), + this.near, this.far); + view.lookAt(this.position, this.direction, this.up); + projectionView.set(projection.values); + projectionView.multiply(view); + inverseProjectionView.set(projectionView.values).invert(); + } + + screenToWorld (screenCoords: Vector3, screenWidth: number, screenHeight: number) { + let x = screenCoords.x, y = screenHeight - screenCoords.y - 1; + let tmp = this.tmp; + tmp.x = (2 * x) / screenWidth - 1; + tmp.y = (2 * y) / screenHeight - 1; + tmp.z = (2 * screenCoords.z) - 1; + tmp.project(this.inverseProjectionView); + screenCoords.set(tmp.x, tmp.y, tmp.z); + return screenCoords; + } + + setViewport(viewportWidth: number, viewportHeight: number) { + this.viewportWidth = viewportWidth; + this.viewportHeight = viewportHeight; + } + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/GLTexture.ts b/apps/module-ts/src/spine-ts/webgl/src/GLTexture.ts new file mode 100755 index 0000000..16d5974 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/GLTexture.ts @@ -0,0 +1,113 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class GLTexture extends Texture implements Disposable, Restorable { + private context: ManagedWebGLRenderingContext; + private texture: WebGLTexture = null; + private boundUnit = 0; + private useMipMaps = false; + + public static DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL = false; + + constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, image: HTMLImageElement | ImageBitmap, useMipMaps: boolean = false) { + super(image); + this.context = context instanceof ManagedWebGLRenderingContext? context : new ManagedWebGLRenderingContext(context); + this.useMipMaps = useMipMaps; + this.restore(); + this.context.addRestorable(this); + } + + setFilters (minFilter: TextureFilter, magFilter: TextureFilter) { + let gl = this.context.gl; + this.bind(); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, GLTexture.validateMagFilter(magFilter)); + } + + static validateMagFilter (magFilter: TextureFilter) { + switch(magFilter) { + case TextureFilter.MipMap: + case TextureFilter.MipMapLinearLinear: + case TextureFilter.MipMapLinearNearest: + case TextureFilter.MipMapNearestLinear: + case TextureFilter.MipMapNearestNearest: + return TextureFilter.Linear; + default: + return magFilter; + } + } + + setWraps (uWrap: TextureWrap, vWrap: TextureWrap) { + let gl = this.context.gl; + this.bind(); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, uWrap); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, vWrap); + } + + update (useMipMaps: boolean) { + let gl = this.context.gl; + if (!this.texture) { + this.texture = this.context.gl.createTexture(); + } + this.bind(); + if (GLTexture.DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL) gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, useMipMaps ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + if (useMipMaps) gl.generateMipmap(gl.TEXTURE_2D); + } + + restore () { + this.texture = null; + this.update(this.useMipMaps); + } + + bind (unit: number = 0) { + let gl = this.context.gl; + this.boundUnit = unit; + gl.activeTexture(gl.TEXTURE0 + unit); + gl.bindTexture(gl.TEXTURE_2D, this.texture); + } + + unbind () { + let gl = this.context.gl; + gl.activeTexture(gl.TEXTURE0 + this.boundUnit); + gl.bindTexture(gl.TEXTURE_2D, null); + } + + dispose () { + this.context.removeRestorable(this); + let gl = this.context.gl; + gl.deleteTexture(this.texture); + } + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/Input.ts b/apps/module-ts/src/spine-ts/webgl/src/Input.ts new file mode 100755 index 0000000..90a4d9c --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/Input.ts @@ -0,0 +1,232 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class Input { + element: HTMLElement; + lastX = 0; + lastY = 0; + buttonDown = false; + currTouch: Touch = null; + touchesPool = new Pool(() => { + return new spine.webgl.Touch(0, 0, 0); + }); + + private listeners = new Array(); + constructor (element: HTMLElement) { + this.element = element; + this.setupCallbacks(element); + } + + private setupCallbacks(element: HTMLElement) { + let mouseDown = (ev: UIEvent) => { + if (ev instanceof MouseEvent) { + let rect = element.getBoundingClientRect(); + let x = ev.clientX - rect.left; + let y = ev.clientY - rect.top; + + let listeners = this.listeners; + for (let i = 0; i < listeners.length; i++) { + if (listeners[i].down) listeners[i].down(x, y); + } + + this.lastX = x; + this.lastY = y; + this.buttonDown = true; + + document.addEventListener("mousemove", mouseMove); + document.addEventListener("mouseup", mouseUp); + } + } + + let mouseMove = (ev: UIEvent) => { + if (ev instanceof MouseEvent) { + let rect = element.getBoundingClientRect(); + let x = ev.clientX - rect.left; + let y = ev.clientY - rect.top; + + let listeners = this.listeners; + for (let i = 0; i < listeners.length; i++) { + if (this.buttonDown) { + if (listeners[i].dragged) listeners[i].dragged(x, y); + } else { + if (listeners[i].moved) listeners[i].moved(x, y); + } + } + + this.lastX = x; + this.lastY = y; + } + }; + + let mouseUp = (ev: UIEvent) => { + if (ev instanceof MouseEvent) { + let rect = element.getBoundingClientRect(); + let x = ev.clientX - rect.left; + let y = ev.clientY - rect.top; + + let listeners = this.listeners; + for (let i = 0; i < listeners.length; i++) { + if (listeners[i].up) listeners[i].up(x, y); + } + + this.lastX = x; + this.lastY = y; + this.buttonDown = false; + document.removeEventListener("mousemove", mouseMove); + document.removeEventListener("mouseup", mouseUp); + } + } + + + + element.addEventListener("mousedown", mouseDown, true); + element.addEventListener("mousemove", mouseMove, true); + element.addEventListener("mouseup", mouseUp, true); + element.addEventListener("touchstart", (ev: TouchEvent) => { + if (this.currTouch != null) return; + + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + let rect = element.getBoundingClientRect(); + let x = touch.clientX - rect.left; + let y = touch.clientY - rect.top; + this.currTouch = this.touchesPool.obtain(); + this.currTouch.identifier = touch.identifier; + this.currTouch.x = x; + this.currTouch.y = y; + break; + } + + let listeners = this.listeners; + for (let i = 0; i < listeners.length; i++) { + if (listeners[i].down) listeners[i].down(this.currTouch.x, this.currTouch.y); + } + + this.lastX = this.currTouch.x; + this.lastY = this.currTouch.y; + this.buttonDown = true; + ev.preventDefault(); + }, false); + element.addEventListener("touchend", (ev: TouchEvent) => { + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (this.currTouch.identifier === touch.identifier) { + let rect = element.getBoundingClientRect(); + let x = this.currTouch.x = touch.clientX - rect.left; + let y = this.currTouch.y = touch.clientY - rect.top; + this.touchesPool.free(this.currTouch); + let listeners = this.listeners; + for (let i = 0; i < listeners.length; i++) { + if (listeners[i].up) listeners[i].up(x, y); + } + + this.lastX = x; + this.lastY = y; + this.buttonDown = false; + this.currTouch = null; + break; + } + } + ev.preventDefault(); + }, false); + element.addEventListener("touchcancel", (ev: TouchEvent) => { + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (this.currTouch.identifier === touch.identifier) { + let rect = element.getBoundingClientRect(); + let x = this.currTouch.x = touch.clientX - rect.left; + let y = this.currTouch.y = touch.clientY - rect.top; + this.touchesPool.free(this.currTouch); + let listeners = this.listeners; + for (let i = 0; i < listeners.length; i++) { + if (listeners[i].up) listeners[i].up(x, y); + } + + this.lastX = x; + this.lastY = y; + this.buttonDown = false; + this.currTouch = null; + break; + } + } + ev.preventDefault(); + }, false); + element.addEventListener("touchmove", (ev: TouchEvent) => { + if (this.currTouch == null) return; + + var touches = ev.changedTouches; + for (var i = 0; i < touches.length; i++) { + var touch = touches[i]; + if (this.currTouch.identifier === touch.identifier) { + let rect = element.getBoundingClientRect(); + let x = touch.clientX - rect.left; + let y = touch.clientY - rect.top; + + let listeners = this.listeners; + for (let i = 0; i < listeners.length; i++) { + if (listeners[i].dragged) listeners[i].dragged(x, y); + } + + this.lastX = this.currTouch.x = x; + this.lastY = this.currTouch.y = y; + break; + } + } + ev.preventDefault(); + }, false); + } + + addListener(listener: InputListener) { + this.listeners.push(listener); + } + + removeListener(listener: InputListener) { + let idx = this.listeners.indexOf(listener); + if (idx > -1) { + this.listeners.splice(idx, 1); + } + } + } + + export class Touch { + constructor(public identifier: number, public x: number, public y: number) { + } + } + + export 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; + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/LoadingScreen.ts b/apps/module-ts/src/spine-ts/webgl/src/LoadingScreen.ts new file mode 100755 index 0000000..e992454 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/LoadingScreen.ts @@ -0,0 +1,137 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class LoadingScreen { + static FADE_SECONDS = 1; + + private static loaded = 0; + private static spinnerImg: HTMLImageElement = null; + private static logoImg: HTMLImageElement = null; + + private renderer: SceneRenderer; + private logo: GLTexture = null; + private spinner: GLTexture = null; + private angle = 0; + private fadeOut = 0; + private timeKeeper = new spine.TimeKeeper(); + backgroundColor = new spine.Color(0.135, 0.135, 0.135, 1); + private tempColor = new spine.Color(); + private firstDraw = 0; + + private static SPINNER_DATA = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACjCAYAAADmbK6AAAAACXBIWXMAAAsTAAALEwEAmpwYAAALB2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTgtMTEtMTVUMTY6NDA6NTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpmZDhlNTljMC02NGJjLTIxNGQtODAyZi1jZDlhODJjM2ZjMGMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpmYmNmZWJlYS03MjY2LWE0NGQtOTI4NS0wOTJmNGNhYzk4ZWEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMjk3IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjQyIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHN0RXZ0OndoZW49IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNThlMTlkNi0xYTRjLTQyNDEtODU0ZC01MDVlZjYxMjRhODQiIHN0RXZ0OndoZW49IjIwMTgtMTEtMTVUMTY6NDA6MjMrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ3YzYzYzIwLWJkYjgtYzM0YS1hYzMyLWQ5MDdjOWEyOTA0MCIgc3RFdnQ6d2hlbj0iMjAxOC0xMS0xNVQxNjo0MDo1OSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZmQ4ZTU5YzAtNjRiYy0yMTRkLTgwMmYtY2Q5YTgyYzNmYzBjIiBzdEV2dDp3aGVuPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0N2M2M2MyMC1iZGI4LWMzNGEtYWMzMi1kOTA3YzlhMjkwNDAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2OWRmZjljYy01YzFiLWE5NDctOTc3OS03ODgxZjM0ODk3MDMiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiLz4gPHBob3Rvc2hvcDpEb2N1bWVudEFu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"; + + private static SPINE_LOGO_DATA = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKUAAABsCAYAAAALzHKmAAAACXBIWXMAAAsTAAALEwEAmpwYAAALB2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTgtMTEtMTVUMTY6NDA6NTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowMTdhZGQ3Ni04OTZlLThlNGUtYmM5MS00ZjEyNjI1YjA3MjgiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMTViNGE2ZS1hMDg3LWEzNDktODdhOS1mNDYzYjE2MzQ0Y2MiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiBleGlmOkNvbG9yU3BhY2U9IjY1NTM1IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMjk3IiBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjQyIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiIHN0RXZ0OndoZW49IjIwMTYtMDktMDhUMTQ6MjU6MTIrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1LjUgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNThlMTlkNi0xYTRjLTQyNDEtODU0ZC01MDVlZjYxMjRhODQiIHN0RXZ0OndoZW49IjIwMTgtMTEtMTVUMTY6NDA6MjMrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJlNjJiMWM2LWIxYzQtNDk0MC04MDMxLWU4ZDkyNTBmODJjNSIgc3RFdnQ6d2hlbj0iMjAxOC0xMS0xNVQxNjo0MDo1OSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDE3YWRkNzYtODk2ZS04ZTRlLWJjOTEtNGYxMjYyNWIwNzI4IiBzdEV2dDp3aGVuPSIyMDE4LTExLTE1VDE2OjQwOjU5KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyZTYyYjFjNi1iMWM0LTQ5NDAtODAzMS1lOGQ5MjUwZjgyYzUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2OWRmZjljYy01YzFiLWE5NDctOTc3OS03ODgxZjM0ODk3MDMiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODMzNWIyYy04NzYyLWQzNGMtOTBhOS02ODJjYjJmYTQ2M2UiLz4gPHBob3Rvc2hvcDpEb2N1bWVudEFu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" + + constructor (renderer: SceneRenderer) { + this.renderer = renderer; + + this.timeKeeper.maxDelta = 9; + + if (LoadingScreen.logoImg === null) { + // thank you Apple Inc. + let isSafari = navigator.userAgent.indexOf("Safari") > -1; + + LoadingScreen.logoImg = new Image(); + LoadingScreen.logoImg.src = LoadingScreen.SPINE_LOGO_DATA; + if (!isSafari) LoadingScreen.logoImg.crossOrigin = "anonymous"; + LoadingScreen.logoImg.onload = (ev) => { + LoadingScreen.loaded++; + } + + LoadingScreen.spinnerImg = new Image(); + LoadingScreen.spinnerImg.src = LoadingScreen.SPINNER_DATA; + if (!isSafari) LoadingScreen.spinnerImg.crossOrigin = "anonymous"; + LoadingScreen.spinnerImg.onload = (ev) => { + LoadingScreen.loaded++; + } + } + } + + draw (complete = false) { + if (complete && this.fadeOut > LoadingScreen.FADE_SECONDS) return; + + this.timeKeeper.update(); + let a = Math.abs(Math.sin(this.timeKeeper.totalTime + 0.75)); + this.angle -= this.timeKeeper.delta / 1.4 * 360 * (1 + 1.5 * Math.pow(a, 5)); + + let renderer = this.renderer; + let canvas = renderer.canvas; + let gl = renderer.context.gl; + + renderer.resize(ResizeMode.Stretch); + + let oldX = renderer.camera.position.x, oldY = renderer.camera.position.y; + renderer.camera.position.set(canvas.width / 2, canvas.height / 2, 0); + renderer.camera.viewportWidth = canvas.width; + renderer.camera.viewportHeight = canvas.height; + + if (!complete) { + gl.clearColor(this.backgroundColor.r, this.backgroundColor.g, this.backgroundColor.b, this.backgroundColor.a); + gl.clear(gl.COLOR_BUFFER_BIT); + this.tempColor.a = 1; + } else { + this.fadeOut += this.timeKeeper.delta * (this.timeKeeper.totalTime < 1 ? 2 : 1); + if (this.fadeOut > LoadingScreen.FADE_SECONDS) { + renderer.camera.position.set(oldX, oldY, 0); + return; + } + a = 1 - this.fadeOut / LoadingScreen.FADE_SECONDS; + this.tempColor.setFromColor(this.backgroundColor); + this.tempColor.a = 1 - (a - 1) * (a - 1); + renderer.begin(); + renderer.quad(true, 0, 0, canvas.width, 0, canvas.width, canvas.height, 0, canvas.height, + this.tempColor, this.tempColor, this.tempColor, this.tempColor); + renderer.end(); + } + this.tempColor.set(1, 1, 1, this.tempColor.a); + + if (LoadingScreen.loaded != 2) return; + if (this.logo === null) { + this.logo = new GLTexture(renderer.context, LoadingScreen.logoImg); + this.spinner = new GLTexture(renderer.context, LoadingScreen.spinnerImg); + } + this.logo.update(false); + this.spinner.update(false); + + let logoWidth = this.logo.getImage().width; + let logoHeight = this.logo.getImage().height; + let spinnerWidth = this.spinner.getImage().width; + let spinnerHeight = this.spinner.getImage().height; + + renderer.batcher.setBlendMode(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + renderer.begin(); + renderer.drawTexture(this.logo, (canvas.width - logoWidth) / 2, (canvas.height - logoHeight) / 2, logoWidth, logoHeight, this.tempColor); + renderer.drawTextureRotated(this.spinner, (canvas.width - spinnerWidth) / 2, (canvas.height - spinnerHeight) / 2, spinnerWidth, spinnerHeight, spinnerWidth / 2, spinnerHeight / 2, this.angle, this.tempColor); + renderer.end(); + + renderer.camera.position.set(oldX, oldY, 0); + } + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/Matrix4.ts b/apps/module-ts/src/spine-ts/webgl/src/Matrix4.ts new file mode 100755 index 0000000..2022b73 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/Matrix4.ts @@ -0,0 +1,340 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export const M00 = 0; + export const M01 = 4; + export const M02 = 8; + export const M03 = 12; + export const M10 = 1; + export const M11 = 5; + export const M12 = 9; + export const M13 = 13; + export const M20 = 2; + export const M21 = 6; + export const M22 = 10; + export const M23 = 14; + export const M30 = 3; + export const M31 = 7; + export const M32 = 11; + export const M33 = 15; + + export class Matrix4 { + temp: Float32Array = new Float32Array(16); + values: Float32Array = new Float32Array(16); + + private static xAxis: Vector3 = null; + private static yAxis: Vector3 = null; + private static zAxis: Vector3 = null; + private static tmpMatrix = new Matrix4(); + + constructor () { + let v = this.values; + v[M00] = 1; + v[M11] = 1; + v[M22] = 1; + v[M33] = 1; + } + + set (values: ArrayLike): Matrix4 { + this.values.set(values); + return this; + } + + transpose (): Matrix4 { + let t = this.temp; + let v = this.values; + t[M00] = v[M00]; + t[M01] = v[M10]; + t[M02] = v[M20]; + t[M03] = v[M30]; + t[M10] = v[M01]; + t[M11] = v[M11]; + t[M12] = v[M21]; + t[M13] = v[M31]; + t[M20] = v[M02]; + t[M21] = v[M12]; + t[M22] = v[M22]; + t[M23] = v[M32]; + t[M30] = v[M03]; + t[M31] = v[M13]; + t[M32] = v[M23]; + t[M33] = v[M33]; + return this.set(t); + } + + identity (): Matrix4 { + let v = this.values; + v[M00] = 1; + v[M01] = 0; + v[M02] = 0; + v[M03] = 0; + v[M10] = 0; + v[M11] = 1; + v[M12] = 0; + v[M13] = 0; + v[M20] = 0; + v[M21] = 0; + v[M22] = 1; + v[M23] = 0; + v[M30] = 0; + v[M31] = 0; + v[M32] = 0; + v[M33] = 1; + return this; + } + + invert (): Matrix4 { + let v = this.values; + let t = this.temp; + let l_det = v[M30] * v[M21] * v[M12] * v[M03] - v[M20] * v[M31] * v[M12] * v[M03] - v[M30] * v[M11] * v[M22] * v[M03] + + v[M10] * v[M31] * v[M22] * v[M03] + v[M20] * v[M11] * v[M32] * v[M03] - v[M10] * v[M21] * v[M32] * v[M03] + - v[M30] * v[M21] * v[M02] * v[M13] + v[M20] * v[M31] * v[M02] * v[M13] + v[M30] * v[M01] * v[M22] * v[M13] + - v[M00] * v[M31] * v[M22] * v[M13] - v[M20] * v[M01] * v[M32] * v[M13] + v[M00] * v[M21] * v[M32] * v[M13] + + v[M30] * v[M11] * v[M02] * v[M23] - v[M10] * v[M31] * v[M02] * v[M23] - v[M30] * v[M01] * v[M12] * v[M23] + + v[M00] * v[M31] * v[M12] * v[M23] + v[M10] * v[M01] * v[M32] * v[M23] - v[M00] * v[M11] * v[M32] * v[M23] + - v[M20] * v[M11] * v[M02] * v[M33] + v[M10] * v[M21] * v[M02] * v[M33] + v[M20] * v[M01] * v[M12] * v[M33] + - v[M00] * v[M21] * v[M12] * v[M33] - v[M10] * v[M01] * v[M22] * v[M33] + v[M00] * v[M11] * v[M22] * v[M33]; + if (l_det == 0) throw new Error("non-invertible matrix"); + let inv_det = 1.0 / l_det; + t[M00] = v[M12] * v[M23] * v[M31] - v[M13] * v[M22] * v[M31] + v[M13] * v[M21] * v[M32] + - v[M11] * v[M23] * v[M32] - v[M12] * v[M21] * v[M33] + v[M11] * v[M22] * v[M33]; + t[M01] = v[M03] * v[M22] * v[M31] - v[M02] * v[M23] * v[M31] - v[M03] * v[M21] * v[M32] + + v[M01] * v[M23] * v[M32] + v[M02] * v[M21] * v[M33] - v[M01] * v[M22] * v[M33]; + t[M02] = v[M02] * v[M13] * v[M31] - v[M03] * v[M12] * v[M31] + v[M03] * v[M11] * v[M32] + - v[M01] * v[M13] * v[M32] - v[M02] * v[M11] * v[M33] + v[M01] * v[M12] * v[M33]; + t[M03] = v[M03] * v[M12] * v[M21] - v[M02] * v[M13] * v[M21] - v[M03] * v[M11] * v[M22] + + v[M01] * v[M13] * v[M22] + v[M02] * v[M11] * v[M23] - v[M01] * v[M12] * v[M23]; + t[M10] = v[M13] * v[M22] * v[M30] - v[M12] * v[M23] * v[M30] - v[M13] * v[M20] * v[M32] + + v[M10] * v[M23] * v[M32] + v[M12] * v[M20] * v[M33] - v[M10] * v[M22] * v[M33]; + t[M11] = v[M02] * v[M23] * v[M30] - v[M03] * v[M22] * v[M30] + v[M03] * v[M20] * v[M32] + - v[M00] * v[M23] * v[M32] - v[M02] * v[M20] * v[M33] + v[M00] * v[M22] * v[M33]; + t[M12] = v[M03] * v[M12] * v[M30] - v[M02] * v[M13] * v[M30] - v[M03] * v[M10] * v[M32] + + v[M00] * v[M13] * v[M32] + v[M02] * v[M10] * v[M33] - v[M00] * v[M12] * v[M33]; + t[M13] = v[M02] * v[M13] * v[M20] - v[M03] * v[M12] * v[M20] + v[M03] * v[M10] * v[M22] + - v[M00] * v[M13] * v[M22] - v[M02] * v[M10] * v[M23] + v[M00] * v[M12] * v[M23]; + t[M20] = v[M11] * v[M23] * v[M30] - v[M13] * v[M21] * v[M30] + v[M13] * v[M20] * v[M31] + - v[M10] * v[M23] * v[M31] - v[M11] * v[M20] * v[M33] + v[M10] * v[M21] * v[M33]; + t[M21] = v[M03] * v[M21] * v[M30] - v[M01] * v[M23] * v[M30] - v[M03] * v[M20] * v[M31] + + v[M00] * v[M23] * v[M31] + v[M01] * v[M20] * v[M33] - v[M00] * v[M21] * v[M33]; + t[M22] = v[M01] * v[M13] * v[M30] - v[M03] * v[M11] * v[M30] + v[M03] * v[M10] * v[M31] + - v[M00] * v[M13] * v[M31] - v[M01] * v[M10] * v[M33] + v[M00] * v[M11] * v[M33]; + t[M23] = v[M03] * v[M11] * v[M20] - v[M01] * v[M13] * v[M20] - v[M03] * v[M10] * v[M21] + + v[M00] * v[M13] * v[M21] + v[M01] * v[M10] * v[M23] - v[M00] * v[M11] * v[M23]; + t[M30] = v[M12] * v[M21] * v[M30] - v[M11] * v[M22] * v[M30] - v[M12] * v[M20] * v[M31] + + v[M10] * v[M22] * v[M31] + v[M11] * v[M20] * v[M32] - v[M10] * v[M21] * v[M32]; + t[M31] = v[M01] * v[M22] * v[M30] - v[M02] * v[M21] * v[M30] + v[M02] * v[M20] * v[M31] + - v[M00] * v[M22] * v[M31] - v[M01] * v[M20] * v[M32] + v[M00] * v[M21] * v[M32]; + t[M32] = v[M02] * v[M11] * v[M30] - v[M01] * v[M12] * v[M30] - v[M02] * v[M10] * v[M31] + + v[M00] * v[M12] * v[M31] + v[M01] * v[M10] * v[M32] - v[M00] * v[M11] * v[M32]; + t[M33] = v[M01] * v[M12] * v[M20] - v[M02] * v[M11] * v[M20] + v[M02] * v[M10] * v[M21] + - v[M00] * v[M12] * v[M21] - v[M01] * v[M10] * v[M22] + v[M00] * v[M11] * v[M22]; + v[M00] = t[M00] * inv_det; + v[M01] = t[M01] * inv_det; + v[M02] = t[M02] * inv_det; + v[M03] = t[M03] * inv_det; + v[M10] = t[M10] * inv_det; + v[M11] = t[M11] * inv_det; + v[M12] = t[M12] * inv_det; + v[M13] = t[M13] * inv_det; + v[M20] = t[M20] * inv_det; + v[M21] = t[M21] * inv_det; + v[M22] = t[M22] * inv_det; + v[M23] = t[M23] * inv_det; + v[M30] = t[M30] * inv_det; + v[M31] = t[M31] * inv_det; + v[M32] = t[M32] * inv_det; + v[M33] = t[M33] * inv_det; + return this; + } + + determinant (): number { + let v = this.values; + return v[M30] * v[M21] * v[M12] * v[M03] - v[M20] * v[M31] * v[M12] * v[M03] - v[M30] * v[M11] * v[M22] * v[M03] + + v[M10] * v[M31] * v[M22] * v[M03] + v[M20] * v[M11] * v[M32] * v[M03] - v[M10] * v[M21] * v[M32] * v[M03] + - v[M30] * v[M21] * v[M02] * v[M13] + v[M20] * v[M31] * v[M02] * v[M13] + v[M30] * v[M01] * v[M22] * v[M13] + - v[M00] * v[M31] * v[M22] * v[M13] - v[M20] * v[M01] * v[M32] * v[M13] + v[M00] * v[M21] * v[M32] * v[M13] + + v[M30] * v[M11] * v[M02] * v[M23] - v[M10] * v[M31] * v[M02] * v[M23] - v[M30] * v[M01] * v[M12] * v[M23] + + v[M00] * v[M31] * v[M12] * v[M23] + v[M10] * v[M01] * v[M32] * v[M23] - v[M00] * v[M11] * v[M32] * v[M23] + - v[M20] * v[M11] * v[M02] * v[M33] + v[M10] * v[M21] * v[M02] * v[M33] + v[M20] * v[M01] * v[M12] * v[M33] + - v[M00] * v[M21] * v[M12] * v[M33] - v[M10] * v[M01] * v[M22] * v[M33] + v[M00] * v[M11] * v[M22] * v[M33]; + } + + translate (x: number, y: number, z: number): Matrix4 { + let v = this.values; + v[M03] += x; + v[M13] += y; + v[M23] += z; + return this; + } + + copy (): Matrix4 { + return new Matrix4().set(this.values); + } + + projection (near: number, far: number, fovy: number, aspectRatio: number): Matrix4 { + this.identity(); + let l_fd = (1.0 / Math.tan((fovy * (Math.PI / 180)) / 2.0)); + let l_a1 = (far + near) / (near - far); + let l_a2 = (2 * far * near) / (near - far); + let v = this.values; + v[M00] = l_fd / aspectRatio; + v[M10] = 0; + v[M20] = 0; + v[M30] = 0; + v[M01] = 0; + v[M11] = l_fd; + v[M21] = 0; + v[M31] = 0; + v[M02] = 0; + v[M12] = 0; + v[M22] = l_a1; + v[M32] = -1; + v[M03] = 0; + v[M13] = 0; + v[M23] = l_a2; + v[M33] = 0; + return this; + } + + ortho2d (x: number, y: number, width: number, height: number): Matrix4 { + return this.ortho(x, x + width, y, y + height, 0, 1); + } + + ortho (left: number, right: number, bottom: number, top: number, near: number, far: number): Matrix4 { + this.identity(); + let x_orth = 2 / (right - left); + let y_orth = 2 / (top - bottom); + let z_orth = -2 / (far - near); + + let tx = -(right + left) / (right - left); + let ty = -(top + bottom) / (top - bottom); + let tz = -(far + near) / (far - near); + + let v = this.values; + v[M00] = x_orth; + v[M10] = 0; + v[M20] = 0; + v[M30] = 0; + v[M01] = 0; + v[M11] = y_orth; + v[M21] = 0; + v[M31] = 0; + v[M02] = 0; + v[M12] = 0; + v[M22] = z_orth; + v[M32] = 0; + v[M03] = tx; + v[M13] = ty; + v[M23] = tz; + v[M33] = 1; + return this; + } + + multiply (matrix: Matrix4): Matrix4 { + let t = this.temp; + let v = this.values; + let m = matrix.values; + t[M00] = v[M00] * m[M00] + v[M01] * m[M10] + v[M02] * m[M20] + v[M03] * m[M30]; + t[M01] = v[M00] * m[M01] + v[M01] * m[M11] + v[M02] * m[M21] + v[M03] * m[M31]; + t[M02] = v[M00] * m[M02] + v[M01] * m[M12] + v[M02] * m[M22] + v[M03] * m[M32]; + t[M03] = v[M00] * m[M03] + v[M01] * m[M13] + v[M02] * m[M23] + v[M03] * m[M33]; + t[M10] = v[M10] * m[M00] + v[M11] * m[M10] + v[M12] * m[M20] + v[M13] * m[M30]; + t[M11] = v[M10] * m[M01] + v[M11] * m[M11] + v[M12] * m[M21] + v[M13] * m[M31]; + t[M12] = v[M10] * m[M02] + v[M11] * m[M12] + v[M12] * m[M22] + v[M13] * m[M32]; + t[M13] = v[M10] * m[M03] + v[M11] * m[M13] + v[M12] * m[M23] + v[M13] * m[M33]; + t[M20] = v[M20] * m[M00] + v[M21] * m[M10] + v[M22] * m[M20] + v[M23] * m[M30]; + t[M21] = v[M20] * m[M01] + v[M21] * m[M11] + v[M22] * m[M21] + v[M23] * m[M31]; + t[M22] = v[M20] * m[M02] + v[M21] * m[M12] + v[M22] * m[M22] + v[M23] * m[M32]; + t[M23] = v[M20] * m[M03] + v[M21] * m[M13] + v[M22] * m[M23] + v[M23] * m[M33]; + t[M30] = v[M30] * m[M00] + v[M31] * m[M10] + v[M32] * m[M20] + v[M33] * m[M30]; + t[M31] = v[M30] * m[M01] + v[M31] * m[M11] + v[M32] * m[M21] + v[M33] * m[M31]; + t[M32] = v[M30] * m[M02] + v[M31] * m[M12] + v[M32] * m[M22] + v[M33] * m[M32]; + t[M33] = v[M30] * m[M03] + v[M31] * m[M13] + v[M32] * m[M23] + v[M33] * m[M33]; + return this.set(this.temp); + } + + multiplyLeft (matrix: Matrix4): Matrix4 { + let t = this.temp; + let v = this.values; + let m = matrix.values; + t[M00] = m[M00] * v[M00] + m[M01] * v[M10] + m[M02] * v[M20] + m[M03] * v[M30]; + t[M01] = m[M00] * v[M01] + m[M01] * v[M11] + m[M02] * v[M21] + m[M03] * v[M31]; + t[M02] = m[M00] * v[M02] + m[M01] * v[M12] + m[M02] * v[M22] + m[M03] * v[M32]; + t[M03] = m[M00] * v[M03] + m[M01] * v[M13] + m[M02] * v[M23] + m[M03] * v[M33]; + t[M10] = m[M10] * v[M00] + m[M11] * v[M10] + m[M12] * v[M20] + m[M13] * v[M30]; + t[M11] = m[M10] * v[M01] + m[M11] * v[M11] + m[M12] * v[M21] + m[M13] * v[M31]; + t[M12] = m[M10] * v[M02] + m[M11] * v[M12] + m[M12] * v[M22] + m[M13] * v[M32]; + t[M13] = m[M10] * v[M03] + m[M11] * v[M13] + m[M12] * v[M23] + m[M13] * v[M33]; + t[M20] = m[M20] * v[M00] + m[M21] * v[M10] + m[M22] * v[M20] + m[M23] * v[M30]; + t[M21] = m[M20] * v[M01] + m[M21] * v[M11] + m[M22] * v[M21] + m[M23] * v[M31]; + t[M22] = m[M20] * v[M02] + m[M21] * v[M12] + m[M22] * v[M22] + m[M23] * v[M32]; + t[M23] = m[M20] * v[M03] + m[M21] * v[M13] + m[M22] * v[M23] + m[M23] * v[M33]; + t[M30] = m[M30] * v[M00] + m[M31] * v[M10] + m[M32] * v[M20] + m[M33] * v[M30]; + t[M31] = m[M30] * v[M01] + m[M31] * v[M11] + m[M32] * v[M21] + m[M33] * v[M31]; + t[M32] = m[M30] * v[M02] + m[M31] * v[M12] + m[M32] * v[M22] + m[M33] * v[M32]; + t[M33] = m[M30] * v[M03] + m[M31] * v[M13] + m[M32] * v[M23] + m[M33] * v[M33]; + return this.set(this.temp); + } + + lookAt (position: Vector3, direction: Vector3, up: Vector3) { + Matrix4.initTemps(); + let xAxis = Matrix4.xAxis, yAxis = Matrix4.yAxis, zAxis = Matrix4.zAxis; + zAxis.setFrom(direction).normalize(); + xAxis.setFrom(direction).normalize(); + xAxis.cross(up).normalize(); + yAxis.setFrom(xAxis).cross(zAxis).normalize(); + this.identity(); + let val = this.values; + val[M00] = xAxis.x; + val[M01] = xAxis.y; + val[M02] = xAxis.z; + val[M10] = yAxis.x; + val[M11] = yAxis.y; + val[M12] = yAxis.z; + val[M20] = -zAxis.x; + val[M21] = -zAxis.y; + val[M22] = -zAxis.z; + + Matrix4.tmpMatrix.identity(); + Matrix4.tmpMatrix.values[M03] = -position.x; + Matrix4.tmpMatrix.values[M13] = -position.y; + Matrix4.tmpMatrix.values[M23] = -position.z; + this.multiply(Matrix4.tmpMatrix) + + return this; + } + + static initTemps() { + if (Matrix4.xAxis === null) Matrix4.xAxis = new Vector3(); + if (Matrix4.yAxis === null) Matrix4.yAxis = new Vector3(); + if (Matrix4.zAxis === null) Matrix4.zAxis = new Vector3(); + } + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/Mesh.ts b/apps/module-ts/src/spine-ts/webgl/src/Mesh.ts new file mode 100755 index 0000000..5a5b8d1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/Mesh.ts @@ -0,0 +1,208 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class Mesh implements Disposable, Restorable { + private context: ManagedWebGLRenderingContext; + private vertices:Float32Array; + private verticesBuffer: WebGLBuffer; + private verticesLength = 0; + private dirtyVertices = false; + private indices:Uint16Array; + private indicesBuffer: WebGLBuffer; + private indicesLength = 0; + private dirtyIndices = false; + private elementsPerVertex = 0; + + getAttributes (): VertexAttribute[] { return this.attributes; } + + maxVertices (): number { return this.vertices.length / this.elementsPerVertex; } + numVertices (): number { return this.verticesLength / this.elementsPerVertex; } + setVerticesLength (length: number) { + this.dirtyVertices = true; + this.verticesLength = length; + } + getVertices (): Float32Array { return this.vertices; } + + maxIndices (): number { return this.indices.length; } + numIndices (): number { return this.indicesLength; } + setIndicesLength (length: number) { + this.dirtyIndices = true; + this.indicesLength = length; + } + getIndices (): Uint16Array { return this.indices }; + + getVertexSizeInFloats (): number { + let size = 0; + for (var i = 0; i < this.attributes.length; i++) { + let attribute = this.attributes[i]; + size += attribute.numElements; + } + return size; + } + + constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, private attributes: VertexAttribute[], maxVertices: number, maxIndices: number) { + this.context = context instanceof ManagedWebGLRenderingContext? context : new ManagedWebGLRenderingContext(context); + this.elementsPerVertex = 0; + for (let i = 0; i < attributes.length; i++) { + this.elementsPerVertex += attributes[i].numElements; + } + this.vertices = new Float32Array(maxVertices * this.elementsPerVertex); + this.indices = new Uint16Array(maxIndices); + this.context.addRestorable(this); + } + + setVertices (vertices: Array) { + this.dirtyVertices = true; + if (vertices.length > this.vertices.length) throw Error("Mesh can't store more than " + this.maxVertices() + " vertices"); + this.vertices.set(vertices, 0); + this.verticesLength = vertices.length; + } + + setIndices (indices: Array) { + this.dirtyIndices = true; + if (indices.length > this.indices.length) throw Error("Mesh can't store more than " + this.maxIndices() + " indices"); + this.indices.set(indices, 0); + this.indicesLength = indices.length; + } + + draw (shader: Shader, primitiveType: number) { + this.drawWithOffset(shader, primitiveType, 0, this.indicesLength > 0? this.indicesLength: this.verticesLength / this.elementsPerVertex); + } + + drawWithOffset (shader: Shader, primitiveType: number, offset: number, count: number) { + let gl = this.context.gl; + if (this.dirtyVertices || this.dirtyIndices) this.update(); + this.bind(shader); + if (this.indicesLength > 0) { + gl.drawElements(primitiveType, count, gl.UNSIGNED_SHORT, offset * 2); + } else { + gl.drawArrays(primitiveType, offset, count); + } + this.unbind(shader); + } + + bind (shader: Shader) { + let gl = this.context.gl; + gl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer); + let offset = 0; + for (let i = 0; i < this.attributes.length; i++) { + let attrib = this.attributes[i]; + let location = shader.getAttributeLocation(attrib.name); + gl.enableVertexAttribArray(location); + gl.vertexAttribPointer(location, attrib.numElements, gl.FLOAT, false, this.elementsPerVertex * 4, offset * 4); + offset += attrib.numElements; + } + if (this.indicesLength > 0) gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer); + } + + unbind (shader: Shader) { + let gl = this.context.gl; + for (let i = 0; i < this.attributes.length; i++) { + let attrib = this.attributes[i]; + let location = shader.getAttributeLocation(attrib.name); + gl.disableVertexAttribArray(location); + } + gl.bindBuffer(gl.ARRAY_BUFFER, null); + if (this.indicesLength > 0) gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null); + } + + private update () { + let gl = this.context.gl; + if (this.dirtyVertices) { + if (!this.verticesBuffer) { + this.verticesBuffer = gl.createBuffer(); + } + gl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.vertices.subarray(0, this.verticesLength), gl.DYNAMIC_DRAW); + this.dirtyVertices = false; + } + + if (this.dirtyIndices) { + if (!this.indicesBuffer) { + this.indicesBuffer = gl.createBuffer(); + } + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices.subarray(0, this.indicesLength), gl.DYNAMIC_DRAW); + this.dirtyIndices = false; + } + } + + restore () { + this.verticesBuffer = null; + this.indicesBuffer = null; + this.update(); + } + + dispose () { + this.context.removeRestorable(this); + let gl = this.context.gl; + gl.deleteBuffer(this.verticesBuffer); + gl.deleteBuffer(this.indicesBuffer); + } + } + + export class VertexAttribute { + constructor (public name: string, public type: VertexAttributeType, public numElements: number) { } + } + + export class Position2Attribute extends VertexAttribute { + constructor () { + super(Shader.POSITION, VertexAttributeType.Float, 2); + } + } + + export class Position3Attribute extends VertexAttribute { + constructor () { + super(Shader.POSITION, VertexAttributeType.Float, 3); + } + } + + export class TexCoordAttribute extends VertexAttribute { + constructor (unit: number = 0) { + super(Shader.TEXCOORDS + (unit == 0? "": unit), VertexAttributeType.Float, 2); + } + } + + export class ColorAttribute extends VertexAttribute { + constructor () { + super(Shader.COLOR, VertexAttributeType.Float, 4); + } + } + + export class Color2Attribute extends VertexAttribute { + constructor () { + super(Shader.COLOR2, VertexAttributeType.Float, 4); + } + } + + export enum VertexAttributeType { + Float + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/PolygonBatcher.ts b/apps/module-ts/src/spine-ts/webgl/src/PolygonBatcher.ts new file mode 100755 index 0000000..50c8a9e --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/PolygonBatcher.ts @@ -0,0 +1,128 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class PolygonBatcher implements Disposable { + private context: ManagedWebGLRenderingContext; + private drawCalls: number; + private isDrawing = false; + private mesh: Mesh; + private shader: Shader = null; + private lastTexture: GLTexture = null; + private verticesLength = 0; + private indicesLength = 0; + private srcBlend: number; + private dstBlend: number; + + constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint: boolean = true, maxVertices: number = 10920) { + if (maxVertices > 10920) throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); + this.context = context instanceof ManagedWebGLRenderingContext? context : new ManagedWebGLRenderingContext(context); + let attributes = twoColorTint ? + [new Position2Attribute(), new ColorAttribute(), new TexCoordAttribute(), new Color2Attribute()] : + [new Position2Attribute(), new ColorAttribute(), new TexCoordAttribute()]; + this.mesh = new Mesh(context, attributes, maxVertices, maxVertices * 3); + this.srcBlend = this.context.gl.SRC_ALPHA; + this.dstBlend = this.context.gl.ONE_MINUS_SRC_ALPHA; + } + + begin (shader: Shader) { + let gl = this.context.gl; + if (this.isDrawing) throw new Error("PolygonBatch is already drawing. Call PolygonBatch.end() before calling PolygonBatch.begin()"); + this.drawCalls = 0; + this.shader = shader; + this.lastTexture = null; + this.isDrawing = true; + + gl.enable(gl.BLEND); + gl.blendFunc(this.srcBlend, this.dstBlend); + } + + setBlendMode (srcBlend: number, dstBlend: number) { + let gl = this.context.gl; + this.srcBlend = srcBlend; + this.dstBlend = dstBlend; + if (this.isDrawing) { + this.flush(); + gl.blendFunc(this.srcBlend, this.dstBlend); + } + } + + draw (texture: GLTexture, vertices: ArrayLike, indices: Array) { + if (texture != this.lastTexture) { + this.flush(); + this.lastTexture = texture; + } else if (this.verticesLength + vertices.length > this.mesh.getVertices().length || + this.indicesLength + indices.length > this.mesh.getIndices().length) { + this.flush(); + } + + let indexStart = this.mesh.numVertices(); + this.mesh.getVertices().set(vertices, this.verticesLength); + this.verticesLength += vertices.length; + this.mesh.setVerticesLength(this.verticesLength) + + let indicesArray = this.mesh.getIndices(); + for (let i = this.indicesLength, j = 0; j < indices.length; i++, j++) + indicesArray[i] = indices[j] + indexStart; + this.indicesLength += indices.length; + this.mesh.setIndicesLength(this.indicesLength); + } + + private flush () { + let gl = this.context.gl; + if (this.verticesLength == 0) return; + + this.lastTexture.bind(); + this.mesh.draw(this.shader, gl.TRIANGLES); + + this.verticesLength = 0; + this.indicesLength = 0; + this.mesh.setVerticesLength(0); + this.mesh.setIndicesLength(0); + this.drawCalls++; + } + + end () { + let gl = this.context.gl; + if (!this.isDrawing) throw new Error("PolygonBatch is not drawing. Call PolygonBatch.begin() before calling PolygonBatch.end()"); + if (this.verticesLength > 0 || this.indicesLength > 0) this.flush(); + this.shader = null; + this.lastTexture = null; + this.isDrawing = false; + + gl.disable(gl.BLEND); + } + + getDrawCalls () { return this.drawCalls; } + + dispose () { + this.mesh.dispose(); + } + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/SceneRenderer.ts b/apps/module-ts/src/spine-ts/webgl/src/SceneRenderer.ts new file mode 100755 index 0000000..4260367 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/SceneRenderer.ts @@ -0,0 +1,510 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class SceneRenderer implements Disposable { + context: ManagedWebGLRenderingContext; + canvas: HTMLCanvasElement; + camera: OrthoCamera; + batcher: PolygonBatcher; + private twoColorTint = false; + private batcherShader: Shader; + private shapes: ShapeRenderer; + private shapesShader: Shader; + private activeRenderer: PolygonBatcher | ShapeRenderer | SkeletonDebugRenderer = null; + skeletonRenderer: SkeletonRenderer; + skeletonDebugRenderer: SkeletonDebugRenderer; + private QUAD = [ + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, + ]; + private QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + private WHITE = new Color(1, 1, 1, 1); + + constructor (canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint: boolean = true) { + this.canvas = canvas; + this.context = context instanceof ManagedWebGLRenderingContext? context : new ManagedWebGLRenderingContext(context); + this.twoColorTint = twoColorTint; + this.camera = new OrthoCamera(canvas.width, canvas.height); + this.batcherShader = twoColorTint ? Shader.newTwoColoredTextured(this.context) : Shader.newColoredTextured(this.context); + this.batcher = new PolygonBatcher(this.context, twoColorTint); + this.shapesShader = Shader.newColored(this.context); + this.shapes = new ShapeRenderer(this.context); + this.skeletonRenderer = new SkeletonRenderer(this.context, twoColorTint); + this.skeletonDebugRenderer = new SkeletonDebugRenderer(this.context); + } + + begin () { + this.camera.update(); + this.enableRenderer(this.batcher); + } + + drawSkeleton (skeleton: Skeleton, premultipliedAlpha = false, slotRangeStart = -1, slotRangeEnd = -1) { + this.enableRenderer(this.batcher); + this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha; + this.skeletonRenderer.draw(this.batcher, skeleton, slotRangeStart, slotRangeEnd); + } + + drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha = false, ignoredBones: Array = null) { + this.enableRenderer(this.shapes); + this.skeletonDebugRenderer.premultipliedAlpha = premultipliedAlpha; + this.skeletonDebugRenderer.draw(this.shapes, skeleton, ignoredBones); + } + + drawTexture (texture: GLTexture, x: number, y: number, width: number, height: number, color: Color = null) { + this.enableRenderer(this.batcher); + if (color === null) color = this.WHITE; + let quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + } + + drawTextureUV (texture: GLTexture, x: number, y: number, width: number, height: number, u: number, v: number, u2: number, v2: number, color: Color = null) { + this.enableRenderer(this.batcher); + if (color === null) color = this.WHITE; + let quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u; + quad[i++] = v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u2; + quad[i++] = v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u2; + quad[i++] = v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = u; + quad[i++] = v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + } + + drawTextureRotated (texture: GLTexture, x: number, y: number, width: number, height: number, pivotX: number, pivotY: number, angle: number, color: Color = null, premultipliedAlpha: boolean = false) { + this.enableRenderer(this.batcher); + if (color === null) color = this.WHITE; + let quad = this.QUAD; + + // bottom left and top right corner points relative to origin + let worldOriginX = x + pivotX; + let worldOriginY = y + pivotY; + let fx = -pivotX; + let fy = -pivotY; + let fx2 = width - pivotX; + let fy2 = height - pivotY; + + // construct corner points, start from top left and go counter clockwise + let p1x = fx; + let p1y = fy; + let p2x = fx; + let p2y = fy2; + let p3x = fx2; + let p3y = fy2; + let p4x = fx2; + let p4y = fy; + + let x1 = 0; + let y1 = 0; + let x2 = 0; + let y2 = 0; + let x3 = 0; + let y3 = 0; + let x4 = 0; + let y4 = 0; + + // rotate + if (angle != 0) { + let cos = MathUtils.cosDeg(angle); + let sin = MathUtils.sinDeg(angle); + + x1 = cos * p1x - sin * p1y; + y1 = sin * p1x + cos * p1y; + + x4 = cos * p2x - sin * p2y; + y4 = sin * p2x + cos * p2y; + + x3 = cos * p3x - sin * p3y; + y3 = sin * p3x + cos * p3y; + + x2 = x3 + (x1 - x4); + y2 = y3 + (y1 - y4); + } else { + x1 = p1x; + y1 = p1y; + + x4 = p2x; + y4 = p2y; + + x3 = p3x; + y3 = p3y; + + x2 = p4x; + y2 = p4y; + } + + x1 += worldOriginX; + y1 += worldOriginY; + x2 += worldOriginX; + y2 += worldOriginY; + x3 += worldOriginX; + y3 += worldOriginY; + x4 += worldOriginX; + y4 += worldOriginY; + + var i = 0; + quad[i++] = x1; + quad[i++] = y1; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x2; + quad[i++] = y2; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 1; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x3; + quad[i++] = y3; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 1; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x4; + quad[i++] = y4; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = 0; + quad[i++] = 0; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); + } + + drawRegion (region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color: Color = null, premultipliedAlpha: boolean = false) { + this.enableRenderer(this.batcher); + if (color === null) color = this.WHITE; + let quad = this.QUAD; + var i = 0; + quad[i++] = x; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u; + quad[i++] = region.v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u2; + quad[i++] = region.v2; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x + width; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u2; + quad[i++] = region.v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + quad[i++] = x; + quad[i++] = y + height; + quad[i++] = color.r; + quad[i++] = color.g; + quad[i++] = color.b; + quad[i++] = color.a; + quad[i++] = region.u; + quad[i++] = region.v; + if (this.twoColorTint) { + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + quad[i++] = 0; + } + this.batcher.draw(region.texture, quad, this.QUAD_TRIANGLES); + } + + line (x: number, y: number, x2: number, y2: number, color: Color = null, color2: Color = null) { + this.enableRenderer(this.shapes); + this.shapes.line(x, y, x2, y2, color); + } + + triangle (filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color: Color = null, color2: Color = null, color3: Color = null) { + this.enableRenderer(this.shapes); + this.shapes.triangle(filled, x, y, x2, y2, x3, y3, color, color2, color3); + } + + quad (filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number, color: Color = null, color2: Color = null, color3: Color = null, color4: Color = null) { + this.enableRenderer(this.shapes); + this.shapes.quad(filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4); + } + + rect (filled: boolean, x: number, y: number, width: number, height: number, color: Color = null) { + this.enableRenderer(this.shapes); + this.shapes.rect(filled, x, y, width, height, color); + } + + rectLine (filled: boolean, x1: number, y1: number, x2: number, y2: number, width: number, color: Color = null) { + this.enableRenderer(this.shapes); + this.shapes.rectLine(filled, x1, y1, x2, y2, width, color); + } + + polygon (polygonVertices: ArrayLike, offset: number, count: number, color: Color = null) { + this.enableRenderer(this.shapes); + this.shapes.polygon(polygonVertices, offset, count, color); + } + + circle (filled: boolean, x: number, y: number, radius: number, color: Color = null, segments: number = 0) { + this.enableRenderer(this.shapes); + this.shapes.circle(filled, x, y, radius, color, segments); + } + + curve (x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, segments: number, color: Color = null) { + this.enableRenderer(this.shapes); + this.shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color); + } + + end () { + if (this.activeRenderer === this.batcher) this.batcher.end(); + else if (this.activeRenderer === this.shapes) this.shapes.end(); + this.activeRenderer = null; + } + + resize (resizeMode: ResizeMode) { + let canvas = this.canvas; + var w = canvas.clientWidth; + var h = canvas.clientHeight; + if (canvas.width != w || canvas.height != h) { + canvas.width = w; + canvas.height = h; + } + this.context.gl.viewport(0, 0, canvas.width, canvas.height); + + if (resizeMode === ResizeMode.Stretch) { + // nothing to do, we simply apply the viewport size of the camera + } else if (resizeMode === ResizeMode.Expand) { + this.camera.setViewport(w, h); + } else if (resizeMode === ResizeMode.Fit) { + let sourceWidth = canvas.width, sourceHeight = canvas.height; + let targetWidth = this.camera.viewportWidth, targetHeight = this.camera.viewportHeight; + let targetRatio = targetHeight / targetWidth; + let sourceRatio = sourceHeight / sourceWidth; + let scale = targetRatio < sourceRatio ? targetWidth / sourceWidth : targetHeight / sourceHeight; + this.camera.viewportWidth = sourceWidth * scale; + this.camera.viewportHeight = sourceHeight * scale; + } + this.camera.update(); + } + + private enableRenderer(renderer: PolygonBatcher | ShapeRenderer | SkeletonDebugRenderer) { + if (this.activeRenderer === renderer) return; + this.end(); + if (renderer instanceof PolygonBatcher) { + this.batcherShader.bind(); + this.batcherShader.setUniform4x4f(Shader.MVP_MATRIX, this.camera.projectionView.values); + this.batcherShader.setUniformi("u_texture", 0); + this.batcher.begin(this.batcherShader); + this.activeRenderer = this.batcher; + } else if (renderer instanceof ShapeRenderer) { + this.shapesShader.bind(); + this.shapesShader.setUniform4x4f(Shader.MVP_MATRIX, this.camera.projectionView.values); + this.shapes.begin(this.shapesShader); + this.activeRenderer = this.shapes; + } else { + this.activeRenderer = this.skeletonDebugRenderer; + } + } + + dispose () { + this.batcher.dispose(); + this.batcherShader.dispose(); + this.shapes.dispose(); + this.shapesShader.dispose(); + this.skeletonDebugRenderer.dispose(); + } + } + + export enum ResizeMode { + Stretch, + Expand, + Fit + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/Shader.ts b/apps/module-ts/src/spine-ts/webgl/src/Shader.ts new file mode 100755 index 0000000..1efe4f5 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/Shader.ts @@ -0,0 +1,293 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class Shader implements Disposable, Restorable { + public static MVP_MATRIX = "u_projTrans"; + public static POSITION = "a_position"; + public static COLOR = "a_color"; + public static COLOR2 = "a_color2"; + public static TEXCOORDS = "a_texCoords"; + public static SAMPLER = "u_texture"; + + private context: ManagedWebGLRenderingContext; + private vs: WebGLShader = null; + private vsSource: string; + private fs: WebGLShader = null; + private fsSource: string; + private program: WebGLProgram = null; + private tmp2x2: Float32Array = new Float32Array(2 * 2); + private tmp3x3: Float32Array = new Float32Array(3 * 3); + private tmp4x4: Float32Array = new Float32Array(4 * 4); + + public getProgram () { return this.program; } + public getVertexShader () { return this.vertexShader; } + public getFragmentShader () { return this.fragmentShader; } + public getVertexShaderSource () { return this.vsSource; } + public getFragmentSource () { return this.fsSource; } + + constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, private vertexShader: string, private fragmentShader: string) { + this.vsSource = vertexShader; + this.fsSource = fragmentShader; + this.context = context instanceof ManagedWebGLRenderingContext? context : new ManagedWebGLRenderingContext(context); + this.context.addRestorable(this); + this.compile(); + } + + private compile () { + let gl = this.context.gl; + try { + this.vs = this.compileShader(gl.VERTEX_SHADER, this.vertexShader); + this.fs = this.compileShader(gl.FRAGMENT_SHADER, this.fragmentShader); + this.program = this.compileProgram(this.vs, this.fs); + } catch (e) { + this.dispose(); + throw e; + } + } + + private compileShader (type: number, source: string) { + let gl = this.context.gl; + let shader = gl.createShader(type); + gl.shaderSource(shader, source); + gl.compileShader(shader); + if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { + let error = "Couldn't compile shader: " + gl.getShaderInfoLog(shader); + gl.deleteShader(shader); + if (!gl.isContextLost()) throw new Error(error); + } + return shader; + } + + private compileProgram (vs: WebGLShader, fs: WebGLShader) { + let gl = this.context.gl; + let program = gl.createProgram(); + gl.attachShader(program, vs); + gl.attachShader(program, fs); + gl.linkProgram(program); + + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + let error = "Couldn't compile shader program: " + gl.getProgramInfoLog(program); + gl.deleteProgram(program); + if (!gl.isContextLost()) throw new Error(error); + } + return program; + } + + restore () { + this.compile(); + } + + public bind () { + this.context.gl.useProgram(this.program); + } + + public unbind () { + this.context.gl.useProgram(null); + } + + public setUniformi (uniform: string, value: number) { + this.context.gl.uniform1i(this.getUniformLocation(uniform), value); + } + + public setUniformf (uniform: string, value: number) { + this.context.gl.uniform1f(this.getUniformLocation(uniform), value); + } + + public setUniform2f (uniform: string, value: number, value2: number) { + this.context.gl.uniform2f(this.getUniformLocation(uniform), value, value2); + } + + public setUniform3f (uniform: string, value: number, value2: number, value3: number) { + this.context.gl.uniform3f(this.getUniformLocation(uniform), value, value2, value3); + } + + public setUniform4f (uniform: string, value: number, value2: number, value3: number, value4: number) { + this.context.gl.uniform4f(this.getUniformLocation(uniform), value, value2, value3, value4); + } + + public setUniform2x2f (uniform: string, value: ArrayLike) { + let gl = this.context.gl; + this.tmp2x2.set(value); + gl.uniformMatrix2fv(this.getUniformLocation(uniform), false, this.tmp2x2); + } + + public setUniform3x3f (uniform: string, value: ArrayLike) { + let gl = this.context.gl; + this.tmp3x3.set(value); + gl.uniformMatrix3fv(this.getUniformLocation(uniform), false, this.tmp3x3); + } + + public setUniform4x4f (uniform: string, value: ArrayLike) { + let gl = this.context.gl; + this.tmp4x4.set(value); + gl.uniformMatrix4fv(this.getUniformLocation(uniform), false, this.tmp4x4); + } + + public getUniformLocation (uniform: string): WebGLUniformLocation { + let gl = this.context.gl; + let location = gl.getUniformLocation(this.program, uniform); + if (!location && !gl.isContextLost()) throw new Error(`Couldn't find location for uniform ${uniform}`); + return location; + } + + public getAttributeLocation (attribute: string): number { + let gl = this.context.gl; + let location = gl.getAttribLocation(this.program, attribute); + if (location == -1 && !gl.isContextLost()) throw new Error(`Couldn't find location for attribute ${attribute}`); + return location; + } + + public dispose () { + this.context.removeRestorable(this); + + let gl = this.context.gl; + if (this.vs) { + gl.deleteShader(this.vs); + this.vs = null; + } + + if (this.fs) { + gl.deleteShader(this.fs); + this.fs = null; + } + + if (this.program) { + gl.deleteProgram(this.program); + this.program = null; + } + } + + public static newColoredTextured (context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader { + let vs = ` + attribute vec4 ${Shader.POSITION}; + attribute vec4 ${Shader.COLOR}; + attribute vec2 ${Shader.TEXCOORDS}; + uniform mat4 ${Shader.MVP_MATRIX}; + varying vec4 v_color; + varying vec2 v_texCoords; + + void main () { + v_color = ${Shader.COLOR}; + v_texCoords = ${Shader.TEXCOORDS}; + gl_Position = ${Shader.MVP_MATRIX} * ${Shader.POSITION}; + } + `; + + let fs = ` + #ifdef GL_ES + #define LOWP lowp + precision mediump float; + #else + #define LOWP + #endif + varying LOWP vec4 v_color; + varying vec2 v_texCoords; + uniform sampler2D u_texture; + + void main () { + gl_FragColor = v_color * texture2D(u_texture, v_texCoords); + } + `; + + return new Shader(context, vs, fs); + } + + public static newTwoColoredTextured (context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader { + let vs = ` + attribute vec4 ${Shader.POSITION}; + attribute vec4 ${Shader.COLOR}; + attribute vec4 ${Shader.COLOR2}; + attribute vec2 ${Shader.TEXCOORDS}; + uniform mat4 ${Shader.MVP_MATRIX}; + varying vec4 v_light; + varying vec4 v_dark; + varying vec2 v_texCoords; + + void main () { + v_light = ${Shader.COLOR}; + v_dark = ${Shader.COLOR2}; + v_texCoords = ${Shader.TEXCOORDS}; + gl_Position = ${Shader.MVP_MATRIX} * ${Shader.POSITION}; + } + `; + + let fs = ` + #ifdef GL_ES + #define LOWP lowp + precision mediump float; + #else + #define LOWP + #endif + varying LOWP vec4 v_light; + varying LOWP vec4 v_dark; + varying vec2 v_texCoords; + uniform sampler2D u_texture; + + void main () { + vec4 texColor = texture2D(u_texture, v_texCoords); + gl_FragColor.a = texColor.a * v_light.a; + gl_FragColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb; + } + `; + + return new Shader(context, vs, fs); + } + + public static newColored (context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader { + let vs = ` + attribute vec4 ${Shader.POSITION}; + attribute vec4 ${Shader.COLOR}; + uniform mat4 ${Shader.MVP_MATRIX}; + varying vec4 v_color; + + void main () { + v_color = ${Shader.COLOR}; + gl_Position = ${Shader.MVP_MATRIX} * ${Shader.POSITION}; + } + `; + + let fs = ` + #ifdef GL_ES + #define LOWP lowp + precision mediump float; + #else + #define LOWP + #endif + varying LOWP vec4 v_color; + + void main () { + gl_FragColor = v_color; + } + `; + + return new Shader(context, vs, fs); + } + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/ShapeRenderer.ts b/apps/module-ts/src/spine-ts/webgl/src/ShapeRenderer.ts new file mode 100755 index 0000000..c3b5aaf --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/ShapeRenderer.ts @@ -0,0 +1,344 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class ShapeRenderer implements Disposable { + private context: ManagedWebGLRenderingContext; + private isDrawing = false; + private mesh: Mesh; + private shapeType = ShapeType.Filled; + private color = new Color(1, 1, 1, 1); + private shader: Shader; + private vertexIndex = 0; + private tmp = new Vector2(); + private srcBlend: number; + private dstBlend: number; + + constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, maxVertices: number = 10920) { + if (maxVertices > 10920) throw new Error("Can't have more than 10920 triangles per batch: " + maxVertices); + this.context = context instanceof ManagedWebGLRenderingContext? context : new ManagedWebGLRenderingContext(context); + this.mesh = new Mesh(context, [new Position2Attribute(), new ColorAttribute()], maxVertices, 0); + this.srcBlend = this.context.gl.SRC_ALPHA; + this.dstBlend = this.context.gl.ONE_MINUS_SRC_ALPHA; + } + + begin (shader: Shader) { + if (this.isDrawing) throw new Error("ShapeRenderer.begin() has already been called"); + this.shader = shader; + this.vertexIndex = 0; + this.isDrawing = true; + + let gl = this.context.gl; + gl.enable(gl.BLEND); + gl.blendFunc(this.srcBlend, this.dstBlend); + } + + setBlendMode (srcBlend: number, dstBlend: number) { + let gl = this.context.gl; + this.srcBlend = srcBlend; + this.dstBlend = dstBlend; + if (this.isDrawing) { + this.flush(); + gl.blendFunc(this.srcBlend, this.dstBlend); + } + } + + setColor (color: Color) { + this.color.setFromColor(color); + } + + setColorWith (r: number, g: number, b: number, a: number) { + this.color.set(r, g, b, a); + } + + point (x: number, y: number, color: Color = null) { + this.check(ShapeType.Point, 1); + if (color === null) color = this.color; + this.vertex(x, y, color); + } + + line (x: number, y: number, x2: number, y2: number, color: Color = null) { + this.check(ShapeType.Line, 2); + let vertices = this.mesh.getVertices(); + let idx = this.vertexIndex; + if (color === null) color = this.color; + this.vertex(x, y, color); + this.vertex(x2, y2, color); + } + + triangle (filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color: Color = null, color2: Color = null, color3: Color = null) { + this.check(filled ? ShapeType.Filled : ShapeType.Line, 3); + let vertices = this.mesh.getVertices(); + let idx = this.vertexIndex; + if (color === null) color = this.color; + if (color2 === null) color2 = this.color; + if (color3 === null) color3 = this.color; + if (filled) { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + this.vertex(x3, y3, color3); + } else { + this.vertex(x, y, color); + this.vertex(x2, y2, color2); + + this.vertex(x2, y2, color); + this.vertex(x3, y3, color2); + + this.vertex(x3, y3, color); + this.vertex(x, y, color2); + } + } + + quad (filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number, color: Color = null, color2: Color = null, color3: Color = null, color4: Color = null) { + this.check(filled ? ShapeType.Filled : ShapeType.Line, 3); + let vertices = this.mesh.getVertices(); + let idx = this.vertexIndex; + if (color === null) color = this.color; + if (color2 === null) color2 = this.color; + if (color3 === null) color3 = this.color; + if (color4 === null) color4 = this.color; + if (filled) { + this.vertex(x, y, color); this.vertex(x2, y2, color2); this.vertex(x3, y3, color3); + this.vertex(x3, y3, color3); this.vertex(x4, y4, color4); this.vertex(x, y, color); + } else { + this.vertex(x, y, color); this.vertex(x2, y2, color2); + this.vertex(x2, y2, color2); this.vertex(x3, y3, color3); + this.vertex(x3, y3, color3); this.vertex(x4, y4, color4); + this.vertex(x4, y4, color4); this.vertex(x, y, color); + } + } + + rect (filled: boolean, x: number, y: number, width: number, height: number, color: Color = null) { + this.quad(filled, x, y, x + width, y, x + width, y + height, x, y + height, color, color, color, color); + } + + rectLine (filled: boolean, x1: number, y1: number, x2: number, y2: number, width: number, color: Color = null) { + this.check(filled ? ShapeType.Filled : ShapeType.Line, 8); + if (color === null) color = this.color; + let t = this.tmp.set(y2 - y1, x1 - x2); + t.normalize(); + width *= 0.5; + let tx = t.x * width; + let ty = t.y * width; + if (!filled) { + this.vertex(x1 + tx, y1 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x2 - tx, y2 - ty, color); + + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x1 + tx, y1 + ty, color); + + this.vertex(x2 - tx, y2 - ty, color); + this.vertex(x1 - tx, y1 - ty, color); + } else { + this.vertex(x1 + tx, y1 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + + this.vertex(x2 - tx, y2 - ty, color); + this.vertex(x2 + tx, y2 + ty, color); + this.vertex(x1 - tx, y1 - ty, color); + } + } + + x (x: number, y: number, size: number) { + this.line(x - size, y - size, x + size, y + size); + this.line(x - size, y + size, x + size, y - size); + } + + polygon (polygonVertices: ArrayLike, offset: number, count: number, color: Color = null) { + if (count < 3) throw new Error("Polygon must contain at least 3 vertices"); + this.check(ShapeType.Line, count * 2); + if (color === null) color = this.color; + let vertices = this.mesh.getVertices(); + let idx = this.vertexIndex; + + offset <<= 1; + count <<= 1; + + let firstX = polygonVertices[offset]; + let firstY = polygonVertices[offset + 1]; + let last = offset + count; + + for (let i = offset, n = offset + count - 2; i < n; i += 2) { + let x1 = polygonVertices[i]; + let y1 = polygonVertices[i+1]; + + let x2 = 0; + let y2 = 0; + + if (i + 2 >= last) { + x2 = firstX; + y2 = firstY; + } else { + x2 = polygonVertices[i + 2]; + y2 = polygonVertices[i + 3]; + } + + this.vertex(x1, y1, color); + this.vertex(x2, y2, color); + } + } + + circle (filled: boolean, x: number, y: number, radius: number, color: Color = null, segments: number = 0) { + if (segments === 0) segments = Math.max(1, (6 * MathUtils.cbrt(radius)) | 0); + if (segments <= 0) throw new Error("segments must be > 0."); + if (color === null) color = this.color; + let angle = 2 * MathUtils.PI / segments; + let cos = Math.cos(angle); + let sin = Math.sin(angle); + let cx = radius, cy = 0; + if (!filled) { + this.check(ShapeType.Line, segments * 2 + 2); + for (let i = 0; i < segments; i++) { + this.vertex(x + cx, y + cy, color); + let temp = cx; + cx = cos * cx - sin * cy; + cy = sin * temp + cos * cy; + this.vertex(x + cx, y + cy, color); + } + // Ensure the last segment is identical to the first. + this.vertex(x + cx, y + cy, color); + } else { + this.check(ShapeType.Filled, segments * 3 + 3); + segments--; + for (let i = 0; i < segments; i++) { + this.vertex(x, y, color); + this.vertex(x + cx, y + cy, color); + let temp = cx; + cx = cos * cx - sin * cy; + cy = sin * temp + cos * cy; + this.vertex(x + cx, y + cy, color); + } + // Ensure the last segment is identical to the first. + this.vertex(x, y, color); + this.vertex(x + cx, y + cy, color); + } + + let temp = cx; + cx = radius; + cy = 0; + this.vertex(x + cx, y + cy, color); + } + + curve (x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, segments: number, color: Color = null) { + this.check(ShapeType.Line, segments * 2 + 2); + if (color === null) color = this.color; + + // Algorithm from: http://www.antigrain.com/research/bezier_interpolation/index.html#PAGE_BEZIER_INTERPOLATION + let subdiv_step = 1 / segments; + let subdiv_step2 = subdiv_step * subdiv_step; + let subdiv_step3 = subdiv_step * subdiv_step * subdiv_step; + + let pre1 = 3 * subdiv_step; + let pre2 = 3 * subdiv_step2; + let pre4 = 6 * subdiv_step2; + let pre5 = 6 * subdiv_step3; + + let tmp1x = x1 - cx1 * 2 + cx2; + let tmp1y = y1 - cy1 * 2 + cy2; + + let tmp2x = (cx1 - cx2) * 3 - x1 + x2; + let tmp2y = (cy1 - cy2) * 3 - y1 + y2; + + let fx = x1; + let fy = y1; + + let dfx = (cx1 - x1) * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + let dfy = (cy1 - y1) * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + + let ddfx = tmp1x * pre4 + tmp2x * pre5; + let ddfy = tmp1y * pre4 + tmp2y * pre5; + + let dddfx = tmp2x * pre5; + let dddfy = tmp2y * pre5; + + while (segments-- > 0) { + this.vertex(fx, fy, color); + fx += dfx; + fy += dfy; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + this.vertex(fx, fy, color); + } + this.vertex(fx, fy, color); + this.vertex(x2, y2, color); + } + + private vertex (x: number, y: number, color: Color) { + let idx = this.vertexIndex; + let vertices = this.mesh.getVertices(); + vertices[idx++] = x; + vertices[idx++] = y; + vertices[idx++] = color.r; + vertices[idx++] = color.g; + vertices[idx++] = color.b; + vertices[idx++] = color.a; + this.vertexIndex = idx; + } + + end () { + if (!this.isDrawing) throw new Error("ShapeRenderer.begin() has not been called"); + this.flush(); + this.context.gl.disable(this.context.gl.BLEND); + this.isDrawing = false; + } + + private flush () { + if (this.vertexIndex == 0) return; + this.mesh.setVerticesLength(this.vertexIndex); + this.mesh.draw(this.shader, this.shapeType); + this.vertexIndex = 0; + } + + private check(shapeType: ShapeType, numVertices: number) { + if (!this.isDrawing) throw new Error("ShapeRenderer.begin() has not been called"); + if (this.shapeType == shapeType) { + if (this.mesh.maxVertices() - this.mesh.numVertices() < numVertices) this.flush(); + else return; + } else { + this.flush(); + this.shapeType = shapeType; + } + } + + dispose () { + this.mesh.dispose(); + } + } + + export enum ShapeType { + Point = 0x0000, + Line = 0x0001, + Filled = 0x0004 + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/SkeletonDebugRenderer.ts b/apps/module-ts/src/spine-ts/webgl/src/SkeletonDebugRenderer.ts new file mode 100755 index 0000000..e3c0a55 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/SkeletonDebugRenderer.ts @@ -0,0 +1,225 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class SkeletonDebugRenderer implements Disposable { + boneLineColor = new Color(1, 0, 0, 1); + boneOriginColor = new Color(0, 1, 0, 1); + attachmentLineColor = new Color(0, 0, 1, 0.5); + triangleLineColor = new Color(1, 0.64, 0, 0.5); + pathColor = new Color().setFromString("FF7F00"); + clipColor = new Color(0.8, 0, 0, 2); + aabbColor = new Color(0, 1, 0, 0.5); + drawBones = true; + drawRegionAttachments = true; + drawBoundingBoxes = true; + drawMeshHull = true; + drawMeshTriangles = true; + drawPaths = true; + drawSkeletonXY = false; + drawClipping = true; + premultipliedAlpha = false; + scale = 1; + boneWidth = 2; + + private context: ManagedWebGLRenderingContext; + private bounds = new SkeletonBounds(); + private temp = new Array(); + private vertices = Utils.newFloatArray(2 * 1024); + private static LIGHT_GRAY = new Color(192 / 255, 192 / 255, 192 / 255, 1); + private static GREEN = new Color(0, 1, 0, 1); + + constructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext) { + this.context = context instanceof ManagedWebGLRenderingContext? context : new ManagedWebGLRenderingContext(context); + } + + draw (shapes: ShapeRenderer, skeleton: Skeleton, ignoredBones: Array = null) { + let skeletonX = skeleton.x; + let skeletonY = skeleton.y; + let gl = this.context.gl; + let srcFunc = this.premultipliedAlpha ? gl.ONE : gl.SRC_ALPHA; + shapes.setBlendMode(srcFunc, gl.ONE_MINUS_SRC_ALPHA); + + let bones = skeleton.bones; + if (this.drawBones) { + shapes.setColor(this.boneLineColor); + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) continue; + if (bone.parent == null) continue; + let x = skeletonX + bone.data.length * bone.a + bone.worldX; + let y = skeletonY + bone.data.length * bone.c + bone.worldY; + shapes.rectLine(true, skeletonX + bone.worldX, skeletonY + bone.worldY, x, y, this.boneWidth * this.scale); + } + if (this.drawSkeletonXY) shapes.x(skeletonX, skeletonY, 4 * this.scale); + } + + if (this.drawRegionAttachments) { + shapes.setColor(this.attachmentLineColor); + let slots = skeleton.slots; + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + let attachment = slot.getAttachment(); + if (attachment instanceof RegionAttachment) { + let regionAttachment = attachment; + let vertices = this.vertices; + regionAttachment.computeWorldVertices(slot.bone, vertices, 0, 2); + shapes.line(vertices[0], vertices[1], vertices[2], vertices[3]); + shapes.line(vertices[2], vertices[3], vertices[4], vertices[5]); + shapes.line(vertices[4], vertices[5], vertices[6], vertices[7]); + shapes.line(vertices[6], vertices[7], vertices[0], vertices[1]); + } + } + } + + if (this.drawMeshHull || this.drawMeshTriangles) { + let slots = skeleton.slots; + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + if (!slot.bone.active) continue; + let attachment = slot.getAttachment(); + if (!(attachment instanceof MeshAttachment)) continue; + let mesh = attachment; + let vertices = this.vertices; + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, 2); + let triangles = mesh.triangles; + let hullLength = mesh.hullLength; + if (this.drawMeshTriangles) { + shapes.setColor(this.triangleLineColor); + for (let ii = 0, nn = triangles.length; ii < nn; ii += 3) { + let v1 = triangles[ii] * 2, v2 = triangles[ii + 1] * 2, v3 = triangles[ii + 2] * 2; + shapes.triangle(false, vertices[v1], vertices[v1 + 1], // + vertices[v2], vertices[v2 + 1], // + vertices[v3], vertices[v3 + 1] // + ); + } + } + if (this.drawMeshHull && hullLength > 0) { + shapes.setColor(this.attachmentLineColor); + hullLength = (hullLength >> 1) * 2; + let lastX = vertices[hullLength - 2], lastY = vertices[hullLength - 1]; + for (let ii = 0, nn = hullLength; ii < nn; ii += 2) { + let x = vertices[ii], y = vertices[ii + 1]; + shapes.line(x, y, lastX, lastY); + lastX = x; + lastY = y; + } + } + } + } + + if (this.drawBoundingBoxes) { + let bounds = this.bounds; + bounds.update(skeleton, true); + shapes.setColor(this.aabbColor); + shapes.rect(false, bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight()); + let polygons = bounds.polygons; + let boxes = bounds.boundingBoxes; + for (let i = 0, n = polygons.length; i < n; i++) { + let polygon = polygons[i]; + shapes.setColor(boxes[i].color); + shapes.polygon(polygon, 0, polygon.length); + } + } + + if (this.drawPaths) { + let slots = skeleton.slots; + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + if (!slot.bone.active) continue; + let attachment = slot.getAttachment(); + if (!(attachment instanceof PathAttachment)) continue; + let path = attachment; + let nn = path.worldVerticesLength; + let world = this.temp = Utils.setArraySize(this.temp, nn, 0); + path.computeWorldVertices(slot, 0, nn, world, 0, 2); + let color = this.pathColor; + let x1 = world[2], y1 = world[3], x2 = 0, y2 = 0; + if (path.closed) { + shapes.setColor(color); + let cx1 = world[0], cy1 = world[1], cx2 = world[nn - 2], cy2 = world[nn - 1]; + x2 = world[nn - 4]; + y2 = world[nn - 3]; + shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32); + shapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY); + shapes.line(x1, y1, cx1, cy1); + shapes.line(x2, y2, cx2, cy2); + } + nn -= 4; + for (let ii = 4; ii < nn; ii += 6) { + let cx1 = world[ii], cy1 = world[ii + 1], cx2 = world[ii + 2], cy2 = world[ii + 3]; + x2 = world[ii + 4]; + y2 = world[ii + 5]; + shapes.setColor(color); + shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32); + shapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY); + shapes.line(x1, y1, cx1, cy1); + shapes.line(x2, y2, cx2, cy2); + x1 = x2; + y1 = y2; + } + } + } + + if (this.drawBones) { + shapes.setColor(this.boneOriginColor); + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) continue; + shapes.circle(true, skeletonX + bone.worldX, skeletonY + bone.worldY, 3 * this.scale, SkeletonDebugRenderer.GREEN, 8); + } + } + + if (this.drawClipping) { + let slots = skeleton.slots; + shapes.setColor(this.clipColor) + for (let i = 0, n = slots.length; i < n; i++) { + let slot = slots[i]; + if (!slot.bone.active) continue; + let attachment = slot.getAttachment(); + if (!(attachment instanceof ClippingAttachment)) continue; + let clip = attachment; + let nn = clip.worldVerticesLength; + let world = this.temp = Utils.setArraySize(this.temp, nn, 0); + clip.computeWorldVertices(slot, 0, nn, world, 0, 2); + for (let i = 0, n = world.length; i < n; i+=2) { + let x = world[i]; + let y = world[i + 1]; + let x2 = world[(i + 2) % world.length]; + let y2 = world[(i + 3) % world.length]; + shapes.line(x, y, x2, y2); + } + } + } + } + + dispose () { + } + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/SkeletonRenderer.ts b/apps/module-ts/src/spine-ts/webgl/src/SkeletonRenderer.ts new file mode 100755 index 0000000..680ddf8 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/SkeletonRenderer.ts @@ -0,0 +1,296 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + class Renderable { + constructor(public vertices: ArrayLike, public numVertices: number, public numFloats: number) {} + }; + + export class SkeletonRenderer { + static QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + + premultipliedAlpha = false; + vertexEffect: VertexEffect = null; + private tempColor = new Color(); + private tempColor2 = new Color(); + private vertices:ArrayLike; + private vertexSize = 2 + 2 + 4; + private twoColorTint = false; + private renderable: Renderable = new Renderable(null, 0, 0); + private clipper: SkeletonClipping = new SkeletonClipping(); + private temp = new Vector2(); + private temp2 = new Vector2(); + private temp3 = new Color(); + private temp4 = new Color(); + + constructor (context: ManagedWebGLRenderingContext, twoColorTint: boolean = true) { + this.twoColorTint = twoColorTint; + if (twoColorTint) + this.vertexSize += 4; + this.vertices = Utils.newFloatArray(this.vertexSize * 1024); + } + + draw (batcher: PolygonBatcher, skeleton: Skeleton, slotRangeStart: number = -1, slotRangeEnd: number = -1) { + let clipper = this.clipper; + let premultipliedAlpha = this.premultipliedAlpha; + let twoColorTint = this.twoColorTint; + let blendMode: BlendMode = null; + + let tempPos = this.temp; + let tempUv = this.temp2; + let tempLight = this.temp3; + let tempDark = this.temp4; + + let renderable: Renderable = this.renderable; + let uvs: ArrayLike = null; + let triangles: Array = null; + let drawOrder = skeleton.drawOrder; + let attachmentColor: Color = null; + let skeletonColor = skeleton.color; + let vertexSize = twoColorTint ? 12 : 8; + let inRange = false; + if (slotRangeStart == -1) inRange = true; + for (let i = 0, n = drawOrder.length; i < n; i++) { + let clippedVertexSize = clipper.isClipping() ? 2 : vertexSize; + let slot = drawOrder[i]; + if (!slot.bone.active) { + clipper.clipEndWithSlot(slot); + continue; + } + + if (slotRangeStart >= 0 && slotRangeStart == slot.data.index) { + inRange = true; + } + + if (!inRange) { + clipper.clipEndWithSlot(slot); + continue; + } + + if (slotRangeEnd >= 0 && slotRangeEnd == slot.data.index) { + inRange = false; + } + + let attachment = slot.getAttachment(); + let texture: GLTexture = null; + if (attachment instanceof RegionAttachment) { + let region = attachment; + renderable.vertices = this.vertices; + renderable.numVertices = 4; + renderable.numFloats = clippedVertexSize << 2; + region.computeWorldVertices(slot.bone, renderable.vertices, 0, clippedVertexSize); + triangles = SkeletonRenderer.QUAD_TRIANGLES; + uvs = region.uvs; + texture = (region.region.renderObject).texture; + attachmentColor = region.color; + } else if (attachment instanceof MeshAttachment) { + let mesh = attachment; + renderable.vertices = this.vertices; + renderable.numVertices = (mesh.worldVerticesLength >> 1); + renderable.numFloats = renderable.numVertices * clippedVertexSize; + if (renderable.numFloats > renderable.vertices.length) { + renderable.vertices = this.vertices = spine.Utils.newFloatArray(renderable.numFloats); + } + mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, renderable.vertices, 0, clippedVertexSize); + triangles = mesh.triangles; + texture = (mesh.region.renderObject).texture; + uvs = mesh.uvs; + attachmentColor = mesh.color; + } else if (attachment instanceof ClippingAttachment) { + let clip = (attachment); + clipper.clipStart(slot, clip); + continue; + } else { + clipper.clipEndWithSlot(slot); + continue; + } + + if (texture != null) { + let slotColor = slot.color; + let finalColor = this.tempColor; + finalColor.r = skeletonColor.r * slotColor.r * attachmentColor.r; + finalColor.g = skeletonColor.g * slotColor.g * attachmentColor.g; + finalColor.b = skeletonColor.b * slotColor.b * attachmentColor.b; + finalColor.a = skeletonColor.a * slotColor.a * attachmentColor.a; + if (premultipliedAlpha) { + finalColor.r *= finalColor.a; + finalColor.g *= finalColor.a; + finalColor.b *= finalColor.a; + } + let darkColor = this.tempColor2; + if (slot.darkColor == null) + darkColor.set(0, 0, 0, 1.0); + else { + if (premultipliedAlpha) { + darkColor.r = slot.darkColor.r * finalColor.a; + darkColor.g = slot.darkColor.g * finalColor.a; + darkColor.b = slot.darkColor.b * finalColor.a; + } else { + darkColor.setFromColor(slot.darkColor); + } + darkColor.a = premultipliedAlpha ? 1.0 : 0.0; + } + + let slotBlendMode = slot.data.blendMode; + if (slotBlendMode != blendMode) { + blendMode = slotBlendMode; + batcher.setBlendMode(WebGLBlendModeConverter.getSourceGLBlendMode(blendMode, premultipliedAlpha), WebGLBlendModeConverter.getDestGLBlendMode(blendMode)); + } + + if (clipper.isClipping()) { + clipper.clipTriangles(renderable.vertices, renderable.numFloats, triangles, triangles.length, uvs, finalColor, darkColor, twoColorTint); + let clippedVertices = new Float32Array(clipper.clippedVertices); + let clippedTriangles = clipper.clippedTriangles; + if (this.vertexEffect != null) { + let vertexEffect = this.vertexEffect; + let verts = clippedVertices; + if (!twoColorTint) { + for (let v = 0, n = clippedVertices.length; v < n; v += vertexSize) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.set(verts[v + 2], verts[v + 3], verts[v + 4], verts[v + 5]); + tempUv.x = verts[v + 6]; + tempUv.y = verts[v + 7]; + tempDark.set(0, 0, 0, 0); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y + } + } else { + for (let v = 0, n = clippedVertices.length; v < n; v += vertexSize) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempLight.set(verts[v + 2], verts[v + 3], verts[v + 4], verts[v + 5]); + tempUv.x = verts[v + 6]; + tempUv.y = verts[v + 7]; + tempDark.set(verts[v + 8], verts[v + 9], verts[v + 10], verts[v + 11]); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y + verts[v + 8] = tempDark.r; + verts[v + 9] = tempDark.g; + verts[v + 10] = tempDark.b; + verts[v + 11] = tempDark.a; + } + } + } + batcher.draw(texture, clippedVertices, clippedTriangles); + } else { + let verts = renderable.vertices; + if (this.vertexEffect != null) { + let vertexEffect = this.vertexEffect; + if (!twoColorTint) { + for (let v = 0, u = 0, n = renderable.numFloats; v < n; v += vertexSize, u += 2) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempUv.x = uvs[u]; + tempUv.y = uvs[u + 1] + tempLight.setFromColor(finalColor); + tempDark.set(0, 0, 0, 0); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y + } + } else { + for (let v = 0, u = 0, n = renderable.numFloats; v < n; v += vertexSize, u += 2) { + tempPos.x = verts[v]; + tempPos.y = verts[v + 1]; + tempUv.x = uvs[u]; + tempUv.y = uvs[u + 1] + tempLight.setFromColor(finalColor); + tempDark.setFromColor(darkColor); + vertexEffect.transform(tempPos, tempUv, tempLight, tempDark); + verts[v] = tempPos.x; + verts[v + 1] = tempPos.y; + verts[v + 2] = tempLight.r; + verts[v + 3] = tempLight.g; + verts[v + 4] = tempLight.b; + verts[v + 5] = tempLight.a; + verts[v + 6] = tempUv.x; + verts[v + 7] = tempUv.y + verts[v + 8] = tempDark.r; + verts[v + 9] = tempDark.g; + verts[v + 10] = tempDark.b; + verts[v + 11] = tempDark.a; + } + } + } else { + if (!twoColorTint) { + for (let v = 2, u = 0, n = renderable.numFloats; v < n; v += vertexSize, u += 2) { + verts[v] = finalColor.r; + verts[v + 1] = finalColor.g; + verts[v + 2] = finalColor.b; + verts[v + 3] = finalColor.a; + verts[v + 4] = uvs[u]; + verts[v + 5] = uvs[u + 1]; + } + } else { + for (let v = 2, u = 0, n = renderable.numFloats; v < n; v += vertexSize, u += 2) { + verts[v] = finalColor.r; + verts[v + 1] = finalColor.g; + verts[v + 2] = finalColor.b; + verts[v + 3] = finalColor.a; + verts[v + 4] = uvs[u]; + verts[v + 5] = uvs[u + 1]; + verts[v + 6] = darkColor.r; + verts[v + 7] = darkColor.g; + verts[v + 8] = darkColor.b; + verts[v + 9] = darkColor.a; + } + } + } + let view = (renderable.vertices as Float32Array).subarray(0, renderable.numFloats); + batcher.draw(texture, view, triangles); + } + } + + clipper.clipEndWithSlot(slot); + } + clipper.clipEnd(); + } + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/Vector3.ts b/apps/module-ts/src/spine-ts/webgl/src/Vector3.ts new file mode 100755 index 0000000..86af5a1 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/Vector3.ts @@ -0,0 +1,121 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class Vector3 { + x = 0; + y = 0; + z = 0; + + constructor (x: number = 0, y: number = 0, z: number = 0) { + this.x = x; + this.y = y; + this.z = z; + } + + setFrom(v: Vector3): Vector3 { + this.x = v.x; + this.y = v.y; + this.z = v.z; + return this; + } + + set (x: number, y: number, z: number): Vector3 { + this.x = x; + this.y = y; + this.z = z; + return this; + } + + add (v: Vector3): Vector3 { + this.x += v.x; + this.y += v.y; + this.z += v.z; + return this; + } + + sub (v: Vector3): Vector3 { + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + return this; + } + + scale (s: number): Vector3 { + this.x *= s; + this.y *= s; + this.z *= s; + return this; + } + + normalize (): Vector3 { + let len = this.length(); + if (len == 0) return this; + len = 1 / len; + this.x *= len; + this.y *= len; + this.z *= len; + return this; + } + + cross (v: Vector3): Vector3 { + return this.set(this.y * v.z - this.z * v.y, this.z * v.x - this.x * v.z, this.x * v.y - this.y * v.x) + } + + multiply (matrix: Matrix4): Vector3 { + let l_mat = matrix.values; + return this.set(this.x * l_mat[M00] + this.y * l_mat[M01] + this.z * l_mat[M02] + l_mat[M03], + this.x * l_mat[M10] + this.y * l_mat[M11] + this.z * l_mat[M12] + l_mat[M13], + this.x * l_mat[M20] + this.y * l_mat[M21] + this.z * l_mat[M22] + l_mat[M23]); + } + + project (matrix: Matrix4): Vector3 { + let l_mat = matrix.values; + let l_w = 1 / (this.x * l_mat[M30] + this.y * l_mat[M31] + this.z * l_mat[M32] + l_mat[M33]); + return this.set((this.x * l_mat[M00] + this.y * l_mat[M01] + this.z * l_mat[M02] + l_mat[M03]) * l_w, + (this.x * l_mat[M10] + this.y * l_mat[M11] + this.z * l_mat[M12] + l_mat[M13]) * l_w, + (this.x * l_mat[M20] + this.y * l_mat[M21] + this.z * l_mat[M22] + l_mat[M23]) * l_w); + } + + dot (v: Vector3): number { + return this.x * v.x + this.y * v.y + this.z * v.z; + } + + length (): number { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + } + + distance (v: Vector3): number { + let a = v.x - this.x; + let b = v.y - this.y; + let c = v.z - this.z; + return Math.sqrt(a * a + b * b + c * c); + } + } +} diff --git a/apps/module-ts/src/spine-ts/webgl/src/WebGL.ts b/apps/module-ts/src/spine-ts/webgl/src/WebGL.ts new file mode 100755 index 0000000..5461a69 --- /dev/null +++ b/apps/module-ts/src/spine-ts/webgl/src/WebGL.ts @@ -0,0 +1,103 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated January 1, 2020. Replaces all prior versions. + * + * Copyright (c) 2013-2020, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +module spine.webgl { + export class ManagedWebGLRenderingContext { + public canvas: HTMLCanvasElement | OffscreenCanvas; + public gl: WebGLRenderingContext; + private restorables = new Array(); + + constructor(canvasOrContext: HTMLCanvasElement | WebGLRenderingContext | EventTarget | WebGL2RenderingContext, contextConfig: any = { alpha: "true" }) { + if (!((canvasOrContext instanceof WebGLRenderingContext) || (canvasOrContext instanceof WebGL2RenderingContext))) { + this.setupCanvas(canvasOrContext, contextConfig); + } else { + this.gl = canvasOrContext; + this.canvas = this.gl.canvas; + } + } + + private setupCanvas(canvas: any, contextConfig: any) { + this.gl = (canvas.getContext("webgl2", contextConfig) || canvas.getContext("webgl", contextConfig)); + this.canvas = canvas; + canvas.addEventListener("webglcontextlost", (e: any) => { + let event = e; + if (e) { + e.preventDefault(); + } + }); + + canvas.addEventListener("webglcontextrestored", (e: any) => { + for (let i = 0, n = this.restorables.length; i < n; i++) { + this.restorables[i].restore(); + } + }); + } + + addRestorable(restorable: Restorable) { + this.restorables.push(restorable); + } + + removeRestorable(restorable: Restorable) { + let index = this.restorables.indexOf(restorable); + if (index > -1) this.restorables.splice(index, 1); + } + } + + export class WebGLBlendModeConverter { + static ZERO = 0; + static ONE = 1; + static SRC_COLOR = 0x0300; + static ONE_MINUS_SRC_COLOR = 0x0301; + static SRC_ALPHA = 0x0302; + static ONE_MINUS_SRC_ALPHA = 0x0303; + static DST_ALPHA = 0x0304; + static ONE_MINUS_DST_ALPHA = 0x0305; + static DST_COLOR = 0x0306 + + static getDestGLBlendMode (blendMode: BlendMode) { + switch(blendMode) { + case BlendMode.Normal: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + case BlendMode.Additive: return WebGLBlendModeConverter.ONE; + case BlendMode.Multiply: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + case BlendMode.Screen: return WebGLBlendModeConverter.ONE_MINUS_SRC_ALPHA; + default: throw new Error("Unknown blend mode: " + blendMode); + } + } + + static getSourceGLBlendMode (blendMode: BlendMode, premultipliedAlpha: boolean = false) { + switch(blendMode) { + case BlendMode.Normal: return premultipliedAlpha? WebGLBlendModeConverter.ONE : WebGLBlendModeConverter.SRC_ALPHA; + case BlendMode.Additive: return premultipliedAlpha? WebGLBlendModeConverter.ONE : WebGLBlendModeConverter.SRC_ALPHA; + case BlendMode.Multiply: return WebGLBlendModeConverter.DST_COLOR; + case BlendMode.Screen: return WebGLBlendModeConverter.ONE; + default: throw new Error("Unknown blend mode: " + blendMode); + } + } + } +} diff --git a/apps/module-ts/src/style.css b/apps/module-ts/src/style.css new file mode 100644 index 0000000..3bcdbd0 --- /dev/null +++ b/apps/module-ts/src/style.css @@ -0,0 +1,96 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.vanilla:hover { + filter: drop-shadow(0 0 2em #3178c6aa); +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/apps/module-ts/src/typescript.svg b/apps/module-ts/src/typescript.svg new file mode 100644 index 0000000..d91c910 --- /dev/null +++ b/apps/module-ts/src/typescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/module-ts/src/vite-env.d.ts b/apps/module-ts/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/apps/module-ts/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/apps/module-ts/tsconfig.json b/apps/module-ts/tsconfig.json new file mode 100644 index 0000000..a4883f2 --- /dev/null +++ b/apps/module-ts/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 3ff5faa..0000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,3 +0,0 @@ -packages: - - "apps/*" - - "packages/*"